aarch64: Allow testing for the presence of FEAT_AFP
Allows querying for the existence of FEAT_AFP (alternate floating-point
behavior).
While we're in the same area, we can also fill in the remaining defined
bits.
diff --git a/src/aarch64/cpu-aarch64.cc b/src/aarch64/cpu-aarch64.cc
index 0438d08..02ee2b9 100644
--- a/src/aarch64/cpu-aarch64.cc
+++ b/src/aarch64/cpu-aarch64.cc
@@ -79,6 +79,7 @@
const IDRegister::Field AA64ISAR1::kI8MM(52);
const IDRegister::Field AA64MMFR1::kLO(16);
+const IDRegister::Field AA64MMFR1::kAFP(44);
const IDRegister::Field AA64MMFR2::kAT(32);
@@ -176,6 +177,7 @@
CPUFeatures AA64MMFR1::GetCPUFeatures() const {
CPUFeatures f;
if (Get(kLO) >= 1) f.Combine(CPUFeatures::kLORegions);
+ if (Get(kAFP) >= 1) f.Combine(CPUFeatures::kAFP);
return f;
}
@@ -291,7 +293,11 @@
CPUFeatures::kDGH,
// Bits 48+
CPUFeatures::kRNG,
- CPUFeatures::kBTI};
+ CPUFeatures::kBTI,
+ CPUFeatures::kNone, // "MTE"
+ CPUFeatures::kNone, // "ECV"
+ CPUFeatures::kAFP,
+ CPUFeatures::kNone}; // "RPRES"
uint64_t hwcap_low32 = getauxval(AT_HWCAP);
uint64_t hwcap_high32 = getauxval(AT_HWCAP2);
diff --git a/src/aarch64/cpu-aarch64.h b/src/aarch64/cpu-aarch64.h
index 675ff2f..7ff136b 100644
--- a/src/aarch64/cpu-aarch64.h
+++ b/src/aarch64/cpu-aarch64.h
@@ -168,6 +168,7 @@
private:
static const Field kLO;
+ static const Field kAFP;
};
class AA64MMFR2 : public IDRegister {
diff --git a/src/cpu-features.h b/src/cpu-features.h
index b947466..2241693 100644
--- a/src/cpu-features.h
+++ b/src/cpu-features.h
@@ -177,7 +177,9 @@
V(kSVESHA3, "SVE SHA3", "svesha3") \
V(kSVEBitPerm, "SVE BitPerm", "svebitperm") \
V(kSVEAES, "SVE AES", "sveaes") \
- V(kSVEPmull128, "SVE Pmull128", "svepmull")
+ V(kSVEPmull128, "SVE Pmull128", "svepmull") \
+ /* Alternate floating-point behavior */ \
+ V(kAFP, "AFP", "afp")
// clang-format on