github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/engine/wazevo/isa_arm64.go (about)

     1  //go:build arm64
     2  
     3  package wazevo
     4  
     5  import (
     6  	"github.com/tetratelabs/wazero/internal/engine/wazevo/backend"
     7  	"github.com/tetratelabs/wazero/internal/engine/wazevo/backend/isa/arm64"
     8  )
     9  
    10  func newMachine() backend.Machine {
    11  	return arm64.NewBackend()
    12  }
    13  
    14  // unwindStack is a function to unwind the stack, and appends return addresses to `returnAddresses` slice.
    15  // The implementation must be aligned with the ABI/Calling convention.
    16  func unwindStack(sp, fp, top uintptr, returnAddresses []uintptr) []uintptr {
    17  	return arm64.UnwindStack(sp, fp, top, returnAddresses)
    18  }
    19  
    20  // goCallStackView is a function to get a view of the stack before a Go call, which
    21  // is the view of the stack allocated in CompileGoFunctionTrampoline.
    22  func goCallStackView(stackPointerBeforeGoCall *uint64) []uint64 {
    23  	return arm64.GoCallStackView(stackPointerBeforeGoCall)
    24  }
    25  
    26  // adjustClonedStack is a function to adjust the stack after it is grown.
    27  // More precisely, absolute addresses (frame pointers) in the stack must be adjusted.
    28  func adjustClonedStack(oldsp, oldTop, sp, fp, top uintptr) {
    29  	// TODO: currently, the frame pointers are not used, and saved old sps are relative to the current stack pointer,
    30  	//  so no need to adjustment on arm64. However, when we make it absolute, which in my opinion is better perf-wise
    31  	//  at the expense of slightly costly stack growth, we need to adjust the pushed frame pointers.
    32  }