...
1// +build !appengine
2// +build gc
3// +build !noasm
4
5#include "textflag.h"
6#include "funcdata.h"
7#include "go_asm.h"
8
9TEXT ·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
32unsupported:
33 XORQ AX, AX
34 MOVB AL, bmi1+0(FP)
35 MOVB AL, bmi2+1(FP)
36 RET
View as plain text