46#ifdef SOFTFLOAT_BUILTIN_CLZ
49 {
return a ? __builtin_clz(
a ) - 16 : 16; }
50#define softfloat_countLeadingZeros16 softfloat_countLeadingZeros16
53 {
return a ? __builtin_clz(
a ) : 32; }
54#define softfloat_countLeadingZeros32 softfloat_countLeadingZeros32
57 {
return a ? __builtin_clzll(
a ) : 64; }
58#define softfloat_countLeadingZeros64 softfloat_countLeadingZeros64
62#ifdef SOFTFLOAT_INTRINSIC_INT128
66 union {
unsigned __int128 ui;
struct uint128
s; } uZ;
70#define softfloat_mul64ByShifted32To128 softfloat_mul64ByShifted32To128
74 union {
unsigned __int128 ui;
struct uint128
s; } uZ;
75 uZ.ui = (
unsigned __int128)
a * b;
78#define softfloat_mul64To128 softfloat_mul64To128
83 union {
unsigned __int128 ui;
struct uint128
s; } uZ;
84 uZ.ui = ((
unsigned __int128) a64<<64 | a0) * b;
87#define softfloat_mul128By32 softfloat_mul128By32
94 unsigned __int128 z0, mid1, mid, z128;
95 z0 = (
unsigned __int128) a0 * b0;
96 mid1 = (
unsigned __int128) a64 * b0;
97 mid = mid1 + (
unsigned __int128) a0 * b64;
98 z128 = (
unsigned __int128) a64 * b64;
99 z128 += (
unsigned __int128) (mid < mid1)<<64 | mid>>64;
108#define softfloat_mul128To256M softfloat_mul128To256M
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
#define indexWord(total, n)
#define softfloat_countLeadingZeros16
#define softfloat_countLeadingZeros32
#define softfloat_countLeadingZeros64
struct uint128 softfloat_mul128By32(uint64_t a64, uint64_t a0, uint32_t b)
#define softfloat_mul128To256M
struct uint128 softfloat_mul64ByShifted32To128(uint64_t a, uint32_t b)
struct uint128 softfloat_mul64To128(uint64_t a, uint64_t b)
unsigned __int64 uint64_t