Pull in r201909 from upstream compiler-rt trunk (by Joerg Sonnenberger):

Introduce CRT_HAS_128BIT, currently for all __LP64__ platforms.
  Use it to enable the various functions for TI mode.

This makes sure the correct primitives are also built for sparc64.
This commit is contained in:
Dimitry Andric 2014-02-22 00:09:43 +00:00
parent 9bc21aae69
commit b663c98c57
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/projects/clang-sparc64/; revision=262316
36 changed files with 77 additions and 73 deletions

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: absolute value */
@ -30,4 +30,5 @@ __absvti2(ti_int a)
return (a ^ s) - s;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: a + b */
@ -37,4 +37,4 @@ __addvti3(ti_int a, ti_int b)
return s;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: a << b */
@ -42,4 +42,4 @@ __ashlti3(ti_int a, si_int b)
return result.all;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: arithmetic a >> b */
@ -43,4 +43,4 @@ __ashrti3(ti_int a, si_int b)
return result.all;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: the number of leading 0-bits */
@ -30,4 +30,4 @@ __clzti2(ti_int a)
((si_int)f & ((si_int)(sizeof(di_int) * CHAR_BIT)));
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: if (a < b) returns 0
* if (a == b) returns 1
@ -39,4 +39,4 @@ __cmpti2(ti_int a, ti_int b)
return 1;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: the number of trailing 0-bits */
@ -30,4 +30,4 @@ __ctzti2(ti_int a)
((si_int)f & ((si_int)(sizeof(di_int) * CHAR_BIT)));
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
@ -32,4 +32,4 @@ __divti3(ti_int a, ti_int b)
return (__udivmodti4(a, b, (tu_int*)0) ^ s_a) - s_a; /* negate if s_a == -1 */
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: the index of the least significant 1-bit in a, or
* the value zero if a is zero. The least significant bit is index one.
@ -34,4 +34,4 @@ __ffsti2(ti_int a)
return __builtin_ctzll(x.s.low) + 1;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a signed long long, rounding toward zero. */
@ -42,4 +42,4 @@ __fixdfti(double a)
return (r ^ s) - s;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a signed long long, rounding toward zero. */
@ -42,4 +42,4 @@ __fixsfti(float a)
return (r ^ s) - s;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a unsigned long long, rounding toward zero.
* Negative values all become zero.
@ -44,4 +44,4 @@ __fixunsdfti(double a)
return r;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a unsigned long long, rounding toward zero.
* Negative values all become zero.
@ -44,4 +44,4 @@ __fixunssfti(float a)
return r;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a unsigned long long, rounding toward zero.
* Negative values all become zero.
@ -46,4 +46,4 @@ __fixunsxfti(long double a)
return r;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a signed long long, rounding toward zero. */
@ -44,4 +44,4 @@ __fixxfti(long double a)
return (r ^ s) - s;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a double, rounding toward even.*/
@ -82,4 +82,4 @@ __floattidf(ti_int a)
return fb.f;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a float, rounding toward even. */
@ -81,4 +81,4 @@ __floattisf(ti_int a)
return fb.f;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a long double, rounding toward even. */
@ -47,7 +47,7 @@ __floattixf(ti_int a)
* P = bit LDBL_MANT_DIG-1 bits to the right of 1
* Q = bit LDBL_MANT_DIG bits to the right of 1
* R = "or" of all bits to the right of Q
*/
*/
switch (sd)
{
case LDBL_MANT_DIG + 1:
@ -83,4 +83,4 @@ __floattixf(ti_int a)
return fb.f;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a double, rounding toward even. */
@ -43,7 +43,7 @@ __floatuntidf(tu_int a)
* P = bit DBL_MANT_DIG-1 bits to the right of 1
* Q = bit DBL_MANT_DIG bits to the right of 1
* R = "or" of all bits to the right of Q
*/
*/
switch (sd)
{
case DBL_MANT_DIG + 1:
@ -79,4 +79,4 @@ __floatuntidf(tu_int a)
return fb.f;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a float, rounding toward even. */
@ -78,4 +78,4 @@ __floatuntisf(tu_int a)
return fb.f;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: convert a to a long double, rounding toward even. */

View File

@ -56,8 +56,11 @@ typedef union
}s;
} udwords;
#if __x86_64
#if __LP64__
#define CRT_HAS_128BIT
#endif
#ifdef CRT_HAS_128BIT
typedef int ti_int __attribute__ ((mode (TI)));
typedef unsigned tu_int __attribute__ ((mode (TI)));
@ -105,7 +108,7 @@ static inline tu_int make_tu(du_int h, du_int l) {
return r.all;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */
typedef union
{

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: logical a >> b */
@ -42,4 +42,4 @@ __lshrti3(ti_int a, si_int b)
return result.all;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
@ -33,4 +33,4 @@ __modti3(ti_int a, ti_int b)
return (r ^ s) - s; /* negate if s == -1 */
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: a * b */
@ -59,4 +59,4 @@ __muloti4(ti_int a, ti_int b, int* overflow)
return result;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: a * b */
@ -55,4 +55,4 @@ __multi3(ti_int a, ti_int b)
return r.all;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: a * b */
@ -57,4 +57,4 @@ __mulvti3(ti_int a, ti_int b)
return a * b;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: -a */
@ -27,4 +27,4 @@ __negti2(ti_int a)
return -a;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: -a */
@ -29,4 +29,4 @@ __negvti2(ti_int a)
return -a;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: 1 if number of bits is odd else returns 0 */
@ -28,4 +28,4 @@ __parityti2(ti_int a)
return __paritydi2(x.s.high ^ x.s.low);
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: count of 1 bits */
@ -41,4 +41,4 @@ __popcountti2(ti_int a)
return (x + (x >> 8)) & 0xFF; /* (8 significant bits) */
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: a - b */
@ -37,4 +37,4 @@ __subvti3(ti_int a, ti_int b)
return s;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Returns: if (a < b) returns 0
* if (a == b) returns 1
@ -39,4 +39,4 @@ __ucmpti2(tu_int a, tu_int b)
return 1;
}
#endif
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
/* Effects: if rem != 0, *rem = a % b
* Returns: a / b
@ -253,4 +253,4 @@ __udivmodti4(tu_int a, tu_int b, tu_int* rem)
return q.all;
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
@ -26,4 +26,4 @@ __udivti3(tu_int a, tu_int b)
return __udivmodti4(a, b, 0);
}
#endif /* __x86_64 */
#endif /* CRT_HAS_128BIT */

View File

@ -14,7 +14,7 @@
#include "int_lib.h"
#if __x86_64
#ifdef CRT_HAS_128BIT
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
@ -28,4 +28,4 @@ __umodti3(tu_int a, tu_int b)
return r;
}
#endif
#endif /* CRT_HAS_128BIT */