aarch32: Allow compiling with soft-float toolchain
authorManish Pandey <manish.pandey2@arm.com>
Mon, 1 Apr 2019 14:27:18 +0000 (15:27 +0100)
committerManish Pandey <manish.pandey2@arm.com>
Fri, 5 Apr 2019 10:37:19 +0000 (11:37 +0100)
ARMv7 and Cortex-A32(ARMv8/aarch32) uses "arm-linux-gnueabi" toolchain which
has both soft-float and hard-float variants and so there could be scenarios
where soft-float toolchain is used.Even though TF-A documentation recommends
to use hard-float toolchain for aarch32 but there are external projects where
we cannot mandate the selection of toolchain and for those projects at least
the build should not fail.

Current TF-A source fails to build with soft-float toolchain because assembler
does not recognizes "vmsr" instruction which is required to enable floating
point unit.

To avoid this piece of code being compiled with soft-float toolchain add
predefined macro guard " __SOFTFP__" exposed by soft-float toolchain.

Change-Id: I76ba40906a8d622dcd476dd36ab4d277a925996c
Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
include/arch/aarch32/el3_common_macros.S

index 322aed5cdd4b56d4d5d8275e59f70749f2c61d1e..0bd8978145503342ad8974337b27c4d1ea01b795 100644 (file)
         *
         * FPEXC.EN: Enable access to Advanced SIMD and floating point features
         *  from all exception levels.
+         *
+         * __SOFTFP__: Predefined macro exposed by soft-float toolchain.
+         *  ARMv7 and Cortex-A32(ARMv8/aarch32) has both soft-float and
+         *  hard-float variants of toolchain, avoid compiling below code with
+         *  soft-float toolchain as "vmsr" instruction will not be recognized.
         * ---------------------------------------------------------------------
         */
-#if (ARM_ARCH_MAJOR > 7) || defined(ARMV7_SUPPORTS_VFP)
+#if ((ARM_ARCH_MAJOR > 7) || defined(ARMV7_SUPPORTS_VFP)) && !(__SOFTFP__)
        ldr     r0, =(FPEXC_RESET_VAL | FPEXC_EN_BIT)
        vmsr    FPEXC, r0
        isb