plonky2/evm/src/cpu/kernel/asm/basic_macros.asm
wborgeaud a268677936 Merge branch 'main' into ecrecover_kernel
# Conflicts:
#	evm/src/cpu/kernel/aggregator.rs
2022-07-18 14:01:10 +02:00

77 lines
1.3 KiB
NASM

%macro jump(dst)
push $dst
jump
%endmacro
%macro jumpi(dst)
push $dst
jumpi
%endmacro
%macro pop2
%rep 2
pop
%endrep
%endmacro
%macro pop3
%rep 3
pop
%endrep
%endmacro
%macro pop4
%rep 4
pop
%endrep
%endmacro
// If pred is zero, yields z; otherwise, yields nz
%macro select
// stack: pred, nz, z
iszero
// stack: pred == 0, nz, z
dup1
// stack: pred == 0, pred == 0, nz, z
iszero
// stack: pred != 0, pred == 0, nz, z
swap3
// stack: z, pred == 0, nz, pred != 0
mul
// stack: (pred == 0) * z, nz, pred != 0
swap2
// stack: pred != 0, nz, (pred == 0) * z
mul
// stack: (pred != 0) * nz, (pred == 0) * z
add
// stack: (pred != 0) * nz + (pred == 0) * z
%endmacro
// If pred, yields z; otherwise, yields nz
// Assumes pred is boolean (either 0 or 1).
%macro select_bool
// stack: pred, nz, z
dup1
// stack: pred, pred, nz, z
iszero
// stack: notpred, pred, nz, z
swap3
// stack: z, pred, nz, notpred
mul
// stack: pred * z, nz, notpred
swap2
// stack: notpred, nz, pred * z
mul
// stack: notpred * nz, pred * z
add
// stack: notpred * nz + pred * z
%endmacro
%macro square
// stack: x
dup1
// stack: x, x
mul
// stack: x^2
%endmacro