Changeset 1266543 in mainline for softfloat/generic/conversion.c


Ignore:
Timestamp:
2006-02-07T00:41:18Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1a030b8
Parents:
b7e65d4
Message:

32 bit float division added.
Some small bugs fixed.
Code cleanup.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • softfloat/generic/conversion.c

    rb7e65d4 r1266543  
    3333{
    3434        float64 result;
    35         __u64 mant;
     35        __u64 frac;
    3636       
    3737        result.parts.sign = a.parts.sign;
    38         result.parts.mantisa = a.parts.mantisa;
    39         result.parts.mantisa <<= (FLOAT64_MANTISA_SIZE - FLOAT32_MANTISA_SIZE );
     38        result.parts.fraction = a.parts.fraction;
     39        result.parts.fraction <<= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE );
    4040       
    4141        if ((isFloat32Infinity(a))||(isFloat32NaN(a))) {
     
    4949                /* normalize denormalized numbers */
    5050
    51                 if (result.parts.mantisa == 0ll) { /* fix zero */
     51                if (result.parts.fraction == 0ll) { /* fix zero */
    5252                        result.parts.exp = 0ll;
    5353                        return result;
    5454                }
    5555                       
    56                 mant = result.parts.mantisa;
     56                frac = result.parts.fraction;
    5757               
    58                 while (!(mant & (0x10000000000000ll))) {
    59                         mant <<= 1;
     58                while (!(frac & (0x10000000000000ll))) {
     59                        frac <<= 1;
    6060                        --result.parts.exp;
    6161                };
    6262               
    6363                ++result.parts.exp;
    64                 result.parts.mantisa = mant;
     64                result.parts.fraction = frac;
    6565        };
    6666       
     
    7373        float32 result;
    7474        __s32 exp;
    75         __u64 mant;
     75        __u64 frac;
    7676       
    7777        result.parts.sign = a.parts.sign;
     
    8282               
    8383                if (isFloat64SigNaN(a)) {
    84                         result.parts.mantisa = 0x800000; /* set first bit of mantisa nonzero */
     84                        result.parts.fraction = 0x800000; /* set first bit of fraction nonzero */
    8585                        return result;
    8686                }
    8787       
    88                 result.parts.mantisa = 0x1; /* mantisa nonzero but its first bit is zero */
     88                result.parts.fraction = 0x1; /* fraction nonzero but its first bit is zero */
    8989                return result;
    9090        };
    9191
    9292        if (isFloat64Infinity(a)) {
    93                 result.parts.mantisa = 0;
     93                result.parts.fraction = 0;
    9494                result.parts.exp = 0xFF;
    9595                return result;
     
    100100        if (exp >= 0xFF) {
    101101                /*FIXME: overflow*/
    102                 result.parts.mantisa = 0;
     102                result.parts.fraction = 0;
    103103                result.parts.exp = 0xFF;
    104104                return result;
     
    111111               
    112112                exp *= -1;     
    113                 if (exp > FLOAT32_MANTISA_SIZE ) {
     113                if (exp > FLOAT32_FRACTION_SIZE ) {
    114114                        /* FIXME: underflow */
    115                         result.parts.mantisa = 0;
     115                        result.parts.fraction = 0;
    116116                        return result;
    117117                };
     
    119119                /* denormalized */
    120120               
    121                 mant = a.parts.mantisa;
    122                 mant |= 0x10000000000000ll; /* denormalize and set hidden bit */
     121                frac = a.parts.fraction;
     122                frac |= 0x10000000000000ll; /* denormalize and set hidden bit */
    123123               
    124                 mant >>= (FLOAT64_MANTISA_SIZE - FLOAT32_MANTISA_SIZE + 1);
     124                frac >>= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE + 1);
    125125               
    126126                while (exp > 0) {
    127127                        --exp;
    128                         mant >>= 1;
     128                        frac >>= 1;
    129129                };
    130                 result.parts.mantisa = mant;
     130                result.parts.fraction = frac;
    131131               
    132132                return result;
     
    134134
    135135        result.parts.exp = exp;
    136         result.parts.mantisa = a.parts.mantisa >> (FLOAT64_MANTISA_SIZE - FLOAT32_MANTISA_SIZE);
     136        result.parts.fraction = a.parts.fraction >> (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE);
    137137        return result;
    138138};
Note: See TracChangeset for help on using the changeset viewer.