arm64: v8.3: Support for complex number instructions
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Tue, 14 Mar 2017 18:13:26 +0000 (18:13 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 20 Mar 2017 16:30:08 +0000 (16:30 +0000)
ARM v8.3 adds support for new instructions to aid floating-point
multiplication and addition of complex numbers. Expose the support
via HWCAP and MRS emulation

Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Documentation/arm64/cpu-feature-registers.txt
arch/arm64/include/asm/sysreg.h
arch/arm64/include/uapi/asm/hwcap.h
arch/arm64/kernel/cpufeature.c
arch/arm64/kernel/cpuinfo.c

index 5b279dc..0ce0a40 100644 (file)
@@ -174,6 +174,8 @@ infrastructure:
      x--------------------------------------------------x
      | Name                         |  bits   | visible |
      |--------------------------------------------------|
+     | FCMA                         | [19-16] |    y    |
+     |--------------------------------------------------|
      | JSCVT                        | [15-12] |    y    |
      x--------------------------------------------------x
 
index cbb3143..69af995 100644 (file)
 #define ID_AA64ISAR0_AES_SHIFT         4
 
 /* id_aa64isar1 */
+#define ID_AA64ISAR1_FCMA_SHIFT                16
 #define ID_AA64ISAR1_JSCVT_SHIFT       12
 
 /* id_aa64pfr0 */
index 391a876..85841a4 100644 (file)
@@ -33,5 +33,6 @@
 #define HWCAP_CPUID            (1 << 11)
 #define HWCAP_ASIMDRDM         (1 << 12)
 #define HWCAP_JSCVT            (1 << 13)
+#define HWCAP_FCMA             (1 << 14)
 
 #endif /* _UAPI__ASM_HWCAP_H */
index 3085d0e..3ce8b18 100644 (file)
@@ -98,6 +98,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar0[] = {
 };
 
 static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
+       ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_FCMA_SHIFT, 4, 0),
        ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_JSCVT_SHIFT, 4, 0),
        ARM64_FTR_END,
 };
@@ -894,6 +895,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
        HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_ASIMD_SHIFT, FTR_SIGNED, 0, CAP_HWCAP, HWCAP_ASIMD),
        HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_ASIMD_SHIFT, FTR_SIGNED, 1, CAP_HWCAP, HWCAP_ASIMDHP),
        HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_JSCVT_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, HWCAP_JSCVT),
+       HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_FCMA_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, HWCAP_FCMA),
        {},
 };
 
index 3277659..4a43c6a 100644 (file)
@@ -66,6 +66,7 @@ static const char *const hwcap_str[] = {
        "cpuid",
        "asimdrdm",
        "jscvt",
+       "fcma",
        NULL
 };