summaryrefslogtreecommitdiff
path: root/longlong.h
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2003-08-19 02:42:40 +0200
committerKevin Ryde <user42@zip.com.au>2003-08-19 02:42:40 +0200
commit0955b47bc04d485b91b5699318f6ab594bbda1e1 (patch)
tree7976af7f54bdab14fddc042535ff763acdcc9e5b /longlong.h
parent58c3a5f3af0b9c828f3ff5887e6e66ede967c773 (diff)
downloadgmp-0955b47bc04d485b91b5699318f6ab594bbda1e1.tar.gz
* longlong.h (add_ssaaaa, sub_ddmmss) [hppa 64]: Move down into main
__GNUC__ block. Exclude for _LONG_LONG_LIMB (ie. ABI=2.0n) since these forms are only for ABI=2.0w.
Diffstat (limited to 'longlong.h')
-rw-r--r--longlong.h27
1 files changed, 14 insertions, 13 deletions
diff --git a/longlong.h b/longlong.h
index af18697a6..c4d0b3005 100644
--- a/longlong.h
+++ b/longlong.h
@@ -200,19 +200,6 @@ long __MPN(count_leading_zeros) _PROTO ((UDItype));
#endif /* _CRAYIEEE */
#endif /* _CRAY */
-#if defined (__hppa) && W_TYPE_SIZE == 64
-#if defined (__GNUC__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add%I5 %5,%r4,%1\n\tadd,dc %r2,%r3,%0" \
- : "=r" (sh), "=&r" (sl) \
- : "rM" (ah), "rM" (bh), "%rM" (al), "rI" (bl))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub%I4 %4,%r5,%1\n\tsub,db %r2,%r3,%0" \
- : "=r" (sh), "=&r" (sl) \
- : "rM" (ah), "rM" (bh), "rI" (al), "rM" (bl))
-#endif
-#endif /* hppa */
-
#if defined (__ia64) && W_TYPE_SIZE == 64
#if defined (__GNUC__)
/* Do both product parts in assembly, since that gives better code with
@@ -531,6 +518,20 @@ extern UWtype __MPN(udiv_qrnnd) _PROTO ((UWtype *, UWtype, UWtype, UWtype));
} while (0)
#endif /* hppa */
+/* These macros are for ABI=2.0w. In ABI=2.0n they can't be used, since GCC
+ (3.2) puts longlong into two adjacent 32-bit registers. Presumably this
+ is just a case of no direct support for 2.0n but treating it like 1.0. */
+#if defined (__hppa) && W_TYPE_SIZE == 64 && ! defined (_LONG_LONG_LIMB)
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add%I5 %5,%r4,%1\n\tadd,dc %r2,%r3,%0" \
+ : "=r" (sh), "=&r" (sl) \
+ : "rM" (ah), "rM" (bh), "%rM" (al), "rI" (bl))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub%I4 %4,%r5,%1\n\tsub,db %r2,%r3,%0" \
+ : "=r" (sh), "=&r" (sl) \
+ : "rM" (ah), "rM" (bh), "rI" (al), "rM" (bl))
+#endif /* hppa */
+
#if (defined (__i370__) || defined (__s390__) || defined (__mvs__)) && W_TYPE_SIZE == 32
#define smul_ppmm(xh, xl, m0, m1) \
do { \