From 9f0c2f472b0bcaa778650e626c230cc298ec1754 Mon Sep 17 00:00:00 2001 From: Nicholas Ward Date: Fri, 21 Apr 2023 12:21:08 -0700 Subject: [PATCH] blake precompile progress --- .../kernel/asm/core/precompiles/blake2_f.asm | 38 +++++++++++++++++++ evm/src/cpu/kernel/asm/memory/packing.asm | 6 +++ 2 files changed, 44 insertions(+) diff --git a/evm/src/cpu/kernel/asm/core/precompiles/blake2_f.asm b/evm/src/cpu/kernel/asm/core/precompiles/blake2_f.asm index 74c65610..5915ffe7 100644 --- a/evm/src/cpu/kernel/asm/core/precompiles/blake2_f.asm +++ b/evm/src/cpu/kernel/asm/core/precompiles/blake2_f.asm @@ -16,6 +16,44 @@ global precompile_blake2_f: %calldatasize GET_CONTEXT // stack: ctx, size + %stack (ctx) -> (ctx, @SEGMENT_CALLDATA, 0, 4, blake2_f_contd) + %jump(mload_packing) +blake2_f_contd: + // stack: rounds, size + PUSH 4 + %rep 8 + // stack: 4 + 8 * i, h_(i-1), ..., h_0, rounds, size + DUP1 + // stack: 4 + 8 * i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size + GET_CONTEXT + // stack: ctx, 4 + 8 * i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size + %stack (ctx, offset) -> (ctx, @SEGMENT_KERNEL_GENERAL, offset, 8) + %mload_packing + // stack: h_i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size + SWAP1 + // stack: 4 + 8 * i, h_i, h_(i-1), ..., h_0, rounds, size + %endrep + + + // stack: ctx, rounds, size + %stack (ctx) -> + // stack: rounds, size + PUSH 4 + // stack: 4, rounds, size + %rep 8 + // stack: 4 + 8 * i, h_(i-1), ..., h_0, rounds, size + DUP1 + // stack: 4 + 8 * i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size + %mload_current_u64(@SEGMENT_CALLDATA) + // stack: h_i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size + SWAP1 + // stack: 4 + 8 * i, h_i, h_(i-1), ..., h_0, rounds, size + %add_const(8) + // stack: 4 + 8 * (i + 1), h_i, h_(i-1), ..., h_0, rounds, size + %endrep + // stack: h_7, ..., h_0, rounds, size + + // TODO: change // The next block of code is equivalent to the following %stack macro call diff --git a/evm/src/cpu/kernel/asm/memory/packing.asm b/evm/src/cpu/kernel/asm/memory/packing.asm index f12c7b17..75b8fc7c 100644 --- a/evm/src/cpu/kernel/asm/memory/packing.asm +++ b/evm/src/cpu/kernel/asm/memory/packing.asm @@ -43,6 +43,12 @@ mload_packing_return: %stack (packed_value, addr: 3, len, retdest) -> (retdest, packed_value) JUMP +%macro mload_packing + %stack (addr: 3, len) -> (addr, len, %%after) + %jump(extcodehash) +%%after: +%endmacro + // Pre stack: context, segment, offset, value, len, retdest // Post stack: offset' global mstore_unpacking: