Update longlong.h from GCC to get some sparc improvements.

* stdlib/longlong.h: Updated from GCC.
This commit is contained in:
David S. Miller 2012-06-01 13:32:04 -07:00
parent 3bd872c4c4
commit 402fe938f6
2 changed files with 59 additions and 25 deletions

View File

@ -1,3 +1,7 @@
2012-06-01 David S. Miller <davem@davemloft.net>
* stdlib/longlong.h: Updated from GCC.
2012-06-01 H.J. Lu <hongjiu.lu@intel.com> 2012-06-01 H.J. Lu <hongjiu.lu@intel.com>
[BZ #14117] [BZ #14117]

View File

@ -1127,6 +1127,29 @@ UDItype __umulsidi3 (USItype, USItype);
"rJ" ((USItype) (al)), \ "rJ" ((USItype) (al)), \
"rI" ((USItype) (bl)) \ "rI" ((USItype) (bl)) \
__CLOBBER_CC) __CLOBBER_CC)
#if defined (__sparc_v9__)
#define umul_ppmm(w1, w0, u, v) \
do { \
register USItype __g1 asm ("g1"); \
__asm__ ("umul\t%2,%3,%1\n\t" \
"srlx\t%1, 32, %0" \
: "=r" ((USItype) (w1)), \
"=r" (__g1) \
: "r" ((USItype) (u)), \
"r" ((USItype) (v))); \
(w0) = __g1; \
} while (0)
#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
__asm__ ("mov\t%2,%%y\n\t" \
"udiv\t%3,%4,%0\n\t" \
"umul\t%0,%4,%1\n\t" \
"sub\t%3,%1,%1" \
: "=&r" ((USItype) (__q)), \
"=&r" ((USItype) (__r)) \
: "r" ((USItype) (__n1)), \
"r" ((USItype) (__n0)), \
"r" ((USItype) (__d)))
#else
#if defined (__sparc_v8__) #if defined (__sparc_v8__)
#define umul_ppmm(w1, w0, u, v) \ #define umul_ppmm(w1, w0, u, v) \
__asm__ ("umul %2,%3,%1;rd %%y,%0" \ __asm__ ("umul %2,%3,%1;rd %%y,%0" \
@ -1292,37 +1315,44 @@ UDItype __umulsidi3 (USItype, USItype);
#define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */ #define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */
#endif /* __sparclite__ */ #endif /* __sparclite__ */
#endif /* __sparc_v8__ */ #endif /* __sparc_v8__ */
#endif /* __sparc_v9__ */
#endif /* sparc32 */ #endif /* sparc32 */
#if ((defined (__sparc__) && defined (__arch64__)) || defined (__sparcv9)) \ #if ((defined (__sparc__) && defined (__arch64__)) || defined (__sparcv9)) \
&& W_TYPE_SIZE == 64 && W_TYPE_SIZE == 64
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
__asm__ ("addcc %r4,%5,%1\n\t" \ do { \
"add %r2,%3,%0\n\t" \ UDItype __carry = 0; \
"bcs,a,pn %%xcc, 1f\n\t" \ __asm__ ("addcc\t%r5,%6,%1\n\t" \
"add %0, 1, %0\n" \ "add\t%r3,%4,%0\n\t" \
"1:" \ "movcs\t%%xcc, 1, %2\n\t" \
: "=r" ((UDItype)(sh)), \ "add\t%0, %2, %0" \
"=&r" ((UDItype)(sl)) \ : "=r" ((UDItype)(sh)), \
: "%rJ" ((UDItype)(ah)), \ "=&r" ((UDItype)(sl)), \
"rI" ((UDItype)(bh)), \ "+r" (__carry) \
"%rJ" ((UDItype)(al)), \ : "%rJ" ((UDItype)(ah)), \
"rI" ((UDItype)(bl)) \ "rI" ((UDItype)(bh)), \
__CLOBBER_CC) "%rJ" ((UDItype)(al)), \
"rI" ((UDItype)(bl)) \
__CLOBBER_CC); \
} while (0)
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
__asm__ ("subcc %r4,%5,%1\n\t" \ do { \
"sub %r2,%3,%0\n\t" \ UDItype __carry = 0; \
"bcs,a,pn %%xcc, 1f\n\t" \ __asm__ ("subcc\t%r5,%6,%1\n\t" \
"sub %0, 1, %0\n\t" \ "sub\t%r3,%4,%0\n\t" \
"1:" \ "movcs\t%%xcc, 1, %2\n\t" \
: "=r" ((UDItype)(sh)), \ "add\t%0, %2, %0" \
"=&r" ((UDItype)(sl)) \ : "=r" ((UDItype)(sh)), \
: "rJ" ((UDItype)(ah)), \ "=&r" ((UDItype)(sl)), \
"rI" ((UDItype)(bh)), \ "+r" (__carry) \
"rJ" ((UDItype)(al)), \ : "%rJ" ((UDItype)(ah)), \
"rI" ((UDItype)(bl)) \ "rI" ((UDItype)(bh)), \
__CLOBBER_CC) "%rJ" ((UDItype)(al)), \
"rI" ((UDItype)(bl)) \
__CLOBBER_CC); \
} while (0)
#define umul_ppmm(wh, wl, u, v) \ #define umul_ppmm(wh, wl, u, v) \
do { \ do { \