56{
62 bool sign, raiseInexact;
66
67
68
73
74
75 if ( ! sig && (exp != 0x7FFF) ) return 0;
76 shiftDist = 0x403E - exp;
77 if ( 64 <= shiftDist ) {
78 raiseInexact = exact;
79 z = 0;
80 } else {
82 raiseInexact = false;
83 if ( shiftDist < 0 ) {
84 if ( shiftDist <= -63 ) goto invalid;
85 shiftDist = -shiftDist;
86 absZ = sig<<shiftDist;
87 if ( absZ>>shiftDist != sig ) goto invalid;
88 } else {
89 absZ = sig;
90 if ( shiftDist ) absZ >>= shiftDist;
91 if ( exact && shiftDist ) raiseInexact = (absZ<<shiftDist != sig);
92 }
93 if ( sign ) {
94 if (
UINT64_C( 0x8000000000000000 ) < absZ )
goto invalid;
95 u.ui = -absZ;
96 z = u.i;
97 } else {
98 if (
UINT64_C( 0x8000000000000000 ) <= absZ )
goto invalid;
99 z = absZ;
100 }
101 }
103 return z;
104
105
106 invalid:
108 return
111
112}
void softfloat_raiseFlags(uint_fast8_t flags)
#define i64_fromNegOverflow
#define i64_fromPosOverflow
#define expExtF80UI64(a64)
#define signExtF80UI64(a64)
THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags
unsigned __int64 uint64_t