Revision bb98fe42 fpu/softfloat-specialize.h

b/fpu/softfloat-specialize.h
52 52
*----------------------------------------------------------------------------*/
53 53
typedef struct {
54 54
    flag sign;
55
    bits64 high, low;
55
    uint64_t high, low;
56 56
} commonNaNT;
57 57

  
58 58
/*----------------------------------------------------------------------------
......
120 120
    if ( float16_is_signaling_nan( a ) ) float_raise( float_flag_invalid STATUS_VAR );
121 121
    z.sign = float16_val(a) >> 15;
122 122
    z.low = 0;
123
    z.high = ((bits64) float16_val(a))<<54;
123
    z.high = ((uint64_t) float16_val(a))<<54;
124 124
    return z;
125 125
}
126 126

  
......
156 156
#if SNAN_BIT_IS_ONE
157 157
    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
158 158
#else
159
    return ( 0xFF800000 <= (bits32) ( a<<1 ) );
159
    return ( 0xFF800000 <= (uint32_t) ( a<<1 ) );
160 160
#endif
161 161
}
162 162

  
......
169 169
{
170 170
    uint32_t a = float32_val(a_);
171 171
#if SNAN_BIT_IS_ONE
172
    return ( 0xFF800000 <= (bits32) ( a<<1 ) );
172
    return ( 0xFF800000 <= (uint32_t) ( a<<1 ) );
173 173
#else
174 174
    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
175 175
#endif
......
190 190
#    error Rules for silencing a signaling NaN are target-specific
191 191
#  endif
192 192
#else
193
        bits32 a = float32_val(a_);
193
        uint32_t a = float32_val(a_);
194 194
        a |= (1 << 22);
195 195
        return make_float32(a);
196 196
#endif
......
211 211
    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid STATUS_VAR );
212 212
    z.sign = float32_val(a)>>31;
213 213
    z.low = 0;
214
    z.high = ( (bits64) float32_val(a) )<<41;
214
    z.high = ( (uint64_t) float32_val(a) )<<41;
215 215
    return z;
216 216
}
217 217

  
......
222 222

  
223 223
static float32 commonNaNToFloat32( commonNaNT a STATUS_PARAM)
224 224
{
225
    bits32 mantissa = a.high>>41;
225
    uint32_t mantissa = a.high>>41;
226 226

  
227 227
    if ( STATUS(default_nan_mode) ) {
228 228
        return float32_default_nan;
......
230 230

  
231 231
    if ( mantissa )
232 232
        return make_float32(
233
            ( ( (bits32) a.sign )<<31 ) | 0x7F800000 | ( a.high>>41 ) );
233
            ( ( (uint32_t) a.sign )<<31 ) | 0x7F800000 | ( a.high>>41 ) );
234 234
    else
235 235
        return float32_default_nan;
236 236
}
......
357 357
{
358 358
    flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN;
359 359
    flag aIsLargerSignificand;
360
    bits32 av, bv;
360
    uint32_t av, bv;
361 361

  
362 362
    aIsQuietNaN = float32_is_quiet_nan( a );
363 363
    aIsSignalingNaN = float32_is_signaling_nan( a );
......
371 371
    if ( STATUS(default_nan_mode) )
372 372
        return float32_default_nan;
373 373

  
374
    if ((bits32)(av<<1) < (bits32)(bv<<1)) {
374
    if ((uint32_t)(av<<1) < (uint32_t)(bv<<1)) {
375 375
        aIsLargerSignificand = 0;
376
    } else if ((bits32)(bv<<1) < (bits32)(av<<1)) {
376
    } else if ((uint32_t)(bv<<1) < (uint32_t)(av<<1)) {
377 377
        aIsLargerSignificand = 1;
378 378
    } else {
379 379
        aIsLargerSignificand = (av < bv) ? 1 : 0;
......
394 394

  
395 395
int float64_is_quiet_nan( float64 a_ )
396 396
{
397
    bits64 a = float64_val(a_);
397
    uint64_t a = float64_val(a_);
398 398
#if SNAN_BIT_IS_ONE
399 399
    return
400 400
           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
401 401
        && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );
402 402
#else
403
    return ( LIT64( 0xFFF0000000000000 ) <= (bits64) ( a<<1 ) );
403
    return ( LIT64( 0xFFF0000000000000 ) <= (uint64_t) ( a<<1 ) );
404 404
#endif
405 405
}
406 406

  
......
411 411

  
412 412
int float64_is_signaling_nan( float64 a_ )
413 413
{
414
    bits64 a = float64_val(a_);
414
    uint64_t a = float64_val(a_);
415 415
#if SNAN_BIT_IS_ONE
416
    return ( LIT64( 0xFFF0000000000000 ) <= (bits64) ( a<<1 ) );
416
    return ( LIT64( 0xFFF0000000000000 ) <= (uint64_t) ( a<<1 ) );
417 417
#else
418 418
    return
419 419
           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
......
436 436
#    error Rules for silencing a signaling NaN are target-specific
437 437
#  endif
438 438
#else
439
        bits64 a = float64_val(a_);
439
        uint64_t a = float64_val(a_);
440 440
        a |= LIT64( 0x0008000000000000 );
441 441
        return make_float64(a);
442 442
#endif
......
468 468

  
469 469
static float64 commonNaNToFloat64( commonNaNT a STATUS_PARAM)
470 470
{
471
    bits64 mantissa = a.high>>12;
471
    uint64_t mantissa = a.high>>12;
472 472

  
473 473
    if ( STATUS(default_nan_mode) ) {
474 474
        return float64_default_nan;
......
476 476

  
477 477
    if ( mantissa )
478 478
        return make_float64(
479
              ( ( (bits64) a.sign )<<63 )
479
              ( ( (uint64_t) a.sign )<<63 )
480 480
            | LIT64( 0x7FF0000000000000 )
481 481
            | ( a.high>>12 ));
482 482
    else
......
493 493
{
494 494
    flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN;
495 495
    flag aIsLargerSignificand;
496
    bits64 av, bv;
496
    uint64_t av, bv;
497 497

  
498 498
    aIsQuietNaN = float64_is_quiet_nan( a );
499 499
    aIsSignalingNaN = float64_is_signaling_nan( a );
......
507 507
    if ( STATUS(default_nan_mode) )
508 508
        return float64_default_nan;
509 509

  
510
    if ((bits64)(av<<1) < (bits64)(bv<<1)) {
510
    if ((uint64_t)(av<<1) < (uint64_t)(bv<<1)) {
511 511
        aIsLargerSignificand = 0;
512
    } else if ((bits64)(bv<<1) < (bits64)(av<<1)) {
512
    } else if ((uint64_t)(bv<<1) < (uint64_t)(av<<1)) {
513 513
        aIsLargerSignificand = 1;
514 514
    } else {
515 515
        aIsLargerSignificand = (av < bv) ? 1 : 0;
......
534 534
int floatx80_is_quiet_nan( floatx80 a )
535 535
{
536 536
#if SNAN_BIT_IS_ONE
537
    bits64 aLow;
537
    uint64_t aLow;
538 538

  
539 539
    aLow = a.low & ~ LIT64( 0x4000000000000000 );
540 540
    return
541 541
           ( ( a.high & 0x7FFF ) == 0x7FFF )
542
        && (bits64) ( aLow<<1 )
542
        && (uint64_t) ( aLow<<1 )
543 543
        && ( a.low == aLow );
544 544
#else
545 545
    return ( ( a.high & 0x7FFF ) == 0x7FFF )
546
        && (LIT64( 0x8000000000000000 ) <= ((bits64) ( a.low<<1 )));
546
        && (LIT64( 0x8000000000000000 ) <= ((uint64_t) ( a.low<<1 )));
547 547
#endif
548 548
}
549 549

  
......
557 557
{
558 558
#if SNAN_BIT_IS_ONE
559 559
    return ( ( a.high & 0x7FFF ) == 0x7FFF )
560
        && (LIT64( 0x8000000000000000 ) <= ((bits64) ( a.low<<1 )));
560
        && (LIT64( 0x8000000000000000 ) <= ((uint64_t) ( a.low<<1 )));
561 561
#else
562
    bits64 aLow;
562
    uint64_t aLow;
563 563

  
564 564
    aLow = a.low & ~ LIT64( 0x4000000000000000 );
565 565
    return
566 566
           ( ( a.high & 0x7FFF ) == 0x7FFF )
567
        && (bits64) ( aLow<<1 )
567
        && (uint64_t) ( aLow<<1 )
568 568
        && ( a.low == aLow );
569 569
#endif
570 570
}
......
628 628
        z.low = a.high;
629 629
    else
630 630
        z.low = floatx80_default_nan_low;
631
    z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;
631
    z.high = ( ( (uint16_t) a.sign )<<15 ) | 0x7FFF;
632 632
    return z;
633 633
}
634 634

  
......
689 689
        && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );
690 690
#else
691 691
    return
692
           ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )
692
           ( LIT64( 0xFFFE000000000000 ) <= (uint64_t) ( a.high<<1 ) )
693 693
        && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
694 694
#endif
695 695
}
......
703 703
{
704 704
#if SNAN_BIT_IS_ONE
705 705
    return
706
           ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )
706
           ( LIT64( 0xFFFE000000000000 ) <= (uint64_t) ( a.high<<1 ) )
707 707
        && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
708 708
#else
709 709
    return
......
767 767
    }
768 768

  
769 769
    shift128Right( a.high, a.low, 16, &z.high, &z.low );
770
    z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF000000000000 );
770
    z.high |= ( ( (uint64_t) a.sign )<<63 ) | LIT64( 0x7FFF000000000000 );
771 771
    return z;
772 772
}
773 773

  

Also available in: Unified diff