~ubuntu-branches/ubuntu/hardy/kvm/hardy-backports

« back to all changes in this revision

Viewing changes to qemu/fpu/softfloat-specialize.h

  • Committer: Bazaar Package Importer
  • Author(s): Soren Hansen
  • Date: 2008-01-03 10:39:25 UTC
  • mfrom: (1.1.16 upstream)
  • Revision ID: james.westby@ubuntu.com-20080103103925-8480u7sq2646hvbh
Tags: 1:59+dfsg-0ubuntu1
* New upstream release
* Build with alsa support (cherry pick from 57+dfsg-2)

Show diffs side-by-side

added added

removed removed

Lines of Context:
65
65
/*----------------------------------------------------------------------------
66
66
| The pattern for a default generated single-precision NaN.
67
67
*----------------------------------------------------------------------------*/
68
 
#if SNAN_BIT_IS_ONE
 
68
#if defined(TARGET_SPARC)
 
69
#define float32_default_nan make_float32(0x7FFFFFFF)
 
70
#elif defined(TARGET_POWERPC)
 
71
#define float32_default_nan make_float32(0x7FC00000)
 
72
#elif defined(TARGET_HPPA)
 
73
#define float32_default_nan make_float32(0x7FA00000)
 
74
#elif SNAN_BIT_IS_ONE
69
75
#define float32_default_nan make_float32(0x7FBFFFFF)
70
76
#else
71
77
#define float32_default_nan make_float32(0xFFC00000)
125
131
 
126
132
static float32 commonNaNToFloat32( commonNaNT a )
127
133
{
128
 
    return make_float32(
129
 
        ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 ) );
 
134
    bits32 mantissa = a.high>>41;
 
135
    if ( mantissa )
 
136
        return make_float32(
 
137
            ( ( (bits32) a.sign )<<31 ) | 0x7F800000 | ( a.high>>41 ) );
 
138
    else
 
139
        return float32_default_nan;
130
140
}
131
141
 
132
142
/*----------------------------------------------------------------------------
180
190
/*----------------------------------------------------------------------------
181
191
| The pattern for a default generated double-precision NaN.
182
192
*----------------------------------------------------------------------------*/
183
 
#if SNAN_BIT_IS_ONE
 
193
#if defined(TARGET_SPARC)
 
194
#define float64_default_nan make_float64(LIT64( 0x7FFFFFFFFFFFFFFF ))
 
195
#elif defined(TARGET_POWERPC)
 
196
#define float64_default_nan make_float64(LIT64( 0x7FF8000000000000 ))
 
197
#elif defined(TARGET_HPPA)
 
198
#define float64_default_nan make_float64(LIT64( 0x7FF4000000000000 ))
 
199
#elif SNAN_BIT_IS_ONE
184
200
#define float64_default_nan make_float64(LIT64( 0x7FF7FFFFFFFFFFFF ))
185
201
#else
186
202
#define float64_default_nan make_float64(LIT64( 0xFFF8000000000000 ))
244
260
 
245
261
static float64 commonNaNToFloat64( commonNaNT a )
246
262
{
247
 
    return make_float64(
248
 
          ( ( (bits64) a.sign )<<63 )
249
 
        | LIT64( 0x7FF8000000000000 )
250
 
        | ( a.high>>12 ));
 
263
    bits64 mantissa = a.high>>12;
 
264
 
 
265
    if ( mantissa )
 
266
        return make_float64(
 
267
              ( ( (bits64) a.sign )<<63 )
 
268
            | LIT64( 0x7FF0000000000000 )
 
269
            | ( a.high>>12 ));
 
270
    else
 
271
        return float64_default_nan;
251
272
}
252
273
 
253
274
/*----------------------------------------------------------------------------
366
387
    if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid STATUS_VAR);
367
388
    z.sign = a.high>>15;
368
389
    z.low = 0;
369
 
    z.high = a.low<<1;
 
390
    z.high = a.low;
370
391
    return z;
371
392
}
372
393
 
379
400
{
380
401
    floatx80 z;
381
402
 
382
 
    z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );
 
403
    if (a.high)
 
404
        z.low = a.high;
 
405
    else
 
406
        z.low = floatx80_default_nan_low;
383
407
    z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;
384
408
    return z;
385
409
}
500
524
    float128 z;
501
525
 
502
526
    shift128Right( a.high, a.low, 16, &z.high, &z.low );
503
 
    z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 );
 
527
    z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF000000000000 );
504
528
    return z;
505
529
}
506
530