|  | // Copyright 2017 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // +build 386 amd64 amd64p32 | 
|  |  | 
|  | #include "textflag.h" | 
|  |  | 
|  | // func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) | 
|  | TEXT ·cpuid(SB), NOSPLIT, $0-24 | 
|  | MOVL eaxArg+0(FP), AX | 
|  | MOVL ecxArg+4(FP), CX | 
|  | CPUID | 
|  | MOVL AX, eax+8(FP) | 
|  | MOVL BX, ebx+12(FP) | 
|  | MOVL CX, ecx+16(FP) | 
|  | MOVL DX, edx+20(FP) | 
|  | RET | 
|  |  | 
|  | // func xgetbv() (eax, edx uint32) | 
|  | TEXT ·xgetbv(SB),NOSPLIT,$0-8 | 
|  | #ifdef GOOS_nacl | 
|  | // nacl does not support XGETBV. | 
|  | MOVL $0, eax+0(FP) | 
|  | MOVL $0, edx+4(FP) | 
|  | #else | 
|  | MOVL $0, CX | 
|  | XGETBV | 
|  | MOVL AX, eax+0(FP) | 
|  | MOVL DX, edx+4(FP) | 
|  | #endif | 
|  | RET |