diff mbox

[AARCH64] Added predefines for AArch64 code models

Message ID 504F4477.3060009@arm.com
State New
Headers show

Commit Message

Chris Schlumberger-Socha Sept. 11, 2012, 2:02 p.m. UTC
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.

Comments

Marcus Shawcroft Oct. 15, 2012, 10:03 a.m. UTC | #1
On 11/09/12 15:02, Chris Schlumberger-Socha wrote:
> This patch adds predefines for AArch64 code models. These code models are
> added as an effective target for the AArch64 platform.
>

I've committed this patch to aarch64-trunk.

/Marcus
Marcus Shawcroft Oct. 16, 2012, 3:50 p.m. UTC | #2
On 15/10/12 11:03, Marcus Shawcroft wrote:
> On 11/09/12 15:02, Chris Schlumberger-Socha wrote:
>> This patch adds predefines for AArch64 code models. These code models are
>> added as an effective target for the AArch64 platform.
>>
>
> I've committed this patch to aarch64-trunk.
>
> /Marcus
>
>

.. and back ported to aarch64-4.7-branch, the patch applies cleanly and 
requires no modification.

/Marcus
diff mbox

Patch

>From c130393b5d8b888550e548b36dd34a71b8d94f88 Mon Sep 17 00:00:00 2001
From: Chris Schlumberger-Socha <chris.schlumberger-socha@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