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