OSDN Git Service

* gcc.dg/990130-1.c: New test.
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Jan 1999 10:13:37 +0000 (10:13 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 30 Jan 1999 10:13:37 +0000 (10:13 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24917 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/990130-1.c [new file with mode: 0644]

index 62a44ef..15cb42e 100644 (file)
@@ -1,3 +1,7 @@
+Sat Jan 30 11:10:06 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * gcc.dg/990130-1.c: New test.
+
 Sun Jan 17 00:02:33 1999  Jeffrey A Law  (law@cygnus.com)
 
        * gcc.dg/990117-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/990130-1.c b/gcc/testsuite/gcc.dg/990130-1.c
new file mode 100644 (file)
index 0000000..3e711c2
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do compile { target i?86-*-* } } */
+/* { dg-options -O0 } */
+
+typedef         int SItype     __attribute__ ((mode (SI)));
+typedef                 int DItype     __attribute__ ((mode (DI)));
+typedef unsigned int USItype   __attribute__ ((mode (SI)));
+  struct DIstruct {SItype low, high;};
+typedef union
+{
+  struct DIstruct s;
+  DItype ll;
+} DIunion;
+DItype
+__muldi3 (DItype u, DItype v)
+{
+  DIunion w;
+  DIunion uu, vv;
+  uu.ll = u,
+  vv.ll = v;
+  w.ll = ({DIunion __w;        __asm__ ("mull %3"      : "=a" ((USItype) (  __w.s.low )),      "=d" ((USItype) ( __w.s.high )) : "%0" ((USItype) (   uu.s.low  )),     "rm" ((USItype) (    vv.s.low  ))) ;    __w.ll; }) ;
+  w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high
+              + (USItype) uu.s.high * (USItype) vv.s.low);
+  return w.ll;
+}