[meta-lsi] [PATCH 06/26] ARMv8-A: Add generic tunes for AArch32 state and AArch64 state
Daniel Dragomir
daniel.dragomir at windriver.com
Fri Aug 5 08:33:29 PDT 2016
ARMv8-A supports two main execution states:
- AArch64 - The 64-bit execution state including exception model,
memory model, programmers' model and instruction set support for
that state
- AArch32 - The 32-bit execution state including exception model,
memory model, programmers' model and instruction set support for
that state
This patch adds tunes for 32-bit and 64-bit armv8a platforms.
For AArch32 state, the default tune is aarch32 and include which
include by default hard float, fp-armv8 floating-point, thumb
and neon extensions.
Depending on the features supported by the core, the user can
select between little or big endian and may choose to enable
crypto extension.
For AArch64 state, the default tune is aarch32 and include which
include just the aarch64 feature.
Depending on the features supported by the core, the user can
select between little or big endian and may choose to enable
crypto extension (crypto enables also Advanced SIMD and
floating-point instructions).
Signed-off-by: Daniel Dragomir <daniel.dragomir at windriver.com>
---
conf/machine/include/arm/arch-armv8a.inc | 112 ++++++++++++++++++++++++++-----
1 file changed, 95 insertions(+), 17 deletions(-)
diff --git a/conf/machine/include/arm/arch-armv8a.inc b/conf/machine/include/arm/arch-armv8a.inc
index 26a71d9..779fe95 100644
--- a/conf/machine/include/arm/arch-armv8a.inc
+++ b/conf/machine/include/arm/arch-armv8a.inc
@@ -1,17 +1,95 @@
-DEFAULTTUNE ?= "armv8a"
-
-TUNEVALID[armv8a] = "Enable instructions for ARMv8-a"
-TUNECONFLICTS[armv8a] = "armv4 armv5 armv6 armv7 armv7a"
-TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "armv8a", " -march=armv8-a", "", d)}"
-MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "armv8a", "armv8a:", "" ,d)}"
-
-require conf/machine/include/arm/arch-armv7a.inc
-
-# Little Endian base configs
-AVAILTUNES += "armv8a armv8a-neon"
-ARMPKGARCH_tune-armv8a ?= "armv8a"
-ARMPKGARCH_tune-armv8a-neon ?= "armv8a"
-TUNE_FEATURES_tune-armv8a ?= "arm armv8a vfp"
-TUNE_FEATURES_tune-armv8a-neon ?= "${TUNE_FEATURES_tune-armv8a} neon"
-PACKAGE_EXTRA_ARCHS_tune-armv8a = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} armv8a armv8a-vfp"
-PACKAGE_EXTRA_ARCHS_tune-armv8a-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv8a} armv8a-vfp-neon"
+DEFAULTTUNE ?= "aarch64"
+
+TUNEVALID[arm] = "Enable ARM instruction set"
+TUNEVALID[aarch32] = "Enable instructions for 32bit state for ARMv8-a (AArch32)"
+TUNEVALID[aarch64] = "Enable instructions for 64bit state for ARMv8-a (AArch64)"
+TUNECONFLICTS[aarch32] = "armv4 armv5 armv6 armv7 armv7a armv7ve"
+
+require conf/machine/include/arm/arch-arm.inc
+require conf/machine/include/arm/feature-arm-neon.inc
+require conf/machine/include/arm/feature-arm-vfp.inc
+require conf/machine/include/arm/feature-arm-thumb.inc
+
+TUNEVALID[crypto] = "Enable ARMv8 crypto extension."
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', bb.utils.contains('TUNE_FEATURES', 'crypto', ' -march=armv8-a+crypto', ' -march=armv8-a', d), '', d)}"
+TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'aarch32', ' -march=armv8-a', '', d)}"
+
+TUNEVALID[fp-armv8] = "Enable ARMv8 Vector Floating Point unit."
+TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', 'fp-armv8', ' fp-armv8', '', d)}"
+TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', [ 'fp-armv8', 'neon' ], ' neon-fp-armv8', '', d)}"
+TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', [ 'fp-armv8', 'neon', 'crypto' ], ' crypto-neon-fp-armv8', '', d)}"
+
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'aarch32', 'aarch32:', '' ,d)}"
+MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', 'aarch64:', '' ,d)}"
+
+
+# AArch32 Little Endian base configs
+AVAILTUNES += "aarch32 aarch32t aarch32-crypto aarch32t-crypto"
+ARMPKGARCH_tune-aarch32 ?= "aarch32"
+ARMPKGARCH_tune-aarch32t ?= "aarch32"
+ARMPKGARCH_tune-aarch32-crypto ?= "aarch32"
+ARMPKGARCH_tune-aarch32t-crypto ?= "aarch32"
+TUNE_FEATURES_tune-aarch32 = "arm aarch32 neon fp-armv8 callconvention-hard"
+TUNE_FEATURES_tune-aarch32t = "${TUNE_FEATURES_tune-aarch32} thumb"
+TUNE_FEATURES_tune-aarch32-crypto = "${TUNE_FEATURES_tune-aarch32} crypto"
+TUNE_FEATURES_tune-aarch32t-crypto = "${TUNE_FEATURES_tune-aarch32-crypto} thumb"
+PACKAGE_EXTRA_ARCHS_tune-aarch32 = "aarch32hf-neon-fp-armv8"
+PACKAGE_EXTRA_ARCHS_tune-aarch32t = "${PACKAGE_EXTRA_ARCHS_tune-aarch32} aarch32t2hf-neon-fp-armv8"
+PACKAGE_EXTRA_ARCHS_tune-aarch32-crypto = "${PACKAGE_EXTRA_ARCHS_tune-aarch32} aarch32hf-crypto-neon-fp-armv8"
+PACKAGE_EXTRA_ARCHS_tune-aarch32t-crypto = "${PACKAGE_EXTRA_ARCHS_tune-aarch32-crypto} aarch32t2hf-crypto-neon-fp-armv8"
+
+# AArch32 Big Endian base configs
+AVAILTUNES += "aarch32b aarch32tb aarch32b-crypto aarch32tb-crypto"
+ARMPKGARCH_tune-aarch32b ?= "aarch32"
+ARMPKGARCH_tune-aarch32tb ?= "aarch32"
+ARMPKGARCH_tune-aarch32b-crypto ?= "aarch32"
+ARMPKGARCH_tune-aarch32tb-crypto ?= "aarch32"
+TUNE_FEATURES_tune-aarch32b = "${TUNE_FEATURES_tune-aarch32} bigendian"
+TUNE_FEATURES_tune-aarch32tb = "${TUNE_FEATURES_tune-aarch32t} bigendian"
+TUNE_FEATURES_tune-aarch32b-crypto = "${TUNE_FEATURES_tune-aarch32-crypto} bigendian"
+TUNE_FEATURES_tune-aarch32tb-crypto = "${TUNE_FEATURES_tune-aarch32t-crypto} bigendian"
+PACKAGE_EXTRA_ARCHS_tune-aarch32b = "aarch32hfb-neon-fp-armv8"
+PACKAGE_EXTRA_ARCHS_tune-aarch32tb = "${PACKAGE_EXTRA_ARCHS_tune-aarch32b} aarch32t2hfb-neon-fp-armv8"
+PACKAGE_EXTRA_ARCHS_tune-aarch32b-crypto = "${PACKAGE_EXTRA_ARCHS_tune-aarch32b} aarch32hfb-crypto-neon-fp-armv8"
+PACKAGE_EXTRA_ARCHS_tune-aarch32tb-crypto = "${PACKAGE_EXTRA_ARCHS_tune-aarch32b-crypto} aarch32t2hfb-crypto-neon-fp-armv8"
+
+
+# AArch64 Little Endian base configs
+AVAILTUNES += "aarch64 aarch64-crypto"
+ARMPKGARCH_tune-aarch64 ?= "aarch64"
+ARMPKGARCH_tune-aarch64-crypto ?= "aarch64"
+TUNE_FEATURES_tune-aarch64 = "aarch64"
+TUNE_FEATURES_tune-aarch64-crypto = "${TUNE_FEATURES_tune-aarch64} crypto"
+PACKAGE_EXTRA_ARCHS_tune-aarch64 = "aarch64"
+PACKAGE_EXTRA_ARCHS_tune-aarch64-crypto = "${PACKAGE_EXTRA_ARCHS_tune-aarch64} aarch64-crypto"
+BASE_LIB_tune-aarch64 = "lib64"
+BASE_LIB_tune-aarch64-crypto = "${BASE_LIB_tune-aarch64}"
+
+# AArch64 Big Endian base configs
+AVAILTUNES += "aarch64_be aarch64_be-crypto"
+ARMPKGARCH_tune-aarch64_be ?= "aarch64_be"
+ARMPKGARCH_tune-aarch64_be-crypto ?= "aarch64_be"
+TUNE_FEATURES_tune-aarch64_be = "${TUNE_FEATURES_tune-aarch64} bigendian"
+TUNE_FEATURES_tune-aarch64_be-crypto = "${TUNE_FEATURES_tune-aarch64-crypto} bigendian"
+PACKAGE_EXTRA_ARCHS_tune-aarch64_be = "aarch64_be"
+PACKAGE_EXTRA_ARCHS_tune-aarch64_be-crypto = "${PACKAGE_EXTRA_ARCHS_tune-aarch64_be} aarch64_be-crypto"
+BASE_LIB_tune-aarch64_be = "${BASE_LIB_tune-aarch64}"
+BASE_LIB_tune-aarch64_be-crypto = "${BASE_LIB_tune-aarch64}"
+
+
+ARMPKGSFX_ENDIAN_64 = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', '_be', '', d)}"
+TUNE_ARCH_64 = "aarch64${ARMPKGSFX_ENDIAN_64}"
+TUNE_PKGARCH_64 = "aarch64${ARMPKGSFX_ENDIAN_64}"
+ABIEXTENSION_64 = ""
+TARGET_FPU_64 = ""
+
+# Duplicated from arch-arm.inc
+TUNE_ARCH_32 = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', 'armeb', 'arm', d)}"
+TUNE_PKGARCH_32 = "${ARMPKGARCH}${ARMPKGSFX_THUMB}${ARMPKGSFX_DSP}${ARMPKGSFX_EABI}${ARMPKGSFX_ENDIAN}${ARMPKGSFX_FPU}"
+ABIEXTENSION_32 = "eabi"
+TARGET_FPU_32 = "${@d.getVar('TUNE_CCARGS_MFLOAT', True) or 'soft'}"
+
+TUNE_ARCH = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TUNE_ARCH_64}', '${TUNE_ARCH_32}' ,d)}"
+TUNE_PKGARCH = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TUNE_PKGARCH_64}', '${TUNE_PKGARCH_32}' ,d)}"
+ABIEXTENSION = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${ABIEXTENSION_64}', '${ABIEXTENSION_32}' ,d)}"
+TARGET_FPU = "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${TARGET_FPU_64}', '${TARGET_FPU_32}' ,d)}"
--
2.7.4
More information about the meta-lsi
mailing list