]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use internal/cpu.X86.HasAVX2 instead of support_avx2
authorTobias Klauser <tklauser@distanz.ch>
Thu, 12 Apr 2018 08:27:42 +0000 (10:27 +0200)
committerTobias Klauser <tobias.klauser@gmail.com>
Sun, 15 Apr 2018 20:33:59 +0000 (20:33 +0000)
After CL 104636 cpu.X86.HasAVX is set early enough that it can be used
in runtime·memclrNoHeapPointers. Add an offset to use in assembly and
replace the only occurence of support_avx2.

Change-Id: Icada62efeb3e24d71251d55623a8a8602364c9a8
Reviewed-on: https://go-review.googlesource.com/106595
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ilya Tocar <ilya.tocar@intel.com>
src/runtime/asm_386.s
src/runtime/asm_amd64.s
src/runtime/asm_amd64p32.s
src/runtime/cpuflags_amd64.go
src/runtime/memclr_amd64.s
src/runtime/runtime2.go

index e68f727076bb5d2a6d581604e685d6e8a4b92865..28d045e416c3db628c2f4657fbfb357256bbd64e 100644 (file)
@@ -184,11 +184,6 @@ eax7:
        MOVL    $0, CX
        CPUID
 
-       // If OS support for XMM and YMM is not present
-       // support_avx2 will be set back to false later.
-       TESTL   $(1<<5), BX
-       SETNE   runtime·support_avx2(SB)
-
        TESTL   $(1<<9), BX // ERMS
        SETNE   runtime·support_erms(SB)
 
@@ -197,16 +192,13 @@ osavx:
        // for XMM and YMM OS support.
 #ifndef GOOS_nacl
        CMPB    runtime·support_osxsave(SB), $1
-       JNE     noavx
+       JNE     nocpuinfo
        MOVL    $0, CX
        // For XGETBV, OSXSAVE bit is required and sufficient
        XGETBV
        ANDL    $6, AX
        CMPL    AX, $6 // Check for OS support of XMM and YMM registers.
-       JE nocpuinfo
 #endif
-noavx:
-       MOVB $0, runtime·support_avx2(SB)
 
 nocpuinfo:
        // if there is an _cgo_init, call it to let it
index 23b25bb9a4a0af210a7cba6a1e79ce53c04a0bcc..bfec6ef4108383f818aad1c49912c00b56798d96 100644 (file)
@@ -147,25 +147,17 @@ eax7:
        MOVL    $0, CX
        CPUID
 
-       // If OS support for XMM and YMM is not present
-       // support_avx2 will be set back to false later.
-       TESTL   $(1<<5), BX
-       SETNE   runtime·support_avx2(SB)
-
        TESTL   $(1<<9), BX // ERMS
        SETNE   runtime·support_erms(SB)
 
 osavx:
        CMPB    runtime·support_osxsave(SB), $1
-       JNE     noavx
+       JNE     nocpuinfo
        MOVL    $0, CX
        // For XGETBV, OSXSAVE bit is required and sufficient
        XGETBV
        ANDL    $6, AX
        CMPL    AX, $6 // Check for OS support of XMM and YMM registers.
-       JE nocpuinfo
-noavx:
-       MOVB $0, runtime·support_avx2(SB)
 
 nocpuinfo:
        // if there is an _cgo_init, call it.
index 63bf2b07a0c38cc372e9729b4f60c73299bf676d..9c0d788ea50de2e40edb68cf0927a4da38831035 100644 (file)
@@ -67,11 +67,6 @@ eax7:
        MOVL    $0, CX
        CPUID
 
-       // If OS support for XMM and YMM is not present
-       // support_avx2 will be set back to false later.
-       TESTL   $(1<<5), BX
-       SETNE   runtime·support_avx2(SB)
-
        TESTL   $(1<<9), BX // ERMS
        SETNE   runtime·support_erms(SB)
 
@@ -80,16 +75,13 @@ osavx:
        // for XMM and YMM OS support.
 #ifndef GOOS_nacl
        CMPB    runtime·support_osxsave(SB), $1
-       JNE     noavx
+       JNE     nocpuinfo
        MOVL    $0, CX
        // For XGETBV, OSXSAVE bit is required and sufficient
        XGETBV
        ANDL    $6, AX
        CMPL    AX, $6 // Check for OS support of XMM and YMM registers.
-       JE nocpuinfo
 #endif
-noavx:
-       MOVB $0, runtime·support_avx2(SB)
 
 nocpuinfo:
 
index 9d2d4fcbe2c835f0542ae715de1302c08a02bffd..10ab5f5b00561403ea0df2b027ad30cc26c18feb 100644 (file)
@@ -4,7 +4,15 @@
 
 package runtime
 
-import "internal/cpu"
+import (
+       "internal/cpu"
+       "unsafe"
+)
+
+// Offsets into internal/cpu records for use in assembly.
+const (
+       offsetX86HasAVX2 = unsafe.Offsetof(cpu.X86.HasAVX2)
+)
 
 var useAVXmemmove bool
 
index 244f5b4d8c109248a612cbd715fdb0ce5e8c35b0..d0fd50d4f1dc4a86a054ec8c5b88abadb63580d1 100644 (file)
@@ -4,6 +4,7 @@
 
 // +build !plan9
 
+#include "go_asm.h"
 #include "textflag.h"
 
 // NOTE: Windows externalthreadhandler expects memclr to preserve DX.
@@ -36,7 +37,7 @@ tail:
        JBE     _65through128
        CMPQ    BX, $256
        JBE     _129through256
-       CMPB    runtime·support_avx2(SB), $1
+       CMPB    internal∕cpu·X86+const_offsetX86HasAVX2(SB), $1
        JE loop_preheader_avx2
        // TODO: use branch table and BSR to make this just a single dispatch
        // TODO: for really big clears, use MOVNTDQ, even without AVX2.
index 0d253233d2fe9c12001b26c21960faea123dbb74..51fceb8d8fc73acd25f974c1be41ef060dbc3764 100644 (file)
@@ -779,7 +779,6 @@ var (
        processorVersionInfo uint32
        isIntel              bool
        lfenceBeforeRdtsc    bool
-       support_avx2         bool
        support_erms         bool
        support_osxsave      bool
        support_popcnt       bool