2022-08-03 22:09:36 -07:00
|
|
|
// Load the given global metadata field from memory.
|
|
|
|
|
%macro mload_global_metadata(field)
|
|
|
|
|
// stack: (empty)
|
|
|
|
|
PUSH $field
|
|
|
|
|
// stack: offset
|
|
|
|
|
%mload_kernel(@SEGMENT_GLOBAL_METADATA)
|
|
|
|
|
// stack: value
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
// Store the given global metadata field to memory.
|
|
|
|
|
%macro mstore_global_metadata(field)
|
|
|
|
|
// stack: value
|
|
|
|
|
PUSH $field
|
|
|
|
|
// stack: offset, value
|
2022-09-22 20:09:48 -07:00
|
|
|
%mstore_kernel(@SEGMENT_GLOBAL_METADATA)
|
2022-08-03 22:09:36 -07:00
|
|
|
// stack: (empty)
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
// Load the given context metadata field from memory.
|
|
|
|
|
%macro mload_context_metadata(field)
|
|
|
|
|
// stack: (empty)
|
|
|
|
|
PUSH $field
|
|
|
|
|
// stack: offset
|
|
|
|
|
%mload_current(@SEGMENT_CONTEXT_METADATA)
|
|
|
|
|
// stack: value
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
// Store the given context metadata field to memory.
|
|
|
|
|
%macro mstore_context_metadata(field)
|
|
|
|
|
// stack: value
|
|
|
|
|
PUSH $field
|
|
|
|
|
// stack: offset, value
|
2022-09-22 20:09:48 -07:00
|
|
|
%mstore_current(@SEGMENT_CONTEXT_METADATA)
|
2022-08-03 22:09:36 -07:00
|
|
|
// stack: (empty)
|
|
|
|
|
%endmacro
|
2022-07-28 15:46:36 -07:00
|
|
|
|
|
|
|
|
%macro address
|
2022-09-22 20:09:48 -07:00
|
|
|
%mload_context_metadata(@CTX_METADATA_ADDRESS)
|
2022-07-28 15:46:36 -07:00
|
|
|
%endmacro
|
|
|
|
|
|
2023-03-06 21:57:51 -08:00
|
|
|
global sys_address:
|
|
|
|
|
// stack: kexit_info
|
|
|
|
|
%address
|
|
|
|
|
// stack: address, kexit_info
|
|
|
|
|
SWAP1
|
|
|
|
|
EXIT_KERNEL
|
|
|
|
|
|
|
|
|
|
%macro caller
|
2022-09-22 20:09:48 -07:00
|
|
|
%mload_context_metadata(@CTX_METADATA_CALLER)
|
2022-07-28 15:46:36 -07:00
|
|
|
%endmacro
|
|
|
|
|
|
2023-03-06 21:57:51 -08:00
|
|
|
global sys_caller:
|
|
|
|
|
// stack: kexit_info
|
|
|
|
|
%caller
|
|
|
|
|
// stack: caller, kexit_info
|
|
|
|
|
SWAP1
|
|
|
|
|
EXIT_KERNEL
|
|
|
|
|
|
2022-07-28 15:46:36 -07:00
|
|
|
%macro callvalue
|
2022-09-22 20:09:48 -07:00
|
|
|
%mload_context_metadata(@CTX_METADATA_CALL_VALUE)
|
2022-07-28 15:46:36 -07:00
|
|
|
%endmacro
|
2022-10-20 19:23:01 +02:00
|
|
|
|
2023-03-06 21:57:51 -08:00
|
|
|
%macro codesize
|
|
|
|
|
%mload_context_metadata(@CTX_METADATA_CODE_SIZE)
|
|
|
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
global sys_codesize:
|
|
|
|
|
// stack: kexit_info
|
|
|
|
|
%codesize
|
|
|
|
|
// stack: codesize, kexit_info
|
|
|
|
|
SWAP1
|
|
|
|
|
EXIT_KERNEL
|
|
|
|
|
|
|
|
|
|
global sys_callvalue:
|
|
|
|
|
// stack: kexit_info
|
|
|
|
|
%callvalue
|
|
|
|
|
// stack: callvalue, kexit_info
|
|
|
|
|
SWAP1
|
|
|
|
|
EXIT_KERNEL
|
|
|
|
|
|
2022-10-20 19:23:01 +02:00
|
|
|
%macro msize
|
|
|
|
|
%mload_context_metadata(@CTX_METADATA_MSIZE)
|
|
|
|
|
%endmacro
|
|
|
|
|
|
2023-03-06 21:57:51 -08:00
|
|
|
global sys_msize:
|
|
|
|
|
// stack: kexit_info
|
|
|
|
|
%msize
|
|
|
|
|
// stack: msize, kexit_info
|
|
|
|
|
SWAP1
|
|
|
|
|
EXIT_KERNEL
|
|
|
|
|
|
2022-10-20 19:23:01 +02:00
|
|
|
%macro update_msize
|
|
|
|
|
// stack: offset
|
|
|
|
|
%add_const(32)
|
|
|
|
|
// stack: 32 + offset
|
|
|
|
|
%div_const(32)
|
|
|
|
|
// stack: (offset+32)/32 = ceil_div_usize(offset+1, 32)
|
|
|
|
|
%mul_const(32)
|
2022-10-20 19:29:35 +02:00
|
|
|
// stack: ceil_div_usize(offset+1, 32) * 32
|
2022-10-20 19:23:01 +02:00
|
|
|
%msize
|
|
|
|
|
// stack: current_msize, ceil_div_usize(offset+1, 32) * 32
|
|
|
|
|
%max
|
|
|
|
|
// stack: new_msize
|
|
|
|
|
%mstore_context_metadata(@CTX_METADATA_MSIZE)
|
|
|
|
|
%endmacro
|