github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/engine/wazevo/backend/isa/amd64/abi_entry_amd64.s (about) 1 #include "funcdata.h" 2 #include "textflag.h" 3 4 // entrypoint(preambleExecutable, functionExecutable *byte, executionContextPtr uintptr, moduleContextPtr *byte, paramResultPtr *uint64, goAllocatedStackSlicePtr uintptr 5 TEXT ·entrypoint(SB), NOSPLIT|NOFRAME, $0-48 6 MOVQ preambleExecutable+0(FP), R11 7 MOVQ functionExectuable+8(FP), R14 8 MOVQ executionContextPtr+16(FP), AX // First argument is passed in AX. 9 MOVQ moduleContextPtr+24(FP), BX // Second argument is passed in BX. 10 MOVQ paramResultSlicePtr+32(FP), R12 11 MOVQ goAllocatedStackSlicePtr+40(FP), R13 12 JMP R11 13 14 // afterGoFunctionCallEntrypoint(executable *byte, executionContextPtr uintptr, stackPointer, framePointer uintptr) 15 TEXT ·afterGoFunctionCallEntrypoint(SB), NOSPLIT|NOFRAME, $0-32 16 MOVQ executable+0(FP), CX 17 MOVQ executionContextPtr+8(FP), AX // First argument is passed in AX. 18 19 // Save the stack pointer and frame pointer. 20 MOVQ BP, 16(AX) // 16 == ExecutionContextOffsetOriginalFramePointer 21 MOVQ SP, 24(AX) // 24 == ExecutionContextOffsetOriginalStackPointer 22 23 // Then set the stack pointer and frame pointer to the values we got from the Go runtime. 24 MOVQ framePointer+24(FP), BP 25 26 // WARNING: do not update SP before BP, because the Go translates (FP) as (SP) + 8. 27 MOVQ stackPointer+16(FP), SP 28 29 JMP CX