Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 833 → Rev 834

//uspace/trunk/softfloat/generic/add.c
102,7 → 102,11
if (expdiff < (FLOAT32_FRACTION_SIZE + 2) ) {
frac2 >>= expdiff;
frac1 += frac2;
};
} else {
a.parts.exp = exp1;
a.parts.fraction = (frac1 >> 6) & (~(FLOAT32_HIDDEN_BIT_MASK));
return a;
}
if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7) ) {
++exp1;
142,7 → 146,7
__u32 exp1, exp2;
__u64 frac1, frac2;
expdiff = a.parts.exp - b.parts.exp;
expdiff = ((int )a.parts.exp) - b.parts.exp;
if (expdiff < 0) {
if (isFloat64NaN(b)) {
/* TODO: fix SigNaN */
211,7 → 215,11
if (expdiff < (FLOAT64_FRACTION_SIZE + 2) ) {
frac2 >>= expdiff;
frac1 += frac2;
};
} else {
a.parts.exp = exp1;
a.parts.fraction = (frac1 >> 6) & (~(FLOAT64_HIDDEN_BIT_MASK));
return a;
}
if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7) ) {
++exp1;
227,7 → 235,7
frac1 >>= 1;
};
if ((a.parts.exp == FLOAT64_MAX_EXPONENT ) || (a.parts.exp < exp1)) {
if ((exp1 == FLOAT64_MAX_EXPONENT ) || (exp2 > exp1)) {
/* overflow - set infinity as result */
a.parts.exp = FLOAT64_MAX_EXPONENT;
a.parts.fraction = 0;
237,6 → 245,7
a.parts.exp = exp1;
/*Clear hidden bit and shift */
a.parts.fraction = ( (frac1 >> 6 ) & (~FLOAT64_HIDDEN_BIT_MASK));
return a;
}
 
//uspace/trunk/softfloat/generic/common.c
47,14 → 47,32
/* TODO: fix underflow */
};
cfrac >>= 1;
++cexp;
cfrac += (0x1 << (64 - FLOAT64_FRACTION_SIZE - 3));
if ((cexp < 0) || ( cexp == 0 && (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1)))))) {
/* FIXME: underflow */
result.parts.exp = 0;
if ((cexp + FLOAT64_FRACTION_SIZE) < 0) {
result.parts.fraction = 0;
return result;
}
//cfrac >>= 1;
while (cexp < 0) {
cexp++;
cfrac >>= 1;
}
result.parts.fraction = ((cfrac >>(64 - FLOAT64_FRACTION_SIZE - 2) ) & (~FLOAT64_HIDDEN_BIT_MASK));
 
return result;
}
++cexp;
 
if (cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1 ))) {
++cexp;
cfrac >>= 1;
}
}
 
/* check overflow */
if (cexp >= FLOAT64_MAX_EXPONENT ) {
64,26 → 82,10
return result;
}
 
if (cexp < 0) {
/* FIXME: underflow */
result.parts.exp = 0;
if ((cexp + FLOAT64_FRACTION_SIZE) < 0) {
result.parts.fraction = 0;
return result;
}
cfrac >>= 1;
while (cexp < 0) {
cexp ++;
cfrac >>= 1;
}
return result;
} else {
cexp ++; /*normalized*/
result.parts.exp = (__u32)cexp;
}
result.parts.exp = (__u32)cexp;
result.parts.fraction = ((cfrac >>(64 - FLOAT64_FRACTION_SIZE - 2 ) ) & (~FLOAT64_HIDDEN_BIT_MASK));
return result;
}