mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-09 09:13:09 +00:00
39 lines
863 B
NASM
39 lines
863 B
NASM
|
|
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:
|
||
|
|
%endmacro
|