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 000..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 000..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 000..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