40 lines
864 B
NASM
Raw Normal View History

2023-04-25 17:19:44 -07:00
log2_floor_helper:
// stack: val, counter, retdest
DUP1
// stack: val, val, counter, retdest
ISZERO
%jumpi(end)
// stack: val, counter, retdest
%shr_const(1)
// stack: val >> 1, counter, retdest
SWAP1
// stack: counter, val >> 1, retdest
%increment
// stack: counter + 1, val >> 1, retdest
SWAP1
// stack: val >> 1, counter + 1, retdest
%jump(log2_floor_helper)
end:
// stack: val, counter, retdest
POP
// stack: counter, retdest
SWAP1
// stack: retdest, counter
JUMP
global log2_floor:
// stack: val, retdest
%shr_const(1)
// stack: val >> 1, retdest
PUSH 0
// stack: 0, val >> 1, retdest
SWAP1
// stack: val >> 1, 0, retdest
%jump(log2_floor_helper)
%macro log2_floor
%stack (val) -> (val, %%after)
%jump(log2_floor)
%%after:
2023-04-25 17:47:19 -07:00
%endmacro