]> Cypherpunks repositories - gostls13.git/commitdiff
internal/cpu: expose ARM feature flags for FMA
authorAkhil Indurti <aindurti@gmail.com>
Fri, 27 Jul 2018 03:46:38 +0000 (23:46 -0400)
committerMartin Möhrmann <moehrmann@google.com>
Mon, 15 Oct 2018 10:57:04 +0000 (10:57 +0000)
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>
src/internal/cpu/cpu.go
src/internal/cpu/cpu_arm.go

index fdda880af4abe1ab85cceb7faf05c8b2d43ed007..1f3411cc7200ddb2d72ca66dfc3bf47a1ccef686 100644 (file)
@@ -76,6 +76,7 @@ var ARM arm
 // The struct is padded to avoid false sharing.
 type arm struct {
        _        CacheLinePad
+       HasVFPv4 bool
        HasIDIVA bool
        _        CacheLinePad
 }
index 6a5b30580c94ec0efdd14caa5793c3e115062ac1..1c3e529190af43c06e694bab0b6e1c2eaff11f8b 100644 (file)
@@ -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)
 }