cleanup assembly (#81)
On amd64, AX should be zero. This commit replaces AX with BX and then zeros AX. On arm64, R26 is a callee-saved register. Replace R26 with R0 as that register is about to be overwritten anyways.
- commit
- 39261b6e83511eee15c3e9f793990f7f48da0ea8
- author
- TotallyGamerJet · · 2022-12-16 15:39 UTC
- committer
- GitHub · · 2022-12-16 15:39 UTC
- parent
- 2a13cf5
- signature
- GPG Unverified
4AEE18F83AFDEB23The key is unknown
2 files · +8 -7
M internal/fakecgo/trampolines_amd64.s +4 -3
| @@ -75,13 +75,14 @@ TEXT threadentry_trampoline(SB), NOSPLIT, $16 | |||
| 75 | 75 | CALL CX | |
| 76 | 76 | RET | |
| 77 | 77 | ||
| 78 | - | TEXT ·call5(SB), NOSPLIT, $0-0 | |
| 79 | - | MOVQ fn+0(FP), AX | |
| 78 | + | TEXT ·call5(SB), NOSPLIT, $0-56 | |
| 79 | + | MOVQ fn+0(FP), BX | |
| 80 | 80 | MOVQ a1+8(FP), DI | |
| 81 | 81 | MOVQ a2+16(FP), SI | |
| 82 | 82 | MOVQ a3+24(FP), DX | |
| 83 | 83 | MOVQ a4+32(FP), CX | |
| 84 | 84 | MOVQ a5+40(FP), R8 | |
| 85 | - | CALL AX | |
| 85 | + | XORL AX, AX | |
| 86 | + | CALL BX | |
| 86 | 87 | MOVQ AX, ret+48(FP) | |
| 87 | 88 | RET | |
| @@ -75,13 +75,14 @@ TEXT threadentry_trampoline(SB), NOSPLIT, $16 | |||||
| 75 | CALL CX | 75 | CALL CX | ||
| 76 | RET | 76 | RET | ||
| 77 | 77 | ||||
| 78 | - | TEXT ·call5(SB), NOSPLIT, $0-0 | 78 | + | TEXT ·call5(SB), NOSPLIT, $0-56 |
| 79 | - | MOVQ fn+0(FP), AX | 79 | + | MOVQ fn+0(FP), BX |
| 80 | MOVQ a1+8(FP), DI | 80 | MOVQ a1+8(FP), DI | ||
| 81 | MOVQ a2+16(FP), SI | 81 | MOVQ a2+16(FP), SI | ||
| 82 | MOVQ a3+24(FP), DX | 82 | MOVQ a3+24(FP), DX | ||
| 83 | MOVQ a4+32(FP), CX | 83 | MOVQ a4+32(FP), CX | ||
| 84 | MOVQ a5+40(FP), R8 | 84 | MOVQ a5+40(FP), R8 | ||
| 85 | - | CALL AX | 85 | + | XORL AX, AX |
| 86 | + | CALL BX | |||
| 86 | MOVQ AX, ret+48(FP) | 87 | MOVQ AX, ret+48(FP) | ||
| 87 | RET | 88 | RET | ||
M sys_darwin_arm64.s +4 -4
| @@ -90,10 +90,10 @@ TEXT callbackasm1(SB), NOSPLIT, $208-0 | |||
| 90 | 90 | // Move parameters into registers | |
| 91 | 91 | // Get the ABIInternal function pointer | |
| 92 | 92 | // without <ABIInternal> by using a closure. | |
| 93 | - | MOVD ·callbackWrap_call(SB), R26 | |
| 94 | - | MOVD (R26), R0 // fn unsafe.Pointer | |
| 95 | - | MOVD R13, R1 // frame (&callbackArgs{...}) | |
| 96 | - | MOVD $0, R3 // ctxt uintptr | |
| 93 | + | MOVD ·callbackWrap_call(SB), R0 | |
| 94 | + | MOVD (R0), R0 // fn unsafe.Pointer | |
| 95 | + | MOVD R13, R1 // frame (&callbackArgs{...}) | |
| 96 | + | MOVD $0, R3 // ctxt uintptr | |
| 97 | 97 | ||
| 98 | 98 | BL crosscall2(SB) | |
| 99 | 99 | ||
| @@ -90,10 +90,10 @@ TEXT callbackasm1(SB), NOSPLIT, $208-0 | |||||
| 90 | // Move parameters into registers | 90 | // Move parameters into registers | ||
| 91 | // Get the ABIInternal function pointer | 91 | // Get the ABIInternal function pointer | ||
| 92 | // without <ABIInternal> by using a closure. | 92 | // without <ABIInternal> by using a closure. | ||
| 93 | - | MOVD ·callbackWrap_call(SB), R26 | 93 | + | MOVD ·callbackWrap_call(SB), R0 |
| 94 | - | MOVD (R26), R0 // fn unsafe.Pointer | 94 | + | MOVD (R0), R0 // fn unsafe.Pointer |
| 95 | - | MOVD R13, R1 // frame (&callbackArgs{...}) | 95 | + | MOVD R13, R1 // frame (&callbackArgs{...}) |
| 96 | - | MOVD $0, R3 // ctxt uintptr | 96 | + | MOVD $0, R3 // ctxt uintptr |
| 97 | 97 | ||||
| 98 | BL crosscall2(SB) | 98 | BL crosscall2(SB) | ||
| 99 | 99 | ||||