package wazevoapi
import (
"github.com/tetratelabs/wazero/internal/wasm"
)
const (
FunctionInstanceSize = 24
FunctionInstanceExecutableOffset = 0
FunctionInstanceModuleContextOpaquePtrOffset = 8
FunctionInstanceTypeIDOffset = 16
)
const (
ExecutionContextOffsetExitCodeOffset Offset = 0
ExecutionContextOffsetCallerModuleContextPtr Offset = 8
ExecutionContextOffsetOriginalFramePointer Offset = 16
ExecutionContextOffsetOriginalStackPointer Offset = 24
ExecutionContextOffsetGoReturnAddress Offset = 32
ExecutionContextOffsetStackBottomPtr Offset = 40
ExecutionContextOffsetGoCallReturnAddress Offset = 48
ExecutionContextOffsetStackPointerBeforeGoCall Offset = 56
ExecutionContextOffsetStackGrowRequiredSize Offset = 64
ExecutionContextOffsetMemoryGrowTrampolineAddress Offset = 72
ExecutionContextOffsetStackGrowCallTrampolineAddress Offset = 80
ExecutionContextOffsetCheckModuleExitCodeTrampolineAddress Offset = 88
ExecutionContextOffsetSavedRegistersBegin Offset = 96
ExecutionContextOffsetGoFunctionCallCalleeModuleContextOpaque Offset = 1120
ExecutionContextOffsetTableGrowTrampolineAddress Offset = 1128
ExecutionContextOffsetRefFuncTrampolineAddress Offset = 1136
ExecutionContextOffsetMemmoveAddress Offset = 1144
ExecutionContextOffsetFramePointerBeforeGoCall Offset = 1152
ExecutionContextOffsetMemoryWait32TrampolineAddress Offset = 1160
ExecutionContextOffsetMemoryWait64TrampolineAddress Offset = 1168
ExecutionContextOffsetMemoryNotifyTrampolineAddress Offset = 1176
)
type ModuleContextOffsetData struct {
TotalSize int
ModuleInstanceOffset,
LocalMemoryBegin,
ImportedMemoryBegin,
ImportedFunctionsBegin,
GlobalsBegin,
TypeIDs1stElement,
TablesBegin,
BeforeListenerTrampolines1stElement,
AfterListenerTrampolines1stElement,
DataInstances1stElement,
ElementInstances1stElement Offset
}
func (m *ModuleContextOffsetData ) ImportedFunctionOffset (i wasm .Index ) (
executableOffset , moduleCtxOffset , typeIDOffset Offset ,
) {
base := m .ImportedFunctionsBegin + Offset (i )*FunctionInstanceSize
return base , base + 8 , base + 16
}
func (m *ModuleContextOffsetData ) GlobalInstanceOffset (i wasm .Index ) Offset {
return m .GlobalsBegin + Offset (i )*16
}
type Offset int32
func (o Offset ) U32 () uint32 {
return uint32 (o )
}
func (o Offset ) I64 () int64 {
return int64 (o )
}
func (o Offset ) U64 () uint64 {
return uint64 (o )
}
func (m *ModuleContextOffsetData ) LocalMemoryBase () Offset {
return m .LocalMemoryBegin
}
func (m *ModuleContextOffsetData ) LocalMemoryLen () Offset {
if l := m .LocalMemoryBegin ; l >= 0 {
return l + 8
}
return -1
}
func (m *ModuleContextOffsetData ) TableOffset (tableIndex int ) Offset {
return m .TablesBegin + Offset (tableIndex )*8
}
func NewModuleContextOffsetData (m *wasm .Module , withListener bool ) ModuleContextOffsetData {
ret := ModuleContextOffsetData {}
var offset Offset
ret .ModuleInstanceOffset = 0
offset += 8
if m .MemorySection != nil {
ret .LocalMemoryBegin = offset
const localMemorySizeInOpaqueModuleContext = 16
offset += localMemorySizeInOpaqueModuleContext
} else {
ret .LocalMemoryBegin = -1
}
if m .ImportMemoryCount > 0 {
offset = align8 (offset )
const importedMemorySizeInOpaqueModuleContext = 16
ret .ImportedMemoryBegin = offset
offset += importedMemorySizeInOpaqueModuleContext
} else {
ret .ImportedMemoryBegin = -1
}
if m .ImportFunctionCount > 0 {
offset = align8 (offset )
ret .ImportedFunctionsBegin = offset
size := int (m .ImportFunctionCount ) * FunctionInstanceSize
offset += Offset (size )
} else {
ret .ImportedFunctionsBegin = -1
}
if globals := int (m .ImportGlobalCount ) + len (m .GlobalSection ); globals > 0 {
offset = align16 (offset )
ret .GlobalsBegin = offset
offset += Offset (globals ) * 16
} else {
ret .GlobalsBegin = -1
}
if tables := len (m .TableSection ) + int (m .ImportTableCount ); tables > 0 {
offset = align8 (offset )
ret .TypeIDs1stElement = offset
offset += 8
ret .TablesBegin = offset
offset += Offset (tables ) * 8
} else {
ret .TypeIDs1stElement = -1
ret .TablesBegin = -1
}
if withListener {
offset = align8 (offset )
ret .BeforeListenerTrampolines1stElement = offset
offset += 8
ret .AfterListenerTrampolines1stElement = offset
offset += 8
} else {
ret .BeforeListenerTrampolines1stElement = -1
ret .AfterListenerTrampolines1stElement = -1
}
ret .DataInstances1stElement = offset
offset += 8
ret .ElementInstances1stElement = offset
offset += 8
ret .TotalSize = int (align16 (offset ))
return ret
}
func align16(o Offset ) Offset {
return (o + 15 ) &^ 15
}
func align8(o Offset ) Offset {
return (o + 7 ) &^ 7
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .