Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 659 → Rev 660

/uspace/trunk/softfloat/include/comparison.h
32,7 → 32,7
inline int isFloat32NaN(float32 f);
inline int isFloat32SigNaN(float32 f);
 
inline int isFloat32Infinity(float32 f)
inline int isFloat32Infinity(float32 f);
 
inline int isFloat32eq(float32 a, float32 b);
inline int isFloat32lt(float32 a, float32 b);
/uspace/trunk/softfloat/generic/softfloat.c
57,7 → 57,7
fa.f=a;
fb.f=b;
if (fa.parts.sign!=fb.parts.sign) {
fb.parts.sign!=fb.parts.sign;
fb.parts.sign=!fb.parts.sign;
return addFloat32(fa,fb).f;
}
return subFloat32(fa,fb).f;
88,7 → 88,7
* a>b .. 1
* */
 
int __cmpsf2(double a, double b)
int __cmpsf2(float a, float b)
{
float32 fa,fb;
fa.f=a;
145,7 → 145,7
fb.f=b;
if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
/* TODO: sigNaNs*/
return 1;
return -1;
};
if (isFloat32eq(fa,fb)) {
198,7 → 198,7
}
 
/** Return positive value, if a>b and neither is NaN*/
int __ltsf2(float a, float b)
int __gtsf2(float a, float b)
{
float32 fa,fb;
fa.f=a;
205,7 → 205,7
fb.f=b;
if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
/* TODO: sigNaNs*/
return 1;
return -1;
};
if (isFloat32gt(fa, fb)) {
return 1;
/uspace/trunk/softfloat/generic/arithmetic.c
28,6 → 28,7
 
#include<sftypes.h>
#include<arithmetic.h>
#include<comparison.h>
 
/** Add two Float32 numbers with same signs
*/
/uspace/trunk/softfloat/generic/comparison.c
49,7 → 49,7
*/
inline int isFloat32eq(float32 a, float32 b)
{
return ((a==b)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
return ((a.binary==b.binary)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
}
 
/**
58,10 → 58,17
inline int isFloat32lt(float32 a, float32 b)
{
if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
return 0;
return 0; /* +- zeroes */
};
a.parts.sign^=a.parts.sign;
b.parts.sign^=b.parts.sign;
if ((a.parts.sign)&&(b.parts.sign)) {
/*if both are negative, smaller is that with greater binary value*/
return (a.binary>b.binary);
};
/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
a.parts.sign=!a.parts.sign;
b.parts.sign=!b.parts.sign;
return (a.binary<b.binary);
}
72,10 → 79,17
inline int isFloat32gt(float32 a, float32 b)
{
if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
return 0;
return 0; /* zeroes are equal with any sign */
};
a.parts.sign^=a.parts.sign;
b.parts.sign^=b.parts.sign;
if ((a.parts.sign)&&(b.parts.sign)) {
/*if both are negative, greater is that with smaller binary value*/
return (a.binary<b.binary);
};
/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
a.parts.sign=!a.parts.sign;
b.parts.sign=!b.parts.sign;
return (a.binary>b.binary);
}