Skip to content

Commit

Permalink
runtime: use internal/cpu.X86.HasAVX2 instead of support_avx2
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
tklauser committed Apr 15, 2018
1 parent 284ba47 commit d071209
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 30 deletions.
10 changes: 1 addition & 9 deletions src/runtime/asm_386.s
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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
Expand Down
10 changes: 1 addition & 9 deletions src/runtime/asm_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
10 changes: 1 addition & 9 deletions src/runtime/asm_amd64p32.s
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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:

Expand Down
10 changes: 9 additions & 1 deletion src/runtime/cpuflags_amd64.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
3 changes: 2 additions & 1 deletion src/runtime/memclr_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

// +build !plan9

#include "go_asm.h"
#include "textflag.h"

// NOTE: Windows externalthreadhandler expects memclr to preserve DX.
Expand Down Expand Up @@ -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.
Expand Down
1 change: 0 additions & 1 deletion src/runtime/runtime2.go
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,6 @@ var (
processorVersionInfo uint32
isIntel bool
lfenceBeforeRdtsc bool
support_avx2 bool
support_erms bool
support_osxsave bool
support_popcnt bool
Expand Down

0 comments on commit d071209

Please sign in to comment.