// +build !appengine // +build gc // +build !noasm #include "textflag.h" #include "funcdata.h" #include "go_asm.h" TEXT ·x86extensions(SB), NOSPLIT, $0 // 1. determine max EAX value XORQ AX, AX CPUID CMPQ AX, $7 JB unsupported // 2. EAX = 7, ECX = 0 --- see Table 3-8 "Information Returned by CPUID Instruction" MOVQ $7, AX MOVQ $0, CX CPUID BTQ $3, BX // bit 3 = BMI1 SETCS AL BTQ $8, BX // bit 8 = BMI2 SETCS AH MOVB AL, bmi1+0(FP) MOVB AH, bmi2+1(FP) RET unsupported: XORQ AX, AX MOVB AL, bmi1+0(FP) MOVB AL, bmi2+1(FP) RET