This patch adds predefines for AArch64 code models. These code models are added as an effective target for the AArch64 platform.
Tests for these predefines have been added to `gcc.target/aarch64/'. Thanks, Chris ChangeLog: [AArch64] Added predefines for AArch64 code models. gcc/ * config/aarch64/aarch64.h (TARGET_CPU_CPP_BUILTINS): Add predefine for AArch64 code models. gcc/testsuite/ * gcc.target/aarch64/predefine_large.c: New test for large code model predefine. * gcc.target/aarch64/predefine_small.c: Likewise for small code model. * gcc.target/aarch64/predefine_tiny.c: Likewise for small code model. * lib/target-supports.exp (check_effective_target_aarch64_tiny): Check effective target for tiny code model. (check_effective_target_aarch64_small): Likewise for small code model. (check_effective_target_aarch64_large): Likewise for large code model.
>From c130393b5d8b888550e548b36dd34a71b8d94f88 Mon Sep 17 00:00:00 2001 From: Chris Schlumberger-Socha <chris.schlumberger-so...@arm.com> Date: Wed, 22 Aug 2012 18:22:26 +0100 Subject: [PATCH] Added predefines for AArch64 code models. Added DejaGnu tests for new predefines. --- gcc/config/aarch64/aarch64.h | 34 ++++++++++++---- gcc/testsuite/gcc.target/aarch64/predefine_large.c | 7 +++ gcc/testsuite/gcc.target/aarch64/predefine_small.c | 7 +++ gcc/testsuite/gcc.target/aarch64/predefine_tiny.c | 7 +++ gcc/testsuite/lib/target-supports.exp | 42 ++++++++++++++++++++ 5 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/predefine_large.c create mode 100644 gcc/testsuite/gcc.target/aarch64/predefine_small.c create mode 100644 gcc/testsuite/gcc.target/aarch64/predefine_tiny.c diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 5d121fa..593c01a 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -23,14 +23,32 @@ #define GCC_AARCH64_H /* Target CPU builtins. */ -#define TARGET_CPU_CPP_BUILTINS() \ - do \ - { \ - builtin_define ("__aarch64__"); \ - if (TARGET_BIG_END) \ - builtin_define ("__AARCH64EB__"); \ - else \ - builtin_define ("__AARCH64EL__"); \ +#define TARGET_CPU_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__aarch64__"); \ + if (TARGET_BIG_END) \ + builtin_define ("__AARCH64EB__"); \ + else \ + builtin_define ("__AARCH64EL__"); \ + \ + switch (aarch64_cmodel) \ + { \ + case AARCH64_CMODEL_TINY: \ + case AARCH64_CMODEL_TINY_PIC: \ + builtin_define ("__AARCH64_CMODEL_TINY__"); \ + break; \ + case AARCH64_CMODEL_SMALL: \ + case AARCH64_CMODEL_SMALL_PIC: \ + builtin_define ("__AARCH64_CMODEL_SMALL__");\ + break; \ + case AARCH64_CMODEL_LARGE: \ + builtin_define ("__AARCH64_CMODEL_LARGE__"); \ + break; \ + default: \ + break; \ + } \ + \ } while (0) diff --git a/gcc/testsuite/gcc.target/aarch64/predefine_large.c b/gcc/testsuite/gcc.target/aarch64/predefine_large.c new file mode 100644 index 0000000..0d7d4da --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/predefine_large.c @@ -0,0 +1,7 @@ +/* { dg-skip-if "Code model already defined" { aarch64_tiny || aarch64_small } } */ + +#ifdef __AARCH64_CMODEL_LARGE__ + int dummy; +#else + #error +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/predefine_small.c b/gcc/testsuite/gcc.target/aarch64/predefine_small.c new file mode 100644 index 0000000..b136284 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/predefine_small.c @@ -0,0 +1,7 @@ +/* { dg-skip-if "Code model already defined" { aarch64_tiny || aarch64_large } } */ + +#ifdef __AARCH64_CMODEL_SMALL__ + int dummy; +#else + #error +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/predefine_tiny.c b/gcc/testsuite/gcc.target/aarch64/predefine_tiny.c new file mode 100644 index 0000000..d2c844b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/predefine_tiny.c @@ -0,0 +1,7 @@ +/* { dg-skip-if "Code model already defined" { aarch64_small || aarch64_large } } */ + +#ifdef __AARCH64_CMODEL_TINY__ + int dummy; +#else + #error +#endif diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 51805ed..2252c83 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -4654,3 +4654,45 @@ proc check_effective_target_ucontext_h { } { #include <ucontext.h> }] } + +proc check_effective_target_aarch64_tiny { } { + if { [istarget aarch64*-*-*] } { + return [check_no_compiler_messages aarch64_tiny object { + #ifdef __AARCH64_CMODEL_TINY__ + int dummy; + #else + #error target not AArch64 tiny code model + #endif + }] + } else { + return 0 + } +} + +proc check_effective_target_aarch64_small { } { + if { [istarget aarch64*-*-*] } { + return [check_no_compiler_messages aarch64_small object { + #ifdef __AARCH64_CMODEL_SMALL__ + int dummy; + #else + #error target not AArch64 small code model + #endif + }] + } else { + return 0 + } +} + +proc check_effective_target_aarch64_large { } { + if { [istarget aarch64*-*-*] } { + return [check_no_compiler_messages aarch64_large object { + #ifdef __AARCH64_CMODEL_LARGE__ + int dummy; + #else + #error target not AArch64 large code model + #endif + }] + } else { + return 0 + } +} -- 1.7.5.2