2022-07-07 08:59:53 -07:00
|
|
|
%macro jump(dst)
|
|
|
|
|
push $dst
|
|
|
|
|
jump
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
%macro jumpi(dst)
|
|
|
|
|
push $dst
|
|
|
|
|
jumpi
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
%macro pop2
|
|
|
|
|
pop
|
|
|
|
|
pop
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
%macro pop3
|
|
|
|
|
pop
|
|
|
|
|
%pop2
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
%macro pop4
|
|
|
|
|
%pop2
|
|
|
|
|
%pop2
|
|
|
|
|
%endmacro
|
|
|
|
|
|
2022-06-25 23:10:08 -07:00
|
|
|
// 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
|
|
|
|
|
|
|
|
|
|
%macro square
|
|
|
|
|
// stack: x
|
|
|
|
|
dup1
|
|
|
|
|
// stack: x, x
|
|
|
|
|
mul
|
|
|
|
|
// stack: x^2
|
|
|
|
|
%endmacro
|