38 lines
763 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
2023-05-01 13:03:48 -07:00
%div_const(2)
// stack: val/2, counter, retdest
2023-04-25 17:19:44 -07:00
SWAP1
%increment
SWAP1
2023-05-01 13:03:48 -07:00
// stack: val/2, counter + 1, retdest
2023-04-25 17:19:44 -07:00
%jump(log2_floor_helper)
end:
// stack: val, counter, retdest
POP
// stack: counter, retdest
SWAP1
// stack: retdest, counter
JUMP
global log2_floor:
// stack: val, retdest
2023-05-01 13:03:48 -07:00
%div_const(2)
// stack: val/2, retdest
2023-04-25 17:19:44 -07:00
PUSH 0
2023-05-01 13:03:48 -07:00
// stack: 0, val/2, retdest
2023-04-25 17:19:44 -07:00
SWAP1
2023-05-01 13:03:48 -07:00
// stack: val/2, 0, retdest
2023-04-25 17:19:44 -07:00
%jump(log2_floor_helper)
%macro log2_floor
%stack (val) -> (val, %%after)
%jump(log2_floor)
%%after:
2023-04-25 17:47:19 -07:00
%endmacro