@@ -79,18 +79,18 @@ DATA _rt0_amd64_lib_argv<>(SB)/8, $0
79
79
GLOBL _rt0_amd64_lib_argv<>(SB),NOPTR, $8
80
80
81
81
#ifdef GOAMD64_v2
82
- DATA bad_proc_msg <>+0x00 (SB)/78 , $"This program can only be run on processors with v2 microarchitecture support.\n"
82
+ DATA bad_cpu_msg <>+0x00 (SB)/84 , $"This program can only be run on AMD64 processors with v2 microarchitecture support.\n"
83
83
#endif
84
84
85
85
#ifdef GOAMD64_v3
86
- DATA bad_proc_msg <>+0x00 (SB)/78 , $"This program can only be run on processors with v3 microarchitecture support.\n"
86
+ DATA bad_cpu_msg <>+0x00 (SB)/84 , $"This program can only be run on AMD64 processors with v3 microarchitecture support.\n"
87
87
#endif
88
88
89
89
#ifdef GOAMD64_v4
90
- DATA bad_proc_msg <>+0x00 (SB)/78 , $"This program can only be run on processors with v4 microarchitecture support.\n"
90
+ DATA bad_cpu_msg <>+0x00 (SB)/84 , $"This program can only be run on AMD64 processors with v4 microarchitecture support.\n"
91
91
#endif
92
92
93
- GLOBL bad_proc_msg <>(SB), RODATA, $78
93
+ GLOBL bad_cpu_msg <>(SB), RODATA, $84
94
94
95
95
// Define a list of AMD64 microarchitecture level features
96
96
// https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels
@@ -107,6 +107,10 @@ GLOBL bad_proc_msg<>(SB), RODATA, $78
107
107
#define V3_EXT_FEATURES_BX (1 << 3 | 1 << 5 | 1 << 8 )
108
108
// XMM YMM
109
109
#define V3_OS_SUPPORT_AX (1 << 1 | 1 << 2 )
110
+
111
+ #define V4_FEATURES_CX V3_FEATURES_CX
112
+
113
+ #define V4_EXT_FEATURES_CX V3_EXT_FEATURES_CX
110
114
// AVX512F AVX512DQ AVX512CD AVX512BW AVX512VL
111
115
#define V4_EXT_FEATURES_BX (V3_EXT_FEATURES_BX | 1 << 16 | 1 << 17 | 1 << 28 | 1 << 30 | 1 << 31 )
112
116
// OPMASK ZMM
@@ -119,17 +123,6 @@ GLOBL bad_proc_msg<>(SB), RODATA, $78
119
123
#endif
120
124
121
125
#ifdef GOAMD64_v3
122
- #define NEED_V3_CHECK
123
- #endif
124
-
125
- // Excluding v4 checks on Darwin for now, see CL 285572.
126
- #ifdef GOAMD64_v4
127
- #ifdef GOOS_darwin
128
- #define NEED_V3_CHECK
129
- #endif
130
- #endif
131
-
132
- #ifdef NEED_V3_CHECK
133
126
#define NEED_MAX_CPUID 0x80000001
134
127
#define NEED_FEATURES_CX V3_FEATURES_CX
135
128
#define NEED_EXT_FEATURES_CX V3_EXT_FEATURES_CX
@@ -138,13 +131,18 @@ GLOBL bad_proc_msg<>(SB), RODATA, $78
138
131
#endif
139
132
140
133
#ifdef GOAMD64_v4
141
- #ifndef GOOS_darwin
142
134
#define NEED_MAX_CPUID 0x80000001
143
- #define NEED_FEATURES_CX V3_FEATURES_CX
144
- #define NEED_EXT_FEATURES_CX V3_EXT_FEATURES_CX
135
+ #define NEED_FEATURES_CX V4_FEATURES_CX
136
+ #define NEED_EXT_FEATURES_CX V4_EXT_FEATURES_CX
145
137
#define NEED_EXT_FEATURES_BX V4_EXT_FEATURES_BX
138
+
139
+ // Downgrading v4 OS checks on Darwin for now, see CL 285572.
140
+ #ifdef GOOS_darwin
141
+ #define NEED_OS_SUPPORT_AX V3_OS_SUPPORT_AX
142
+ #else
146
143
#define NEED_OS_SUPPORT_AX V4_OS_SUPPORT_AX
147
144
#endif
145
+
148
146
#endif
149
147
150
148
#ifdef GOAMD64_v1
@@ -182,18 +180,17 @@ TEXT runtime·rt0_go(SB),NOSPLIT|TOPFRAME,$0
182
180
// find out information about the processor we're on
183
181
MOVL $0 , AX
184
182
CPUID
185
- MOVL AX, SI
186
183
CMPL AX, $0
187
184
#ifdef SKIP_GOAMD64_CHECK
188
- JE nocpuinfo
185
+ JE nocpuinfo
189
186
#else
190
187
JNE has_cpuinfo
191
188
192
- bad_proc : // show that the program requires a certain microarchitecture level.
189
+ bad_cpu : // show that the program requires a certain microarchitecture level.
193
190
MOVQ $2 , 0 (SP)
194
- MOVQ $bad_proc_msg <>(SB), AX
191
+ MOVQ $bad_cpu_msg <>(SB), AX
195
192
MOVQ AX, 8 (SP)
196
- MOVQ $78 , 16 (SP)
193
+ MOVQ $84 , 16 (SP)
197
194
CALL runtime·write(SB)
198
195
MOVQ $1 , 0 (SP)
199
196
CALL runtime·exit(SB)
@@ -218,14 +215,14 @@ notintel:
218
215
#ifdef NEED_FEATURES_CX
219
216
ANDL $NEED_FEATURES_CX, CX
220
217
CMPL CX, $NEED_FEATURES_CX
221
- JNZ bad_proc
218
+ JNE bad_cpu
222
219
#endif
223
220
224
221
#ifdef NEED_MAX_CPUID
225
222
MOVL $0x80000000 , AX
226
223
CPUID
227
224
CMPL AX, $NEED_MAX_CPUID
228
- JL bad_proc
225
+ JL bad_cpu
229
226
#endif
230
227
231
228
#ifdef NEED_EXT_FEATURES_BX
@@ -234,23 +231,23 @@ notintel:
234
231
CPUID
235
232
ANDL $NEED_EXT_FEATURES_BX, BX
236
233
CMPL BX, $NEED_EXT_FEATURES_BX
237
- JNZ bad_proc
234
+ JNE bad_cpu
238
235
#endif
239
236
240
237
#ifdef NEED_EXT_FEATURES_CX
241
238
MOVL $0x80000001 , AX
242
239
CPUID
243
240
ANDL $NEED_EXT_FEATURES_CX, CX
244
241
CMPL CX, $NEED_EXT_FEATURES_CX
245
- JNZ bad_proc
242
+ JNE bad_cpu
246
243
#endif
247
244
248
245
#ifdef NEED_OS_SUPPORT_AX
249
- MOVL $0 , CX
246
+ XORL CX , CX
250
247
XGETBV
251
248
ANDL $NEED_OS_SUPPORT_AX, AX
252
249
CMPL AX, $NEED_OS_SUPPORT_AX
253
- JNZ bad_proc
250
+ JNE bad_cpu
254
251
#endif
255
252
256
253
nocpuinfo:
0 commit comments