Text file
src/runtime/preempt_amd64.s
1 // Code generated by mkpreempt.go; DO NOT EDIT.
2
3 #include "go_asm.h"
4 #include "go_tls.h"
5 #include "asm_amd64.h"
6 #include "textflag.h"
7
8 TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
9 PUSHQ BP
10 MOVQ SP, BP
11 // Save flags before clobbering them
12 PUSHFQ
13 // obj doesn't understand ADD/SUB on SP, but does understand ADJSP
14 ADJSP $112
15 // But vet doesn't know ADJSP, so suppress vet stack checking
16 NOP SP
17 // Save GPs
18 MOVQ AX, 0(SP)
19 MOVQ CX, 8(SP)
20 MOVQ DX, 16(SP)
21 MOVQ BX, 24(SP)
22 MOVQ SI, 32(SP)
23 MOVQ DI, 40(SP)
24 MOVQ R8, 48(SP)
25 MOVQ R9, 56(SP)
26 MOVQ R10, 64(SP)
27 MOVQ R11, 72(SP)
28 MOVQ R12, 80(SP)
29 MOVQ R13, 88(SP)
30 MOVQ R14, 96(SP)
31 MOVQ R15, 104(SP)
32 // Save extended register state to p.xRegs.scratch
33 // Don't make assumptions about ABI register state. See mkpreempt.go
34 get_tls(CX)
35 MOVQ g(CX), R14
36 MOVQ g_m(R14), AX
37 MOVQ m_p(AX), AX
38 LEAQ (p_xRegs+xRegPerP_scratch)(AX), AX
39 #ifdef GOEXPERIMENT_simd
40 CMPB internal∕cpu·X86+const_offsetX86HasAVX512(SB), $1
41 JE saveAVX512
42 CMPB internal∕cpu·X86+const_offsetX86HasAVX2(SB), $1
43 JE saveAVX2
44 #endif
45 saveSSE:
46 MOVUPS X0, 0(AX)
47 MOVUPS X1, 64(AX)
48 MOVUPS X2, 128(AX)
49 MOVUPS X3, 192(AX)
50 MOVUPS X4, 256(AX)
51 MOVUPS X5, 320(AX)
52 MOVUPS X6, 384(AX)
53 MOVUPS X7, 448(AX)
54 MOVUPS X8, 512(AX)
55 MOVUPS X9, 576(AX)
56 MOVUPS X10, 640(AX)
57 MOVUPS X11, 704(AX)
58 MOVUPS X12, 768(AX)
59 MOVUPS X13, 832(AX)
60 MOVUPS X14, 896(AX)
61 MOVUPS X15, 960(AX)
62 JMP preempt
63 saveAVX2:
64 VMOVDQU Y0, 0(AX)
65 VMOVDQU Y1, 64(AX)
66 VMOVDQU Y2, 128(AX)
67 VMOVDQU Y3, 192(AX)
68 VMOVDQU Y4, 256(AX)
69 VMOVDQU Y5, 320(AX)
70 VMOVDQU Y6, 384(AX)
71 VMOVDQU Y7, 448(AX)
72 VMOVDQU Y8, 512(AX)
73 VMOVDQU Y9, 576(AX)
74 VMOVDQU Y10, 640(AX)
75 VMOVDQU Y11, 704(AX)
76 VMOVDQU Y12, 768(AX)
77 VMOVDQU Y13, 832(AX)
78 VMOVDQU Y14, 896(AX)
79 VMOVDQU Y15, 960(AX)
80 JMP preempt
81 saveAVX512:
82 VMOVDQU64 Z0, 0(AX)
83 VMOVDQU64 Z1, 64(AX)
84 VMOVDQU64 Z2, 128(AX)
85 VMOVDQU64 Z3, 192(AX)
86 VMOVDQU64 Z4, 256(AX)
87 VMOVDQU64 Z5, 320(AX)
88 VMOVDQU64 Z6, 384(AX)
89 VMOVDQU64 Z7, 448(AX)
90 VMOVDQU64 Z8, 512(AX)
91 VMOVDQU64 Z9, 576(AX)
92 VMOVDQU64 Z10, 640(AX)
93 VMOVDQU64 Z11, 704(AX)
94 VMOVDQU64 Z12, 768(AX)
95 VMOVDQU64 Z13, 832(AX)
96 VMOVDQU64 Z14, 896(AX)
97 VMOVDQU64 Z15, 960(AX)
98 KMOVQ K0, 1024(AX)
99 KMOVQ K1, 1032(AX)
100 KMOVQ K2, 1040(AX)
101 KMOVQ K3, 1048(AX)
102 KMOVQ K4, 1056(AX)
103 KMOVQ K5, 1064(AX)
104 KMOVQ K6, 1072(AX)
105 KMOVQ K7, 1080(AX)
106 JMP preempt
107 preempt:
108 CALL ·asyncPreempt2(SB)
109 // Restore non-GPs from *p.xRegs.cache
110 MOVQ g_m(R14), AX
111 MOVQ m_p(AX), AX
112 MOVQ (p_xRegs+xRegPerP_cache)(AX), AX
113 #ifdef GOEXPERIMENT_simd
114 CMPB internal∕cpu·X86+const_offsetX86HasAVX512(SB), $1
115 JE restoreAVX512
116 CMPB internal∕cpu·X86+const_offsetX86HasAVX2(SB), $1
117 JE restoreAVX2
118 #endif
119 restoreSSE:
120 MOVUPS 960(AX), X15
121 MOVUPS 896(AX), X14
122 MOVUPS 832(AX), X13
123 MOVUPS 768(AX), X12
124 MOVUPS 704(AX), X11
125 MOVUPS 640(AX), X10
126 MOVUPS 576(AX), X9
127 MOVUPS 512(AX), X8
128 MOVUPS 448(AX), X7
129 MOVUPS 384(AX), X6
130 MOVUPS 320(AX), X5
131 MOVUPS 256(AX), X4
132 MOVUPS 192(AX), X3
133 MOVUPS 128(AX), X2
134 MOVUPS 64(AX), X1
135 MOVUPS 0(AX), X0
136 JMP restoreGPs
137 restoreAVX2:
138 VMOVDQU 960(AX), Y15
139 VMOVDQU 896(AX), Y14
140 VMOVDQU 832(AX), Y13
141 VMOVDQU 768(AX), Y12
142 VMOVDQU 704(AX), Y11
143 VMOVDQU 640(AX), Y10
144 VMOVDQU 576(AX), Y9
145 VMOVDQU 512(AX), Y8
146 VMOVDQU 448(AX), Y7
147 VMOVDQU 384(AX), Y6
148 VMOVDQU 320(AX), Y5
149 VMOVDQU 256(AX), Y4
150 VMOVDQU 192(AX), Y3
151 VMOVDQU 128(AX), Y2
152 VMOVDQU 64(AX), Y1
153 VMOVDQU 0(AX), Y0
154 JMP restoreGPs
155 restoreAVX512:
156 KMOVQ 1080(AX), K7
157 KMOVQ 1072(AX), K6
158 KMOVQ 1064(AX), K5
159 KMOVQ 1056(AX), K4
160 KMOVQ 1048(AX), K3
161 KMOVQ 1040(AX), K2
162 KMOVQ 1032(AX), K1
163 KMOVQ 1024(AX), K0
164 VMOVDQU64 960(AX), Z15
165 VMOVDQU64 896(AX), Z14
166 VMOVDQU64 832(AX), Z13
167 VMOVDQU64 768(AX), Z12
168 VMOVDQU64 704(AX), Z11
169 VMOVDQU64 640(AX), Z10
170 VMOVDQU64 576(AX), Z9
171 VMOVDQU64 512(AX), Z8
172 VMOVDQU64 448(AX), Z7
173 VMOVDQU64 384(AX), Z6
174 VMOVDQU64 320(AX), Z5
175 VMOVDQU64 256(AX), Z4
176 VMOVDQU64 192(AX), Z3
177 VMOVDQU64 128(AX), Z2
178 VMOVDQU64 64(AX), Z1
179 VMOVDQU64 0(AX), Z0
180 JMP restoreGPs
181 restoreGPs:
182 // Restore GPs
183 MOVQ 104(SP), R15
184 MOVQ 96(SP), R14
185 MOVQ 88(SP), R13
186 MOVQ 80(SP), R12
187 MOVQ 72(SP), R11
188 MOVQ 64(SP), R10
189 MOVQ 56(SP), R9
190 MOVQ 48(SP), R8
191 MOVQ 40(SP), DI
192 MOVQ 32(SP), SI
193 MOVQ 24(SP), BX
194 MOVQ 16(SP), DX
195 MOVQ 8(SP), CX
196 MOVQ 0(SP), AX
197 ADJSP $-112
198 POPFQ
199 POPQ BP
200 RET
201
View as plain text