|
@@ -607,9 +607,23 @@ enum {
|
|
ARM_HWCAP_A64_SB = 1 << 29,
|
|
ARM_HWCAP_A64_SB = 1 << 29,
|
|
ARM_HWCAP_A64_PACA = 1 << 30,
|
|
ARM_HWCAP_A64_PACA = 1 << 30,
|
|
ARM_HWCAP_A64_PACG = 1UL << 31,
|
|
ARM_HWCAP_A64_PACG = 1UL << 31,
|
|
|
|
+
|
|
|
|
+ ARM_HWCAP2_A64_DCPODP = 1 << 0,
|
|
|
|
+ ARM_HWCAP2_A64_SVE2 = 1 << 1,
|
|
|
|
+ ARM_HWCAP2_A64_SVEAES = 1 << 2,
|
|
|
|
+ ARM_HWCAP2_A64_SVEPMULL = 1 << 3,
|
|
|
|
+ ARM_HWCAP2_A64_SVEBITPERM = 1 << 4,
|
|
|
|
+ ARM_HWCAP2_A64_SVESHA3 = 1 << 5,
|
|
|
|
+ ARM_HWCAP2_A64_SVESM4 = 1 << 6,
|
|
|
|
+ ARM_HWCAP2_A64_FLAGM2 = 1 << 7,
|
|
|
|
+ ARM_HWCAP2_A64_FRINT = 1 << 8,
|
|
};
|
|
};
|
|
|
|
|
|
-#define ELF_HWCAP get_elf_hwcap()
|
|
|
|
|
|
+#define ELF_HWCAP get_elf_hwcap()
|
|
|
|
+#define ELF_HWCAP2 get_elf_hwcap2()
|
|
|
|
+
|
|
|
|
+#define GET_FEATURE_ID(feat, hwcap) \
|
|
|
|
+ do { if (cpu_isar_feature(feat, cpu)) { hwcaps |= hwcap; } } while (0)
|
|
|
|
|
|
static uint32_t get_elf_hwcap(void)
|
|
static uint32_t get_elf_hwcap(void)
|
|
{
|
|
{
|
|
@@ -621,8 +635,6 @@ static uint32_t get_elf_hwcap(void)
|
|
hwcaps |= ARM_HWCAP_A64_CPUID;
|
|
hwcaps |= ARM_HWCAP_A64_CPUID;
|
|
|
|
|
|
/* probe for the extra features */
|
|
/* probe for the extra features */
|
|
-#define GET_FEATURE_ID(feat, hwcap) \
|
|
|
|
- do { if (cpu_isar_feature(feat, cpu)) { hwcaps |= hwcap; } } while (0)
|
|
|
|
|
|
|
|
GET_FEATURE_ID(aa64_aes, ARM_HWCAP_A64_AES);
|
|
GET_FEATURE_ID(aa64_aes, ARM_HWCAP_A64_AES);
|
|
GET_FEATURE_ID(aa64_pmull, ARM_HWCAP_A64_PMULL);
|
|
GET_FEATURE_ID(aa64_pmull, ARM_HWCAP_A64_PMULL);
|
|
@@ -645,11 +657,22 @@ static uint32_t get_elf_hwcap(void)
|
|
GET_FEATURE_ID(aa64_sb, ARM_HWCAP_A64_SB);
|
|
GET_FEATURE_ID(aa64_sb, ARM_HWCAP_A64_SB);
|
|
GET_FEATURE_ID(aa64_condm_4, ARM_HWCAP_A64_FLAGM);
|
|
GET_FEATURE_ID(aa64_condm_4, ARM_HWCAP_A64_FLAGM);
|
|
|
|
|
|
-#undef GET_FEATURE_ID
|
|
|
|
|
|
+ return hwcaps;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static uint32_t get_elf_hwcap2(void)
|
|
|
|
+{
|
|
|
|
+ ARMCPU *cpu = ARM_CPU(thread_cpu);
|
|
|
|
+ uint32_t hwcaps = 0;
|
|
|
|
+
|
|
|
|
+ GET_FEATURE_ID(aa64_condm_5, ARM_HWCAP2_A64_FLAGM2);
|
|
|
|
+ GET_FEATURE_ID(aa64_frint, ARM_HWCAP2_A64_FRINT);
|
|
|
|
|
|
return hwcaps;
|
|
return hwcaps;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#undef GET_FEATURE_ID
|
|
|
|
+
|
|
#endif /* not TARGET_AARCH64 */
|
|
#endif /* not TARGET_AARCH64 */
|
|
#endif /* TARGET_ARM */
|
|
#endif /* TARGET_ARM */
|
|
|
|
|