Merge pull request #1306 from topos-protocol/fix_empty_last_chunk

This commit is contained in:
Robin Salen 2023-10-24 06:40:46 -04:00 committed by GitHub
commit b212fff72f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 0 deletions

View File

@ -57,6 +57,17 @@ memcpy_finish:
// Similar logic to memcpy, but optimized for copying sequences of bytes.
global memcpy_bytes:
// stack: DST, SRC, count, retdest
// Handle empty case
DUP7
// stack: count, DST, SRC, count, retdest
ISZERO
// stack: count == 0, DST, SRC, count, retdest
%jumpi(memcpy_bytes_empty)
// stack: DST, SRC, count, retdest
// Handle small case
DUP7
// stack: count, DST, SRC, count, retdest
%lt_const(0x20)
@ -119,6 +130,12 @@ memcpy_bytes_finish:
// stack: retdest
JUMP
memcpy_bytes_empty:
// stack: DST, SRC, 0, retdest
%pop7
// stack: retdest
JUMP
%macro memcpy_bytes
%stack (dst: 3, src: 3, count) -> (dst, src, count, %%after)
%jump(memcpy_bytes)

View File

@ -2,12 +2,22 @@
// DST = (dst_ctx, dst_segment, dst_addr).
// This tuple definition is used for brevity in the stack comments below.
global memset:
// Handle empty case
DUP7
// stack: count, DST, count, retdest
ISZERO
// stack: count == 0, DST, count, retdest
%jumpi(memset_bytes_empty)
// stack: DST, count, retdest
// Handle small case
DUP4
// stack: count, DST, count, retdest
%lt_const(0x20)
// stack: count < 32, DST, count, retdest
%jumpi(memset_finish)
// stack: DST, count, retdest
PUSH 32
PUSH 0
@ -43,3 +53,9 @@ memset_finish:
%pop4
// stack: retdest
JUMP
memset_bytes_empty:
// stack: DST, 0, retdest
%pop4
// stack: retdest
JUMP