Commit bb3bf5bb authored by Akhil Indurti's avatar Akhil Indurti Committed by Martin Möhrmann

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: 's avatarMartin Möhrmann <moehrmann@google.com>
parent d6e80069
...@@ -76,6 +76,7 @@ var ARM arm ...@@ -76,6 +76,7 @@ var ARM arm
// The struct is padded to avoid false sharing. // The struct is padded to avoid false sharing.
type arm struct { type arm struct {
_ CacheLinePad _ CacheLinePad
HasVFPv4 bool
HasIDIVA bool HasIDIVA bool
_ CacheLinePad _ CacheLinePad
} }
......
...@@ -15,15 +15,18 @@ var HWCap2 uint ...@@ -15,15 +15,18 @@ var HWCap2 uint
// HWCAP/HWCAP2 bits. These are exposed by Linux and FreeBSD. // HWCAP/HWCAP2 bits. These are exposed by Linux and FreeBSD.
const ( const (
hwcap_VFPv4 = 1 << 16
hwcap_IDIVA = 1 << 17 hwcap_IDIVA = 1 << 17
) )
func doinit() { func doinit() {
options = []option{ options = []option{
{"vfpv4", &ARM.HasVFPv4},
{"idiva", &ARM.HasIDIVA}, {"idiva", &ARM.HasIDIVA},
} }
// HWCAP feature bits // HWCAP feature bits
ARM.HasVFPv4 = isSet(HWCap, hwcap_VFPv4)
ARM.HasIDIVA = isSet(HWCap, hwcap_IDIVA) ARM.HasIDIVA = isSet(HWCap, hwcap_IDIVA)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment