diff options
| author | Rutger Broekhoff | 2023-12-29 21:31:53 +0100 |
|---|---|---|
| committer | Rutger Broekhoff | 2023-12-29 21:31:53 +0100 |
| commit | 404aeae4545d2426c089a5f8d5e82dae56f5212b (patch) | |
| tree | 2d84e00af272b39fc04f3795ae06bc48970e57b5 /vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s | |
| parent | 209d8b0187ed025dec9ac149ebcced3462877bff (diff) | |
| download | gitolfs3-404aeae4545d2426c089a5f8d5e82dae56f5212b.tar.gz gitolfs3-404aeae4545d2426c089a5f8d5e82dae56f5212b.zip | |
Make Nix builds work
Diffstat (limited to 'vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s')
| -rw-r--r-- | vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s b/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s new file mode 100644 index 0000000..bc11f89 --- /dev/null +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid_amd64.s | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. | ||
| 2 | |||
| 3 | //+build amd64,!gccgo,!noasm,!appengine | ||
| 4 | |||
| 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 | |||
| 16 | // func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32) | ||
| 17 | TEXT ·asmCpuidex(SB), 7, $0 | ||
| 18 | MOVL op+0(FP), AX | ||
| 19 | MOVL op2+4(FP), CX | ||
| 20 | CPUID | ||
| 21 | MOVL AX, eax+8(FP) | ||
| 22 | MOVL BX, ebx+12(FP) | ||
| 23 | MOVL CX, ecx+16(FP) | ||
| 24 | MOVL DX, edx+20(FP) | ||
| 25 | RET | ||
| 26 | |||
| 27 | // func asmXgetbv(index uint32) (eax, edx uint32) | ||
| 28 | TEXT ·asmXgetbv(SB), 7, $0 | ||
| 29 | MOVL index+0(FP), CX | ||
| 30 | BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV | ||
| 31 | MOVL AX, eax+8(FP) | ||
| 32 | MOVL DX, edx+12(FP) | ||
| 33 | RET | ||
| 34 | |||
| 35 | // func asmRdtscpAsm() (eax, ebx, ecx, edx uint32) | ||
| 36 | TEXT ·asmRdtscpAsm(SB), 7, $0 | ||
| 37 | BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP | ||
| 38 | MOVL AX, eax+0(FP) | ||
| 39 | MOVL BX, ebx+4(FP) | ||
| 40 | MOVL CX, ecx+8(FP) | ||
| 41 | MOVL DX, edx+12(FP) | ||
| 42 | RET | ||
| 43 | |||
| 44 | // From https://go-review.googlesource.com/c/sys/+/285572/ | ||
| 45 | // func asmDarwinHasAVX512() bool | ||
| 46 | TEXT ·asmDarwinHasAVX512(SB), 7, $0-1 | ||
| 47 | MOVB $0, ret+0(FP) // default to false | ||
| 48 | |||
| 49 | #ifdef GOOS_darwin // return if not darwin | ||
| 50 | #ifdef GOARCH_amd64 // return if not amd64 | ||
| 51 | // These values from: | ||
| 52 | // https://github.com/apple/darwin-xnu/blob/xnu-4570.1.46/osfmk/i386/cpu_capabilities.h | ||
| 53 | #define commpage64_base_address 0x00007fffffe00000 | ||
| 54 | #define commpage64_cpu_capabilities64 (commpage64_base_address+0x010) | ||
| 55 | #define commpage64_version (commpage64_base_address+0x01E) | ||
| 56 | #define hasAVX512F 0x0000004000000000 | ||
| 57 | MOVQ $commpage64_version, BX | ||
| 58 | MOVW (BX), AX | ||
| 59 | CMPW AX, $13 // versions < 13 do not support AVX512 | ||
| 60 | JL no_avx512 | ||
| 61 | MOVQ $commpage64_cpu_capabilities64, BX | ||
| 62 | MOVQ (BX), AX | ||
| 63 | MOVQ $hasAVX512F, CX | ||
| 64 | ANDQ CX, AX | ||
| 65 | JZ no_avx512 | ||
| 66 | MOVB $1, ret+0(FP) | ||
| 67 | |||
| 68 | no_avx512: | ||
| 69 | #endif | ||
| 70 | #endif | ||
| 71 | RET | ||
| 72 | |||