[PATCH] mpi/longlong: update powerpc macros from GCC

Jussi Kivilinna jussi.kivilinna at iki.fi
Sun Oct 23 18:07:14 CEST 2022


* mpi/longlong.h [__powerpc__, __powerpc64__]: Update macros.
--

Update longlong.h powerpc macros with more up to date versions
from GCC's longlong.h. Note, GCC's version is licensed under
LGPLv2.1+.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
 mpi/longlong.h | 212 +++++++++++++++++++------------------------------
 1 file changed, 81 insertions(+), 131 deletions(-)

diff --git a/mpi/longlong.h b/mpi/longlong.h
index 9e94ef30..fb860cb6 100644
--- a/mpi/longlong.h
+++ b/mpi/longlong.h
@@ -979,180 +979,130 @@ typedef unsigned int UTItype __attribute__ ((mode (TI)));
 /***************************************
  **************  PPC  ******************
  ***************************************/
-#if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32
+/* Powerpc 32 bit support taken from GCC longlong.h. */
+#if (defined (_ARCH_PPC) || defined (__powerpc__)) && W_TYPE_SIZE == 32
 # define add_ssaaaa(sh, sl, ah, al, bh, bl) \
   do {									\
-    if (__builtin_constant_p (bh) && (bh) == 0) 			\
-      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2"           \
-	     : "=r" ((sh)),                                             \
-	       "=&r" ((sl))                                             \
-	     : "%r" ((USItype)(ah)),                                    \
-	       "%r" ((USItype)(al)),                                    \
-	       "rI" ((USItype)(bl)));                                   \
-    else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0)		\
-      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2"           \
-	     : "=r" ((sh)),                                             \
-	       "=&r" ((sl))                                             \
-	     : "%r" ((USItype)(ah)),                                    \
-	       "%r" ((USItype)(al)),                                    \
-	       "rI" ((USItype)(bl)));                                   \
+    if (__builtin_constant_p (bh) && (bh) == 0)				\
+      __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl)	\
+              __CLOBBER_CC);						\
+    else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0)		\
+      __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl)	\
+              __CLOBBER_CC);						\
     else								\
-      __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3"          \
-	     : "=r" ((sh)),                                             \
-	       "=&r" ((sl))                                             \
-	     : "%r" ((USItype)(ah)),                                    \
-	       "r" ((USItype)(bh)),                                     \
-	       "%r" ((USItype)(al)),                                    \
-	       "rI" ((USItype)(bl)));                                   \
+      __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3"			\
+              : "=r" (sh), "=&r" (sl)					\
+              : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)		\
+              __CLOBBER_CC);						\
   } while (0)
 # define sub_ddmmss(sh, sl, ah, al, bh, bl) \
   do {									\
-    if (__builtin_constant_p (ah) && (ah) == 0) 			\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2"       \
-	       : "=r" ((sh)),                                           \
-		 "=&r" ((sl))                                           \
-	       : "r" ((USItype)(bh)),                                   \
-		 "rI" ((USItype)(al)),                                  \
-		 "r" ((USItype)(bl)));                                  \
-    else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0)		\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2"       \
-	       : "=r" ((sh)),                                  \
-		 "=&r" ((sl))                                  \
-	       : "r" ((USItype)(bh)),                                   \
-		 "rI" ((USItype)(al)),                                  \
-		 "r" ((USItype)(bl)));                                  \
+    if (__builtin_constant_p (ah) && (ah) == 0)				\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
+    else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0)		\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
     else if (__builtin_constant_p (bh) && (bh) == 0)			\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2"         \
-	       : "=r" ((sh)),                                           \
-		 "=&r" ((sl))                                           \
-	       : "r" ((USItype)(ah)),                                   \
-		 "rI" ((USItype)(al)),                                  \
-		 "r" ((USItype)(bl)));                                  \
-    else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0)		\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2"         \
-	       : "=r" ((sh)),                                           \
-		 "=&r" ((sl))                                           \
-	       : "r" ((USItype)(ah)),                                   \
-		 "rI" ((USItype)(al)),                                  \
-		 "r" ((USItype)(bl)));                                  \
+      __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
+    else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0)		\
+      __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
     else								\
-      __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2"      \
-	       : "=r" ((sh)),                                           \
-		 "=&r" ((sl))                                           \
-	       : "r" ((USItype)(ah)),                                   \
-		 "r" ((USItype)(bh)),                                   \
-		 "rI" ((USItype)(al)),                                  \
-		 "r" ((USItype)(bl)));                                  \
+      __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2"			\
+              : "=r" (sh), "=&r" (sl)					\
+              : "r" (ah), "r" (bh), "rI" (al), "r" (bl)			\
+              __CLOBBER_CC);						\
   } while (0)
 # define count_leading_zeros(count, x) \
-  __asm__ ("{cntlz|cntlzw} %0,%1"                                       \
-	   : "=r" ((count))                                             \
-	   : "r" ((USItype)(x)))
+  __asm__ ("cntlzw %0,%1" : "=r" (count) : "r" (x))
 # define COUNT_LEADING_ZEROS_0 32
-# if defined (_ARCH_PPC)
-#  define umul_ppmm(ph, pl, m0, m1) \
+# define umul_ppmm(ph, pl, m0, m1) \
   do {									\
     USItype __m0 = (m0), __m1 = (m1);					\
-    __asm__ ("mulhwu %0,%1,%2"                                          \
-	     : "=r" (ph)                                                \
-	     : "%r" (__m0),                                             \
-	       "r" (__m1));                                             \
-    (pl) = __m0 * __m1; 						\
+    __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
+    (pl) = __m0 * __m1;							\
   } while (0)
