aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkhil Indurti <aindurti@gmail.com>2018-07-26 23:46:38 -0400
committerMartin Möhrmann <moehrmann@google.com>2018-10-15 10:57:04 +0000
commitbb3bf5bb538df67d3939974854c99608be21e135 (patch)
tree31608959e10ea674d603faa315e7b94dcfb9e193 /src
parentd6e80069f3007d5bc03750f0a83e213bbac8c86e (diff)
downloadgo-bb3bf5bb538df67d3939974854c99608be21e135.tar.xz
internal/cpu: expose ARM feature flags for FMA
This change exposes feature flags needed to implement an FMA intrinsic on ARM CPUs via auxv's HWCAP bits. Specifically, it exposes HasVFPv4 to detect if an ARM processor has the fourth version of the vector floating point unit. The relevant instruction for this CL is VFMA, emitted in Go as FMULAD. Updates #26630. Change-Id: Ibbc04fb24c2b4d994f93762360f1a37bc6d83ff7 Reviewed-on: https://go-review.googlesource.com/c/126315 Run-TryBot: Martin Möhrmann <moehrmann@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Martin Möhrmann <moehrmann@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/internal/cpu/cpu.go1
-rw-r--r--src/internal/cpu/cpu_arm.go3
2 files changed, 4 insertions, 0 deletions
diff --git a/src/internal/cpu/cpu.go b/src/internal/cpu/cpu.go
index fdda880af4..1f3411cc72 100644
--- a/src/internal/cpu/cpu.go
+++ b/src/internal/cpu/cpu.go
@@ -76,6 +76,7 @@ var ARM arm
// The struct is padded to avoid false sharing.
type arm struct {
_ CacheLinePad
+ HasVFPv4 bool
HasIDIVA bool
_ CacheLinePad
}
diff --git a/src/internal/cpu/cpu_arm.go b/src/internal/cpu/cpu_arm.go
index 6a5b30580c..1c3e529190 100644
--- a/src/internal/cpu/cpu_arm.go
+++ b/src/internal/cpu/cpu_arm.go
@@ -15,15 +15,18 @@ var HWCap2 uint
// HWCAP/HWCAP2 bits. These are exposed by Linux and FreeBSD.
const (
+ hwcap_VFPv4 = 1 << 16
hwcap_IDIVA = 1 << 17
)
func doinit() {
options = []option{
+ {"vfpv4", &ARM.HasVFPv4},
{"idiva", &ARM.HasIDIVA},
}
// HWCAP feature bits
+ ARM.HasVFPv4 = isSet(HWCap, hwcap_VFPv4)
ARM.HasIDIVA = isSet(HWCap, hwcap_IDIVA)
}