cpuinfo_amd64.s raw
1 // +build !appengine
2 // +build gc
3 // +build !noasm
4
5 #include "textflag.h"
6 #include "funcdata.h"
7 #include "go_asm.h"
8
9 TEXT ·x86extensions(SB), NOSPLIT, $0
10 // 1. determine max EAX value
11 XORQ AX, AX
12 CPUID
13
14 CMPQ AX, $7
15 JB unsupported
16
17 // 2. EAX = 7, ECX = 0 --- see Table 3-8 "Information Returned by CPUID Instruction"
18 MOVQ $7, AX
19 MOVQ $0, CX
20 CPUID
21
22 BTQ $3, BX // bit 3 = BMI1
23 SETCS AL
24
25 BTQ $8, BX // bit 8 = BMI2
26 SETCS AH
27
28 MOVB AL, bmi1+0(FP)
29 MOVB AH, bmi2+1(FP)
30 RET
31
32 unsupported:
33 XORQ AX, AX
34 MOVB AL, bmi1+0(FP)
35 MOVB AL, bmi2+1(FP)
36 RET
37