From 476a554aea93dc1f399cf87ea4900b6fb780cf42 Mon Sep 17 00:00:00 2001 From: Nicholas Ward Date: Tue, 14 Mar 2023 12:29:30 -0700 Subject: [PATCH 1/2] OR -> ADD --- .../kernel/asm/curve/secp256k1/ecrecover.asm | 14 ++++------ evm/src/cpu/kernel/asm/hash/blake2b/iv.asm | 2 +- .../cpu/kernel/asm/hash/ripemd/functions.asm | 2 +- evm/src/cpu/kernel/asm/hash/ripemd/main.asm | 8 +++--- .../cpu/kernel/asm/hash/sha2/compression.asm | 14 +++++----- evm/src/cpu/kernel/asm/memory/core.asm | 28 +++++++++---------- evm/src/cpu/kernel/asm/util/basic_macros.asm | 10 +++---- 7 files changed, 37 insertions(+), 41 deletions(-) diff --git a/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm b/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm index dd2b86f6..c243a748 100644 --- a/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm +++ b/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm @@ -134,17 +134,13 @@ pubkey_to_addr: // stack: hash, v, r, s, retdest DUP2 // stack: v, hash, v, r, s, retdest - PUSH 27 - // stack: 27, v, hash, v, r, s, retdest - EQ + %eq_consts(27) // stack: v==27, hash, v, r, s, retdest DUP3 // stack: v, v==27, hash, v, r, s, retdest - PUSH 28 - // stack: 28, v, v==27, hash, v, r, s, retdest - EQ + %eq_consts(28) // stack: v==28, v==27, hash, v, r, s, retdest - OR + ADD // OR // stack: (v==28 || v==27), hash, v, r, s, retdest DUP5 // stack: s, (v==28 || v==27), hash, v, r, s, retdest @@ -154,7 +150,7 @@ pubkey_to_addr: // stack: r, (s >= N || s==0), (v==28 || v==27), hash, v, r, s, retdest %secp_is_out_of_bounds // stack: (r >= N || r==0), (s >= N || s==0), (v==28 || v==27), hash, v, r, s, retdest - OR + ADD // OR // stack: (r >= N || r==0 || s >= N || s==0), (v==28 || v==27), hash, v, r, s, retdest ISZERO // stack: (r < N & r!=0 & s < N & s!=0), (v==28 || v==27), hash, v, r, s, retdest @@ -178,7 +174,7 @@ pubkey_to_addr: // stack: x < N, x==0 ISZERO // stack: x >= N, x==0 - OR + ADD // OR // stack: x >= N || x==0 %endmacro diff --git a/evm/src/cpu/kernel/asm/hash/blake2b/iv.asm b/evm/src/cpu/kernel/asm/hash/blake2b/iv.asm index 174afd33..94e9ba27 100644 --- a/evm/src/cpu/kernel/asm/hash/blake2b/iv.asm +++ b/evm/src/cpu/kernel/asm/hash/blake2b/iv.asm @@ -52,7 +52,7 @@ global blake2b_iv_const: // stack: IV_i[32:], IV_i[:32], ... %shl_const(32) // stack: IV_i[32:] << 32, IV_i[:32], ... - OR + ADD // OR // stack: IV_i, ... %endmacro diff --git a/evm/src/cpu/kernel/asm/hash/ripemd/functions.asm b/evm/src/cpu/kernel/asm/hash/ripemd/functions.asm index ac111215..de2fdcf6 100644 --- a/evm/src/cpu/kernel/asm/hash/ripemd/functions.asm +++ b/evm/src/cpu/kernel/asm/hash/ripemd/functions.asm @@ -18,7 +18,7 @@ global rol: // stack: x << n, x >> (32-n), retdest %as_u32 // stack: u32(x << n), x >> (32-n), retdest - OR + ADD // OR // stack: u32(x << n) | (x >> (32-n)), retdest SWAP1 JUMP diff --git a/evm/src/cpu/kernel/asm/hash/ripemd/main.asm b/evm/src/cpu/kernel/asm/hash/ripemd/main.asm index 4aa6a6ad..0ad1e4e5 100644 --- a/evm/src/cpu/kernel/asm/hash/ripemd/main.asm +++ b/evm/src/cpu/kernel/asm/hash/ripemd/main.asm @@ -81,21 +81,21 @@ process: SWAP1 %reverse_bytes_u32 %shl_const(96) - OR + ADD // OR // stack: b' a', c, d, e, VARS SWAP1 %reverse_bytes_u32 %shl_const(64) - OR + ADD // OR // stack: c' b' a', d, e, VARS SWAP1 %reverse_bytes_u32 %shl_const(32) - OR + ADD // OR // stack: d' c' b' a', e, VARS SWAP1 %reverse_bytes_u32 - OR + ADD // OR // stack: e' d' c' b' a', VARS %stack (result, VARS: 3, retdest) -> (retdest, result) // stack: 0xdeadbeef, result diff --git a/evm/src/cpu/kernel/asm/hash/sha2/compression.asm b/evm/src/cpu/kernel/asm/hash/sha2/compression.asm index 8850c1c8..8c219ebb 100644 --- a/evm/src/cpu/kernel/asm/hash/sha2/compression.asm +++ b/evm/src/cpu/kernel/asm/hash/sha2/compression.asm @@ -263,19 +263,19 @@ compression_end: POP // stack: a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64], scratch_space_addr, message_schedule_addr, i, retdest %shl_const(32) - OR + ADD // OR %shl_const(32) - OR + ADD // OR %shl_const(32) - OR + ADD // OR %shl_const(32) - OR + ADD // OR %shl_const(32) - OR + ADD // OR %shl_const(32) - OR + ADD // OR %shl_const(32) - OR + ADD // OR // stack: concat(a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64]), scratch_space_addr, message_schedule_addr, i, retdest SWAP3 // stack: i, scratch_space_addr, message_schedule_addr, concat(a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64]), retdest diff --git a/evm/src/cpu/kernel/asm/memory/core.asm b/evm/src/cpu/kernel/asm/memory/core.asm index a979f930..8f59a128 100644 --- a/evm/src/cpu/kernel/asm/memory/core.asm +++ b/evm/src/cpu/kernel/asm/memory/core.asm @@ -79,21 +79,21 @@ DUP2 %increment %mload_kernel($segment) - OR + ADD // OR // stack: (c_3 << 8) | c_2, offset %shl_const(8) // stack: ((c_3 << 8) | c_2) << 8, offset DUP2 %add_const(2) %mload_kernel($segment) - OR + ADD // OR // stack: (((c_3 << 8) | c_2) << 8) | c_1, offset %shl_const(8) // stack: ((((c_3 << 8) | c_2) << 8) | c_1) << 8, offset SWAP1 %add_const(3) %mload_kernel($segment) - OR + ADD // OR // stack: (((((c_3 << 8) | c_2) << 8) | c_1) << 8) | c_0 %endmacro @@ -107,19 +107,19 @@ %increment %mload_kernel($segment) %shl_const(8) - OR + ADD // stack: c0 | (c1 << 8) , offset DUP2 %add_const(2) %mload_kernel($segment) %shl_const(16) - OR + ADD // stack: c0 | (c1 << 8) | (c2 << 16), offset SWAP1 %add_const(3) %mload_kernel($segment) %shl_const(24) - OR + ADD // OR // stack: c0 | (c1 << 8) | (c2 << 16) | (c3 << 24) %endmacro @@ -137,7 +137,7 @@ // stack: hi, lo %shl_const(32) // stack: hi << 32, lo - OR + ADD // OR // stack: (hi << 32) | lo %endmacro @@ -152,49 +152,49 @@ DUP2 %add_const(4) %mload_kernel_u32($segment) - OR + ADD // OR // stack: (c_7 << 32) | c_6, offset %shl_const(32) // stack: ((c_7 << 32) | c_6) << 32, offset DUP2 %add_const(8) %mload_kernel_u32($segment) - OR + ADD // OR // stack: (c_7 << 64) | (c_6 << 32) | c_5, offset %shl_const(32) // stack: ((c_7 << 64) | (c_6 << 32) | c_5) << 32, offset DUP2 %add_const(12) %mload_kernel_u32($segment) - OR + ADD // OR // stack: (c_7 << 96) | (c_6 << 64) | (c_5 << 32) | c_4, offset %shl_const(32) // stack: ((c_7 << 96) | (c_6 << 64) | (c_5 << 32) | c_4) << 32, offset DUP2 %add_const(16) %mload_kernel_u32($segment) - OR + ADD // OR // stack: (c_7 << 128) | (c_6 << 96) | (c_5 << 64) | (c_4 << 32) | c_3, offset %shl_const(32) // stack: ((c_7 << 128) | (c_6 << 96) | (c_5 << 64) | (c_4 << 32) | c_3) << 32, offset DUP2 %add_const(20) %mload_kernel_u32($segment) - OR + ADD // OR // stack: (c_7 << 160) | (c_6 << 128) | (c_5 << 96) | (c_4 << 64) | (c_3 << 32) | c_2, offset %shl_const(32) // stack: ((c_7 << 160) | (c_6 << 128) | (c_5 << 96) | (c_4 << 64) | (c_3 << 32) | c_2) << 32, offset DUP2 %add_const(24) %mload_kernel_u32($segment) - OR + ADD // OR // stack: (c_7 << 192) | (c_6 << 160) | (c_5 << 128) | (c_4 << 96) | (c_3 << 64) | (c_2 << 32) | c_1, offset %shl_const(32) // stack: ((c_7 << 192) | (c_6 << 160) | (c_5 << 128) | (c_4 << 96) | (c_3 << 64) | (c_2 << 32) | c_1) << 32, offset DUP2 %add_const(28) %mload_kernel_u32($segment) - OR + ADD // OR // stack: (c_7 << 224) | (c_6 << 192) | (c_5 << 160) | (c_4 << 128) | (c_3 << 96) | (c_2 << 64) | (c_1 << 32) | c_0, offset SWAP1 POP diff --git a/evm/src/cpu/kernel/asm/util/basic_macros.asm b/evm/src/cpu/kernel/asm/util/basic_macros.asm index 5ee4a1e7..52556d3f 100644 --- a/evm/src/cpu/kernel/asm/util/basic_macros.asm +++ b/evm/src/cpu/kernel/asm/util/basic_macros.asm @@ -309,9 +309,9 @@ BYTE %shl_const(24) // stack: d000, b0, a, c00 - OR - OR - OR + ADD // OR + ADD // OR + ADD // OR // stack: dcba %endmacro @@ -332,7 +332,7 @@ %reverse_bytes_u32 // stack: word_lo_inverted, word_hi_inverted %shl_const(32) - OR + ADD // OR // stack: word_inverted %endmacro @@ -341,7 +341,7 @@ // stack: a, b, c, d %rep 3 %shl_const(64) - OR + ADD // OR %endrep // stack: a || b || c || d %endmacro From 676a483c06c4ec004def5f9ed45eacddb7d34310 Mon Sep 17 00:00:00 2001 From: Nicholas Ward Date: Tue, 14 Mar 2023 12:34:51 -0700 Subject: [PATCH 2/2] fix --- evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm b/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm index c243a748..11ec27c8 100644 --- a/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm +++ b/evm/src/cpu/kernel/asm/curve/secp256k1/ecrecover.asm @@ -134,11 +134,11 @@ pubkey_to_addr: // stack: hash, v, r, s, retdest DUP2 // stack: v, hash, v, r, s, retdest - %eq_consts(27) + %eq_const(27) // stack: v==27, hash, v, r, s, retdest DUP3 // stack: v, v==27, hash, v, r, s, retdest - %eq_consts(28) + %eq_const(28) // stack: v==28, v==27, hash, v, r, s, retdest ADD // OR // stack: (v==28 || v==27), hash, v, r, s, retdest