summaryrefslogtreecommitdiffstats
path: root/src/runtime/preempt_386.s
blob: a803b24dc6f0b06bec126b4dc3f1904d94a28f07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Code generated by mkpreempt.go; DO NOT EDIT.

#include "go_asm.h"
#include "textflag.h"

// 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 $156
	NOP SP
	MOVL AX, 0(SP)
	MOVL CX, 4(SP)
	MOVL DX, 8(SP)
	MOVL BX, 12(SP)
	MOVL BP, 16(SP)
	MOVL SI, 20(SP)
	MOVL DI, 24(SP)
	CMPB internalcpu·X86+const_offsetX86HasSSE2(SB), $1
	JNE nosse
	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 internalcpu·X86+const_offsetX86HasSSE2(SB), $1
	JNE nosse2
	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:
	MOVL 24(SP), DI
	MOVL 20(SP), SI
	MOVL 16(SP), BP
	MOVL 12(SP), BX
	MOVL 8(SP), DX
	MOVL 4(SP), CX
	MOVL 0(SP), AX
	ADJSP $-156
	POPFL
	RET