You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AVM 8+ has support for frame pointers which allow for more efficient stack & slot usage for subroutines (functions in Tealish).
Tealish can generate Teal that uses proto at the start of function definitions instead of stores. frame_dig can be used to access the function args from the stack without having to store them in slots.
Teal example for reference:
pushbytes "ab"
pushbytes "cd"
// log(myfunc("ab", "cd"))
callsub myfunc
log
pushint 1
return
// myfunc(x: bytes, y: bytes) bytes:
myfunc:
// specify that our function takes 2 arguments and has one return value
proto 2 1 // internally puts the first 2 values from the stack into the frame
frame_dig -2 // first arg
frame_dig -1 // second arg
concat
retsub
The text was updated successfully, but these errors were encountered:
I now understand that we can use frame pointers with frame_dig & frame_bury for function locals too instead of scratch slots. This is will allow for safe recursive functions and negate the need to analyse the call graph to find a safe slot allocation.
It is a more invasive change however so I suggest to tackle it as a separate issue after this one.
AVM 8+ has support for frame pointers which allow for more efficient stack & slot usage for subroutines (functions in Tealish).
Tealish can generate Teal that uses
proto
at the start of function definitions instead ofstore
s.frame_dig
can be used to access the function args from the stack without having to store them in slots.Teal example for reference:
The text was updated successfully, but these errors were encountered: