aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSa Liu <saliu@gcc.gnu.org>2008-05-08 08:42:38 +0000
committerSa Liu <saliu@gcc.gnu.org>2008-05-08 08:42:38 +0000
commitdc4918499f585f7e1de2123c4e3ddc54bc05ed88 (patch)
tree77d428b95e7416f2e6bb7da6c5fc6e44e1e3ec88 /gcc
parentf51de793f1bba6bbb88b9df65ef2a2d4e608914b (diff)
downloadgcc-dc4918499f585f7e1de2123c4e3ddc54bc05ed88.zip
gcc-dc4918499f585f7e1de2123c4e3ddc54bc05ed88.tar.gz
gcc-dc4918499f585f7e1de2123c4e3ddc54bc05ed88.tar.bz2
test subti3
From-SVN: r135074
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.target/spu/subti3.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/spu/subti3.c b/gcc/testsuite/gcc.target/spu/subti3.c
new file mode 100644
index 0000000..4112c95
--- /dev/null
+++ b/gcc/testsuite/gcc.target/spu/subti3.c
@@ -0,0 +1,45 @@
+/* { dg-do run } */
+/* { dg-options "-std=c99" } */
+#include <stdlib.h>
+typedef int TItype __attribute__ ((mode (TI)));
+typedef int DItype __attribute__ ((mode (DI)));
+typedef unsigned int UDItype __attribute__ ((mode (DI)));
+
+struct DIstruct {DItype high, low;};
+typedef union
+{
+ struct DIstruct s;
+ TItype t;
+} TIunion;
+
+static
+void sub_ddmmss (UDItype *sh, UDItype *sl, UDItype ah, UDItype al, UDItype bh, UDItype bl)
+{
+ UDItype x;
+ x = al - bl;
+ *sh = ah - bh - (x > al);
+ *sl = x;
+}
+
+int main(void)
+{
+ TIunion aa, bb, cc;
+ TItype m = 0x1111111111111110ULL;
+ TItype n = 0x1111111111111111ULL;
+ TItype d;
+
+ aa.s.high = m;
+ aa.s.low = m;
+ bb.s.high = n;
+ bb.s.low = n;
+
+
+ sub_ddmmss (&cc.s.high, &cc.s.low, aa.s.high, aa.s.low, bb.s.high, bb.s.low);
+ d = aa.t - bb.t;
+ if (d != cc.t)
+ abort();
+ cc.t = aa.t -d;
+ if (cc.t != bb.t)
+ abort();
+ return 0;
+}