Skip to content

Commit

Permalink
refactor: optimize truncate_stack procedure
Browse files Browse the repository at this point in the history
  • Loading branch information
Fumuran committed Jul 8, 2024
1 parent 629ea82 commit 6a1165a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 21 deletions.
36 changes: 16 additions & 20 deletions stdlib/asm/sys.masm
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,23 @@
#! function at the end will reduce the size of the public inputs that are shared with the verifier.
#! Input: Stack with 16 or more elements.
#! Output: Stack with only the original top 16 elements.
export.truncate_stack.4
loc_storew.0
dropw
loc_storew.1
dropw
loc_storew.2
dropw
loc_storew.3
dropw
sdepth
neq.16
#! Cycles: 17 + 11 * overflow_words, where `overflow_words` is the number of words needed to drop.
export.truncate_stack.1
# save the first word to memory and bring elements to be dropped to the top of the stack
loc_storew.0 dropw movupw.3
# => [X, B, C, D, ...]

# until stack depth greater than 16, keep dropping extra elements
sdepth neq.16
while.true
dropw
sdepth
neq.16
dropw movupw.3
# => [X, B, C, D, ...]

sdepth neq.16
end
loc_loadw.3
swapw.3
loc_loadw.2
swapw.2
loc_loadw.1
swapw.1
# => [X, B, C, D, ...]

# bring the previously saved word back onto the stack
loc_loadw.0
# => [A, B, C, D, ...]
end
2 changes: 1 addition & 1 deletion stdlib/docs/sys.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Removes elements deep in the stack until the depth of the stack is exactly 16. The elements<br />are removed in such a way that the top 16 elements of the stack remain unchanged. If the stack<br />would otherwise contain more than 16 elements at the end of execution, then adding a call to this<br />function at the end will reduce the size of the public inputs that are shared with the verifier.<br />Input: Stack with 16 or more elements.<br />Output: Stack with only the original top 16 elements.<br />
Removes elements deep in the stack until the depth of the stack is exactly 16. The elements<br />are removed in such a way that the top 16 elements of the stack remain unchanged. If the stack<br />would otherwise contain more than 16 elements at the end of execution, then adding a call to this<br />function at the end will reduce the size of the public inputs that are shared with the verifier.<br />Input: Stack with 16 or more elements.<br />Output: Stack with only the original top 16 elements.<br />Cycles: 17 + 11 * overflow_words, where `overflow_words` is the number of words needed to drop.<br />
## std::sys
| Procedure | Description |
| ----------- | ------------- |

0 comments on commit 6a1165a

Please sign in to comment.