aboutsummaryrefslogtreecommitdiff
path: root/newlib/libc/sys/arm/arm.h
diff options
context:
space:
mode:
authorThomas Preud'homme <thomas.preudhomme@foss.arm.com>2016-01-28 11:26:09 +0100
committerCorinna Vinschen <corinna@vinschen.de>2016-01-28 11:26:37 +0100
commit69f4c4029183fb26d2fcae00790881620c1978a3 (patch)
tree87f94f7e721f1f8b83117a9ffb1e007fc969f729 /newlib/libc/sys/arm/arm.h
parent0b42ea79606c46f730e4f2427cc8244f85bdac98 (diff)
downloadnewlib-69f4c4029183fb26d2fcae00790881620c1978a3.zip
newlib-69f4c4029183fb26d2fcae00790881620c1978a3.tar.gz
newlib-69f4c4029183fb26d2fcae00790881620c1978a3.tar.bz2
Make macro checks ARMv8-M baseline proof
libgloss: * arm/Makefile.in: Add newlib/libc/machine/arm to the include path if newlib is present. * arm/arm.h: Include acle-compat.h. (THUMB_V7_V6M): Rename to ... (PREFER_THUMB): This. Use ACLE macros __ARM_ARCH_ISA_ARM instead of __ARM_ARCH_6M__ to decide whether to define it. (THUMB1_ONLY): Define for Thumb-1 only targets. (THUMB_V7M_V6M): Rename to ... (THUMB_VXM): This. Defined based on __ARM_ARCH_ISA_ARM, excluding ARMv7. * arm/crt0.S: Use THUMB1_ONLY rather than __ARM_ARCH_6M__, !__ARM_ARCH_ISA_ARM rather than THUMB_V7M_V6M for fp enabling, and PREFER_THUMB rather than THUMB_V7_V6M. Rename other occurences of THUMB_V7M_V6M to THUMB_VXM. * arm/linux-crt0.c: Likewise. * arm/redboot-crt0.S: Likewise. * arm/swi.h: Likewise. * arm/trap.S: Likewise. newlib: * libc/machine/arm/memcpy-stub.c: Use ACLE macros __ARM_ARCH_ISA_THUMB and __ARM_ARCH_ISA_ARM to check for Thumb-2 only targets rather than __ARM_ARCH and __ARM_ARCH_PROFILE. * libc/machine/arm/memcpy.S: Likewise. * libc/machine/arm/setjmp.S: Likewise for Thumb-1 only target and include acle-compat.h. * libc/machine/arm/strcmp.S: Likewise for Thumb-1 and Thumb-2 only target and include acle-compat.h. * libc/sys/arm/arm.h: Include acle-compat.h. (THUMB_V7_V6M): Rename to ... (PREFER_THUMB): This. Use ACLE macro __ARM_ARCH_ISA_ARM instead of __ARM_ARCH_6M__ to decide whether to define it. (THUMB1_ONLY): Define for Thumb-1 only targets. (THUMB_V7M_V6M): Rename to ... (THUMB_VXM): This. Defined based on __ARM_ARCH_ISA_ARM, excluding ARMv7. * libc/sys/arm/crt0.S: Use PREFER_THUMB rather than THUMB_V7_V6M and rename THUMB_V7M_V6M into THUMB_VXM. * libc/sys/arm/swi.h: Likewise.
Diffstat (limited to 'newlib/libc/sys/arm/arm.h')
-rw-r--r--newlib/libc/sys/arm/arm.h36
1 files changed, 19 insertions, 17 deletions
diff --git a/newlib/libc/sys/arm/arm.h b/newlib/libc/sys/arm/arm.h
index 26a1ff1..0489f2d 100644
--- a/newlib/libc/sys/arm/arm.h
+++ b/newlib/libc/sys/arm/arm.h
@@ -29,25 +29,27 @@
#ifndef _LIBGLOSS_ARM_H
#define _LIBGLOSS_ARM_H
-/* __thumb2__ stands for thumb on armva7(A/R/M/EM) architectures,
- __ARM_ARCH_6M__ stands for armv6-M(thumb only) architecture,
- __ARM_ARCH_7M__ stands for armv7-M(thumb only) architecture.
- __ARM_ARCH_7EM__ stands for armv7e-M(thumb only) architecture.
- There are some macro combinations used many times in libgloss/arm,
- like (__thumb2__ || (__thumb__ && __ARM_ARCH_6M__)), so factor
- it out and use THUMB_V7_V6M instead, which stands for thumb on
- v6-m/v7 arch as the combination does. */
-#if defined(__thumb2__) || (defined(__thumb__) && defined(__ARM_ARCH_6M__))
-# define THUMB_V7_V6M
+#include "acle-compat.h"
+
+/* Checking for targets supporting only Thumb instructions (eg. ARMv6-M) or
+ supporting Thumb-2 instructions, whether ARM instructions are available or
+ not, is done many times in libgloss/arm. So factor it out and use
+ PREFER_THUMB instead. */
+#if __thumb2__ || (__thumb__ && !__ARM_ARCH_ISA_ARM)
+# define PREFER_THUMB
+#endif
+
+/* Processor only capable of executing Thumb-1 instructions. */
+#if __ARM_ARCH_ISA_THUMB == 1 && !__ARM_ARCH_ISA_ARM
+# define THUMB1_ONLY
#endif
-/* The (__ARM_ARCH_7EM__ || __ARM_ARCH_7M__ || __ARM_ARCH_6M__) combination
- stands for cortex-M profile architectures, which don't support ARM state.
- Factor it out and use THUMB_V7M_V6M instead. */
-#if defined(__ARM_ARCH_7M__) \
- || defined(__ARM_ARCH_7EM__) \
- || defined(__ARM_ARCH_6M__)
-# define THUMB_V7M_V6M
+/* M profile architectures. This is a different set of architectures than
+ those not having ARM ISA because it does not contain ARMv7. This macro is
+ necessary to test which architectures use bkpt as semihosting interface from
+ architectures using svc. */
+#if !__ARM_ARCH_ISA_ARM && !__ARM_ARCH_7__
+# define THUMB_VXM
#endif
/* Defined if this target supports the BLX Rm instruction. */