aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/preempt_386.s
diff options
context:
space:
mode:
authorKatie Hockman <katie@golang.org>2020-12-14 10:03:05 -0500
committerKatie Hockman <katie@golang.org>2020-12-14 10:06:13 -0500
commit0345ede87ee12698988973884cfc0fd3d499dffd (patch)
tree7123cff141ee5661208d2f5f437b8f5252ac7f6a /src/runtime/preempt_386.s
parent4651d6b267818b0e0d128a5443289717c4bb8cbc (diff)
parent0a02371b0576964e81c3b40d328db9a3ef3b031b (diff)
downloadgo-0345ede87ee12698988973884cfc0fd3d499dffd.tar.xz
[dev.fuzz] all: merge master into dev.fuzz
Change-Id: I5d8c8329ccc9d747bd81ade6b1cb7cb8ae2e94b2
Diffstat (limited to 'src/runtime/preempt_386.s')
-rw-r--r--src/runtime/preempt_386.s42
1 files changed, 20 insertions, 22 deletions
diff --git a/src/runtime/preempt_386.s b/src/runtime/preempt_386.s
index a00ac8f385..a803b24dc6 100644
--- a/src/runtime/preempt_386.s
+++ b/src/runtime/preempt_386.s
@@ -3,9 +3,10 @@
#include "go_asm.h"
#include "textflag.h"
-TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
+// Note: asyncPreempt doesn't use the internal ABI, but we must be able to inject calls to it from the signal handler, so Go code has to see the PC of this function literally.
+TEXT ·asyncPreempt<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-0
PUSHFL
- ADJSP $264
+ ADJSP $156
NOP SP
MOVL AX, 0(SP)
MOVL CX, 4(SP)
@@ -14,32 +15,29 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
MOVL BP, 16(SP)
MOVL SI, 20(SP)
MOVL DI, 24(SP)
- FSAVE 28(SP)
- FLDCW runtime·controlWord64(SB)
CMPB internal∕cpu·X86+const_offsetX86HasSSE2(SB), $1
JNE nosse
- MOVUPS X0, 136(SP)
- MOVUPS X1, 152(SP)
- MOVUPS X2, 168(SP)
- MOVUPS X3, 184(SP)
- MOVUPS X4, 200(SP)
- MOVUPS X5, 216(SP)
- MOVUPS X6, 232(SP)
- MOVUPS X7, 248(SP)
+ MOVUPS X0, 28(SP)
+ MOVUPS X1, 44(SP)
+ MOVUPS X2, 60(SP)
+ MOVUPS X3, 76(SP)
+ MOVUPS X4, 92(SP)
+ MOVUPS X5, 108(SP)
+ MOVUPS X6, 124(SP)
+ MOVUPS X7, 140(SP)
nosse:
CALL ·asyncPreempt2(SB)
CMPB internal∕cpu·X86+const_offsetX86HasSSE2(SB), $1
JNE nosse2
- MOVUPS 248(SP), X7
- MOVUPS 232(SP), X6
- MOVUPS 216(SP), X5
- MOVUPS 200(SP), X4
- MOVUPS 184(SP), X3
- MOVUPS 168(SP), X2
- MOVUPS 152(SP), X1
- MOVUPS 136(SP), X0
+ MOVUPS 140(SP), X7
+ MOVUPS 124(SP), X6
+ MOVUPS 108(SP), X5
+ MOVUPS 92(SP), X4
+ MOVUPS 76(SP), X3
+ MOVUPS 60(SP), X2
+ MOVUPS 44(SP), X1
+ MOVUPS 28(SP), X0
nosse2:
- FRSTOR 28(SP)
MOVL 24(SP), DI
MOVL 20(SP), SI
MOVL 16(SP), BP
@@ -47,6 +45,6 @@ nosse2:
MOVL 8(SP), DX
MOVL 4(SP), CX
MOVL 0(SP), AX
- ADJSP $-264
+ ADJSP $-156
POPFL
RET