56{
62 bool sign, raiseInexact;
67
68
69
74
75
76 if ( ! sig && (exp != 0x7FFF) ) return 0;
77 shiftDist = 0x403E - exp;
78 if ( 64 <= shiftDist ) {
79 raiseInexact = exact;
80 z = 0;
81 } else {
83 raiseInexact = false;
84 if ( shiftDist < 0 ) {
85 if ( sig>>32 || (shiftDist <= -31) ) goto invalid;
87 if ( shiftedSig>>32 ) goto invalid;
88 absZ = shiftedSig;
89 } else {
90 shiftedSig = sig;
91 if ( shiftDist ) shiftedSig >>= shiftDist;
92 if ( shiftedSig>>32 ) goto invalid;
93 absZ = shiftedSig;
94 if ( exact && shiftDist ) {
95 raiseInexact = ((
uint64_t) absZ<<shiftDist != sig);
96 }
97 }
98 if ( sign ) {
99 if ( 0x80000000 < absZ ) goto invalid;
100 u.ui = -absZ;
101 z = u.i;
102 } else {
103 if ( 0x80000000 <= absZ ) goto invalid;
104 z = absZ;
105 }
106 }
108 return z;
109
110
111 invalid:
113 return
116
117}
void softfloat_raiseFlags(uint_fast8_t flags)
#define i32_fromNegOverflow
#define i32_fromPosOverflow
#define expExtF80UI64(a64)
#define signExtF80UI64(a64)
THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags
unsigned __int64 uint64_t