aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2012-03-20 11:32:54 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2012-03-20 11:32:54 +0000
commit7dc3263c6918509d45d7b51be7a55e18b67f2734 (patch)
tree1609f5c7e132c475c370590d58b0934f0d4f20f0 /gcc/testsuite
parentb260a8c034ca3fe57bfab408065bc8dc46c4f186 (diff)
downloadgcc-7dc3263c6918509d45d7b51be7a55e18b67f2734.zip
gcc-7dc3263c6918509d45d7b51be7a55e18b67f2734.tar.gz
gcc-7dc3263c6918509d45d7b51be7a55e18b67f2734.tar.bz2
re PR target/49868 (Implement named address space to place/access data in flash memory)
PR target/49868 * gcc.target/avr/torture/addr-space-2.h: New file. * gcc.target/avr/torture/addr-space-2-g.h: New test. * gcc.target/avr/torture/addr-space-2-0.h: New test. * gcc.target/avr/torture/addr-space-2-1.h: New test. * gcc.target/avr/torture/addr-space-2-x.h: New test. From-SVN: r185570
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog17
-rw-r--r--gcc/testsuite/gcc.target/avr/torture/addr-space-2-0.c6
-rw-r--r--gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c6
-rw-r--r--gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c6
-rw-r--r--gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c9
-rw-r--r--gcc/testsuite/gcc.target/avr/torture/addr-space-2.h106
6 files changed, 146 insertions, 4 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0264170..dfdee37 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2012-03-20 Georg-Johann Lay <avr@gjlay.de>
+
+ PR target/49868
+ * gcc.target/avr/torture/addr-space-2.h: New file.
+ * gcc.target/avr/torture/addr-space-2-g.h: New test.
+ * gcc.target/avr/torture/addr-space-2-0.h: New test.
+ * gcc.target/avr/torture/addr-space-2-1.h: New test.
+ * gcc.target/avr/torture/addr-space-2-x.h: New test.
+
2012-03-20 Richard Guenther <rguenther@suse.de>
* gnat.dg/pack16.adb: New testcase.
@@ -295,10 +304,10 @@
PR target/49868
* gcc.target/avr/torture/addr-space-1.h: New file.
- * gcc.target/avr/torture/addr-space-g.h: New test.
- * gcc.target/avr/torture/addr-space-0.h: New test.
- * gcc.target/avr/torture/addr-space-1.h: New test.
- * gcc.target/avr/torture/addr-space-x.h: New test.
+ * gcc.target/avr/torture/addr-space-1-g.h: New test.
+ * gcc.target/avr/torture/addr-space-1-0.h: New test.
+ * gcc.target/avr/torture/addr-space-1-1.h: New test.
+ * gcc.target/avr/torture/addr-space-1-x.h: New test.
2012-03-12 Andrew Pinski <apinski@cavium.com>
diff --git a/gcc/testsuite/gcc.target/avr/torture/addr-space-2-0.c b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-0.c
new file mode 100644
index 0000000..d5d4f92
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-0.c
@@ -0,0 +1,6 @@
+/* { dg-options "-std=gnu99" } */
+/* { dg-do run } */
+
+#define __as __flash
+
+#include "addr-space-2.h"
diff --git a/gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c
new file mode 100644
index 0000000..c8041f7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c
@@ -0,0 +1,6 @@
+/* { dg-options "-std=gnu99 -Tavr51-flash1.x" } */
+/* { dg-do run } */
+
+#define __as __flash1
+
+#include "addr-space-2.h"
diff --git a/gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c
new file mode 100644
index 0000000..ad0b2b8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c
@@ -0,0 +1,6 @@
+/* { dg-options "-std=gnu99" } */
+/* { dg-do run } */
+
+#define __as
+
+#include "addr-space-2.h"
diff --git a/gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c
new file mode 100644
index 0000000..846cca4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c
@@ -0,0 +1,9 @@
+/* { dg-options "-std=gnu99 -Wa,--no-warn" } */
+/* { dg-do run } */
+
+/* --no-warn because: "assembling 24-bit address needs binutils extension"
+ see binutils PR13503. */
+
+#define __as __memx
+
+#include "addr-space-2.h"
diff --git a/gcc/testsuite/gcc.target/avr/torture/addr-space-2.h b/gcc/testsuite/gcc.target/avr/torture/addr-space-2.h
new file mode 100644
index 0000000..c95a163
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/torture/addr-space-2.h
@@ -0,0 +1,106 @@
+extern void exit (int);
+extern void abort (void);
+
+typedef struct T
+{
+ char val;
+ const __as struct T *l, *r;
+} tree;
+
+/*
+ abcd
+ / \
+ ab cd
+ / \ / \
+ a b c d
+*/
+
+const __as tree a = { 'a', 0, 0 };
+const __as tree b = { 'b', 0, 0 };
+const __as tree c = { 'c', 0, 0 };
+const __as tree d = { 'd', 0, 0 };
+
+const __as tree ab = { 'A', &a, &b };
+const __as tree cd = { 'C', &c, &d };
+
+const __as tree abcd = { '*', &ab, &cd };
+
+static void
+test1 (void)
+{
+ if (abcd.val != '*')
+ abort();
+
+ if (abcd.l->val != 'A')
+ abort();
+ if (abcd.r->val != 'C')
+ abort();
+
+ if (abcd.l->l->val != 'a')
+ abort();
+ if (abcd.l->r->val != 'b')
+ abort();
+ if (abcd.r->l->val != 'c')
+ abort();
+ if (abcd.r->r->val != 'd')
+ abort();
+}
+
+static void
+test2 (const __as tree *t)
+{
+ if (t->val != '*')
+ abort();
+
+ if (t->l->val != 'A')
+ abort();
+ if (t->r->val != 'C')
+ abort();
+
+ if (t->l->l->val != 'a')
+ abort();
+ if (t->l->r->val != 'b')
+ abort();
+ if (t->r->l->val != 'c')
+ abort();
+ if (t->r->r->val != 'd')
+ abort();
+}
+
+static void
+test3 (const __as tree *pt)
+{
+ tree t = *pt;
+
+ if (t.val != '*')
+ abort();
+
+ if (t.l->val != 'A')
+ abort();
+ if (t.r->val != 'C')
+ abort();
+
+ if (t.l->l->val != 'a')
+ abort();
+ if (t.l->r->val != 'b')
+ abort();
+ if (t.r->l->val != 'c')
+ abort();
+ if (t.r->r->val != 'd')
+ abort();
+}
+
+int main (void)
+{
+ const __as tree *t = &abcd;
+ test1();
+ test2 (&abcd);
+ test3 (&abcd);
+
+ __asm ("" : "+r" (t));
+ test2 (t);
+ test3 (t);
+
+ exit (0);
+ return 0;
+}