| // Copyright 2021 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| // Macros for transitioning from the host ABI to Go ABI0. | |
| // | |
| // These save the frame pointer, so in general, functions that use | |
| // these should have zero frame size to suppress the automatic frame | |
| // pointer, though it's harmless to not do this. | |
| // REGS_HOST_TO_ABI0_STACK is the stack bytes used by | |
| // PUSH_REGS_HOST_TO_ABI0. | |
| // PUSH_REGS_HOST_TO_ABI0 prepares for transitioning from | |
| // the host ABI to Go ABI0 code. It saves all registers that are | |
| // callee-save in the host ABI and caller-save in Go ABI0 and prepares | |
| // for entry to Go. | |
| // | |
| // Save DI SI BP BX R12 R13 R14 R15 X6-X15 registers and the DF flag. | |
| // Clear the DF flag for the Go ABI. | |
| // MXCSR matches the Go ABI, so we don't have to set that, | |
| // and Go doesn't modify it, so we don't have to save it. | |
| // SysV ABI | |
| // SysV MXCSR matches the Go ABI, so we don't have to set that, | |
| // and Go doesn't modify it, so we don't have to save it. | |
| // Both SysV and Go require DF to be cleared, so that's already clear. | |
| // The SysV and Go frame pointer conventions are compatible. | |