mirror of
https://github.com/odin-lang/Odin.git
synced 2026-05-29 23:25:09 +00:00
27 lines
644 B
Odin
27 lines
644 B
Odin
package fiat
|
|
|
|
// This package provides various helpers and types common to all of the
|
|
// fiat-crypto derived backends.
|
|
|
|
// This code only works on a two's complement system.
|
|
#assert((-1 & 3) == 3)
|
|
|
|
u1 :: distinct u8
|
|
i1 :: distinct i8
|
|
|
|
@(optimization_mode = "none")
|
|
cmovznz_u64 :: proc "contextless" (arg1: u1, arg2, arg3: u64) -> (out1: u64) {
|
|
x1 := (u64(arg1) * 0xffffffffffffffff)
|
|
x2 := ((x1 & arg3) | ((~x1) & arg2))
|
|
out1 = x2
|
|
return
|
|
}
|
|
|
|
@(optimization_mode = "none")
|
|
cmovznz_u32 :: proc "contextless" (arg1: u1, arg2, arg3: u32) -> (out1: u32) {
|
|
x1 := (u32(arg1) * 0xffffffff)
|
|
x2 := ((x1 & arg3) | ((~x1) & arg2))
|
|
out1 = x2
|
|
return
|
|
}
|