Revision bb98fe42

b/fpu/softfloat-macros.h
44 44
| The result is stored in the location pointed to by `zPtr'.
45 45
*----------------------------------------------------------------------------*/
46 46

  
47
INLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr )
47
INLINE void shift32RightJamming( uint32_t a, int16 count, uint32_t *zPtr )
48 48
{
49
    bits32 z;
49
    uint32_t z;
50 50

  
51 51
    if ( count == 0 ) {
52 52
        z = a;
......
70 70
| The result is stored in the location pointed to by `zPtr'.
71 71
*----------------------------------------------------------------------------*/
72 72

  
73
INLINE void shift64RightJamming( bits64 a, int16 count, bits64 *zPtr )
73
INLINE void shift64RightJamming( uint64_t a, int16 count, uint64_t *zPtr )
74 74
{
75
    bits64 z;
75
    uint64_t z;
76 76

  
77 77
    if ( count == 0 ) {
78 78
        z = a;
......
106 106

  
107 107
INLINE void
108 108
 shift64ExtraRightJamming(
109
     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
109
     uint64_t a0, uint64_t a1, int16 count, uint64_t *z0Ptr, uint64_t *z1Ptr )
110 110
{
111
    bits64 z0, z1;
111
    uint64_t z0, z1;
112 112
    int8 negCount = ( - count ) & 63;
113 113

  
114 114
    if ( count == 0 ) {
......
143 143

  
144 144
INLINE void
145 145
 shift128Right(
146
     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
146
     uint64_t a0, uint64_t a1, int16 count, uint64_t *z0Ptr, uint64_t *z1Ptr )
147 147
{
148
    bits64 z0, z1;
148
    uint64_t z0, z1;
149 149
    int8 negCount = ( - count ) & 63;
150 150

  
151 151
    if ( count == 0 ) {
......
178 178

  
179 179
INLINE void
180 180
 shift128RightJamming(
181
     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
181
     uint64_t a0, uint64_t a1, int16 count, uint64_t *z0Ptr, uint64_t *z1Ptr )
182 182
{
183
    bits64 z0, z1;
183
    uint64_t z0, z1;
184 184
    int8 negCount = ( - count ) & 63;
185 185

  
186 186
    if ( count == 0 ) {
......
229 229

  
230 230
INLINE void
231 231
 shift128ExtraRightJamming(
232
     bits64 a0,
233
     bits64 a1,
234
     bits64 a2,
232
     uint64_t a0,
233
     uint64_t a1,
234
     uint64_t a2,
235 235
     int16 count,
236
     bits64 *z0Ptr,
237
     bits64 *z1Ptr,
238
     bits64 *z2Ptr
236
     uint64_t *z0Ptr,
237
     uint64_t *z1Ptr,
238
     uint64_t *z2Ptr
239 239
 )
240 240
{
241
    bits64 z0, z1, z2;
241
    uint64_t z0, z1, z2;
242 242
    int8 negCount = ( - count ) & 63;
243 243

  
244 244
    if ( count == 0 ) {
......
287 287

  
288 288
INLINE void
289 289
 shortShift128Left(
290
     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
290
     uint64_t a0, uint64_t a1, int16 count, uint64_t *z0Ptr, uint64_t *z1Ptr )
291 291
{
292 292

  
293 293
    *z1Ptr = a1<<count;
......
306 306

  
307 307
INLINE void
308 308
 shortShift192Left(
309
     bits64 a0,
310
     bits64 a1,
311
     bits64 a2,
309
     uint64_t a0,
310
     uint64_t a1,
311
     uint64_t a2,
312 312
     int16 count,
313
     bits64 *z0Ptr,
314
     bits64 *z1Ptr,
315
     bits64 *z2Ptr
313
     uint64_t *z0Ptr,
314
     uint64_t *z1Ptr,
315
     uint64_t *z2Ptr
316 316
 )
317 317
{
318
    bits64 z0, z1, z2;
318
    uint64_t z0, z1, z2;
319 319
    int8 negCount;
320 320

  
321 321
    z2 = a2<<count;
......
341 341

  
342 342
INLINE void
343 343
 add128(
344
     bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )
344
     uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1, uint64_t *z0Ptr, uint64_t *z1Ptr )
345 345
{
346
    bits64 z1;
346
    uint64_t z1;
347 347

  
348 348
    z1 = a1 + b1;
349 349
    *z1Ptr = z1;
......
361 361

  
362 362
INLINE void
363 363
 add192(
364
     bits64 a0,
365
     bits64 a1,
366
     bits64 a2,
367
     bits64 b0,
368
     bits64 b1,
369
     bits64 b2,
370
     bits64 *z0Ptr,
371
     bits64 *z1Ptr,
372
     bits64 *z2Ptr
364
     uint64_t a0,
365
     uint64_t a1,
366
     uint64_t a2,
367
     uint64_t b0,
368
     uint64_t b1,
369
     uint64_t b2,
370
     uint64_t *z0Ptr,
371
     uint64_t *z1Ptr,
372
     uint64_t *z2Ptr
373 373
 )
374 374
{
375
    bits64 z0, z1, z2;
375
    uint64_t z0, z1, z2;
376 376
    int8 carry0, carry1;
377 377

  
378 378
    z2 = a2 + b2;
......
399 399

  
400 400
INLINE void
401 401
 sub128(
402
     bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )
402
     uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1, uint64_t *z0Ptr, uint64_t *z1Ptr )
403 403
{
404 404

  
405 405
    *z1Ptr = a1 - b1;
......
417 417

  
418 418
INLINE void
419 419
 sub192(
420
     bits64 a0,
421
     bits64 a1,
422
     bits64 a2,
423
     bits64 b0,
424
     bits64 b1,
425
     bits64 b2,
426
     bits64 *z0Ptr,
427
     bits64 *z1Ptr,
428
     bits64 *z2Ptr
420
     uint64_t a0,
421
     uint64_t a1,
422
     uint64_t a2,
423
     uint64_t b0,
424
     uint64_t b1,
425
     uint64_t b2,
426
     uint64_t *z0Ptr,
427
     uint64_t *z1Ptr,
428
     uint64_t *z2Ptr
429 429
 )
430 430
{
431
    bits64 z0, z1, z2;
431
    uint64_t z0, z1, z2;
432 432
    int8 borrow0, borrow1;
433 433

  
434 434
    z2 = a2 - b2;
......
451 451
| `z0Ptr' and `z1Ptr'.
452 452
*----------------------------------------------------------------------------*/
453 453

  
454
INLINE void mul64To128( bits64 a, bits64 b, bits64 *z0Ptr, bits64 *z1Ptr )
454
INLINE void mul64To128( uint64_t a, uint64_t b, uint64_t *z0Ptr, uint64_t *z1Ptr )
455 455
{
456
    bits32 aHigh, aLow, bHigh, bLow;
457
    bits64 z0, zMiddleA, zMiddleB, z1;
456
    uint32_t aHigh, aLow, bHigh, bLow;
457
    uint64_t z0, zMiddleA, zMiddleB, z1;
458 458

  
459 459
    aLow = a;
460 460
    aHigh = a>>32;
461 461
    bLow = b;
462 462
    bHigh = b>>32;
463
    z1 = ( (bits64) aLow ) * bLow;
464
    zMiddleA = ( (bits64) aLow ) * bHigh;
465
    zMiddleB = ( (bits64) aHigh ) * bLow;
466
    z0 = ( (bits64) aHigh ) * bHigh;
463
    z1 = ( (uint64_t) aLow ) * bLow;
464
    zMiddleA = ( (uint64_t) aLow ) * bHigh;
465
    zMiddleB = ( (uint64_t) aHigh ) * bLow;
466
    z0 = ( (uint64_t) aHigh ) * bHigh;
467 467
    zMiddleA += zMiddleB;
468
    z0 += ( ( (bits64) ( zMiddleA < zMiddleB ) )<<32 ) + ( zMiddleA>>32 );
468
    z0 += ( ( (uint64_t) ( zMiddleA < zMiddleB ) )<<32 ) + ( zMiddleA>>32 );
469 469
    zMiddleA <<= 32;
470 470
    z1 += zMiddleA;
471 471
    z0 += ( z1 < zMiddleA );
......
483 483

  
484 484
INLINE void
485 485
 mul128By64To192(
486
     bits64 a0,
487
     bits64 a1,
488
     bits64 b,
489
     bits64 *z0Ptr,
490
     bits64 *z1Ptr,
491
     bits64 *z2Ptr
486
     uint64_t a0,
487
     uint64_t a1,
488
     uint64_t b,
489
     uint64_t *z0Ptr,
490
     uint64_t *z1Ptr,
491
     uint64_t *z2Ptr
492 492
 )
493 493
{
494
    bits64 z0, z1, z2, more1;
494
    uint64_t z0, z1, z2, more1;
495 495

  
496 496
    mul64To128( a1, b, &z1, &z2 );
497 497
    mul64To128( a0, b, &z0, &more1 );
......
511 511

  
512 512
INLINE void
513 513
 mul128To256(
514
     bits64 a0,
515
     bits64 a1,
516
     bits64 b0,
517
     bits64 b1,
518
     bits64 *z0Ptr,
519
     bits64 *z1Ptr,
520
     bits64 *z2Ptr,
521
     bits64 *z3Ptr
514
     uint64_t a0,
515
     uint64_t a1,
516
     uint64_t b0,
517
     uint64_t b1,
518
     uint64_t *z0Ptr,
519
     uint64_t *z1Ptr,
520
     uint64_t *z2Ptr,
521
     uint64_t *z3Ptr
522 522
 )
523 523
{
524
    bits64 z0, z1, z2, z3;
525
    bits64 more1, more2;
524
    uint64_t z0, z1, z2, z3;
525
    uint64_t more1, more2;
526 526

  
527 527
    mul64To128( a1, b1, &z2, &z3 );
528 528
    mul64To128( a1, b0, &z1, &more2 );
......
548 548
| unsigned integer is returned.
549 549
*----------------------------------------------------------------------------*/
550 550

  
551
static bits64 estimateDiv128To64( bits64 a0, bits64 a1, bits64 b )
551
static uint64_t estimateDiv128To64( uint64_t a0, uint64_t a1, uint64_t b )
552 552
{
553
    bits64 b0, b1;
554
    bits64 rem0, rem1, term0, term1;
555
    bits64 z;
553
    uint64_t b0, b1;
554
    uint64_t rem0, rem1, term0, term1;
555
    uint64_t z;
556 556

  
557 557
    if ( b <= a0 ) return LIT64( 0xFFFFFFFFFFFFFFFF );
558 558
    b0 = b>>32;
559 559
    z = ( b0<<32 <= a0 ) ? LIT64( 0xFFFFFFFF00000000 ) : ( a0 / b0 )<<32;
560 560
    mul64To128( b, z, &term0, &term1 );
561 561
    sub128( a0, a1, term0, term1, &rem0, &rem1 );
562
    while ( ( (sbits64) rem0 ) < 0 ) {
562
    while ( ( (int64_t) rem0 ) < 0 ) {
563 563
        z -= LIT64( 0x100000000 );
564 564
        b1 = b<<32;
565 565
        add128( rem0, rem1, b0, b1, &rem0, &rem1 );
......
580 580
| value.
581 581
*----------------------------------------------------------------------------*/
582 582

  
583
static bits32 estimateSqrt32( int16 aExp, bits32 a )
583
static uint32_t estimateSqrt32( int16 aExp, uint32_t a )
584 584
{
585
    static const bits16 sqrtOddAdjustments[] = {
585
    static const uint16_t sqrtOddAdjustments[] = {
586 586
        0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0,
587 587
        0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67
588 588
    };
589
    static const bits16 sqrtEvenAdjustments[] = {
589
    static const uint16_t sqrtEvenAdjustments[] = {
590 590
        0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E,
591 591
        0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002
592 592
    };
593 593
    int8 index;
594
    bits32 z;
594
    uint32_t z;
595 595

  
596 596
    index = ( a>>27 ) & 15;
597 597
    if ( aExp & 1 ) {
......
603 603
        z = 0x8000 + ( a>>17 ) - sqrtEvenAdjustments[ (int)index ];
604 604
        z = a / z + z;
605 605
        z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 );
606
        if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 );
606
        if ( z <= a ) return (uint32_t) ( ( (int32_t) a )>>1 );
607 607
    }
608
    return ( (bits32) ( ( ( (bits64) a )<<31 ) / z ) ) + ( z>>1 );
608
    return ( (uint32_t) ( ( ( (uint64_t) a )<<31 ) / z ) ) + ( z>>1 );
609 609

  
610 610
}
611 611

  
......
614 614
| `a'.  If `a' is zero, 32 is returned.
615 615
*----------------------------------------------------------------------------*/
616 616

  
617
static int8 countLeadingZeros32( bits32 a )
617
static int8 countLeadingZeros32( uint32_t a )
618 618
{
619 619
    static const int8 countLeadingZerosHigh[] = {
620 620
        8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
......
655 655
| `a'.  If `a' is zero, 64 is returned.
656 656
*----------------------------------------------------------------------------*/
657 657

  
658
static int8 countLeadingZeros64( bits64 a )
658
static int8 countLeadingZeros64( uint64_t a )
659 659
{
660 660
    int8 shiftCount;
661 661

  
662 662
    shiftCount = 0;
663
    if ( a < ( (bits64) 1 )<<32 ) {
663
    if ( a < ( (uint64_t) 1 )<<32 ) {
664 664
        shiftCount += 32;
665 665
    }
666 666
    else {
......
677 677
| Otherwise, returns 0.
678 678
*----------------------------------------------------------------------------*/
679 679

  
680
INLINE flag eq128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
680
INLINE flag eq128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 )
681 681
{
682 682

  
683 683
    return ( a0 == b0 ) && ( a1 == b1 );
......
690 690
| Otherwise, returns 0.
691 691
*----------------------------------------------------------------------------*/
692 692

  
693
INLINE flag le128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
693
INLINE flag le128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 )
694 694
{
695 695

  
696 696
    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) );
......
703 703
| returns 0.
704 704
*----------------------------------------------------------------------------*/
705 705

  
706
INLINE flag lt128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
706
INLINE flag lt128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 )
707 707
{
708 708

  
709 709
    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) );
......
716 716
| Otherwise, returns 0.
717 717
*----------------------------------------------------------------------------*/
718 718

  
719
INLINE flag ne128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
719
INLINE flag ne128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 )
720 720
{
721 721

  
722 722
    return ( a0 != b0 ) || ( a1 != b1 );
b/fpu/softfloat-native.c
418 418
    u.f = a1;
419 419
    a = u.i;
420 420

  
421
    return ( LIT64( 0xFFF0000000000000 ) < (bits64) ( a<<1 ) );
421
    return ( LIT64( 0xFFF0000000000000 ) < (uint64_t) ( a<<1 ) );
422 422

  
423 423
}
424 424

  
......
500 500
    aLow = u.i.low & ~ LIT64( 0x4000000000000000 );
501 501
    return
502 502
           ( ( u.i.high & 0x7FFF ) == 0x7FFF )
503
        && (bits64) ( aLow<<1 )
503
        && (uint64_t) ( aLow<<1 )
504 504
        && ( u.i.low == aLow );
505 505
}
506 506

  
......
508 508
{
509 509
    floatx80u u;
510 510
    u.f = a1;
511
    return ( ( u.i.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( u.i.low<<1 );
511
    return ( ( u.i.high & 0x7FFF ) == 0x7FFF ) && (uint64_t) ( u.i.low<<1 );
512 512
}
513 513

  
514 514
#endif
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

  
b/fpu/softfloat.c
109 109
| positive or negative integer is returned.
110 110
*----------------------------------------------------------------------------*/
111 111

  
112
static int32 roundAndPackInt32( flag zSign, bits64 absZ STATUS_PARAM)
112
static int32 roundAndPackInt32( flag zSign, uint64_t absZ STATUS_PARAM)
113 113
{
114 114
    int8 roundingMode;
115 115
    flag roundNearestEven;
......
140 140
    if ( zSign ) z = - z;
141 141
    if ( ( absZ>>32 ) || ( z && ( ( z < 0 ) ^ zSign ) ) ) {
142 142
        float_raise( float_flag_invalid STATUS_VAR);
143
        return zSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
143
        return zSign ? (int32_t) 0x80000000 : 0x7FFFFFFF;
144 144
    }
145 145
    if ( roundBits ) STATUS(float_exception_flags) |= float_flag_inexact;
146 146
    return z;
......
159 159
| returned.
160 160
*----------------------------------------------------------------------------*/
161 161

  
162
static int64 roundAndPackInt64( flag zSign, bits64 absZ0, bits64 absZ1 STATUS_PARAM)
162
static int64 roundAndPackInt64( flag zSign, uint64_t absZ0, uint64_t absZ1 STATUS_PARAM)
163 163
{
164 164
    int8 roundingMode;
165 165
    flag roundNearestEven, increment;
......
167 167

  
168 168
    roundingMode = STATUS(float_rounding_mode);
169 169
    roundNearestEven = ( roundingMode == float_round_nearest_even );
170
    increment = ( (sbits64) absZ1 < 0 );
170
    increment = ( (int64_t) absZ1 < 0 );
171 171
    if ( ! roundNearestEven ) {
172 172
        if ( roundingMode == float_round_to_zero ) {
173 173
            increment = 0;
......
184 184
    if ( increment ) {
185 185
        ++absZ0;
186 186
        if ( absZ0 == 0 ) goto overflow;
187
        absZ0 &= ~ ( ( (bits64) ( absZ1<<1 ) == 0 ) & roundNearestEven );
187
        absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
188 188
    }
189 189
    z = absZ0;
190 190
    if ( zSign ) z = - z;
......
192 192
 overflow:
193 193
        float_raise( float_flag_invalid STATUS_VAR);
194 194
        return
195
              zSign ? (sbits64) LIT64( 0x8000000000000000 )
195
              zSign ? (int64_t) LIT64( 0x8000000000000000 )
196 196
            : LIT64( 0x7FFFFFFFFFFFFFFF );
197 197
    }
198 198
    if ( absZ1 ) STATUS(float_exception_flags) |= float_flag_inexact;
......
204 204
| Returns the fraction bits of the single-precision floating-point value `a'.
205 205
*----------------------------------------------------------------------------*/
206 206

  
207
INLINE bits32 extractFloat32Frac( float32 a )
207
INLINE uint32_t extractFloat32Frac( float32 a )
208 208
{
209 209

  
210 210
    return float32_val(a) & 0x007FFFFF;
......
256 256
*----------------------------------------------------------------------------*/
257 257

  
258 258
static void
259
 normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )
259
 normalizeFloat32Subnormal( uint32_t aSig, int16 *zExpPtr, uint32_t *zSigPtr )
260 260
{
261 261
    int8 shiftCount;
262 262

  
......
277 277
| significand.
278 278
*----------------------------------------------------------------------------*/
279 279

  
280
INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )
280
INLINE float32 packFloat32( flag zSign, int16 zExp, uint32_t zSig )
281 281
{
282 282

  
283 283
    return make_float32(
284
          ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig);
284
          ( ( (uint32_t) zSign )<<31 ) + ( ( (uint32_t) zExp )<<23 ) + zSig);
285 285

  
286 286
}
287 287

  
......
307 307
| Binary Floating-Point Arithmetic.
308 308
*----------------------------------------------------------------------------*/
309 309

  
310
static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig STATUS_PARAM)
310
static float32 roundAndPackFloat32( flag zSign, int16 zExp, uint32_t zSig STATUS_PARAM)
311 311
{
312 312
    int8 roundingMode;
313 313
    flag roundNearestEven;
......
332 332
        }
333 333
    }
334 334
    roundBits = zSig & 0x7F;
335
    if ( 0xFD <= (bits16) zExp ) {
335
    if ( 0xFD <= (uint16_t) zExp ) {
336 336
        if (    ( 0xFD < zExp )
337 337
             || (    ( zExp == 0xFD )
338
                  && ( (sbits32) ( zSig + roundIncrement ) < 0 ) )
338
                  && ( (int32_t) ( zSig + roundIncrement ) < 0 ) )
339 339
           ) {
340 340
            float_raise( float_flag_overflow | float_flag_inexact STATUS_VAR);
341 341
            return packFloat32( zSign, 0xFF, - ( roundIncrement == 0 ));
......
370 370
*----------------------------------------------------------------------------*/
371 371

  
372 372
static float32
373
 normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig STATUS_PARAM)
373
 normalizeRoundAndPackFloat32( flag zSign, int16 zExp, uint32_t zSig STATUS_PARAM)
374 374
{
375 375
    int8 shiftCount;
376 376

  
......
383 383
| Returns the fraction bits of the double-precision floating-point value `a'.
384 384
*----------------------------------------------------------------------------*/
385 385

  
386
INLINE bits64 extractFloat64Frac( float64 a )
386
INLINE uint64_t extractFloat64Frac( float64 a )
387 387
{
388 388

  
389 389
    return float64_val(a) & LIT64( 0x000FFFFFFFFFFFFF );
......
435 435
*----------------------------------------------------------------------------*/
436 436

  
437 437
static void
438
 normalizeFloat64Subnormal( bits64 aSig, int16 *zExpPtr, bits64 *zSigPtr )
438
 normalizeFloat64Subnormal( uint64_t aSig, int16 *zExpPtr, uint64_t *zSigPtr )
439 439
{
440 440
    int8 shiftCount;
441 441

  
......
456 456
| significand.
457 457
*----------------------------------------------------------------------------*/
458 458

  
459
INLINE float64 packFloat64( flag zSign, int16 zExp, bits64 zSig )
459
INLINE float64 packFloat64( flag zSign, int16 zExp, uint64_t zSig )
460 460
{
461 461

  
462 462
    return make_float64(
463
        ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<52 ) + zSig);
463
        ( ( (uint64_t) zSign )<<63 ) + ( ( (uint64_t) zExp )<<52 ) + zSig);
464 464

  
465 465
}
466 466

  
......
486 486
| Binary Floating-Point Arithmetic.
487 487
*----------------------------------------------------------------------------*/
488 488

  
489
static float64 roundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig STATUS_PARAM)
489
static float64 roundAndPackFloat64( flag zSign, int16 zExp, uint64_t zSig STATUS_PARAM)
490 490
{
491 491
    int8 roundingMode;
492 492
    flag roundNearestEven;
......
511 511
        }
512 512
    }
513 513
    roundBits = zSig & 0x3FF;
514
    if ( 0x7FD <= (bits16) zExp ) {
514
    if ( 0x7FD <= (uint16_t) zExp ) {
515 515
        if (    ( 0x7FD < zExp )
516 516
             || (    ( zExp == 0x7FD )
517
                  && ( (sbits64) ( zSig + roundIncrement ) < 0 ) )
517
                  && ( (int64_t) ( zSig + roundIncrement ) < 0 ) )
518 518
           ) {
519 519
            float_raise( float_flag_overflow | float_flag_inexact STATUS_VAR);
520 520
            return packFloat64( zSign, 0x7FF, - ( roundIncrement == 0 ));
......
549 549
*----------------------------------------------------------------------------*/
550 550

  
551 551
static float64
552
 normalizeRoundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig STATUS_PARAM)
552
 normalizeRoundAndPackFloat64( flag zSign, int16 zExp, uint64_t zSig STATUS_PARAM)
553 553
{
554 554
    int8 shiftCount;
555 555

  
......
565 565
| value `a'.
566 566
*----------------------------------------------------------------------------*/
567 567

  
568
INLINE bits64 extractFloatx80Frac( floatx80 a )
568
INLINE uint64_t extractFloatx80Frac( floatx80 a )
569 569
{
570 570

  
571 571
    return a.low;
......
604 604
*----------------------------------------------------------------------------*/
605 605

  
606 606
static void
607
 normalizeFloatx80Subnormal( bits64 aSig, int32 *zExpPtr, bits64 *zSigPtr )
607
 normalizeFloatx80Subnormal( uint64_t aSig, int32 *zExpPtr, uint64_t *zSigPtr )
608 608
{
609 609
    int8 shiftCount;
610 610

  
......
619 619
| extended double-precision floating-point value, returning the result.
620 620
*----------------------------------------------------------------------------*/
621 621

  
622
INLINE floatx80 packFloatx80( flag zSign, int32 zExp, bits64 zSig )
622
INLINE floatx80 packFloatx80( flag zSign, int32 zExp, uint64_t zSig )
623 623
{
624 624
    floatx80 z;
625 625

  
626 626
    z.low = zSig;
627
    z.high = ( ( (bits16) zSign )<<15 ) + zExp;
627
    z.high = ( ( (uint16_t) zSign )<<15 ) + zExp;
628 628
    return z;
629 629

  
630 630
}
......
655 655

  
656 656
static floatx80
657 657
 roundAndPackFloatx80(
658
     int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1
658
     int8 roundingPrecision, flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1
659 659
 STATUS_PARAM)
660 660
{
661 661
    int8 roundingMode;
......
692 692
        }
693 693
    }
694 694
    roundBits = zSig0 & roundMask;
695
    if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
695
    if ( 0x7FFD <= (uint32_t) ( zExp - 1 ) ) {
696 696
        if (    ( 0x7FFE < zExp )
697 697
             || ( ( zExp == 0x7FFE ) && ( zSig0 + roundIncrement < zSig0 ) )
698 698
           ) {
......
710 710
            if ( isTiny && roundBits ) float_raise( float_flag_underflow STATUS_VAR);
711 711
            if ( roundBits ) STATUS(float_exception_flags) |= float_flag_inexact;
712 712
            zSig0 += roundIncrement;
713
            if ( (sbits64) zSig0 < 0 ) zExp = 1;
713
            if ( (int64_t) zSig0 < 0 ) zExp = 1;
714 714
            roundIncrement = roundMask + 1;
715 715
            if ( roundNearestEven && ( roundBits<<1 == roundIncrement ) ) {
716 716
                roundMask |= roundIncrement;
......
733 733
    if ( zSig0 == 0 ) zExp = 0;
734 734
    return packFloatx80( zSign, zExp, zSig0 );
735 735
 precision80:
736
    increment = ( (sbits64) zSig1 < 0 );
736
    increment = ( (int64_t) zSig1 < 0 );
737 737
    if ( ! roundNearestEven ) {
738 738
        if ( roundingMode == float_round_to_zero ) {
739 739
            increment = 0;
......
747 747
            }
748 748
        }
749 749
    }
750
    if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
750
    if ( 0x7FFD <= (uint32_t) ( zExp - 1 ) ) {
751 751
        if (    ( 0x7FFE < zExp )
752 752
             || (    ( zExp == 0x7FFE )
753 753
                  && ( zSig0 == LIT64( 0xFFFFFFFFFFFFFFFF ) )
......
776 776
            if ( isTiny && zSig1 ) float_raise( float_flag_underflow STATUS_VAR);
777 777
            if ( zSig1 ) STATUS(float_exception_flags) |= float_flag_inexact;
778 778
            if ( roundNearestEven ) {
779
                increment = ( (sbits64) zSig1 < 0 );
779
                increment = ( (int64_t) zSig1 < 0 );
780 780
            }
781 781
            else {
782 782
                if ( zSign ) {
......
789 789
            if ( increment ) {
790 790
                ++zSig0;
791 791
                zSig0 &=
792
                    ~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );
793
                if ( (sbits64) zSig0 < 0 ) zExp = 1;
792
                    ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
793
                if ( (int64_t) zSig0 < 0 ) zExp = 1;
794 794
            }
795 795
            return packFloatx80( zSign, zExp, zSig0 );
796 796
        }
......
803 803
            zSig0 = LIT64( 0x8000000000000000 );
804 804
        }
805 805
        else {
806
            zSig0 &= ~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );
806
            zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
807 807
        }
808 808
    }
809 809
    else {
......
824 824

  
825 825
static floatx80
826 826
 normalizeRoundAndPackFloatx80(
827
     int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1
827
     int8 roundingPrecision, flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1
828 828
 STATUS_PARAM)
829 829
{
830 830
    int8 shiftCount;
......
851 851
| floating-point value `a'.
852 852
*----------------------------------------------------------------------------*/
853 853

  
854
INLINE bits64 extractFloat128Frac1( float128 a )
854
INLINE uint64_t extractFloat128Frac1( float128 a )
855 855
{
856 856

  
857 857
    return a.low;
......
863 863
| floating-point value `a'.
864 864
*----------------------------------------------------------------------------*/
865 865

  
866
INLINE bits64 extractFloat128Frac0( float128 a )
866
INLINE uint64_t extractFloat128Frac0( float128 a )
867 867
{
868 868

  
869 869
    return a.high & LIT64( 0x0000FFFFFFFFFFFF );
......
905 905

  
906 906
static void
907 907
 normalizeFloat128Subnormal(
908
     bits64 aSig0,
909
     bits64 aSig1,
908
     uint64_t aSig0,
909
     uint64_t aSig1,
910 910
     int32 *zExpPtr,
911
     bits64 *zSig0Ptr,
912
     bits64 *zSig1Ptr
911
     uint64_t *zSig0Ptr,
912
     uint64_t *zSig1Ptr
913 913
 )
914 914
{
915 915
    int8 shiftCount;
......
948 948
*----------------------------------------------------------------------------*/
949 949

  
950 950
INLINE float128
951
 packFloat128( flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 )
951
 packFloat128( flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1 )
952 952
{
953 953
    float128 z;
954 954

  
955 955
    z.low = zSig1;
956
    z.high = ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<48 ) + zSig0;
956
    z.high = ( ( (uint64_t) zSign )<<63 ) + ( ( (uint64_t) zExp )<<48 ) + zSig0;
957 957
    return z;
958 958

  
959 959
}
......
981 981

  
982 982
static float128
983 983
 roundAndPackFloat128(
984
     flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1, bits64 zSig2 STATUS_PARAM)
984
     flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1, uint64_t zSig2 STATUS_PARAM)
985 985
{
986 986
    int8 roundingMode;
987 987
    flag roundNearestEven, increment, isTiny;
988 988

  
989 989
    roundingMode = STATUS(float_rounding_mode);
990 990
    roundNearestEven = ( roundingMode == float_round_nearest_even );
991
    increment = ( (sbits64) zSig2 < 0 );
991
    increment = ( (int64_t) zSig2 < 0 );
992 992
    if ( ! roundNearestEven ) {
993 993
        if ( roundingMode == float_round_to_zero ) {
994 994
            increment = 0;
......
1002 1002
            }
1003 1003
        }
1004 1004
    }
1005
    if ( 0x7FFD <= (bits32) zExp ) {
1005
    if ( 0x7FFD <= (uint32_t) zExp ) {
1006 1006
        if (    ( 0x7FFD < zExp )
1007 1007
             || (    ( zExp == 0x7FFD )
1008 1008
                  && eq128(
......
1046 1046
            zExp = 0;
1047 1047
            if ( isTiny && zSig2 ) float_raise( float_flag_underflow STATUS_VAR);
1048 1048
            if ( roundNearestEven ) {
1049
                increment = ( (sbits64) zSig2 < 0 );
1049
                increment = ( (int64_t) zSig2 < 0 );
1050 1050
            }
1051 1051
            else {
1052 1052
                if ( zSign ) {
......
1082 1082

  
1083 1083
static float128
1084 1084
 normalizeRoundAndPackFloat128(
1085
     flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 STATUS_PARAM)
1085
     flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1 STATUS_PARAM)
1086 1086
{
1087 1087
    int8 shiftCount;
1088
    bits64 zSig2;
1088
    uint64_t zSig2;
1089 1089

  
1090 1090
    if ( zSig0 == 0 ) {
1091 1091
        zSig0 = zSig1;
......
1119 1119
    flag zSign;
1120 1120

  
1121 1121
    if ( a == 0 ) return float32_zero;
1122
    if ( a == (sbits32) 0x80000000 ) return packFloat32( 1, 0x9E, 0 );
1122
    if ( a == (int32_t) 0x80000000 ) return packFloat32( 1, 0x9E, 0 );
1123 1123
    zSign = ( a < 0 );
1124 1124
    return normalizeRoundAndPackFloat32( zSign, 0x9C, zSign ? - a : a STATUS_VAR );
1125 1125

  
......
1136 1136
    flag zSign;
1137 1137
    uint32 absA;
1138 1138
    int8 shiftCount;
1139
    bits64 zSig;
1139
    uint64_t zSig;
1140 1140

  
1141 1141
    if ( a == 0 ) return float64_zero;
1142 1142
    zSign = ( a < 0 );
......
1161 1161
    flag zSign;
1162 1162
    uint32 absA;
1163 1163
    int8 shiftCount;
1164
    bits64 zSig;
1164
    uint64_t zSig;
1165 1165

  
1166 1166
    if ( a == 0 ) return packFloatx80( 0, 0, 0 );
1167 1167
    zSign = ( a < 0 );
......
1187 1187
    flag zSign;
1188 1188
    uint32 absA;
1189 1189
    int8 shiftCount;
1190
    bits64 zSig0;
1190
    uint64_t zSig0;
1191 1191

  
1192 1192
    if ( a == 0 ) return packFloat128( 0, 0, 0, 0 );
1193 1193
    zSign = ( a < 0 );
......
1264 1264
    flag zSign;
1265 1265

  
1266 1266
    if ( a == 0 ) return float64_zero;
1267
    if ( a == (sbits64) LIT64( 0x8000000000000000 ) ) {
1267
    if ( a == (int64_t) LIT64( 0x8000000000000000 ) ) {
1268 1268
        return packFloat64( 1, 0x43E, 0 );
1269 1269
    }
1270 1270
    zSign = ( a < 0 );
......
1318 1318
    uint64 absA;
1319 1319
    int8 shiftCount;
1320 1320
    int32 zExp;
1321
    bits64 zSig0, zSig1;
1321
    uint64_t zSig0, zSig1;
1322 1322

  
1323 1323
    if ( a == 0 ) return packFloat128( 0, 0, 0, 0 );
1324 1324
    zSign = ( a < 0 );
......
1355 1355
{
1356 1356
    flag aSign;
1357 1357
    int16 aExp, shiftCount;
1358
    bits32 aSig;
1359
    bits64 aSig64;
1358
    uint32_t aSig;
1359
    uint64_t aSig64;
1360 1360

  
1361 1361
    a = float32_squash_input_denormal(a STATUS_VAR);
1362 1362
    aSig = extractFloat32Frac( a );
......
1386 1386
{
1387 1387
    flag aSign;
1388 1388
    int16 aExp, shiftCount;
1389
    bits32 aSig;
1389
    uint32_t aSig;
1390 1390
    int32 z;
1391 1391
    a = float32_squash_input_denormal(a STATUS_VAR);
1392 1392

  
......
1399 1399
            float_raise( float_flag_invalid STATUS_VAR);
1400 1400
            if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) return 0x7FFFFFFF;
1401 1401
        }
1402
        return (sbits32) 0x80000000;
1402
        return (int32_t) 0x80000000;
1403 1403
    }
1404 1404
    else if ( aExp <= 0x7E ) {
1405 1405
        if ( aExp | aSig ) STATUS(float_exception_flags) |= float_flag_inexact;
......
1407 1407
    }
1408 1408
    aSig = ( aSig | 0x00800000 )<<8;
1409 1409
    z = aSig>>( - shiftCount );
1410
    if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {
1410
    if ( (uint32_t) ( aSig<<( shiftCount & 31 ) ) ) {
1411 1411
        STATUS(float_exception_flags) |= float_flag_inexact;
1412 1412
    }
1413 1413
    if ( aSign ) z = - z;
......
1429 1429
{
1430 1430
    flag aSign;
1431 1431
    int16 aExp, shiftCount;
1432
    bits32 aSig;
1432
    uint32_t aSig;
1433 1433
    int32 z;
1434 1434

  
1435 1435
    aSig = extractFloat32Frac( a );
......
1443 1443
                return 0x7FFF;
1444 1444
            }
1445 1445
        }
1446
        return (sbits32) 0xffff8000;
1446
        return (int32_t) 0xffff8000;
1447 1447
    }
1448 1448
    else if ( aExp <= 0x7E ) {
1449 1449
        if ( aExp | aSig ) {
......
1454 1454
    shiftCount -= 0x10;
1455 1455
    aSig = ( aSig | 0x00800000 )<<8;
1456 1456
    z = aSig>>( - shiftCount );
1457
    if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {
1457
    if ( (uint32_t) ( aSig<<( shiftCount & 31 ) ) ) {
1458 1458
        STATUS(float_exception_flags) |= float_flag_inexact;
1459 1459
    }
1460 1460
    if ( aSign ) {
......
1478 1478
{
1479 1479
    flag aSign;
1480 1480
    int16 aExp, shiftCount;
1481
    bits32 aSig;
1482
    bits64 aSig64, aSigExtra;
1481
    uint32_t aSig;
1482
    uint64_t aSig64, aSigExtra;
1483 1483
    a = float32_squash_input_denormal(a STATUS_VAR);
1484 1484

  
1485 1485
    aSig = extractFloat32Frac( a );
......
1491 1491
        if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {
1492 1492
            return LIT64( 0x7FFFFFFFFFFFFFFF );
1493 1493
        }
1494
        return (sbits64) LIT64( 0x8000000000000000 );
1494
        return (int64_t) LIT64( 0x8000000000000000 );
1495 1495
    }
1496 1496
    if ( aExp ) aSig |= 0x00800000;
1497 1497
    aSig64 = aSig;
......
1515 1515
{
1516 1516
    flag aSign;
1517 1517
    int16 aExp, shiftCount;
1518
    bits32 aSig;
1519
    bits64 aSig64;
1518
    uint32_t aSig;
1519
    uint64_t aSig64;
1520 1520
    int64 z;
1521 1521
    a = float32_squash_input_denormal(a STATUS_VAR);
1522 1522

  
......
1531 1531
                return LIT64( 0x7FFFFFFFFFFFFFFF );
1532 1532
            }
1533 1533
        }
1534
        return (sbits64) LIT64( 0x8000000000000000 );
1534
        return (int64_t) LIT64( 0x8000000000000000 );
1535 1535
    }
1536 1536
    else if ( aExp <= 0x7E ) {
1537 1537
        if ( aExp | aSig ) STATUS(float_exception_flags) |= float_flag_inexact;
......
1540 1540
    aSig64 = aSig | 0x00800000;
1541 1541
    aSig64 <<= 40;
1542 1542
    z = aSig64>>( - shiftCount );
1543
    if ( (bits64) ( aSig64<<( shiftCount & 63 ) ) ) {
1543
    if ( (uint64_t) ( aSig64<<( shiftCount & 63 ) ) ) {
1544 1544
        STATUS(float_exception_flags) |= float_flag_inexact;
1545 1545
    }
1546 1546
    if ( aSign ) z = - z;
......
1559 1559
{
1560 1560
    flag aSign;
1561 1561
    int16 aExp;
1562
    bits32 aSig;
1562
    uint32_t aSig;
1563 1563
    a = float32_squash_input_denormal(a STATUS_VAR);
1564 1564

  
1565 1565
    aSig = extractFloat32Frac( a );
......
1574 1574
        normalizeFloat32Subnormal( aSig, &aExp, &aSig );
1575 1575
        --aExp;
1576 1576
    }
1577
    return packFloat64( aSign, aExp + 0x380, ( (bits64) aSig )<<29 );
1577
    return packFloat64( aSign, aExp + 0x380, ( (uint64_t) aSig )<<29 );
1578 1578

  
1579 1579
}
1580 1580

  
......
1591 1591
{
1592 1592
    flag aSign;
1593 1593
    int16 aExp;
1594
    bits32 aSig;
1594
    uint32_t aSig;
1595 1595

  
1596 1596
    a = float32_squash_input_denormal(a STATUS_VAR);
1597 1597
    aSig = extractFloat32Frac( a );
......
1606 1606
        normalizeFloat32Subnormal( aSig, &aExp, &aSig );
1607 1607
    }
1608 1608
    aSig |= 0x00800000;
1609
    return packFloatx80( aSign, aExp + 0x3F80, ( (bits64) aSig )<<40 );
1609
    return packFloatx80( aSign, aExp + 0x3F80, ( (uint64_t) aSig )<<40 );
1610 1610

  
1611 1611
}
1612 1612

  
......
1625 1625
{
1626 1626
    flag aSign;
1627 1627
    int16 aExp;
1628
    bits32 aSig;
1628
    uint32_t aSig;
1629 1629

  
1630 1630
    a = float32_squash_input_denormal(a STATUS_VAR);
1631 1631
    aSig = extractFloat32Frac( a );
......
1640 1640
        normalizeFloat32Subnormal( aSig, &aExp, &aSig );
1641 1641
        --aExp;
1642 1642
    }
1643
    return packFloat128( aSign, aExp + 0x3F80, ( (bits64) aSig )<<25, 0 );
1643
    return packFloat128( aSign, aExp + 0x3F80, ( (uint64_t) aSig )<<25, 0 );
1644 1644

  
1645 1645
}
1646 1646

  
......
1657 1657
{
1658 1658
    flag aSign;
1659 1659
    int16 aExp;
1660
    bits32 lastBitMask, roundBitsMask;
1660
    uint32_t lastBitMask, roundBitsMask;
1661 1661
    int8 roundingMode;
1662
    bits32 z;
1662
    uint32_t z;
1663 1663
    a = float32_squash_input_denormal(a STATUS_VAR);
1664 1664

  
1665 1665
    aExp = extractFloat32Exp( a );
......
1670 1670
        return a;
1671 1671
    }
1672 1672
    if ( aExp <= 0x7E ) {
1673
        if ( (bits32) ( float32_val(a)<<1 ) == 0 ) return a;
1673
        if ( (uint32_t) ( float32_val(a)<<1 ) == 0 ) return a;
1674 1674
        STATUS(float_exception_flags) |= float_flag_inexact;
1675 1675
        aSign = extractFloat32Sign( a );
1676 1676
        switch ( STATUS(float_rounding_mode) ) {
......
1717 1717
static float32 addFloat32Sigs( float32 a, float32 b, flag zSign STATUS_PARAM)
1718 1718
{
1719 1719
    int16 aExp, bExp, zExp;
1720
    bits32 aSig, bSig, zSig;
1720
    uint32_t aSig, bSig, zSig;
1721 1721
    int16 expDiff;
1722 1722

  
1723 1723
    aSig = extractFloat32Frac( a );
......
1771 1771
    aSig |= 0x20000000;
1772 1772
    zSig = ( aSig + bSig )<<1;
1773 1773
    --zExp;
1774
    if ( (sbits32) zSig < 0 ) {
1774
    if ( (int32_t) zSig < 0 ) {
1775 1775
        zSig = aSig + bSig;
1776 1776
        ++zExp;
1777 1777
    }
......
1791 1791
static float32 subFloat32Sigs( float32 a, float32 b, flag zSign STATUS_PARAM)
1792 1792
{
1793 1793
    int16 aExp, bExp, zExp;
1794
    bits32 aSig, bSig, zSig;
1794
    uint32_t aSig, bSig, zSig;
1795 1795
    int16 expDiff;
1796 1796

  
1797 1797
    aSig = extractFloat32Frac( a );
......
1911 1911
{
1912 1912
    flag aSign, bSign, zSign;
1913 1913
    int16 aExp, bExp, zExp;
1914
    bits32 aSig, bSig;
1915
    bits64 zSig64;
1916
    bits32 zSig;
1914
    uint32_t aSig, bSig;
1915
    uint64_t zSig64;
1916
    uint32_t zSig;
1917 1917

  
1918 1918
    a = float32_squash_input_denormal(a STATUS_VAR);
1919 1919
    b = float32_squash_input_denormal(b STATUS_VAR);
......
1954 1954
    zExp = aExp + bExp - 0x7F;
1955 1955
    aSig = ( aSig | 0x00800000 )<<7;
1956 1956
    bSig = ( bSig | 0x00800000 )<<8;
1957
    shift64RightJamming( ( (bits64) aSig ) * bSig, 32, &zSig64 );
1957
    shift64RightJamming( ( (uint64_t) aSig ) * bSig, 32, &zSig64 );
1958 1958
    zSig = zSig64;
1959
    if ( 0 <= (sbits32) ( zSig<<1 ) ) {
1959
    if ( 0 <= (int32_t) ( zSig<<1 ) ) {
1960 1960
        zSig <<= 1;
1961 1961
        --zExp;
1962 1962
    }
......
1974 1974
{
1975 1975
    flag aSign, bSign, zSign;
1976 1976
    int16 aExp, bExp, zExp;
1977
    bits32 aSig, bSig, zSig;
1977
    uint32_t aSig, bSig, zSig;
1978 1978
    a = float32_squash_input_denormal(a STATUS_VAR);
1979 1979
    b = float32_squash_input_denormal(b STATUS_VAR);
1980 1980

  
......
2020 2020
        aSig >>= 1;
2021 2021
        ++zExp;
2022 2022
    }
2023
    zSig = ( ( (bits64) aSig )<<32 ) / bSig;
2023
    zSig = ( ( (uint64_t) aSig )<<32 ) / bSig;
2024 2024
    if ( ( zSig & 0x3F ) == 0 ) {
2025
        zSig |= ( (bits64) bSig * zSig != ( (bits64) aSig )<<32 );
2025
        zSig |= ( (uint64_t) bSig * zSig != ( (uint64_t) aSig )<<32 );
2026 2026
    }
2027 2027
    return roundAndPackFloat32( zSign, zExp, zSig STATUS_VAR );
2028 2028

  
......
2038 2038
{
2039 2039
    flag aSign, zSign;
2040 2040
    int16 aExp, bExp, expDiff;
2041
    bits32 aSig, bSig;
2042
    bits32 q;
2043
    bits64 aSig64, bSig64, q64;
2044
    bits32 alternateASig;
2045
    sbits32 sigMean;
2041
    uint32_t aSig, bSig;
2042
    uint32_t q;
2043
    uint64_t aSig64, bSig64, q64;
2044
    uint32_t alternateASig;
2045
    int32_t sigMean;
2046 2046
    a = float32_squash_input_denormal(a STATUS_VAR);
2047 2047
    b = float32_squash_input_denormal(b STATUS_VAR);
2048 2048

  
......
2086 2086
        q = ( bSig <= aSig );
2087 2087
        if ( q ) aSig -= bSig;
2088 2088
        if ( 0 < expDiff ) {
2089
            q = ( ( (bits64) aSig )<<32 ) / bSig;
2089
            q = ( ( (uint64_t) aSig )<<32 ) / bSig;
2090 2090
            q >>= 32 - expDiff;
2091 2091
            bSig >>= 2;
2092 2092
            aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;
......
2098 2098
    }
2099 2099
    else {
2100 2100
        if ( bSig <= aSig ) aSig -= bSig;
2101
        aSig64 = ( (bits64) aSig )<<40;
2102
        bSig64 = ( (bits64) bSig )<<40;
2101
        aSig64 = ( (uint64_t) aSig )<<40;
2102
        bSig64 = ( (uint64_t) bSig )<<40;
2103 2103
        expDiff -= 64;
2104 2104
        while ( 0 < expDiff ) {
2105 2105
            q64 = estimateDiv128To64( aSig64, 0, bSig64 );
......
2118 2118
        alternateASig = aSig;
2119 2119
        ++q;
2120 2120
        aSig -= bSig;
2121
    } while ( 0 <= (sbits32) aSig );
2121
    } while ( 0 <= (int32_t) aSig );
2122 2122
    sigMean = aSig + alternateASig;
2123 2123
    if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {
2124 2124
        aSig = alternateASig;
2125 2125
    }
2126
    zSign = ( (sbits32) aSig < 0 );
2126
    zSign = ( (int32_t) aSig < 0 );
2127 2127
    if ( zSign ) aSig = - aSig;
2128 2128
    return normalizeRoundAndPackFloat32( aSign ^ zSign, bExp, aSig STATUS_VAR );
2129 2129

  
......
2139 2139
{
2140 2140
    flag aSign;
2141 2141
    int16 aExp, zExp;
2142
    bits32 aSig, zSig;
2143
    bits64 rem, term;
2142
    uint32_t aSig, zSig;
2143
    uint64_t rem, term;
2144 2144
    a = float32_squash_input_denormal(a STATUS_VAR);
2145 2145

  
2146 2146
    aSig = extractFloat32Frac( a );
......
2170 2170
            goto roundAndPack;
2171 2171
        }
2172 2172
        aSig >>= aExp & 1;
2173
        term = ( (bits64) zSig ) * zSig;
2174
        rem = ( ( (bits64) aSig )<<32 ) - term;
2175
        while ( (sbits64) rem < 0 ) {
2173
        term = ( (uint64_t) zSig ) * zSig;
2174
        rem = ( ( (uint64_t) aSig )<<32 ) - term;
2175
        while ( (int64_t) rem < 0 ) {
2176 2176
            --zSig;
2177
            rem += ( ( (bits64) zSig )<<1 ) | 1;
2177
            rem += ( ( (uint64_t) zSig )<<1 ) | 1;
2178 2178
        }
2179 2179
        zSig |= ( rem != 0 );
2180 2180
    }
......
2225 2225
{
2226 2226
    flag aSign;
2227 2227
    int16 aExp;
2228
    bits32 aSig;
2228
    uint32_t aSig;
2229 2229
    float64 r, x, xn;
2230 2230
    int i;
2231 2231
    a = float32_squash_input_denormal(a STATUS_VAR);
......
2273 2273
{
2274 2274
    flag aSign, zSign;
2275 2275
    int16 aExp;
2276
    bits32 aSig, zSig, i;
2276
    uint32_t aSig, zSig, i;
2277 2277

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff