diff --git a/evm/src/cpu/kernel/asm/sha2.asm b/evm/src/cpu/kernel/asm/sha2.asm index cbd7407e..c5cdb212 100644 --- a/evm/src/cpu/kernel/asm/sha2.asm +++ b/evm/src/cpu/kernel/asm/sha2.asm @@ -6,6 +6,8 @@ global sha2_store: push 0 // stack: addr=0, num_bytes, num_bytes, x[0], x[1], ..., x[num_bytes - 1], retdest %mstore_kernel_general + // stack: num_bytes, x[0], x[1], ..., x[num_bytes - 1], retdest + dup1 // stack: num_bytes, num_bytes, x[0], x[1], ..., x[num_bytes - 1], retdest push 1 // stack: addr=1, counter=num_bytes, x[0], x[1], x[2], ... , x[num_bytes-1], retdest @@ -21,8 +23,6 @@ sha2_store_loop: %mstore_kernel_general // stack: counter, addr, ... , x[num_bytes-1], retdest dup1 - %eq_const(6) - %jumpi(sha2_stop) %decrement // stack: counter-1, addr, ... , x[num_bytes-1], retdest iszero @@ -36,6 +36,7 @@ sha2_store_end: JUMPDEST // stack: counter=0, addr, retdest %pop2 + STOP JUMP sha2_stop: JUMPDEST diff --git a/evm/src/cpu/kernel/asm/util/basic_macros.asm b/evm/src/cpu/kernel/asm/util/basic_macros.asm index 9b8ce137..64a937e3 100644 --- a/evm/src/cpu/kernel/asm/util/basic_macros.asm +++ b/evm/src/cpu/kernel/asm/util/basic_macros.asm @@ -242,8 +242,7 @@ %macro increment push 1 - swap1 - sub + add %endmacro %macro decrement diff --git a/evm/src/cpu/kernel/tests/sha2.rs b/evm/src/cpu/kernel/tests/sha2.rs index 411f2ec5..b90ba52c 100644 --- a/evm/src/cpu/kernel/tests/sha2.rs +++ b/evm/src/cpu/kernel/tests/sha2.rs @@ -13,7 +13,7 @@ fn test_sha2_store() -> Result<()> { let kernel = combined_kernel(); let sha2_store = kernel.global_labels["sha2_store"]; let mut rng = thread_rng(); - let num_bytes = rng.gen_range(0..20); + let num_bytes = rng.gen_range(1..17); let mut bytes: Vec = Vec::with_capacity(num_bytes); for _ in 0..num_bytes { let byte: u8 = rng.gen(); @@ -28,6 +28,7 @@ fn test_sha2_store() -> Result<()> { let mut initial_stack = vec![U256::from(num_bytes)]; initial_stack.extend(bytes); + initial_stack.push(U256::from_str("0xdeadbeef").unwrap()); dbg!(initial_stack.clone()); let stack_with_kernel = run(&kernel.code, sha2_store, initial_stack)?.stack; dbg!(stack_with_kernel);