more native FPU comparison functions - native FPU remainder
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1339 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									1d6bda3561
								
							
						
					
					
						commit
						b109f9f867
					
				| 
						 | 
				
			
			@ -120,10 +120,39 @@ float32 float32_round_to_int( float32 a STATUS_PARAM)
 | 
			
		|||
    return rintf(a);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float32 float32_rem( float32 a, float32 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return remainderf(a, b);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float32 float32_sqrt( float32 a STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return sqrtf(a);
 | 
			
		||||
}
 | 
			
		||||
char float32_compare( float32 a, float32 b STATUS_PARAM )
 | 
			
		||||
{
 | 
			
		||||
    if (a < b) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (a == b) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else if (a > b) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    } else {
 | 
			
		||||
        return 2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
char float32_compare_quiet( float32 a, float32 b STATUS_PARAM )
 | 
			
		||||
{
 | 
			
		||||
    if (isless(a, b)) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (a == b) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else if (isgreater(a, b)) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    } else {
 | 
			
		||||
        return 2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
char float32_is_signaling_nan( float32 a1)
 | 
			
		||||
{
 | 
			
		||||
    float32u u;
 | 
			
		||||
| 
						 | 
				
			
			@ -195,10 +224,39 @@ float64 float64_round_to_int( float64 a STATUS_PARAM )
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float64 float64_rem( float64 a, float64 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return remainder(a, b);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float64 float64_sqrt( float64 a STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return sqrt(a);
 | 
			
		||||
}
 | 
			
		||||
char float64_compare( float64 a, float64 b STATUS_PARAM )
 | 
			
		||||
{
 | 
			
		||||
    if (a < b) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (a == b) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else if (a > b) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    } else {
 | 
			
		||||
        return 2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
char float64_compare_quiet( float64 a, float64 b STATUS_PARAM )
 | 
			
		||||
{
 | 
			
		||||
    if (isless(a, b)) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (a == b) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else if (isgreater(a, b)) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    } else {
 | 
			
		||||
        return 2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
char float64_is_signaling_nan( float64 a1)
 | 
			
		||||
{
 | 
			
		||||
    float64u u;
 | 
			
		||||
| 
						 | 
				
			
			@ -248,10 +306,38 @@ floatx80 floatx80_round_to_int( floatx80 a STATUS_PARAM)
 | 
			
		|||
{
 | 
			
		||||
    return rintl(a);
 | 
			
		||||
}
 | 
			
		||||
floatx80 floatx80_rem( floatx80 a, floatx80 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return remainderl(a, b);
 | 
			
		||||
}
 | 
			
		||||
floatx80 floatx80_sqrt( floatx80 a STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return sqrtl(a);
 | 
			
		||||
}
 | 
			
		||||
char floatx80_compare( floatx80 a, floatx80 b STATUS_PARAM )
 | 
			
		||||
{
 | 
			
		||||
    if (a < b) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (a == b) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else if (a > b) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    } else {
 | 
			
		||||
        return 2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
char floatx80_compare_quiet( floatx80 a, floatx80 b STATUS_PARAM )
 | 
			
		||||
{
 | 
			
		||||
    if (isless(a, b)) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (a == b) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    } else if (isgreater(a, b)) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    } else {
 | 
			
		||||
        return 2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
char floatx80_is_signaling_nan( floatx80 a1)
 | 
			
		||||
{
 | 
			
		||||
    floatx80u u;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,7 +127,6 @@ float32 float32_rem( float32, float32  STATUS_PARAM);
 | 
			
		|||
float32 float32_sqrt( float32  STATUS_PARAM);
 | 
			
		||||
INLINE char float32_eq( float32 a, float32 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    /* XXX: incorrect because it can raise an exception */
 | 
			
		||||
    return a == b;
 | 
			
		||||
}
 | 
			
		||||
INLINE char float32_le( float32 a, float32 b STATUS_PARAM)
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +139,7 @@ INLINE char float32_lt( float32 a, float32 b STATUS_PARAM)
 | 
			
		|||
}
 | 
			
		||||
INLINE char float32_eq_signaling( float32 a, float32 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return a == b;
 | 
			
		||||
    return a <= b && a >= b;
 | 
			
		||||
}
 | 
			
		||||
INLINE char float32_le_quiet( float32 a, float32 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +149,13 @@ INLINE char float32_lt_quiet( float32 a, float32 b STATUS_PARAM)
 | 
			
		|||
{
 | 
			
		||||
    return isless(a, b);
 | 
			
		||||
}
 | 
			
		||||
INLINE char float32_unordered( float32 a, float32 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return isunordered(a, b);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
char float32_compare( float32, float32 STATUS_PARAM );
 | 
			
		||||
char float32_compare_quiet( float32, float32 STATUS_PARAM );
 | 
			
		||||
char float32_is_signaling_nan( float32 );
 | 
			
		||||
 | 
			
		||||
INLINE float32 float32_abs(float32 a)
 | 
			
		||||
| 
						 | 
				
			
			@ -213,7 +219,7 @@ INLINE char float64_lt( float64 a, float64 b STATUS_PARAM)
 | 
			
		|||
}
 | 
			
		||||
INLINE char float64_eq_signaling( float64 a, float64 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return a == b;
 | 
			
		||||
    return a <= b && a >= b;
 | 
			
		||||
}
 | 
			
		||||
INLINE char float64_le_quiet( float64 a, float64 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +230,13 @@ INLINE char float64_lt_quiet( float64 a, float64 b STATUS_PARAM)
 | 
			
		|||
    return isless(a, b);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
INLINE char float64_unordered( float64 a, float64 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return isunordered(a, b);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
char float64_compare( float64, float64 STATUS_PARAM );
 | 
			
		||||
char float64_compare_quiet( float64, float64 STATUS_PARAM );
 | 
			
		||||
char float64_is_signaling_nan( float64 );
 | 
			
		||||
 | 
			
		||||
INLINE float64 float64_abs(float64 a)
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +300,7 @@ INLINE char floatx80_lt( floatx80 a, floatx80 b STATUS_PARAM)
 | 
			
		|||
}
 | 
			
		||||
INLINE char floatx80_eq_signaling( floatx80 a, floatx80 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return a == b;
 | 
			
		||||
    return a <= b && a >= b;
 | 
			
		||||
}
 | 
			
		||||
INLINE char floatx80_le_quiet( floatx80 a, floatx80 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -298,6 +311,13 @@ INLINE char floatx80_lt_quiet( floatx80 a, floatx80 b STATUS_PARAM)
 | 
			
		|||
    return isless(a, b);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
INLINE char floatx80_unordered( floatx80 a, floatx80 b STATUS_PARAM)
 | 
			
		||||
{
 | 
			
		||||
    return isunordered(a, b);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
char floatx80_compare( floatx80, floatx80 STATUS_PARAM );
 | 
			
		||||
char floatx80_compare_quiet( floatx80, floatx80 STATUS_PARAM );
 | 
			
		||||
char floatx80_is_signaling_nan( floatx80 );
 | 
			
		||||
 | 
			
		||||
INLINE floatx80 floatx80_abs(floatx80 a)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue