Re: [PATCH, AARCH64] Added predefines for AArch64 code models

2012-10-16 Thread Marcus Shawcroft

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



[PATCH, AARCH64] Added predefines for AArch64 code models

2012-09-11 Thread Chris Schlumberger-Socha

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