diff options
Diffstat (limited to 'src/pkg')
| -rw-r--r-- | src/pkg/runtime/asm_386.s | 13 | ||||
| -rw-r--r-- | src/pkg/runtime/asm_amd64.s | 13 | ||||
| -rw-r--r-- | src/pkg/runtime/asm_arm.s | 15 |
3 files changed, 25 insertions, 16 deletions
diff --git a/src/pkg/runtime/asm_386.s b/src/pkg/runtime/asm_386.s index 2477726f51..aafe960ce3 100644 --- a/src/pkg/runtime/asm_386.s +++ b/src/pkg/runtime/asm_386.s @@ -680,17 +680,21 @@ TEXT gosave<>(SB),NOSPLIT,$0 // Call fn(arg) on the scheduler stack, // aligned appropriately for the gcc ABI. // See cgocall.c for more details. -TEXT runtime·asmcgocall(SB),NOSPLIT,$12-8 +TEXT runtime·asmcgocall(SB),NOSPLIT,$0-8 MOVL fn+0(FP), AX MOVL arg+4(FP), BX - MOVL AX, 0(SP) - MOVL BX, 4(SP) - CALL runtime·asmcgocall_errno(SB) + CALL asmcgocall<>(SB) RET TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-12 MOVL fn+0(FP), AX MOVL arg+4(FP), BX + CALL asmcgocall<>(SB) + MOVL AX, ret+8(FP) + RET + +TEXT asmcgocall<>(SB),NOSPLIT,$0-12 + // fn in AX, arg in BX MOVL SP, DX // Figure out if we need to switch to m->g0 stack. @@ -720,7 +724,6 @@ TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-12 MOVL 8(SP), DI MOVL DI, g(CX) MOVL 4(SP), SP - MOVL AX, ret+8(FP) RET // cgocallback(void (*fn)(void*), void *frame, uintptr framesize) diff --git a/src/pkg/runtime/asm_amd64.s b/src/pkg/runtime/asm_amd64.s index d7e30de7b4..5840b56c81 100644 --- a/src/pkg/runtime/asm_amd64.s +++ b/src/pkg/runtime/asm_amd64.s @@ -764,17 +764,21 @@ TEXT gosave<>(SB),NOSPLIT,$0 // Call fn(arg) on the scheduler stack, // aligned appropriately for the gcc ABI. // See cgocall.c for more details. -TEXT runtime·asmcgocall(SB),NOSPLIT,$24-16 +TEXT runtime·asmcgocall(SB),NOSPLIT,$0-16 MOVQ fn+0(FP), AX MOVQ arg+8(FP), BX - MOVQ AX, 0(SP) - MOVQ BX, 8(SP) - CALL runtime·asmcgocall_errno(SB) + CALL asmcgocall<>(SB) RET TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-20 MOVQ fn+0(FP), AX MOVQ arg+8(FP), BX + CALL asmcgocall<>(SB) + MOVL AX, ret+16(FP) + RET + +// asmcgocall common code. fn in AX, arg in BX. returns errno in AX. +TEXT asmcgocall<>(SB),NOSPLIT,$0-0 MOVQ SP, DX // Figure out if we need to switch to m->g0 stack. @@ -813,7 +817,6 @@ nosave: MOVQ 48(SP), DI MOVQ DI, g(CX) MOVQ 40(SP), SP - MOVL AX, ret+16(FP) RET // cgocallback(void (*fn)(void*), void *frame, uintptr framesize) diff --git a/src/pkg/runtime/asm_arm.s b/src/pkg/runtime/asm_arm.s index 26b58cfb17..49a863258c 100644 --- a/src/pkg/runtime/asm_arm.s +++ b/src/pkg/runtime/asm_arm.s @@ -493,17 +493,21 @@ TEXT gosave<>(SB),NOSPLIT,$0 // Call fn(arg) on the scheduler stack, // aligned appropriately for the gcc ABI. // See cgocall.c for more details. -TEXT runtime·asmcgocall(SB),NOSPLIT,$12-8 +TEXT runtime·asmcgocall(SB),NOSPLIT,$0-8 MOVW fn+0(FP), R1 - MOVW arg+4(FP), R2 - MOVW R1, 0(R13) - MOVW R2, 4(R13) - BL runtime·asmcgocall_errno(SB) + MOVW arg+4(FP), R0 + BL asmcgocall<>(SB) RET TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-12 MOVW fn+0(FP), R1 MOVW arg+4(FP), R0 + BL asmcgocall<>(SB) + MOVW R0, ret+8(FP) + RET + +TEXT asmcgocall<>(SB),NOSPLIT,$0-0 + // fn in R1, arg in R0. MOVW R13, R2 MOVW g, R5 @@ -529,7 +533,6 @@ TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-12 // Restore registers, g, stack pointer. MOVW 20(R13), g MOVW 16(R13), R13 - MOVW R0, ret+8(FP) RET // cgocallback(void (*fn)(void*), void *frame, uintptr framesize) |
