aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/20021024-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/20021024-1.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20021024-1.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/20021024-1.c b/gcc/testsuite/gcc.c-torture/execute/20021024-1.c
new file mode 100644
index 00000000000..f7d98e929a2
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20021024-1.c
@@ -0,0 +1,43 @@
+/* Origin: PR target/6981 from Mattias Engdegaard <mattias@virtutech.se>. */
+
+void exit (int);
+void abort (void);
+
+unsigned long long *cp, m;
+
+void foo (void)
+{
+}
+
+void bar (unsigned rop, unsigned long long *r)
+{
+ unsigned rs1, rs2, rd;
+
+top:
+ rs2 = (rop >> 23) & 0x1ff;
+ rs1 = (rop >> 9) & 0x1ff;
+ rd = rop & 0x1ff;
+
+ *cp = 1;
+ m = r[rs1] + r[rs2];
+ *cp = 2;
+ foo();
+ if (!rd)
+ goto top;
+ r[rd] = 1;
+}
+
+int main(void)
+{
+ static unsigned long long r[64];
+ unsigned long long cr;
+ cp = &cr;
+
+ r[4] = 47;
+ r[8] = 11;
+ bar((8 << 23) | (4 << 9) | 15, r);
+
+ if (m != 47 + 11)
+ abort ();
+ exit (0);
+}