aboutsummaryrefslogtreecommitdiffstats
path: root/mpi/longlong.h
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2000-07-17 14:32:21 +0000
committerWerner Koch <[email protected]>2000-07-17 14:32:21 +0000
commit0bf44b072ca648336bca9cf1ec24ea9d257cea9a (patch)
tree92df532ce40c43627283e16bb5a06f39bd3a466c /mpi/longlong.h
parentSee ChangeLog: Fri Jul 14 19:38:23 CEST 2000 Werner Koch (diff)
downloadgnupg-0bf44b072ca648336bca9cf1ec24ea9d257cea9a.tar.gz
gnupg-0bf44b072ca648336bca9cf1ec24ea9d257cea9a.zip
See ChangeLog: Mon Jul 17 16:35:47 CEST 2000 Werner Koch
Diffstat (limited to 'mpi/longlong.h')
-rw-r--r--mpi/longlong.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/mpi/longlong.h b/mpi/longlong.h
index c92435570..e36beae49 100644
--- a/mpi/longlong.h
+++ b/mpi/longlong.h
@@ -199,6 +199,8 @@ extern UDItype __udiv_qrnnd ();
"rI" ((USItype)(bh)), \
"r" ((USItype)(al)), \
"rI" ((USItype)(bl)))
+#ifdef __ARM_ARCH_3__
+/* SAM This does not work on arm4 */
#define umul_ppmm(xh, xl, a, b) \
__asm__ ("%@ Inlined umul_ppmm
mov %|r0, %2, lsr #16
@@ -218,6 +220,18 @@ extern UDItype __udiv_qrnnd ();
: "r" ((USItype)(a)), \
"r" ((USItype)(b)) \
: "r0", "r1", "r2")
+#elif __ARM_ARCH_4__
+#define umul_ppmm(xh, xl, a, b) \
+ __asm__ ("%@ Inlined umul_ppmm
+ umull %r1, %r0, %r2, %r3" \
+ : "=&r" ((USItype)(xh)), \
+ "=r" ((USItype)(xl)) \
+ : "r" ((USItype)(a)), \
+ "r" ((USItype)(b)) \
+ : "r0", "r1")
+#else
+#error Untested architecture
+#endif
#define UMUL_TIME 20
#define UDIV_TIME 100
#endif /* __arm__ */