]> www.ginac.de Git - cln.git/commitdiff
* src/base/cl_low.h: Add mulu64 assembler macro for ia64.
authorRichard Kreckel <kreckel@ginac.de>
Sun, 24 Oct 2004 22:27:51 +0000 (22:27 +0000)
committerRichard Kreckel <kreckel@ginac.de>
Sun, 24 Oct 2004 22:27:51 +0000 (22:27 +0000)
ChangeLog
src/base/cl_low.h

index a40a73c34e4f4f078d1964d109750bd1ff2094e8..3ea69206e7a1a60bb57632dc6dfda2db26be7e45 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-10-25  Richard B. Kreckel  <kreckel@ginac.de>
+
+       * src/base/cl_low.h: Add mulu64 assembler macro for ia64.
+
 2004-10-24  Richard B. Kreckel  <kreckel@ginac.de>
 
        * src/base/cl_low.h: Add mul and div macros for x86_64.
index 2aba0b0dd28daae78c5440d4c24e673356bf6af9..15d8519fc9be03b13a8df61bfb7f07485d459f83 100644 (file)
@@ -360,6 +360,17 @@ inline uint32 mulu32_unchecked (uint32 arg1, uint32 arg2)
               );                                                 \
        hi_zuweisung _hi; lo_zuweisung _lo;                       \
      })
+#elif defined(__GNUC__) && defined(__ia64__) && !defined(NO_ASM)
+  #define mulu64(x,y,hi_zuweisung,lo_zuweisung)         \
+    ({ var register uint64 _x = (x);                             \
+       var register uint64 _y = (y);                             \
+       var register uint64 _hi;                                          \
+       __asm__("xma.hu %0 = %1, %2, f0"                                  \
+               : "=f" (_hi)                                      \
+               : "f" ((uint64)(_x)), "f" ((uint64)(_y))                  \
+              );                                                 \
+       hi_zuweisung _hi; lo_zuweisung ((uint64)(_x)*(uint64)(_y));\
+     })
 #else
   #define mulu64(x,y,hi_zuweisung,lo_zuweisung)  \
     { lo_zuweisung mulu64_(x,y); hi_zuweisung mulu64_high; }