-#  define UMUL_TIME 15
-#  define smul_ppmm(ph, pl, m0, m1) \
+# define UMUL_TIME 15
+# define smul_ppmm(ph, pl, m0, m1) \
   do {									\
     SItype __m0 = (m0), __m1 = (m1);					\
-    __asm__ ("mulhw %0,%1,%2"                                           \
-	     : "=r" ((SItype) ph)                                       \
-	     : "%r" (__m0),                                             \
-	       "r" (__m1));                                             \
-    (pl) = __m0 * __m1; 						\
-  } while (0)
-#  define SMUL_TIME 14
-#  define UDIV_TIME 120
-# else
-#  define umul_ppmm(xh, xl, m0, m1) \
-  do {									\
-    USItype __m0 = (m0), __m1 = (m1);					\
-    __asm__ ("mul %0,%2,%3"                                             \
-	     : "=r" ((xh)),                                             \
-	       "=q" ((xl))                                              \
-	     : "r" (__m0),                                              \
-	       "r" (__m1));                                             \
-    (xh) += ((((SItype) __m0 >> 31) & __m1)				\
-	     + (((SItype) __m1 >> 31) & __m0)); 			\
+    __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
+    (pl) = __m0 * __m1;							\
   } while (0)
-#  define UMUL_TIME 8
-#  define smul_ppmm(xh, xl, m0, m1) \
-  __asm__ ("mul %0,%2,%3"                                               \
-	   : "=r" ((SItype)(xh)),                                       \
-	     "=q" ((SItype)(xl))                                        \
-	   : "r" (m0),                                                  \
-	     "r" (m1))
-#  define SMUL_TIME 4
-#  define sdiv_qrnnd(q, r, nh, nl, d) \
-  __asm__ ("div %0,%2,%4"                                               \
-	   : "=r" ((SItype)(q)), "=q" ((SItype)(r))                     \
-	   : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d)))
-#  define UDIV_TIME 100
-# endif
-#endif /* Power architecture variants.	*/
+# define SMUL_TIME 14
+# define UDIV_TIME 120
+#endif /* 32-bit POWER architecture variants.  */
 
-/* Powerpc 64 bit support taken from gmp-4.1.2. */
+/* Powerpc 64 bit support taken from GCC longlong.h. */
 /* We should test _IBMR2 here when we add assembly support for the system
    vendor compilers.  */
-#if (defined (_ARCH_PPC) || defined (__powerpc__)) && W_TYPE_SIZE == 64
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+#if (defined (_ARCH_PPC64) || defined (__powerpc64__)) && W_TYPE_SIZE == 64
+# define add_ssaaaa(sh, sl, ah, al, bh, bl) \
   do {									\
     if (__builtin_constant_p (bh) && (bh) == 0)				\
-      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2"		\
-	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+      __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl)	\
+              __CLOBBER_CC);						\
     else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0)		\
-      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2"		\
-	     : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+      __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl)	\
+              __CLOBBER_CC);						\
     else								\
-      __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3"		\
-	     : "=r" (sh), "=&r" (sl)					\
-	     : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl));		\
+      __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3"			\
+              : "=r" (sh), "=&r" (sl)					\
+              : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)		\
+              __CLOBBER_CC);						\
   } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+# define sub_ddmmss(sh, sl, ah, al, bh, bl) \
   do {									\
     if (__builtin_constant_p (ah) && (ah) == 0)				\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2"	\
-	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
     else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0)		\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2"	\
-	       : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+      __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
     else if (__builtin_constant_p (bh) && (bh) == 0)			\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2"		\
-	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+      __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
     else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0)		\
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2"		\
-	       : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+      __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2"			\
+              : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl)	\
+              __CLOBBER_CC);						\
     else								\
-      __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2"	\
-	       : "=r" (sh), "=&r" (sl)					\
-	       : "r" (ah), "r" (bh), "rI" (al), "r" (bl));		\
+      __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2"			\
+              : "=r" (sh), "=&r" (sl)					\
+              : "r" (ah), "r" (bh), "rI" (al), "r" (bl)			\
+              __CLOBBER_CC);						\
   } while (0)
-#define count_leading_zeros(count, x) \
+# define count_leading_zeros(count, x) \
   __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x))
-#define COUNT_LEADING_ZEROS_0 64
-#define umul_ppmm(ph, pl, m0, m1) \
+# define COUNT_LEADING_ZEROS_0 64
+# define umul_ppmm(ph, pl, m0, m1) \
   do {									\
     UDItype __m0 = (m0), __m1 = (m1);					\
     __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
     (pl) = __m0 * __m1;							\
   } while (0)
-#define UMUL_TIME 15
-#define smul_ppmm(ph, pl, m0, m1) \
+# define UMUL_TIME 15
+# define smul_ppmm(ph, pl, m0, m1) \
   do {									\
     DItype __m0 = (m0), __m1 = (m1);					\
     __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1));	\
     (pl) = __m0 * __m1;							\
   } while (0)
-#define SMUL_TIME 14  /* ??? */
-#define UDIV_TIME 120 /* ??? */
+# define SMUL_TIME 14  /* ??? */
+# define UDIV_TIME 120 /* ??? */
 #endif /* 64-bit PowerPC.  */
 
 /***************************************
-- 
2.37.2




More information about the Gcrypt-devel mailing list