Revision b645bb48

b/fpu/softfloat-specialize.h
61 61
/*----------------------------------------------------------------------------
62 62
| The pattern for a default generated single-precision NaN.
63 63
*----------------------------------------------------------------------------*/
64
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
65
#define float32_default_nan 0xFF800000
66
#else
64 67
#define float32_default_nan 0xFFC00000
68
#endif
65 69

  
66 70
/*----------------------------------------------------------------------------
67 71
| Returns 1 if the single-precision floating-point value `a' is a NaN;
......
70 74

  
71 75
int float32_is_nan( float32 a )
72 76
{
73

  
74
    return ( 0xFF000000 < (bits32) ( a<<1 ) );
75

  
77
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
78
    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
79
#else
80
    return ( 0xFF800000 <= (bits32) ( a<<1 ) );
81
#endif
76 82
}
77 83

  
78 84
/*----------------------------------------------------------------------------
......
82 88

  
83 89
int float32_is_signaling_nan( float32 a )
84 90
{
85

  
91
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
92
    return ( 0xFF800000 <= (bits32) ( a<<1 ) );
93
#else
86 94
    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
87

  
95
#endif
88 96
}
89 97

  
90 98
/*----------------------------------------------------------------------------
......
131 139
    aIsSignalingNaN = float32_is_signaling_nan( a );
132 140
    bIsNaN = float32_is_nan( b );
133 141
    bIsSignalingNaN = float32_is_signaling_nan( b );
142
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
143
    a &= ~0x00400000;
144
    b &= ~0x00400000;
145
#else
134 146
    a |= 0x00400000;
135 147
    b |= 0x00400000;
148
#endif
136 149
    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid STATUS_VAR);
137 150
    if ( aIsSignalingNaN ) {
138 151
        if ( bIsSignalingNaN ) goto returnLargerSignificand;
......
154 167
/*----------------------------------------------------------------------------
155 168
| The pattern for a default generated double-precision NaN.
156 169
*----------------------------------------------------------------------------*/
170
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
171
#define float64_default_nan LIT64( 0xFFF0000000000000 )
172
#else
157 173
#define float64_default_nan LIT64( 0xFFF8000000000000 )
174
#endif
158 175

  
159 176
/*----------------------------------------------------------------------------
160 177
| Returns 1 if the double-precision floating-point value `a' is a NaN;
......
163 180

  
164 181
int float64_is_nan( float64 a )
165 182
{
166

  
167
    return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) );
168

  
183
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
184
    return
185
           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
186
        && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );
187
#else
188
    return ( LIT64( 0xFFF0000000000000 ) <= (bits64) ( a<<1 ) );
189
#endif
169 190
}
170 191

  
171 192
/*----------------------------------------------------------------------------
......
175 196

  
176 197
int float64_is_signaling_nan( float64 a )
177 198
{
178

  
199
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
200
    return ( LIT64( 0xFFF0000000000000 ) <= (bits64) ( a<<1 ) );
201
#else
179 202
    return
180 203
           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
181 204
        && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );
182

  
205
#endif
183 206
}
184 207

  
185 208
/*----------------------------------------------------------------------------
......
229 252
    aIsSignalingNaN = float64_is_signaling_nan( a );
230 253
    bIsNaN = float64_is_nan( b );
231 254
    bIsSignalingNaN = float64_is_signaling_nan( b );
255
#if defined(TARGET_MIPS) || defined(TARGET_HPPA)
256
    a &= ~LIT64( 0x0008000000000000 );
257
    b &= ~LIT64( 0x0008000000000000 );
258
#else
232 259
    a |= LIT64( 0x0008000000000000 );
233 260
    b |= LIT64( 0x0008000000000000 );
261
#endif
234 262
    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid STATUS_VAR);
235 263
    if ( aIsSignalingNaN ) {
236 264
        if ( bIsSignalingNaN ) goto returnLargerSignificand;

Also available in: Unified diff