Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 857 → Rev 856

/uspace/trunk/softfloat/arch/ia32/include/types.h
File deleted
/uspace/trunk/softfloat/arch/ia32/include/functions.h
File deleted
/uspace/trunk/softfloat/arch/ia32/include/arch.h
File deleted
/uspace/trunk/softfloat/generic/softfloat.c
38,10 → 38,6
#include<comparison.h>
#include<other.h>
 
#include<arch.h>
#include<types.h>
#include<functions.h>
 
/* Arithmetic functions */
 
float __addsf3(float a, float b)
164,108 → 160,7
return convertFloat64ToFloat32(da).f;
}
 
int __fixsfsi(float a)
{
float32 fa;
fa.f = a;
return float32_to_int(fa);
}
int __fixdfsi(double a)
{
}
long __fixsfdi(float a)
{
float32 fa;
fa.f = a;
return float32_to_long(fa);
}
long __fixdfdi(double a)
{
}
long long __fixsfti(float a)
{
}
long long __fixdfti(double a)
{
}
 
unsigned int __fixunssfsi(float a)
{
float32 fa;
fa.f = a;
return float32_to_uint(fa);
}
unsigned int __fixunsdfsi(double a)
{
}
unsigned long __fixunssfdi(float a)
{
float32 fa;
fa.f = a;
return float32_to_long(fa);
}
unsigned long __fixunsdfdi(double a)
{
}
unsigned long long __fixunssfti(float a)
{
}
unsigned long long __fixunsdfti(double a)
{
}
float __floatsisf(int i)
{
}
double __floatsidf(int i)
{
}
float __floatdisf(long i)
{
}
double __floatdidf(long i)
{
}
float __floattisf(long long i)
{
}
double __floattidf(long long i)
{
}
 
float __floatunsisf(unsigned int i)
{
}
double __floatunsidf(unsigned int i)
{
}
float __floatundisf(unsigned long i)
{
}
double __floatundidf(unsigned long i)
{
}
float __floatuntisf(unsigned long long i)
{
}
double __floatuntidf(unsigned long long i)
{
}
 
/* Comparison functions */
/* Comparison functions */
 
/* a<b .. -1
* a=b .. 0
/uspace/trunk/softfloat/generic/conversion.c
28,7 → 28,6
 
#include "sftypes.h"
#include "conversion.h"
#include "comparison.h"
 
float64 convertFloat32ToFloat64(float32 a)
{
67,7 → 66,7
return result;
}
};
 
float32 convertFloat64ToFloat32(float64 a)
{
136,75 → 135,5
result.parts.exp = exp;
result.parts.fraction = a.parts.fraction >> (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE);
return result;
}
};
 
 
/** Helping procedure for converting float32 to uint32
* @param a floating point number in normalized form (no NaNs or Inf are checked )
* @return unsigned integer
*/
static __u32 _float32_to_uint32_helper(float32 a)
{
__u32 frac;
if (a.parts.exp < FLOAT32_BIAS) {
/*TODO: rounding*/
return 0;
}
frac = a.parts.fraction;
frac |= FLOAT32_HIDDEN_BIT_MASK;
/* shift fraction to left so hidden bit will be the most significant bit */
frac <<= 32 - FLOAT32_FRACTION_SIZE - 1;
 
frac >>= 32 - (a.parts.exp - FLOAT32_BIAS) - 1;
if ((a.parts.sign == 1) && (frac != 0)) {
frac = ~frac;
++frac;
}
return frac;
}
 
/* Convert float to unsigned int32
* FIXME: Im not sure what to return if overflow/underflow happens
* - now its the biggest or the smallest int
*/
__u32 float32_to_uint32(float32 a)
{
if (isFloat32NaN(a)) {
return MAX_UINT32;
}
if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS))) {
if (a.parts.sign) {
return MIN_UINT32;
}
return MAX_UINT32;
}
return _float32_to_uint32_helper(a);
}
 
/* Convert float to signed int32
* FIXME: Im not sure what to return if overflow/underflow happens
* - now its the biggest or the smallest int
*/
__s32 float32_to_int32(float32 a)
{
if (isFloat32NaN(a)) {
return MAX_INT32;
}
if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS))) {
if (a.parts.sign) {
return MIN_INT32;
}
return MAX_INT32;
}
return _float32_to_uint32_helper(a);
}
 
 
 
/uspace/trunk/softfloat/include/sftypes.h
29,9 → 29,6
#ifndef __SFTYPES_H__
#define __SFTYPES_H__
 
#include <types.h>
#include <arch.h>
 
typedef union {
float f;
__u32 binary;
/uspace/trunk/softfloat/include/softfloat.h
111,21 → 111,6
long double __floattitf(long long i);
long double __floattixf(long long i);
float __floatunsisf(unsigned int i);
double __floatunsidf(unsigned int i);
long double __floatunsitf(unsigned int i);
long double __floatunsixf(unsigned int i);
float __floatundisf(unsigned long i);
double __floatundidf(unsigned long i);
long double __floatunditf(unsigned long i);
long double __floatundixf(unsigned long i);
float __floatuntisf(unsigned long long i);
double __floatuntidf(unsigned long long i);
long double __floatuntitf(unsigned long long i);
long double __floatuntixf(unsigned long long i);
int __cmpsf2(float a, float b);
int __cmpdf2(double a, double b);
int __cmptf2(long double a, long double b);