mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-05 23:33:07 +00:00
fix
This commit is contained in:
parent
65b8993b6f
commit
42320d815e
@ -8,7 +8,6 @@ edition = "2021"
|
|||||||
plonky2 = { path = "../plonky2", default-features = false, features = ["rand", "timing"] }
|
plonky2 = { path = "../plonky2", default-features = false, features = ["rand", "timing"] }
|
||||||
plonky2_util = { path = "../util" }
|
plonky2_util = { path = "../util" }
|
||||||
eth-trie-utils = { git = "https://github.com/mir-protocol/eth-trie-utils.git", rev = "dd3595b4ba7923f8d465450d210f17a2b4e20f96" }
|
eth-trie-utils = { git = "https://github.com/mir-protocol/eth-trie-utils.git", rev = "dd3595b4ba7923f8d465450d210f17a2b4e20f96" }
|
||||||
maybe_rayon = { path = "../maybe_rayon" }
|
|
||||||
anyhow = "1.0.40"
|
anyhow = "1.0.40"
|
||||||
env_logger = "0.9.0"
|
env_logger = "0.9.0"
|
||||||
ethereum-types = "0.14.0"
|
ethereum-types = "0.14.0"
|
||||||
|
|||||||
76
evm/src/cpu/kernel/asm/modexp.asm
Normal file
76
evm/src/cpu/kernel/asm/modexp.asm
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/// Recursive implementation of exp.
|
||||||
|
/// Equivalent to:
|
||||||
|
/// def exp(x, e):
|
||||||
|
/// if e == 0:
|
||||||
|
/// # The path where JUMPI does not jump to `step_case`
|
||||||
|
/// return 1
|
||||||
|
/// else:
|
||||||
|
/// # This is under the `step_case` label
|
||||||
|
/// return (x if e % 2 else 1) * exp(x * x, e // 2)
|
||||||
|
/// Note that this correctly handles exp(0, 0) == 1.
|
||||||
|
|
||||||
|
global modexp:
|
||||||
|
// stack: x, e, retdest
|
||||||
|
dup2
|
||||||
|
// stack: e, x, e, retdest
|
||||||
|
%jumpi(step_case)
|
||||||
|
// stack: x, e, retdest
|
||||||
|
pop
|
||||||
|
// stack: e, retdest
|
||||||
|
pop
|
||||||
|
// stack: retdest
|
||||||
|
push 1
|
||||||
|
// stack: 1, retdest
|
||||||
|
swap1
|
||||||
|
// stack: retdest, 1
|
||||||
|
jump
|
||||||
|
|
||||||
|
step_case:
|
||||||
|
// stack: x, e, retdest
|
||||||
|
push recursion_return
|
||||||
|
// stack: recursion_return, x, e, retdest
|
||||||
|
push 2
|
||||||
|
// stack: 2, recursion_return, x, e, retdest
|
||||||
|
dup4
|
||||||
|
// stack: e, 2, recursion_return, x, e, retdest
|
||||||
|
div
|
||||||
|
// stack: e / 2, recursion_return, x, e, retdest
|
||||||
|
dup3
|
||||||
|
// stack: x, e / 2, recursion_return, x, e, retdest
|
||||||
|
%square
|
||||||
|
// stack: x * x, e / 2, recursion_return, x, e, retdest
|
||||||
|
%jump(exp)
|
||||||
|
recursion_return:
|
||||||
|
// stack: exp(x * x, e / 2), x, e, retdest
|
||||||
|
push 2
|
||||||
|
// stack: 2, exp(x * x, e / 2), x, e, retdest
|
||||||
|
dup4
|
||||||
|
// stack: e, 2, exp(x * x, e / 2), x, e, retdest
|
||||||
|
mod
|
||||||
|
// stack: e % 2, exp(x * x, e / 2), x, e, retdest
|
||||||
|
push 1
|
||||||
|
// stack: 1, e % 2, exp(x * x, e / 2), x, e, retdest
|
||||||
|
dup4
|
||||||
|
// stack: x, 1, e % 2, exp(x * x, e / 2), x, e, retdest
|
||||||
|
sub
|
||||||
|
// stack: x - 1, e % 2, exp(x * x, e / 2), x, e, retdest
|
||||||
|
mul
|
||||||
|
// stack: (x - 1) * (e % 2), exp(x * x, e / 2), x, e, retdest
|
||||||
|
push 1
|
||||||
|
// stack: 1, (x - 1) * (e % 2), exp(x * x, e / 2), x, e, retdest
|
||||||
|
add
|
||||||
|
// stack: 1 + (x - 1) * (e % 2), exp(x * x, e / 2), x, e, retdest
|
||||||
|
mul
|
||||||
|
// stack: (1 + (x - 1) * (e % 2)) * exp(x * x, e / 2), x, e, retdest
|
||||||
|
swap3
|
||||||
|
// stack: retdest, x, e, (1 + (x - 1) * (e % 2)) * exp(x * x, e / 2)
|
||||||
|
swap2
|
||||||
|
// stack: e, x, retdest, (1 + (x - 1) * (e % 2)) * exp(x * x, e / 2)
|
||||||
|
pop
|
||||||
|
// stack: x, retdest, (1 + (x - 1) * (e % 2)) * exp(x * x, e / 2)
|
||||||
|
pop
|
||||||
|
// stack: retdest, (1 + (x - 1) * (e % 2)) * exp(x * x, e / 2)
|
||||||
|
jump
|
||||||
|
|
||||||
|
global sys_exp:
|
||||||
|
PANIC
|
||||||
Loading…
x
Reference in New Issue
Block a user