return z
}
-var bpduff1 = []byte{
- 0x48, 0x89, 0x6c, 0x24, 0xf0, // MOVQ BP, -16(SP)
- 0x48, 0x8d, 0x6c, 0x24, 0xf0, // LEAQ -16(SP), BP
-}
-
-var bpduff2 = []byte{
- 0x48, 0x8b, 0x6d, 0x00, // MOVQ 0(BP), BP
-}
-
// asmevex emits EVEX pregis and opcode byte.
// In addition to asmvex r/m, vvvv and reg fields also requires optional
// K-masking register.
ctxt.Diag("directly calling duff when dynamically linking Go")
}
- if yt.zcase == Zcallduff && ctxt.Arch.Family == sys.AMD64 {
- // Maintain BP around call, since duffcopy/duffzero can't do it
- // (the call jumps into the middle of the function).
- // This makes it possible to see call sites for duffcopy/duffzero in
- // BP-based profiling tools like Linux perf (which is the
- // whole point of maintaining frame pointers in Go).
- // MOVQ BP, -16(SP)
- // LEAQ -16(SP), BP
- ab.Put(bpduff1)
- }
ab.Put1(byte(op))
cursym.AddRel(ctxt, obj.Reloc{
Type: objabi.R_CALL,
})
ab.PutInt32(0)
- if yt.zcase == Zcallduff && ctxt.Arch.Family == sys.AMD64 {
- // Pop BP pushed above.
- // MOVQ 0(BP), BP
- ab.Put(bpduff2)
- }
-
// TODO: jump across functions needs reloc
case Zbr, Zjmp, Zloop:
if p.As == AXBEGIN {
+++ /dev/null
-// Code generated by mkduff.go; DO NOT EDIT.
-// Run go generate from src/runtime to update.
-// See mkduff.go for comments.
-
-#include "textflag.h"
-
-TEXT runtime·duffzero<ABIInternal>(SB), NOSPLIT|NOFRAME, $0-0
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- MOVUPS X15,(DI)
- MOVUPS X15,16(DI)
- MOVUPS X15,32(DI)
- MOVUPS X15,48(DI)
- LEAQ 64(DI),DI
-
- RET
-
-TEXT runtime·duffcopy<ABIInternal>(SB), NOSPLIT|NOFRAME, $0-0
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- MOVUPS (SI), X0
- ADDQ $16, SI
- MOVUPS X0, (DI)
- ADDQ $16, DI
-
- RET
)
func main() {
- gen("amd64", notags, zeroAMD64, copyAMD64)
gen("386", notags, zero386, copy386)
gen("arm", notags, zeroARM, copyARM)
gen("loong64", notags, zeroLOONG64, copyLOONG64)