Skip to content
This repository has been archived by the owner on Feb 21, 2024. It is now read-only.

Commit

Permalink
Use mstore_32bytes to optimize decode_int_given_len (0xPolygonZero#1413)
Browse files Browse the repository at this point in the history
  • Loading branch information
LindaGuiga authored Dec 7, 2023
1 parent edfc86c commit 7efd147
Showing 1 changed file with 13 additions and 31 deletions.
44 changes: 13 additions & 31 deletions evm/src/cpu/kernel/asm/rlp/decode.asm
Original file line number Diff line number Diff line change
Expand Up @@ -131,37 +131,19 @@ decode_rlp_list_len_big:
// Pre stack: pos, len, retdest
// Post stack: pos', int
global decode_int_given_len:
%stack (pos, len, retdest) -> (pos, len, pos, retdest)
DUP2 ISZERO %jumpi(empty_int)
%stack (pos, len, retdest) -> (pos, len, pos, len, retdest)
ADD
// stack: end_pos, pos, retdest
SWAP1
// stack: pos, end_pos, retdest
PUSH 0 // initial accumulator state
// stack: acc, pos, end_pos, retdest

decode_int_given_len_loop:
// stack: acc, pos, end_pos, retdest
DUP3
DUP3
EQ
// stack: pos == end_pos, acc, pos, end_pos, retdest
%jumpi(decode_int_given_len_finish)
// stack: acc, pos, end_pos, retdest
%shl_const(8)
// stack: acc << 8, pos, end_pos, retdest
DUP2
// stack: pos, acc << 8, pos, end_pos, retdest
%mload_kernel(@SEGMENT_RLP_RAW)
// stack: byte, acc << 8, pos, end_pos, retdest
ADD
// stack: acc', pos, end_pos, retdest
// Increment pos.
SWAP1
%increment
SWAP1
// stack: acc', pos', end_pos, retdest
%jump(decode_int_given_len_loop)
%stack(pos_two, pos, len, retdest) -> (pos, len, pos_two, retdest)
PUSH @SEGMENT_RLP_RAW
PUSH 0 //context
MLOAD_32BYTES
// stack: int, pos', retdest
%stack(int, pos, retdest) -> (retdest, pos, int)
JUMP

decode_int_given_len_finish:
%stack (acc, pos, end_pos, retdest) -> (retdest, pos, acc)
empty_int:
// stack: pos, len, retdest
%stack(pos, len, retdest) -> (retdest, pos, 0)
JUMP

0 comments on commit 7efd147

Please sign in to comment.