diff --git a/evm/src/cpu/kernel/asm/memory/core.asm b/evm/src/cpu/kernel/asm/memory/core.asm index 2bf4ae6f..417dc738 100644 --- a/evm/src/cpu/kernel/asm/memory/core.asm +++ b/evm/src/cpu/kernel/asm/memory/core.asm @@ -125,3 +125,60 @@ %mstore_kernel(@SEGMENT_RLP_RAW) // stack: (empty) %endmacro + +%macro mstore_kernel_general + // stack: offset, value + %mstore_kernel(@SEGMENT_KERNEL_GENERAL) + // stack: +%endmacro + +%macro mstore_kernel_general(offset) + // stack: value + PUSH $offset + // stack: offset, value + %mstore_kernel_general + // stack: +%endmacro + +%macro mload_kernel_general + // stack: + %mload_kernel(@SEGMENT_KERNEL_GENERAL) + // stack: byte +%endmacro + +// Load a big-endian u32, consisting of 4 bytes (c_0, c_1, c_2, c_3), +// from kernel general. +%macro mload_kernel_general_u32 + // stack: offset + DUP1 + %mload_kernel_general + // stack: c0 , offset + DUP2 + %add_const(1) + %mload_kernel_general + %shl_const(8) + OR + // stack: c0 | (c1 << 8) , offset + DUP2 + %add_const(2) + %mload_kernel_general + %shl_const(16) + OR + // stack: c0 | (c1 << 8) | (c2 << 16), offset + SWAP1 + %add_const(3) + %mload_kernel_general + %shl_const(24) + OR + // stack: c0 | (c1 << 8) | (c2 << 16) | (c3 << 24) +%endmacro + +// set offset i to offset j in kernel general +%macro mupdate_kernel_general + // stack: j, i + %mload_kernel_general + // stack: x, i + SWAP1 + %mstore_kernel_general + // stack: +%endmacro diff --git a/evm/src/cpu/kernel/asm/ripemd/box.asm b/evm/src/cpu/kernel/asm/ripemd/box.asm index 81e89c1f..5894f219 100644 --- a/evm/src/cpu/kernel/asm/ripemd/box.asm +++ b/evm/src/cpu/kernel/asm/ripemd/box.asm @@ -35,7 +35,7 @@ pre_rol: %mload_kernel_code(r_data) ADD // stack: virt + r, box, a, b, c, d, e, F, K, boxes, rounds, sides, virt - %load_u32_from_block + %mload_kernel_general_u32 // stack: x, box, a, b, c, d, e, F, K, boxes, rounds, sides, virt SWAP1 SWAP2 diff --git a/evm/src/cpu/kernel/asm/ripemd/memory.asm b/evm/src/cpu/kernel/asm/ripemd/memory.asm index 19bcf78d..03004859 100644 --- a/evm/src/cpu/kernel/asm/ripemd/memory.asm +++ b/evm/src/cpu/kernel/asm/ripemd/memory.asm @@ -22,9 +22,9 @@ store_size: // stack: ab %extract_and_store_byte(70) // stack: a - %mstore_ripemd(71) + %mstore_kernel_general(71) // stack: 0x80 // padding has 0x80 in first position and zeros elsewhere - %mstore_ripemd(72) // store first padding term here so as to avoid extra label + %mstore_kernel_general(72) // store first padding term here so as to avoid extra label %jump(store_padding) store_padding: @@ -41,7 +41,7 @@ store_input_alt: SUB ADD // stack: offset, byte, rem, length, REM_INP - %mstore_ripemd + %mstore_kernel_general // stack: rem, length, REM_INP %sub_const(1) DUP1 @@ -63,7 +63,7 @@ store_input: SUB %add_const(136) // stack: offset, byte, ADDR , rem , length - %mstore_ripemd + %mstore_kernel_general // stack: ADDR , rem , length SWAP2 %add_const(1) @@ -85,7 +85,7 @@ store_input: %stack (i) -> ($N, i, 0, i) SUB // stack: offset = N-i, 0, i - %mstore_ripemd + %mstore_kernel_general // stack: i %sub_const(1) DUP1 @@ -107,60 +107,6 @@ store_input: DIV SWAP1 // stack: y, xs - %mstore_ripemd($offset) + %mstore_kernel_general($offset) // stack: xs %endmacro - -%macro mstore_ripemd(offset) - // stack: value - PUSH $offset - // stack: offset, value - %mstore_kernel(@SEGMENT_KERNEL_GENERAL) - // stack: -%endmacro - -%macro mstore_ripemd - // stack: offset, value - %mstore_kernel(@SEGMENT_KERNEL_GENERAL) - // stack: -%endmacro - -%macro mload_ripemd - %mload_kernel(@SEGMENT_KERNEL_GENERAL) -%endmacro - -// Load LE u32 from 4 contiguous bytes a, b, c, d -%macro load_u32_from_block - // stack: offset - DUP1 - %mload_ripemd - // stack: a , offset - DUP2 - %add_const(1) - %mload_ripemd - %shl_const(8) - OR - // stack: a | (b << 8) , offset - DUP2 - %add_const(2) - %mload_ripemd - %shl_const(16) - OR - // stack: a | (b << 8) | (c << 16), offset - SWAP1 - %add_const(3) - %mload_ripemd - %shl_const(24) - OR - // stack: a | (b << 8) | (c << 16) | (d << 24) -%endmacro - -// set offset i to offset j in memory -%macro mupdate_ripemd - // stack: j, i - %mload_ripemd - // stack: x, i - SWAP1 - %mstore_ripemd - // stack: -%endmacro diff --git a/evm/src/cpu/kernel/asm/ripemd/update.asm b/evm/src/cpu/kernel/asm/ripemd/update.asm index 89284ccd..df52d175 100644 --- a/evm/src/cpu/kernel/asm/ripemd/update.asm +++ b/evm/src/cpu/kernel/asm/ripemd/update.asm @@ -118,7 +118,7 @@ buffer_update: DUP2 DUP2 // stack: get, set, get , set , times , retdest - %mupdate_ripemd + %mupdate_kernel_general // stack: get , set , times , retdest %add_const(1) SWAP1