f1fb66
diff -up openssl-0.9.8g/crypto/bn/bn_lcl.h.ia64 openssl-0.9.8g/crypto/bn/bn_lcl.h
f1fb66
--- openssl-0.9.8g/crypto/bn/bn_lcl.h.ia64	2008-08-10 22:23:55.000000000 +0200
f1fb66
+++ openssl-0.9.8g/crypto/bn/bn_lcl.h	2008-08-10 22:23:55.000000000 +0200
f1fb66
@@ -279,6 +279,15 @@ extern "C" {
f1fb66
 #   define BN_UMULT_HIGH(a,b)		__umulh((a),(b))
f1fb66
 #   define BN_UMULT_LOHI(low,high,a,b)	((low)=_umul128((a),(b),&(high)))
cvsdist e32c11
 #  endif
cvsdist e32c11
+# elif defined(__ia64) && defined(SIXTY_FOUR_BIT_LONG)
cvsdist e32c11
+#  if defined(__GNUC__)
cvsdist e32c11
+#   define BN_UMULT_HIGH(a,b) ({      \
cvsdist e32c11
+      register BN_ULONG ret;          \
cvsdist e32c11
+      asm ("xmpy.hu %0 = %1, %2"      \
cvsdist e32c11
+           : "=f"(ret)                \
cvsdist e32c11
+           : "f"(a), "f"(b));         \
cvsdist e32c11
+      ret;                    })
cvsdist e32c11
+#  endif      /* compiler */
cvsdist e32c11
 # endif		/* cpu */
cvsdist e32c11
 #endif		/* OPENSSL_NO_ASM */
cvsdist e32c11