cpuid_amd64.s 978 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
  2. // +build !appengine
  3. // +build gc
  4. // +build !noasm
  5. // func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32)
  6. TEXT ·asmCpuid(SB), 7, $0
  7. XORQ CX, CX
  8. MOVL op+0(FP), AX
  9. CPUID
  10. MOVL AX, eax+8(FP)
  11. MOVL BX, ebx+12(FP)
  12. MOVL CX, ecx+16(FP)
  13. MOVL DX, edx+20(FP)
  14. RET
  15. // func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32)
  16. TEXT ·asmCpuidex(SB), 7, $0
  17. MOVL op+0(FP), AX
  18. MOVL op2+4(FP), CX
  19. CPUID
  20. MOVL AX, eax+8(FP)
  21. MOVL BX, ebx+12(FP)
  22. MOVL CX, ecx+16(FP)
  23. MOVL DX, edx+20(FP)
  24. RET
  25. // func asmXgetbv(index uint32) (eax, edx uint32)
  26. TEXT ·asmXgetbv(SB), 7, $0
  27. MOVL index+0(FP), CX
  28. BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV
  29. MOVL AX, eax+8(FP)
  30. MOVL DX, edx+12(FP)
  31. RET
  32. // func asmRdtscpAsm() (eax, ebx, ecx, edx uint32)
  33. TEXT ·asmRdtscpAsm(SB), 7, $0
  34. BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP
  35. MOVL AX, eax+0(FP)
  36. MOVL BX, ebx+4(FP)
  37. MOVL CX, ecx+8(FP)
  38. MOVL DX, edx+12(FP)
  39. RET