123456789101112131415161718192021222324252627282930313233343536 |
- // +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
|