diff --git a/evm/src/cpu/kernel/asm/hash/blake2/addresses.asm b/evm/src/cpu/kernel/asm/hash/blake2/addresses.asm index 50cb20fc..8a0328eb 100644 --- a/evm/src/cpu/kernel/asm/hash/blake2/addresses.asm +++ b/evm/src/cpu/kernel/asm/hash/blake2/addresses.asm @@ -2,7 +2,7 @@ %macro blake2_hash_value_addr PUSH 0 // stack: 0 - %mload_kernel_general + %load_current_general // stack: num_blocks %block_size %add_const(2) diff --git a/evm/src/cpu/kernel/asm/hash/blake2/blake2_f.asm b/evm/src/cpu/kernel/asm/hash/blake2/blake2_f.asm index 731a74c8..f4f8e21f 100644 --- a/evm/src/cpu/kernel/asm/hash/blake2/blake2_f.asm +++ b/evm/src/cpu/kernel/asm/hash/blake2/blake2_f.asm @@ -8,7 +8,7 @@ global blake2_f: // stack: addr, rounds, h_i, ... %stack (addr, rounds, h_i) -> (addr, h_i, addr, rounds) // stack: addr, h_i, addr, rounds, ... - %mstore_kernel_general + %store_current_general %increment %endrep @@ -23,7 +23,7 @@ global blake2_f: // stack: message_addr, rounds, m_i, ... %stack (message_addr, rounds, m_i) -> (message_addr, m_i, message_addr, rounds) // stack: message_addr, m_i, message_addr, rounds, ... - %mstore_kernel_general + %store_current_general %increment %endrep @@ -37,7 +37,7 @@ global blake2_f: // stack: addr, ... DUP1 // stack: addr, addr, ... - %mload_kernel_general + %load_current_general // stack: val, addr, ... SWAP1 // stack: addr, val, ... @@ -55,7 +55,7 @@ global blake2_f: %rep 8 SWAP1 DUP2 - %mstore_kernel_general + %store_current_general %increment %endrep // stack: start + 8, rounds, t0, t1, flag, retdest @@ -71,7 +71,7 @@ global blake2_f: // stack: IV_i, i, loc, ... DUP3 // stack: loc, IV_i, i, loc, ... - %mstore_kernel_general + %store_current_general // stack: i, loc, ... %increment SWAP1 @@ -103,7 +103,7 @@ global blake2_f: // stack: val ^ IV_i, i, loc, val, next_val,... DUP3 // stack: loc, val ^ IV_i, i, loc, val, next_val,... - %mstore_kernel_general + %store_current_general // stack: i, loc, val, next_val,... %increment // stack: i + 1, loc, val, next_val,... diff --git a/evm/src/cpu/kernel/asm/hash/blake2/blake2b.asm b/evm/src/cpu/kernel/asm/hash/blake2/blake2b.asm index f26e28fc..2e8ecd2e 100644 --- a/evm/src/cpu/kernel/asm/hash/blake2/blake2b.asm +++ b/evm/src/cpu/kernel/asm/hash/blake2/blake2b.asm @@ -6,9 +6,9 @@ global blake2b: // stack: num_blocks, virt, num_bytes, retdest DUP2 // stack: virt, num_blocks, virt, num_bytes, retdest - %mstore_kernel_general + %store_current_general // stack: virt, num_bytes, retdest %add_const(1) - %mstore_kernel_general + %store_current_general // stack: retdest %jump(blake2_compression) diff --git a/evm/src/cpu/kernel/asm/hash/blake2/compression.asm b/evm/src/cpu/kernel/asm/hash/blake2/compression.asm index a45bbbb5..362c2d7e 100644 --- a/evm/src/cpu/kernel/asm/hash/blake2/compression.asm +++ b/evm/src/cpu/kernel/asm/hash/blake2/compression.asm @@ -14,7 +14,7 @@ compression_loop: %rep 8 SWAP1 DUP2 - %mstore_kernel_general + %store_current_general %increment %endrep @@ -22,7 +22,7 @@ compression_loop: POP // stack: cur_block, retdest PUSH 0 - %mload_kernel_general + %load_current_general // stack: num_blocks, cur_block, retdest %decrement // stack: num_blocks - 1, cur_block, retdest @@ -33,7 +33,7 @@ compression_loop: SWAP1 // stack: cur_block, is_last_block, retdest PUSH 1 - %mload_kernel_general + %load_current_general // stack: num_bytes, cur_block, is_last_block, retdest // Calculate t counter value. @@ -69,11 +69,11 @@ compression_loop: // stack: cur_message_addr, cur_block_byte, ... DUP2 // stack: cur_block_byte, cur_message_addr, cur_block_byte, ... - %mload_kernel_general_u64_LE + %load_current_general_u64_LE // stack: m_i, cur_message_addr, cur_block_byte, ... DUP2 // stack: cur_message_addr, m_i, cur_message_addr, cur_block_byte, ... - %mstore_kernel_general + %store_current_general // stack: cur_message_addr, cur_block_byte, ... %increment // stack: cur_message_addr + 1, cur_block_byte, ... @@ -99,7 +99,7 @@ compression_loop: // stack: addr, ... DUP1 // stack: addr, addr, ... - %mload_kernel_general + %load_current_general // stack: val, addr, ... SWAP1 // stack: addr, val, ... @@ -117,7 +117,7 @@ compression_loop: %rep 8 SWAP1 DUP2 - %mstore_kernel_general + %store_current_general %increment %endrep // stack: start + 8, invert_if_last_block, t, cur_block, retdest @@ -133,7 +133,7 @@ compression_loop: // stack: IV_i, i, loc, ... DUP3 // stack: loc, IV_i, i, loc, ... - %mstore_kernel_general + %store_current_general // stack: i, loc, ... %increment SWAP1 @@ -167,7 +167,7 @@ compression_loop: // stack: val ^ IV_i, i, loc, val, next_val,... DUP3 // stack: loc, val ^ IV_i, i, loc, val, next_val,... - %mstore_kernel_general + %store_current_general // stack: i, loc, val, next_val,... %increment // stack: i + 1, loc, val, next_val,... @@ -210,7 +210,7 @@ hash_generate_return: %increment // stack: cur_block + 1, h_0', h_1', h_2', h_3', h_4', h_5', h_6', h_7', cur_block + 1, retdest PUSH 0 - %mload_kernel_general + %load_current_general // stack: num_blocks, cur_block + 1, h_0', h_1', h_2', h_3', h_4', h_5', h_6', h_7', cur_block + 1, retdest GT // stack: not_last_block, h_0', h_1', h_2', h_3', h_4', h_5', h_6', h_7', cur_block + 1, retdest diff --git a/evm/src/cpu/kernel/asm/hash/blake2/g_functions.asm b/evm/src/cpu/kernel/asm/hash/blake2/g_functions.asm index f2540016..f186b251 100644 --- a/evm/src/cpu/kernel/asm/hash/blake2/g_functions.asm +++ b/evm/src/cpu/kernel/asm/hash/blake2/g_functions.asm @@ -11,28 +11,28 @@ DUP11 // stack: start, a, b, c, d, a, b, c, d, x, y, start ADD - %mload_kernel_general + %load_current_general // stack: v[a], b, c, d, a, b, c, d, x, y, start SWAP1 // stack: b, v[a], c, d, a, b, c, d, x, y, start DUP11 // stack: start, b, v[a], c, d, a, b, c, d, x, y, start ADD - %mload_kernel_general + %load_current_general // stack: v[b], v[a], c, d, a, b, c, d, x, y, start SWAP2 // stack: c, v[a], v[b], d, a, b, c, d, x, y, start DUP11 // stack: start, c, v[a], v[b], d, a, b, c, d, x, y, start ADD - %mload_kernel_general + %load_current_general // stack: v[c], v[a], v[b], d, a, b, c, d, x, y, start SWAP3 // stack: d, v[a], v[b], v[c], a, b, c, d, x, y, start DUP11 // stack: start, d, v[a], v[b], v[c], a, b, c, d, x, y, start ADD - %mload_kernel_general + %load_current_general // stack: v[d], v[a], v[b], v[c], a, b, c, d, x, y, start %stack (vd, vs: 3) -> (vs, vd) // stack: v[a], v[b], v[c], v[d], a, b, c, d, x, y, start @@ -95,13 +95,13 @@ %stack (vb, vc, vd, va, a, b, c, d, x, y, start) -> (start, a, va, start, b, vb, start, c, vc, start, d, vd) // stack: start, a, v[a]'', start, b, v[b]'', start, c, v[c]'', start, d, v[d]'' ADD - %mstore_kernel_general + %store_current_general ADD - %mstore_kernel_general + %store_current_general ADD - %mstore_kernel_general + %store_current_general ADD - %mstore_kernel_general + %store_current_general %endmacro %macro call_blake2_g_function(a, b, c, d, x_idx, y_idx) @@ -113,7 +113,7 @@ // stack: s[y_idx], round, start %blake2_message_addr ADD - %mload_kernel_general + %load_current_general // stack: m[s[y_idx]], round, start PUSH $x_idx DUP3 @@ -122,7 +122,7 @@ // stack: s[x_idx], m[s[y_idx]], round, start %blake2_message_addr ADD - %mload_kernel_general + %load_current_general // stack: m[s[x_idx]], m[s[y_idx]], round, start %stack (ss: 2, r, s) -> (ss, s, r, s) // stack: m[s[x_idx]], m[s[y_idx]], start, round, start diff --git a/evm/src/cpu/kernel/asm/hash/blake2/hash.asm b/evm/src/cpu/kernel/asm/hash/blake2/hash.asm index 701adc27..94e63998 100644 --- a/evm/src/cpu/kernel/asm/hash/blake2/hash.asm +++ b/evm/src/cpu/kernel/asm/hash/blake2/hash.asm @@ -5,13 +5,13 @@ blake2_generate_new_hash_value: // stack: addr, i, retdest DUP2 ADD - %mload_kernel_general + %load_current_general // stack: h_i, i, retdest %blake2_internal_state_addr // stack: addr, h_i, i, retdest DUP3 ADD - %mload_kernel_general + %load_current_general // stack: v_i, h_i, i, retdest %blake2_internal_state_addr // stack: addr, v_i, h_i, i, retdest @@ -21,7 +21,7 @@ blake2_generate_new_hash_value: // stack: i, addr, h_i, v_i, retdest ADD %add_const(8) - %mload_kernel_general + %load_current_general // stack: v_(i+8), h_i, v_i, retdest XOR XOR diff --git a/evm/src/cpu/kernel/asm/hash/ripemd/box.asm b/evm/src/cpu/kernel/asm/hash/ripemd/box.asm index 87e1f56a..d55732de 100644 --- a/evm/src/cpu/kernel/asm/hash/ripemd/box.asm +++ b/evm/src/cpu/kernel/asm/hash/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 - %mload_kernel_general_u32_LE + %load_current_general_u32_LE // stack: x, box, a, b, c, d, e, F, K, boxes, rounds, sides, virt SWAP1 SWAP2 diff --git a/evm/src/cpu/kernel/asm/hash/ripemd/main.asm b/evm/src/cpu/kernel/asm/hash/ripemd/main.asm index 0ad1e4e5..27809dca 100644 --- a/evm/src/cpu/kernel/asm/hash/ripemd/main.asm +++ b/evm/src/cpu/kernel/asm/hash/ripemd/main.asm @@ -47,7 +47,7 @@ global ripemd: %extract_and_store_byte(24, 71) // stack: 0x80 - %mstore_kernel_general(72) + %store_current_general(72) // stack: virt, length %stack (virt, length) -> ( 0, length, virt, ripemd_1, ripemd_2, process) @@ -126,6 +126,6 @@ process: PUSH $byte BYTE // stack: xs[byte] - %mstore_kernel_general($offset) + %store_current_general($offset) // stack: %endmacro diff --git a/evm/src/cpu/kernel/asm/hash/sha2/compression.asm b/evm/src/cpu/kernel/asm/hash/sha2/compression.asm index 8f7d942c..214e790f 100644 --- a/evm/src/cpu/kernel/asm/hash/sha2/compression.asm +++ b/evm/src/cpu/kernel/asm/hash/sha2/compression.asm @@ -26,7 +26,7 @@ global sha2_compression: // stack: message_schedule_addr, i=0, a[0]..h[0], retdest PUSH 0 // stack: 0, message_schedule_addr, i=0, a[0]..h[0], retdest - %mload_kernel_general + %load_current_general // stack: num_blocks, message_schedule_addr, i=0, a[0]..h[0], retdest DUP1 // stack: num_blocks, num_blocks, message_schedule_addr, i=0, a[0]..h[0], retdest @@ -53,7 +53,7 @@ compression_loop: // stack: 4*i, message_schedule_addr, a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, a[0]..h[0], retdest ADD // stack: message_schedule_addr + 4*i, a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, a[0]..h[0], retdest - %mload_kernel_general_u32 + %load_current_general_u32 // stack: W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, a[0]..h[0], retdest PUSH sha2_constants_k // stack: sha2_constants_k, W[i], a[i], b[i], c[i], d[i], e[i], f[i], g[i], h[i], num_blocks, scratch_space_addr, message_schedule_addr, i, a[0]..h[0], retdest diff --git a/evm/src/cpu/kernel/asm/hash/sha2/main.asm b/evm/src/cpu/kernel/asm/hash/sha2/main.asm index 8679bdb0..6caae90f 100644 --- a/evm/src/cpu/kernel/asm/hash/sha2/main.asm +++ b/evm/src/cpu/kernel/asm/hash/sha2/main.asm @@ -4,7 +4,7 @@ global sha2: // stack: num_bytes, virt, retdest DUP2 // stack: virt, num_bytes, virt, retdest - %mstore_kernel_general + %store_current_general // stack: virt, retdest @@ -14,7 +14,7 @@ global sha2: // num_blocks, block0[0], ..., block0[63], block1[0], ..., blocklast[63] global sha2_pad: // stack: virt, retdest - %mload_kernel_general + %load_current_general // stack: num_bytes, retdest // STEP 1: append 1 // insert 128 (= 1 << 7) at x[num_bytes+1] @@ -25,7 +25,7 @@ global sha2_pad: // stack: num_bytes, 128, num_bytes, retdest %increment // stack: num_bytes+1, 128, num_bytes, retdest - %mstore_kernel_general + %store_current_general // stack: num_bytes, retdest // STEP 2: calculate num_blocks := (num_bytes+8)//64 + 1 DUP1 @@ -51,7 +51,7 @@ global sha2_pad: // stack: num_blocks, num_blocks, retdest // STEP 5: write num_blocks to x[0] PUSH 0 - %mstore_kernel_general + %store_current_general // stack: num_blocks, retdest %message_schedule_addr_from_num_blocks %jump(sha2_gen_all_message_schedules) diff --git a/evm/src/cpu/kernel/asm/hash/sha2/message_schedule.asm b/evm/src/cpu/kernel/asm/hash/sha2/message_schedule.asm index d8f0500d..08e4cad8 100644 --- a/evm/src/cpu/kernel/asm/hash/sha2/message_schedule.asm +++ b/evm/src/cpu/kernel/asm/hash/sha2/message_schedule.asm @@ -16,11 +16,11 @@ gen_message_schedule_from_block: // stack: block_addr + 32, block_addr, output_addr, retdest SWAP1 // stack: block_addr, block_addr + 32, output_addr, retdest - %mload_kernel_general_u256 + %load_current_general_u256 // stack: block[0], block_addr + 32, output_addr, retdest SWAP1 // stack: block_addr + 32, block[0], output_addr, retdest - %mload_kernel_general_u256 + %load_current_general_u256 // stack: block[1], block[0], output_addr, retdest SWAP2 // stack: output_addr, block[0], block[1], retdest @@ -43,7 +43,7 @@ gen_message_schedule_from_block_0_loop: // stack: block[0] % (1 << 32), block[0] >> 32, output_addr, counter, block[1], retdest DUP3 // stack: output_addr, block[0] % (1 << 32), block[0] >> 32, output_addr, counter, block[1], retdest - %mstore_kernel_general_u32 + %store_current_general_u32 // stack: block[0] >> 32, output_addr, counter, block[1], retdest SWAP1 // stack: output_addr, block[0] >> 32, counter, block[1], retdest @@ -81,7 +81,7 @@ gen_message_schedule_from_block_1_loop: // stack: block[1] % (1 << 32), block[1] >> 32, output_addr, counter, block[0], retdest DUP3 // stack: output_addr, block[1] % (1 << 32), block[1] >> 32, output_addr, counter, block[0], retdest - %mstore_kernel_general_u32 + %store_current_general_u32 // stack: block[1] >> 32, output_addr, counter, block[0], retdest SWAP1 // stack: output_addr, block[1] >> 32, counter, block[0], retdest @@ -115,7 +115,7 @@ gen_message_schedule_remaining_loop: // stack: output_addr, output_addr, counter, block[0], block[1], retdest %sub_const(8) // stack: output_addr - 2*4, output_addr, counter, block[0], block[1], retdest - %mload_kernel_general_u32 + %load_current_general_u32 // stack: x[output_addr - 2*4], output_addr, counter, block[0], block[1], retdest %sha2_sigma_1 // stack: sigma_1(x[output_addr - 2*4]), output_addr, counter, block[0], block[1], retdest @@ -125,7 +125,7 @@ gen_message_schedule_remaining_loop: // stack: output_addr, output_addr, sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest %sub_const(28) // stack: output_addr - 7*4, output_addr, sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest - %mload_kernel_general_u32 + %load_current_general_u32 // stack: x[output_addr - 7*4], output_addr, sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest SWAP1 // stack: output_addr, x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest @@ -133,7 +133,7 @@ gen_message_schedule_remaining_loop: // stack: output_addr, output_addr, x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest %sub_const(60) // stack: output_addr - 15*4, output_addr, x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest - %mload_kernel_general_u32 + %load_current_general_u32 // stack: x[output_addr - 15*4], output_addr, x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest %sha2_sigma_0 // stack: sigma_0(x[output_addr - 15*4]), output_addr, x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest @@ -143,7 +143,7 @@ gen_message_schedule_remaining_loop: // stack: output_addr, output_addr, sigma_0(x[output_addr - 15*4]), x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest %sub_const(64) // stack: output_addr - 16*4, output_addr, sigma_0(x[output_addr - 15*4]), x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest - %mload_kernel_general_u32 + %load_current_general_u32 // stack: x[output_addr - 16*4], output_addr, sigma_0(x[output_addr - 15*4]), x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest SWAP1 // stack: output_addr, x[output_addr - 16*4], sigma_0(x[output_addr - 15*4]), x[output_addr - 7*4], sigma_1(x[output_addr - 2*4]), counter, block[0], block[1], retdest @@ -155,7 +155,7 @@ gen_message_schedule_remaining_loop: // stack: sigma_1(x[output_addr - 2*4]) + x[output_addr - 16*4] + sigma_0(x[output_addr - 15*4]) + x[output_addr - 7*4], output_addr, counter, block[0], block[1], retdest DUP2 // stack: output_addr, sigma_1(x[output_addr - 2*4]) + x[output_addr - 16*4] + sigma_0(x[output_addr - 15*4]) + x[output_addr - 7*4], output_addr, counter, block[0], block[1], retdest - %mstore_kernel_general_u32 + %store_current_general_u32 // stack: output_addr, counter, block[0], block[1], retdest %add_const(4) // stack: output_addr + 4, counter, block[0], block[1], retdest @@ -180,7 +180,7 @@ global sha2_gen_all_message_schedules: // stack: output_addr, output_addr, retdest PUSH 0 // stack: 0, output_addr, output_addr, retdest - %mload_kernel_general + %load_current_general // stack: num_blocks, output_addr, output_addr, retdest PUSH 1 // stack: cur_addr = 1, counter = num_blocks, output_addr, output_addr, retdest diff --git a/evm/src/cpu/kernel/asm/hash/sha2/write_length.asm b/evm/src/cpu/kernel/asm/hash/sha2/write_length.asm index 4f73fa79..75e97fb3 100644 --- a/evm/src/cpu/kernel/asm/hash/sha2/write_length.asm +++ b/evm/src/cpu/kernel/asm/hash/sha2/write_length.asm @@ -8,7 +8,7 @@ // stack: length % (1 << 8), length, last_addr DUP3 // stack: last_addr, length % (1 << 8), length, last_addr - %mstore_kernel_general + %store_current_general %rep 7 // For i = 0 to 6 @@ -25,7 +25,7 @@ // stack: (length >> (8 * (i + 1))) % (1 << 8), length >> (8 * (i + 1)), last_addr - i - 2 DUP3 // stack: last_addr - i - 2, (length >> (8 * (i + 1))) % (1 << 8), length >> (8 * (i + 1)), last_addr - i - 2 - %mstore_kernel_general + %store_current_general %endrep %pop2 diff --git a/evm/src/cpu/kernel/asm/memory/core.asm b/evm/src/cpu/kernel/asm/memory/core.asm index c1c6fe10..2222697d 100644 --- a/evm/src/cpu/kernel/asm/memory/core.asm +++ b/evm/src/cpu/kernel/asm/memory/core.asm @@ -260,6 +260,79 @@ // stack: value %endmacro +// Load a single byte from the kernel general memory, in the current context (not the kernel's context). +%macro mload_current_general + // stack: offset + %mload_current(@SEGMENT_KERNEL_GENERAL) + // stack: value +%endmacro + +// Load a big-endian u32 from kernel general memory in the current context. +%macro mload_current_general_u32 + // stack: offset + PUSH @SEGMENT_KERNEL_GENERAL + // stack: segment, offset + GET_CONTEXT + // stack: context, segment, offset + %mload_u32 + // stack: value +%endmacro + +// Load a little-endian u32 from kernel general memory in the current context. +%macro mload_current_general_u32_LE + // stack: offset + PUSH @SEGMENT_KERNEL_GENERAL + // stack: segment, offset + GET_CONTEXT + // stack: context, segment, offset + %mload_u32_LE + // stack: value +%endmacro + +// Load a little-endian u64 from kernel general memory in the current context. +%macro mload_current_general_u64_LE + // stack: offset + PUSH @SEGMENT_KERNEL_GENERAL + // stack: segment, offset + GET_CONTEXT + // stack: context, segment, offset + %mload_u64_LE + // stack: value +%endmacro + +// Load a u256 from kernel general memory in the current context. +%macro mload_current_general_u256 + // stack: offset + PUSH @SEGMENT_KERNEL_GENERAL + // stack: segment, offset + GET_CONTEXT + // stack: context, segment, offset + %mload_u256 + // stack: value +%endmacro + +// Store a single byte to kernel general memory in the current context. +%macro mstore_current_general + // stack: offset, value + PUSH @SEGMENT_KERNEL_GENERAL + // stack: segment, offset, value + GET_CONTEXT + // stack: context, segment, offset, value + MSTORE_GENERAL + // stack: (empty) +%endmacro + +// Store a big-endian u32 to kernel general memory in the current context. +%macro mstore_current_general_u32 + // stack: offset, value + PUSH @SEGMENT_KERNEL_GENERAL + // stack: segment, offset, value + GET_CONTEXT + // stack: context, segment, offset, value + %mstore_u32 + // stack: (empty) +%endmacro + // Load a single value from the given segment of kernel (context 0) memory. %macro mload_kernel(segment) // stack: offset