aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/preempt_386.s
blob: a00ac8f385488fa9f52dbda89087b422bd5de98a (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
51
52
// Code generated by mkpreempt.go; DO NOT EDIT.

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

TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
	PUSHFL
	ADJSP $264
	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)
	FSAVE 28(SP)
	FLDCW runtime·controlWord64(SB)
	CMPB internalcpu·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)
nosse:
	CALL ·asyncPreempt2(SB)
	CMPB internalcpu·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
nosse2:
	FRSTOR 28(SP)
	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 $-264
	POPFL
	RET