aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/arm/arm-c.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/arm/arm-c.c')
-rw-r--r--gcc/config/arm/arm-c.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c
index 3e4d168..8dfbd78 100644
--- a/gcc/config/arm/arm-c.c
+++ b/gcc/config/arm/arm-c.c
@@ -51,3 +51,126 @@ arm_lang_object_attributes_init (void)
{
arm_lang_output_object_attributes_hook = arm_output_c_attributes;
}
+
+#define builtin_define(TXT) cpp_define (pfile, TXT)
+#define builtin_assert(TXT) cpp_assert (pfile, TXT)
+
+void
+arm_cpu_cpp_builtins (struct cpp_reader * pfile)
+{
+ if (TARGET_DSP_MULTIPLY)
+ builtin_define ("__ARM_FEATURE_DSP");
+ if (TARGET_ARM_QBIT)
+ builtin_define ("__ARM_FEATURE_QBIT");
+ if (TARGET_ARM_SAT)
+ builtin_define ("__ARM_FEATURE_SAT");
+ if (TARGET_CRYPTO)
+ builtin_define ("__ARM_FEATURE_CRYPTO");
+ if (unaligned_access)
+ builtin_define ("__ARM_FEATURE_UNALIGNED");
+ if (TARGET_CRC32)
+ builtin_define ("__ARM_FEATURE_CRC32");
+ if (TARGET_32BIT)
+ builtin_define ("__ARM_32BIT_STATE");
+ if (TARGET_ARM_FEATURE_LDREX)
+ builtin_define_with_int_value ("__ARM_FEATURE_LDREX",
+ TARGET_ARM_FEATURE_LDREX);
+ if ((TARGET_ARM_ARCH >= 5 && !TARGET_THUMB)
+ || TARGET_ARM_ARCH_ISA_THUMB >=2)
+ builtin_define ("__ARM_FEATURE_CLZ");
+ if (TARGET_INT_SIMD)
+ builtin_define ("__ARM_FEATURE_SIMD32");
+
+ builtin_define_with_int_value ("__ARM_SIZEOF_MINIMAL_ENUM",
+ flag_short_enums ? 1 : 4);
+ builtin_define_type_sizeof ("__ARM_SIZEOF_WCHAR_T", wchar_type_node);
+ if (TARGET_ARM_ARCH_PROFILE)
+ builtin_define_with_int_value ("__ARM_ARCH_PROFILE",
+ TARGET_ARM_ARCH_PROFILE);
+
+ /* Define __arm__ even when in thumb mode, for
+ consistency with armcc. */
+ builtin_define ("__arm__");
+ if (TARGET_ARM_ARCH)
+ builtin_define_with_int_value ("__ARM_ARCH", TARGET_ARM_ARCH);
+ if (arm_arch_notm)
+ builtin_define ("__ARM_ARCH_ISA_ARM");
+ builtin_define ("__APCS_32__");
+ if (TARGET_THUMB)
+ builtin_define ("__thumb__");
+ if (TARGET_THUMB2)
+ builtin_define ("__thumb2__");
+ if (TARGET_ARM_ARCH_ISA_THUMB)
+ builtin_define_with_int_value ("__ARM_ARCH_ISA_THUMB",
+ TARGET_ARM_ARCH_ISA_THUMB);
+
+ if (TARGET_BIG_END)
+ {
+ builtin_define ("__ARMEB__");
+ builtin_define ("__ARM_BIG_ENDIAN");
+ if (TARGET_THUMB)
+ builtin_define ("__THUMBEB__");
+ }
+ else
+ {
+ builtin_define ("__ARMEL__");
+ if (TARGET_THUMB)
+ builtin_define ("__THUMBEL__");
+ }
+
+ if (TARGET_SOFT_FLOAT)
+ builtin_define ("__SOFTFP__");
+
+ if (TARGET_VFP)
+ builtin_define ("__VFP_FP__");
+
+ if (TARGET_ARM_FP)
+ builtin_define_with_int_value ("__ARM_FP", TARGET_ARM_FP);
+ if (arm_fp16_format == ARM_FP16_FORMAT_IEEE)
+ builtin_define ("__ARM_FP16_FORMAT_IEEE");
+ if (arm_fp16_format == ARM_FP16_FORMAT_ALTERNATIVE)
+ builtin_define ("__ARM_FP16_FORMAT_ALTERNATIVE");
+ if (TARGET_FMA)
+ builtin_define ("__ARM_FEATURE_FMA");
+
+ if (TARGET_NEON)
+ {
+ builtin_define ("__ARM_NEON__");
+ builtin_define ("__ARM_NEON");
+ }
+ if (TARGET_NEON_FP)
+ builtin_define_with_int_value ("__ARM_NEON_FP", TARGET_NEON_FP);
+
+ /* Add a define for interworking. Needed when building libgcc.a. */
+ if (arm_cpp_interwork)
+ builtin_define ("__THUMB_INTERWORK__");
+
+ builtin_assert ("cpu=arm");
+ builtin_assert ("machine=arm");
+
+ builtin_define (arm_arch_name);
+ if (arm_arch_xscale)
+ builtin_define ("__XSCALE__");
+ if (arm_arch_iwmmxt)
+ {
+ builtin_define ("__IWMMXT__");
+ builtin_define ("__ARM_WMMX");
+ }
+ if (arm_arch_iwmmxt2)
+ builtin_define ("__IWMMXT2__");
+ if (TARGET_AAPCS_BASED)
+ {
+ if (arm_pcs_default == ARM_PCS_AAPCS_VFP)
+ builtin_define ("__ARM_PCS_VFP");
+ else if (arm_pcs_default == ARM_PCS_AAPCS)
+ builtin_define ("__ARM_PCS");
+ builtin_define ("__ARM_EABI__");
+ }
+ if (TARGET_IDIV)
+ {
+ builtin_define ("__ARM_ARCH_EXT_IDIV__");
+ builtin_define ("__ARM_FEATURE_IDIV");
+ }
+ if (inline_asm_unified)
+ builtin_define ("__ARM_ASM_SYNTAX_UNIFIED__");
+}