From 67a3edb2f16dac392257c7879363d8490a9e5239 Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Wed, 26 Apr 2023 06:26:41 +0200 Subject: [PATCH] Precompiles exist (#1008) * Precompiles exist * Fix --- .../cpu/kernel/asm/core/precompiles/main.asm | 4 +--- evm/src/cpu/kernel/asm/core/util.asm | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/evm/src/cpu/kernel/asm/core/precompiles/main.asm b/evm/src/cpu/kernel/asm/core/precompiles/main.asm index df9b77ec..ec33cea8 100644 --- a/evm/src/cpu/kernel/asm/core/precompiles/main.asm +++ b/evm/src/cpu/kernel/asm/core/precompiles/main.asm @@ -35,9 +35,7 @@ global pop_and_return_success: // stack: retdest %mload_txn_field(@TXN_FIELD_TO) // stack: addr, retdest - DUP1 %ge_const(@ECREC) DUP2 %le_const(@BLAKE2_F) - // stack: addr<=9, addr>=1, addr, retdest - MUL // Cheaper than AND + DUP1 %is_precompile %jumpi(handle_precompiles_from_eoa) // stack: addr, retdest POP diff --git a/evm/src/cpu/kernel/asm/core/util.asm b/evm/src/cpu/kernel/asm/core/util.asm index a8e41a7b..04989459 100644 --- a/evm/src/cpu/kernel/asm/core/util.asm +++ b/evm/src/cpu/kernel/asm/core/util.asm @@ -28,11 +28,24 @@ // stack: to == 0 %endmacro +%macro is_precompile + // stack: addr + DUP1 %ge_const(@ECREC) SWAP1 %le_const(@BLAKE2_F) + // stack: addr>=1, addr<=9 + MUL // Cheaper than AND +%endmacro + // Returns 1 if the account is non-existent, 0 otherwise. %macro is_non_existent // stack: addr - %mpt_read_state_trie - ISZERO + DUP1 + // stack: addr, addr + %mpt_read_state_trie ISZERO + SWAP1 + // stack: addr, zero_state_trie + %is_precompile ISZERO + // stack: not_precompile, zero_state_trie + MUL // Cheaper than AND %endmacro // Returns 1 if the account is empty, 0 otherwise. @@ -65,5 +78,5 @@ // stack: addr DUP1 %is_non_existent SWAP1 %is_empty - ADD // OR + OR %endmacro