Revision bb98fe42 fpu/softfloat-macros.h

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 );

Also available in: Unified diff