Changeset 1266543 in mainline
- Timestamp:
- 2006-02-07T00:41:18Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1a030b8
- Parents:
- b7e65d4
- Location:
- softfloat
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
softfloat/generic/add.c
rb7e65d4 r1266543 36 36 { 37 37 int expdiff; 38 __u32 exp1, exp2, mant1, mant2;38 __u32 exp1, exp2,frac1, frac2; 39 39 40 40 expdiff = a.parts.exp - b.parts.exp; 41 41 if (expdiff < 0) { 42 42 if (isFloat32NaN(b)) { 43 / /TODO: fix SigNaN43 /* TODO: fix SigNaN */ 44 44 if (isFloat32SigNaN(b)) { 45 45 }; … … 52 52 } 53 53 54 mant1 = b.parts.mantisa;54 frac1 = b.parts.fraction; 55 55 exp1 = b.parts.exp; 56 mant2 = a.parts.mantisa;56 frac2 = a.parts.fraction; 57 57 exp2 = a.parts.exp; 58 58 expdiff *= -1; 59 59 } else { 60 if ( isFloat32NaN(a)) {61 / /TODO: fix SigNaN60 if ((isFloat32NaN(a)) || (isFloat32NaN(b))) { 61 /* TODO: fix SigNaN */ 62 62 if (isFloat32SigNaN(a) || isFloat32SigNaN(b)) { 63 63 }; 64 return a;64 return (isFloat32NaN(a)?a:b); 65 65 }; 66 66 … … 69 69 } 70 70 71 mant1 = a.parts.mantisa;71 frac1 = a.parts.fraction; 72 72 exp1 = a.parts.exp; 73 mant2 = b.parts.mantisa;73 frac2 = b.parts.fraction; 74 74 exp2 = b.parts.exp; 75 75 }; … … 77 77 if (exp1 == 0) { 78 78 /* both are denormalized */ 79 mant1 += mant2;80 if ( mant1 & FLOAT32_HIDDEN_BIT_MASK ) {79 frac1 += frac2; 80 if (frac1 & FLOAT32_HIDDEN_BIT_MASK ) { 81 81 /* result is not denormalized */ 82 82 a.parts.exp = 1; 83 83 }; 84 a.parts. mantisa = mant1;84 a.parts.fraction = frac1; 85 85 return a; 86 86 }; 87 87 88 mant1 |= FLOAT32_HIDDEN_BIT_MASK; //add hidden bit88 frac1 |= FLOAT32_HIDDEN_BIT_MASK; /* add hidden bit */ 89 89 90 90 if (exp2 == 0) { … … 93 93 } else { 94 94 /* add hidden bit to second operand */ 95 mant2 |= FLOAT32_HIDDEN_BIT_MASK;95 frac2 |= FLOAT32_HIDDEN_BIT_MASK; 96 96 }; 97 97 98 98 /* create some space for rounding */ 99 mant1 <<= 6; 100 mant2 <<= 6; 101 102 if (expdiff > (FLOAT32_MANTISA_SIZE + 1) ) { 103 goto done; 104 }; 105 106 mant2 >>= expdiff; 107 mant1 += mant2; 108 done: 109 if (mant1 & (FLOAT32_HIDDEN_BIT_MASK << 7) ) { 110 ++exp1; 111 mant1 >>= 1; 112 }; 113 114 /* rounding - if first bit after mantisa is set then round up */ 115 mant1 += (0x1 << 5); 116 117 if (mant1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) { 118 ++exp1; 119 mant1 >>= 1; 120 }; 99 frac1 <<= 6; 100 frac2 <<= 6; 101 102 if (expdiff < (FLOAT32_FRACTION_SIZE + 2) ) { 103 frac2 >>= expdiff; 104 frac1 += frac2; 105 }; 106 107 if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7) ) { 108 ++exp1; 109 frac1 >>= 1; 110 }; 111 112 /* rounding - if first bit after fraction is set then round up */ 113 frac1 += (0x1 << 5); 114 115 if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) { 116 /* rounding overflow */ 117 ++exp1; 118 frac1 >>= 1; 119 }; 120 121 if ((a.parts.exp == FLOAT32_MAX_EXPONENT ) || (a.parts.exp < exp1)) { 122 /* overflow - set infinity as result */ 123 a.parts.exp = FLOAT32_MAX_EXPONENT; 124 a.parts.fraction = 0; 125 return a; 126 } 121 127 122 128 a.parts.exp = exp1; 123 129 124 130 /*Clear hidden bit and shift */ 125 a.parts. mantisa = ((mant1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)) ;131 a.parts.fraction = ((frac1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)) ; 126 132 return a; 127 133 } … … 134 140 int expdiff; 135 141 __u32 exp1, exp2; 136 __u64 mant1, mant2;142 __u64 frac1, frac2; 137 143 138 144 expdiff = a.parts.exp - b.parts.exp; 139 145 if (expdiff < 0) { 140 146 if (isFloat64NaN(b)) { 141 / /TODO: fix SigNaN147 /* TODO: fix SigNaN */ 142 148 if (isFloat64SigNaN(b)) { 143 149 }; … … 151 157 } 152 158 153 mant1 = b.parts.mantisa;159 frac1 = b.parts.fraction; 154 160 exp1 = b.parts.exp; 155 mant2 = a.parts.mantisa;161 frac2 = a.parts.fraction; 156 162 exp2 = a.parts.exp; 157 163 expdiff *= -1; 158 164 } else { 159 165 if (isFloat64NaN(a)) { 160 / /TODO: fix SigNaN166 /* TODO: fix SigNaN */ 161 167 if (isFloat64SigNaN(a) || isFloat64SigNaN(b)) { 162 168 }; … … 169 175 } 170 176 171 mant1 = a.parts.mantisa;177 frac1 = a.parts.fraction; 172 178 exp1 = a.parts.exp; 173 mant2 = b.parts.mantisa;179 frac2 = b.parts.fraction; 174 180 exp2 = b.parts.exp; 175 181 }; … … 177 183 if (exp1 == 0) { 178 184 /* both are denormalized */ 179 mant1 += mant2;180 if ( mant1 & FLOAT64_HIDDEN_BIT_MASK) {185 frac1 += frac2; 186 if (frac1 & FLOAT64_HIDDEN_BIT_MASK) { 181 187 /* result is not denormalized */ 182 188 a.parts.exp = 1; 183 189 }; 184 a.parts. mantisa = mant1;190 a.parts.fraction = frac1; 185 191 return a; 186 192 }; 187 193 188 /* add hidden bit - mant1 is sure not denormalized */189 mant1 |= FLOAT64_HIDDEN_BIT_MASK;194 /* add hidden bit - frac1 is sure not denormalized */ 195 frac1 |= FLOAT64_HIDDEN_BIT_MASK; 190 196 191 197 /* second operand ... */ … … 195 201 } else { 196 202 /* is not denormalized */ 197 mant2 |= FLOAT64_HIDDEN_BIT_MASK;203 frac2 |= FLOAT64_HIDDEN_BIT_MASK; 198 204 }; 199 205 200 206 /* create some space for rounding */ 201 mant1 <<= 6; 202 mant2 <<= 6; 203 204 if (expdiff > (FLOAT64_MANTISA_SIZE + 1) ) { 205 goto done; 206 }; 207 208 mant2 >>= expdiff; 209 mant1 += mant2; 210 done: 211 if (mant1 & (FLOAT64_HIDDEN_BIT_MASK << 7) ) { 212 ++exp1; 213 mant1 >>= 1; 214 }; 215 216 /* rounding - if first bit after mantisa is set then round up */ 217 mant1 += (0x1 << 5); 218 219 if (mant1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) { 220 ++exp1; 221 mant1 >>= 1; 222 }; 207 frac1 <<= 6; 208 frac2 <<= 6; 209 210 if (expdiff < (FLOAT64_FRACTION_SIZE + 2) ) { 211 frac2 >>= expdiff; 212 frac1 += frac2; 213 }; 214 215 if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7) ) { 216 ++exp1; 217 frac1 >>= 1; 218 }; 219 220 /* rounding - if first bit after fraction is set then round up */ 221 frac1 += (0x1 << 5); 222 223 if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) { 224 /* rounding overflow */ 225 ++exp1; 226 frac1 >>= 1; 227 }; 228 229 if ((a.parts.exp == FLOAT64_MAX_EXPONENT ) || (a.parts.exp < exp1)) { 230 /* overflow - set infinity as result */ 231 a.parts.exp = FLOAT64_MAX_EXPONENT; 232 a.parts.fraction = 0; 233 return a; 234 } 223 235 224 236 a.parts.exp = exp1; 225 237 /*Clear hidden bit and shift */ 226 a.parts. mantisa = ( (mant1 >> 6 ) & (~FLOAT64_HIDDEN_BIT_MASK));238 a.parts.fraction = ( (frac1 >> 6 ) & (~FLOAT64_HIDDEN_BIT_MASK)); 227 239 return a; 228 240 } -
softfloat/generic/comparison.c
rb7e65d4 r1266543 31 31 32 32 inline int isFloat32NaN(float32 f) 33 { /* NaN : exp = 0xff and nonzero mantisa*/34 return ((f.parts.exp==0xFF)&&(f.parts. mantisa));33 { /* NaN : exp = 0xff and nonzero fraction */ 34 return ((f.parts.exp==0xFF)&&(f.parts.fraction)); 35 35 }; 36 36 37 37 inline int isFloat64NaN(float64 d) 38 { /* NaN : exp = 0x7ff and nonzero mantisa*/39 return ((d.parts.exp==0x7FF)&&(d.parts. mantisa));38 { /* NaN : exp = 0x7ff and nonzero fraction */ 39 return ((d.parts.exp==0x7FF)&&(d.parts.fraction)); 40 40 }; 41 41 42 42 inline int isFloat32SigNaN(float32 f) 43 { /* SigNaN : exp = 0xff mantisa= 0xxxxx..x (binary), where at least one x is nonzero */44 return ((f.parts.exp==0xFF)&&(f.parts. mantisa<0x400000)&&(f.parts.mantisa));43 { /* SigNaN : exp = 0xff fraction = 0xxxxx..x (binary), where at least one x is nonzero */ 44 return ((f.parts.exp==0xFF)&&(f.parts.fraction<0x400000)&&(f.parts.fraction)); 45 45 }; 46 46 47 47 inline int isFloat64SigNaN(float64 d) 48 { /* SigNaN : exp = 0x7ff mantisa= 0xxxxx..x (binary), where at least one x is nonzero */49 return ((d.parts.exp==0x7FF)&&(d.parts. mantisa)&&(d.parts.mantisa<0x8000000000000ll));48 { /* SigNaN : exp = 0x7ff fraction = 0xxxxx..x (binary), where at least one x is nonzero */ 49 return ((d.parts.exp==0x7FF)&&(d.parts.fraction)&&(d.parts.fraction<0x8000000000000ll)); 50 50 }; 51 51 52 52 inline int isFloat32Infinity(float32 f) 53 53 { 54 return ((f.parts.exp==0xFF)&&(f.parts. mantisa==0x0));54 return ((f.parts.exp==0xFF)&&(f.parts.fraction==0x0)); 55 55 }; 56 56 57 57 inline int isFloat64Infinity(float64 d) 58 58 { 59 return ((d.parts.exp==0x7FF)&&(d.parts. mantisa==0x0));59 return ((d.parts.exp==0x7FF)&&(d.parts.fraction==0x0)); 60 60 }; 61 61 -
softfloat/generic/conversion.c
rb7e65d4 r1266543 33 33 { 34 34 float64 result; 35 __u64 mant;35 __u64 frac; 36 36 37 37 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 ); 40 40 41 41 if ((isFloat32Infinity(a))||(isFloat32NaN(a))) { … … 49 49 /* normalize denormalized numbers */ 50 50 51 if (result.parts. mantisa== 0ll) { /* fix zero */51 if (result.parts.fraction == 0ll) { /* fix zero */ 52 52 result.parts.exp = 0ll; 53 53 return result; 54 54 } 55 55 56 mant = result.parts.mantisa;56 frac = result.parts.fraction; 57 57 58 while (!( mant& (0x10000000000000ll))) {59 mant<<= 1;58 while (!(frac & (0x10000000000000ll))) { 59 frac <<= 1; 60 60 --result.parts.exp; 61 61 }; 62 62 63 63 ++result.parts.exp; 64 result.parts. mantisa = mant;64 result.parts.fraction = frac; 65 65 }; 66 66 … … 73 73 float32 result; 74 74 __s32 exp; 75 __u64 mant;75 __u64 frac; 76 76 77 77 result.parts.sign = a.parts.sign; … … 82 82 83 83 if (isFloat64SigNaN(a)) { 84 result.parts. mantisa = 0x800000; /* set first bit of mantisanonzero */84 result.parts.fraction = 0x800000; /* set first bit of fraction nonzero */ 85 85 return result; 86 86 } 87 87 88 result.parts. mantisa = 0x1; /* mantisanonzero but its first bit is zero */88 result.parts.fraction = 0x1; /* fraction nonzero but its first bit is zero */ 89 89 return result; 90 90 }; 91 91 92 92 if (isFloat64Infinity(a)) { 93 result.parts. mantisa= 0;93 result.parts.fraction = 0; 94 94 result.parts.exp = 0xFF; 95 95 return result; … … 100 100 if (exp >= 0xFF) { 101 101 /*FIXME: overflow*/ 102 result.parts. mantisa= 0;102 result.parts.fraction = 0; 103 103 result.parts.exp = 0xFF; 104 104 return result; … … 111 111 112 112 exp *= -1; 113 if (exp > FLOAT32_ MANTISA_SIZE ) {113 if (exp > FLOAT32_FRACTION_SIZE ) { 114 114 /* FIXME: underflow */ 115 result.parts. mantisa= 0;115 result.parts.fraction = 0; 116 116 return result; 117 117 }; … … 119 119 /* denormalized */ 120 120 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 */ 123 123 124 mant >>= (FLOAT64_MANTISA_SIZE - FLOAT32_MANTISA_SIZE + 1);124 frac >>= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE + 1); 125 125 126 126 while (exp > 0) { 127 127 --exp; 128 mant>>= 1;128 frac >>= 1; 129 129 }; 130 result.parts. mantisa = mant;130 result.parts.fraction = frac; 131 131 132 132 return result; … … 134 134 135 135 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); 137 137 return result; 138 138 }; -
softfloat/generic/div.c
rb7e65d4 r1266543 33 33 float32 divFloat32(float32 a, float32 b) 34 34 { 35 /* TODO: */ 35 float32 result; 36 __s32 aexp, bexp, cexp; 37 __u64 afrac, bfrac, cfrac; 36 38 39 result.parts.sign = a.parts.sign ^ b.parts.sign; 40 41 if (isFloat32NaN(a)) { 42 if (isFloat32SigNaN(a)) { 43 /*FIXME: SigNaN*/ 44 } 45 /*NaN*/ 46 return a; 47 } 48 49 if (isFloat32NaN(b)) { 50 if (isFloat32SigNaN(b)) { 51 /*FIXME: SigNaN*/ 52 } 53 /*NaN*/ 54 return b; 55 } 56 57 if (isFloat32Infinity(a)) { 58 if (isFloat32Infinity(b)) { 59 /*FIXME: inf / inf */ 60 result.binary = FLOAT32_NAN; 61 return result; 62 } 63 /* inf / num */ 64 result.parts.exp = a.parts.exp; 65 result.parts.fraction = a.parts.fraction; 66 return result; 67 } 68 69 if (isFloat32Infinity(b)) { 70 if (isFloat32Zero(a)) { 71 /* FIXME 0 / inf */ 72 result.parts.exp = 0; 73 result.parts.fraction = 0; 74 return result; 75 } 76 /* FIXME: num / inf*/ 77 result.parts.exp = 0; 78 result.parts.fraction = 0; 79 return result; 80 } 81 82 if (isFloat32Zero(b)) { 83 if (isFloat32Zero(a)) { 84 /*FIXME: 0 / 0*/ 85 result.binary = FLOAT32_NAN; 86 return result; 87 } 88 /* FIXME: division by zero */ 89 result.parts.exp = 0; 90 result.parts.fraction = 0; 91 return result; 92 } 93 94 95 afrac = a.parts.fraction; 96 aexp = a.parts.exp; 97 bfrac = b.parts.fraction; 98 bexp = b.parts.exp; 99 100 /* denormalized numbers */ 101 if (aexp == 0) { 102 if (afrac == 0) { 103 result.parts.exp = 0; 104 result.parts.fraction = 0; 105 return result; 106 } 107 /* normalize it*/ 108 109 afrac <<= 1; 110 /* afrac is nonzero => it must stop */ 111 while (! (afrac & FLOAT32_HIDDEN_BIT_MASK) ) { 112 afrac <<= 1; 113 aexp--; 114 } 115 } 116 117 if (bexp == 0) { 118 bfrac <<= 1; 119 /* bfrac is nonzero => it must stop */ 120 while (! (bfrac & FLOAT32_HIDDEN_BIT_MASK) ) { 121 bfrac <<= 1; 122 bexp--; 123 } 124 } 125 126 afrac = (afrac | FLOAT32_HIDDEN_BIT_MASK ) << (32 - FLOAT32_FRACTION_SIZE - 1 ); 127 bfrac = (bfrac | FLOAT32_HIDDEN_BIT_MASK ) << (32 - FLOAT32_FRACTION_SIZE ); 128 129 if ( bfrac <= (afrac << 1) ) { 130 afrac >>= 1; 131 aexp++; 132 } 133 134 cexp = aexp - bexp + FLOAT32_BIAS - 2; 135 136 cfrac = (afrac << 32) / bfrac; 137 if (( cfrac & 0x3F ) == 0) { 138 cfrac |= ( bfrac * cfrac != afrac << 32 ); 139 } 140 141 /* pack and round */ 142 143 /* TODO: find first nonzero digit and shift result and detect possibly underflow */ 144 while ((cexp > 0) && (cfrac) && (!(cfrac & (FLOAT32_HIDDEN_BIT_MASK << 7 )))) { 145 cexp--; 146 cfrac <<= 1; 147 /* TODO: fix underflow */ 148 }; 149 150 151 cfrac += (0x1 << 6); /* FIXME: 7 is not sure*/ 152 153 if (cfrac & (FLOAT32_HIDDEN_BIT_MASK << 7)) { 154 ++cexp; 155 cfrac >>= 1; 156 } 157 158 /* check overflow */ 159 if (cexp >= FLOAT32_MAX_EXPONENT ) { 160 /* FIXME: overflow, return infinity */ 161 result.parts.exp = FLOAT32_MAX_EXPONENT; 162 result.parts.fraction = 0; 163 return result; 164 } 165 166 if (cexp < 0) { 167 /* FIXME: underflow */ 168 result.parts.exp = 0; 169 if ((cexp + FLOAT32_FRACTION_SIZE) < 0) { 170 result.parts.fraction = 0; 171 return result; 172 } 173 cfrac >>= 1; 174 while (cexp < 0) { 175 cexp ++; 176 cfrac >>= 1; 177 } 178 179 } else { 180 result.parts.exp = (__u32)cexp; 181 } 182 183 result.parts.fraction = ((cfrac >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)); 184 185 return result; 37 186 } 38 187 -
softfloat/generic/mul.c
rb7e65d4 r1266543 37 37 { 38 38 float32 result; 39 __u64 mant1, mant2;39 __u64 frac1, frac2; 40 40 __s32 exp; 41 41 … … 45 45 /* TODO: fix SigNaNs */ 46 46 if (isFloat32SigNaN(a)) { 47 result.parts. mantisa = a.parts.mantisa;47 result.parts.fraction = a.parts.fraction; 48 48 result.parts.exp = a.parts.exp; 49 49 return result; 50 50 }; 51 51 if (isFloat32SigNaN(b)) { /* TODO: fix SigNaN */ 52 result.parts. mantisa = b.parts.mantisa;52 result.parts.fraction = b.parts.fraction; 53 53 result.parts.exp = b.parts.exp; 54 54 return result; … … 65 65 return result; 66 66 } 67 result.parts. mantisa = a.parts.mantisa;67 result.parts.fraction = a.parts.fraction; 68 68 result.parts.exp = a.parts.exp; 69 69 return result; … … 76 76 return result; 77 77 } 78 result.parts. mantisa = b.parts.mantisa;78 result.parts.fraction = b.parts.fraction; 79 79 result.parts.exp = b.parts.exp; 80 80 return result; … … 96 96 /* FIXME: underflow */ 97 97 /* return signed zero */ 98 result.parts. mantisa= 0x0;98 result.parts.fraction = 0x0; 99 99 result.parts.exp = 0x0; 100 100 return result; 101 101 }; 102 102 103 mant1 = a.parts.mantisa;103 frac1 = a.parts.fraction; 104 104 if (a.parts.exp > 0) { 105 mant1 |= FLOAT32_HIDDEN_BIT_MASK;105 frac1 |= FLOAT32_HIDDEN_BIT_MASK; 106 106 } else { 107 107 ++exp; 108 108 }; 109 109 110 mant2 = b.parts.mantisa;110 frac2 = b.parts.fraction; 111 111 112 112 if (b.parts.exp > 0) { 113 mant2 |= FLOAT32_HIDDEN_BIT_MASK;113 frac2 |= FLOAT32_HIDDEN_BIT_MASK; 114 114 } else { 115 115 ++exp; 116 116 }; 117 117 118 mant1 <<= 1; /* one bit space for rounding */119 120 mant1 = mant1 * mant2;118 frac1 <<= 1; /* one bit space for rounding */ 119 120 frac1 = frac1 * frac2; 121 121 /* round and return */ 122 122 123 while ((exp < FLOAT32_MAX_EXPONENT) && ( mant1 >= ( 1 << (FLOAT32_MANTISA_SIZE + 2)))) {124 /* 23 bits of mantisa+ one more for hidden bit (all shifted 1 bit left)*/125 ++exp; 126 mant1 >>= 1;123 while ((exp < FLOAT32_MAX_EXPONENT) && (frac1 >= ( 1 << (FLOAT32_FRACTION_SIZE + 2)))) { 124 /* 23 bits of fraction + one more for hidden bit (all shifted 1 bit left)*/ 125 ++exp; 126 frac1 >>= 1; 127 127 }; 128 128 129 129 /* rounding */ 130 / /++mant1; /*FIXME: not works - without it is ok */131 mant1 >>= 1; /* shift off rounding space */132 133 if ((exp < FLOAT32_MAX_EXPONENT) && ( mant1 >= (1 << (FLOAT32_MANTISA_SIZE + 1)))) {134 ++exp; 135 mant1 >>= 1;130 /* ++frac1; FIXME: not works - without it is ok */ 131 frac1 >>= 1; /* shift off rounding space */ 132 133 if ((exp < FLOAT32_MAX_EXPONENT) && (frac1 >= (1 << (FLOAT32_FRACTION_SIZE + 1)))) { 134 ++exp; 135 frac1 >>= 1; 136 136 }; 137 137 … … 140 140 /* return infinity*/ 141 141 result.parts.exp = FLOAT32_MAX_EXPONENT; 142 result.parts. mantisa= 0x0;143 return result; 144 } 145 146 exp -= FLOAT32_ MANTISA_SIZE;147 148 if (exp <= FLOAT32_ MANTISA_SIZE) {142 result.parts.fraction = 0x0; 143 return result; 144 } 145 146 exp -= FLOAT32_FRACTION_SIZE; 147 148 if (exp <= FLOAT32_FRACTION_SIZE) { 149 149 /* denormalized number */ 150 mant1 >>= 1; /* denormalize */151 while (( mant1 > 0) && (exp < 0)) {152 mant1 >>= 1;150 frac1 >>= 1; /* denormalize */ 151 while ((frac1 > 0) && (exp < 0)) { 152 frac1 >>= 1; 153 153 ++exp; 154 154 }; 155 if ( mant1 == 0) {155 if (frac1 == 0) { 156 156 /* FIXME : underflow */ 157 157 result.parts.exp = 0; 158 result.parts. mantisa= 0;158 result.parts.fraction = 0; 159 159 return result; 160 160 }; 161 161 }; 162 162 result.parts.exp = exp; 163 result.parts. mantisa = mant1 & ( (1 << FLOAT32_MANTISA_SIZE) - 1);163 result.parts.fraction = frac1 & ( (1 << FLOAT32_FRACTION_SIZE) - 1); 164 164 165 165 return result; … … 173 173 { 174 174 float64 result; 175 __u64 mant1, mant2;175 __u64 frac1, frac2; 176 176 __s32 exp; 177 177 … … 181 181 /* TODO: fix SigNaNs */ 182 182 if (isFloat64SigNaN(a)) { 183 result.parts. mantisa = a.parts.mantisa;183 result.parts.fraction = a.parts.fraction; 184 184 result.parts.exp = a.parts.exp; 185 185 return result; 186 186 }; 187 187 if (isFloat64SigNaN(b)) { /* TODO: fix SigNaN */ 188 result.parts. mantisa = b.parts.mantisa;188 result.parts.fraction = b.parts.fraction; 189 189 result.parts.exp = b.parts.exp; 190 190 return result; … … 201 201 return result; 202 202 } 203 result.parts. mantisa = a.parts.mantisa;203 result.parts.fraction = a.parts.fraction; 204 204 result.parts.exp = a.parts.exp; 205 205 return result; … … 212 212 return result; 213 213 } 214 result.parts. mantisa = b.parts.mantisa;214 result.parts.fraction = b.parts.fraction; 215 215 result.parts.exp = b.parts.exp; 216 216 return result; … … 232 232 /* FIXME: underflow */ 233 233 /* return signed zero */ 234 result.parts. mantisa= 0x0;234 result.parts.fraction = 0x0; 235 235 result.parts.exp = 0x0; 236 236 return result; 237 237 }; 238 238 239 mant1 = a.parts.mantisa;239 frac1 = a.parts.fraction; 240 240 if (a.parts.exp > 0) { 241 mant1 |= FLOAT64_HIDDEN_BIT_MASK;241 frac1 |= FLOAT64_HIDDEN_BIT_MASK; 242 242 } else { 243 243 ++exp; 244 244 }; 245 245 246 mant2 = b.parts.mantisa;246 frac2 = b.parts.fraction; 247 247 248 248 if (b.parts.exp > 0) { 249 mant2 |= FLOAT64_HIDDEN_BIT_MASK;249 frac2 |= FLOAT64_HIDDEN_BIT_MASK; 250 250 } else { 251 251 ++exp; 252 252 }; 253 253 254 mant1 <<= 1; /* one bit space for rounding */255 256 mul64integers( mant1, mant2, &mant1, &mant2);254 frac1 <<= 1; /* one bit space for rounding */ 255 256 mul64integers(frac1, frac2, &frac1, &frac2); 257 257 258 258 /* round and return */ 259 /* FIXME: ugly soulution is to shift whole mant2 >> as in 32bit version259 /* FIXME: ugly soulution is to shift whole frac2 >> as in 32bit version 260 260 * Here is is more slower because we have to shift two numbers with carry 261 261 * Better is find first nonzero bit and make only one shift … … 264 264 */ 265 265 266 while ((exp < FLOAT64_MAX_EXPONENT) && ( mant2 > 0 )) {267 mant1 >>= 1;268 mant1 &= ((mant2 & 0x1) << 63);269 mant2 >>= 1;270 ++exp; 271 } 272 273 while ((exp < FLOAT64_MAX_EXPONENT) && ( mant1 >= ( (__u64)1 << (FLOAT64_MANTISA_SIZE + 2)))) {274 ++exp; 275 mant1 >>= 1;266 while ((exp < FLOAT64_MAX_EXPONENT) && (frac2 > 0 )) { 267 frac1 >>= 1; 268 frac1 &= ((frac2 & 0x1) << 63); 269 frac2 >>= 1; 270 ++exp; 271 } 272 273 while ((exp < FLOAT64_MAX_EXPONENT) && (frac1 >= ( (__u64)1 << (FLOAT64_FRACTION_SIZE + 2)))) { 274 ++exp; 275 frac1 >>= 1; 276 276 }; 277 277 278 278 /* rounding */ 279 / /++mant1; /*FIXME: not works - without it is ok */280 mant1 >>= 1; /* shift off rounding space */281 282 if ((exp < FLOAT64_MAX_EXPONENT) && ( mant1 >= ((__u64)1 << (FLOAT64_MANTISA_SIZE + 1)))) {283 ++exp; 284 mant1 >>= 1;279 /* ++frac1; FIXME: not works - without it is ok */ 280 frac1 >>= 1; /* shift off rounding space */ 281 282 if ((exp < FLOAT64_MAX_EXPONENT) && (frac1 >= ((__u64)1 << (FLOAT64_FRACTION_SIZE + 1)))) { 283 ++exp; 284 frac1 >>= 1; 285 285 }; 286 286 … … 289 289 /* return infinity*/ 290 290 result.parts.exp = FLOAT64_MAX_EXPONENT; 291 result.parts. mantisa= 0x0;292 return result; 293 } 294 295 exp -= FLOAT64_ MANTISA_SIZE;296 297 if (exp <= FLOAT64_ MANTISA_SIZE) {291 result.parts.fraction = 0x0; 292 return result; 293 } 294 295 exp -= FLOAT64_FRACTION_SIZE; 296 297 if (exp <= FLOAT64_FRACTION_SIZE) { 298 298 /* denormalized number */ 299 mant1 >>= 1; /* denormalize */300 while (( mant1 > 0) && (exp < 0)) {301 mant1 >>= 1;299 frac1 >>= 1; /* denormalize */ 300 while ((frac1 > 0) && (exp < 0)) { 301 frac1 >>= 1; 302 302 ++exp; 303 303 }; 304 if ( mant1 == 0) {304 if (frac1 == 0) { 305 305 /* FIXME : underflow */ 306 306 result.parts.exp = 0; 307 result.parts. mantisa= 0;307 result.parts.fraction = 0; 308 308 return result; 309 309 }; 310 310 }; 311 311 result.parts.exp = exp; 312 result.parts. mantisa = mant1 & ( ((__u64)1 << FLOAT64_MANTISA_SIZE) - 1);312 result.parts.fraction = frac1 & ( ((__u64)1 << FLOAT64_FRACTION_SIZE) - 1); 313 313 314 314 return result; … … 339 339 340 340 middle1 += middle2; 341 high += ((__u64)(middle1 < middle2) << 32) + middle1>>32;342 middle1 << 32;341 high += ((__u64)(middle1 < middle2) << 32) + (middle1 >> 32); 342 middle1 <<= 32; 343 343 low += middle1; 344 344 high += (low < middle1); -
softfloat/generic/softfloat.c
rb7e65d4 r1266543 44 44 { 45 45 float32 fa, fb; 46 fa.f =a;47 fb.f =b;48 if (fa.parts.sign !=fb.parts.sign) {46 fa.f = a; 47 fb.f = b; 48 if (fa.parts.sign != fb.parts.sign) { 49 49 if (fa.parts.sign) { 50 fa.parts.sign =0;51 return subFloat32(fb, fa).f;52 }; 53 fb.parts.sign =0;54 return subFloat32(fa, fb).f;50 fa.parts.sign = 0; 51 return subFloat32(fb, fa).f; 52 }; 53 fb.parts.sign = 0; 54 return subFloat32(fa, fb).f; 55 55 } 56 return addFloat32(fa, fb).f;56 return addFloat32(fa, fb).f; 57 57 } 58 58 … … 60 60 { 61 61 float64 da, db; 62 da.d =a;63 db.d =b;64 if (da.parts.sign !=db.parts.sign) {62 da.d = a; 63 db.d = b; 64 if (da.parts.sign != db.parts.sign) { 65 65 if (da.parts.sign) { 66 da.parts.sign =0;67 return subFloat64(db, da).d;68 }; 69 db.parts.sign =0;70 return subFloat64(da, db).d;66 da.parts.sign = 0; 67 return subFloat64(db, da).d; 68 }; 69 db.parts.sign = 0; 70 return subFloat64(da, db).d; 71 71 } 72 return addFloat64(da, db).d;72 return addFloat64(da, db).d; 73 73 } 74 74 … … 76 76 { 77 77 float32 fa, fb; 78 fa.f =a;79 fb.f =b;80 if (fa.parts.sign !=fb.parts.sign) {81 fb.parts.sign =!fb.parts.sign;82 return addFloat32(fa, fb).f;78 fa.f = a; 79 fb.f = b; 80 if (fa.parts.sign != fb.parts.sign) { 81 fb.parts.sign = !fb.parts.sign; 82 return addFloat32(fa, fb).f; 83 83 } 84 return subFloat32(fa, fb).f;84 return subFloat32(fa, fb).f; 85 85 } 86 86 … … 100 100 { 101 101 float32 fa, fb; 102 fa.f =a;103 fb.f =b;102 fa.f = a; 103 fb.f = b; 104 104 return mulFloat32(fa, fb).f; 105 105 } … … 116 116 { 117 117 float32 fa, fb; 118 fa.f =a;119 fb.f =b;120 //return divFloat32(fa, fb).f;118 fa.f = a; 119 fb.f = b; 120 return divFloat32(fa, fb).f; 121 121 } 122 122 … … 124 124 { 125 125 float32 fa; 126 fa.f =a;127 fa.parts.sign =!fa.parts.sign;126 fa.f = a; 127 fa.parts.sign = !fa.parts.sign; 128 128 return fa.f; 129 129 } … … 132 132 { 133 133 float64 fa; 134 fa.d =a;135 fa.parts.sign =!fa.parts.sign;134 fa.d = a; 135 fa.parts.sign = !fa.parts.sign; 136 136 return fa.d; 137 137 } … … 162 162 int __cmpsf2(float a, float b) 163 163 { 164 float32 fa, fb;165 fa.f =a;166 fb.f =b;167 if ( (isFloat32NaN(fa))||(isFloat32NaN(fb))) {164 float32 fa, fb; 165 fa.f = a; 166 fb.f = b; 167 if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) { 168 168 return 1; /* no special constant for unordered - maybe signaled? */ 169 169 }; 170 170 171 171 172 if (isFloat32eq(fa, fb)) {172 if (isFloat32eq(fa, fb)) { 173 173 return 0; 174 174 }; 175 175 176 if (isFloat32lt(fa, fb)) {176 if (isFloat32lt(fa, fb)) { 177 177 return -1; 178 178 }; … … 182 182 int __unordsf2(float a, float b) 183 183 { 184 float32 fa, fb;185 fa.f =a;186 fb.f =b;187 return ( (isFloat32NaN(fa))||(isFloat32NaN(fb)));184 float32 fa, fb; 185 fa.f = a; 186 fb.f = b; 187 return ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ); 188 188 } 189 189 … … 193 193 int __eqsf2(float a, float b) 194 194 { 195 float32 fa, fb;196 fa.f =a;197 fb.f =b;198 if ( (isFloat32NaN(fa))||(isFloat32NaN(fb))) {199 /* TODO: sigNaNs*/ 200 return 1; 201 }; 202 return isFloat32eq(fa, fb)-1;195 float32 fa, fb; 196 fa.f = a; 197 fb.f = b; 198 if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) { 199 /* TODO: sigNaNs*/ 200 return 1; 201 }; 202 return isFloat32eq(fa, fb) - 1; 203 203 } 204 204 … … 206 206 int __nesf2(float a, float b) 207 207 { 208 return __eqsf2(a, b);208 return __eqsf2(a, b); 209 209 } 210 210 … … 212 212 int __gesf2(float a, float b) 213 213 { 214 float32 fa, fb;215 fa.f =a;216 fb.f =b;217 if ( (isFloat32NaN(fa))||(isFloat32NaN(fb))) {218 /* TODO: sigNaNs*/ 219 return -1; 220 }; 221 222 if (isFloat32eq(fa, fb)) {214 float32 fa, fb; 215 fa.f = a; 216 fb.f = b; 217 if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) { 218 /* TODO: sigNaNs*/ 219 return -1; 220 }; 221 222 if (isFloat32eq(fa, fb)) { 223 223 return 0; 224 224 }; 225 225 226 if (isFloat32gt(fa, fb)) {226 if (isFloat32gt(fa, fb)) { 227 227 return 1; 228 228 }; … … 234 234 int __ltsf2(float a, float b) 235 235 { 236 float32 fa, fb;237 fa.f =a;238 fb.f =b;239 if ( (isFloat32NaN(fa))||(isFloat32NaN(fb))) {236 float32 fa, fb; 237 fa.f = a; 238 fb.f = b; 239 if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) { 240 240 /* TODO: sigNaNs*/ 241 241 return 1; … … 250 250 int __lesf2(float a, float b) 251 251 { 252 float32 fa, fb;253 fa.f =a;254 fb.f =b;255 if ( (isFloat32NaN(fa))||(isFloat32NaN(fb))) {256 /* TODO: sigNaNs*/ 257 return 1; 258 }; 259 260 if (isFloat32eq(fa, fb)) {252 float32 fa, fb; 253 fa.f = a; 254 fb.f = b; 255 if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) { 256 /* TODO: sigNaNs*/ 257 return 1; 258 }; 259 260 if (isFloat32eq(fa, fb)) { 261 261 return 0; 262 262 }; 263 263 264 if (isFloat32lt(fa, fb)) {264 if (isFloat32lt(fa, fb)) { 265 265 return -1; 266 266 }; … … 272 272 int __gtsf2(float a, float b) 273 273 { 274 float32 fa, fb;275 fa.f =a;276 fb.f =b;277 if ( (isFloat32NaN(fa))||(isFloat32NaN(fb))) {274 float32 fa, fb; 275 fa.f = a; 276 fb.f = b; 277 if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) { 278 278 /* TODO: sigNaNs*/ 279 279 return -1; … … 289 289 float __powisf2(float a, int b) 290 290 { 291 / /TODO:291 /* TODO: */ 292 292 } 293 293 294 294 float __mulsc3(float a, float b, float c, float d) 295 295 { 296 / /TODO:296 /* TODO: */ 297 297 } 298 298 299 299 float __divsc3(float a, float b, float c, float d) 300 300 { 301 / /TODO:302 } 303 301 /* TODO: */ 302 } 303 -
softfloat/generic/sub.c
rb7e65d4 r1266543 36 36 { 37 37 int expdiff; 38 __u32 exp1, exp2, mant1, mant2;38 __u32 exp1, exp2, frac1, frac2; 39 39 float32 result; 40 40 … … 42 42 43 43 expdiff = a.parts.exp - b.parts.exp; 44 if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts. mantisa < b.parts.mantisa))) {44 if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts.fraction < b.parts.fraction))) { 45 45 if (isFloat32NaN(b)) { 46 / /TODO: fix SigNaN46 /* TODO: fix SigNaN */ 47 47 if (isFloat32SigNaN(b)) { 48 48 }; … … 57 57 result.parts.sign = !a.parts.sign; 58 58 59 mant1 = b.parts.mantisa;59 frac1 = b.parts.fraction; 60 60 exp1 = b.parts.exp; 61 mant2 = a.parts.mantisa;61 frac2 = a.parts.fraction; 62 62 exp2 = a.parts.exp; 63 63 expdiff *= -1; 64 64 } else { 65 65 if (isFloat32NaN(a)) { 66 / /TODO: fix SigNaN66 /* TODO: fix SigNaN */ 67 67 if (isFloat32SigNaN(a) || isFloat32SigNaN(b)) { 68 68 }; … … 73 73 if (b.parts.exp == FLOAT32_MAX_EXPONENT) { 74 74 /* inf - inf => nan */ 75 / /TODO: fix exception75 /* TODO: fix exception */ 76 76 result.binary = FLOAT32_NAN; 77 77 return result; … … 82 82 result.parts.sign = a.parts.sign; 83 83 84 mant1 = a.parts.mantisa;84 frac1 = a.parts.fraction; 85 85 exp1 = a.parts.exp; 86 mant2 = b.parts.mantisa;86 frac2 = b.parts.fraction; 87 87 exp2 = b.parts.exp; 88 88 }; 89 89 90 90 if (exp1 == 0) { 91 / /both are denormalized92 result.parts. mantisa = mant1-mant2;93 if (result.parts. mantisa > mant1) {94 / /TODO: underflow exception91 /* both are denormalized */ 92 result.parts.fraction = frac1-frac2; 93 if (result.parts.fraction > frac1) { 94 /* TODO: underflow exception */ 95 95 return result; 96 96 }; … … 100 100 101 101 /* add hidden bit */ 102 mant1 |= FLOAT32_HIDDEN_BIT_MASK;102 frac1 |= FLOAT32_HIDDEN_BIT_MASK; 103 103 104 104 if (exp2 == 0) { … … 107 107 } else { 108 108 /* normalized */ 109 mant2 |= FLOAT32_HIDDEN_BIT_MASK;109 frac2 |= FLOAT32_HIDDEN_BIT_MASK; 110 110 }; 111 111 112 112 /* create some space for rounding */ 113 mant1 <<= 6;114 mant2 <<= 6;115 116 if (expdiff > FLOAT32_ MANTISA_SIZE + 1) {113 frac1 <<= 6; 114 frac2 <<= 6; 115 116 if (expdiff > FLOAT32_FRACTION_SIZE + 1) { 117 117 goto done; 118 118 }; 119 119 120 mant1 = mant1 - (mant2 >> expdiff);120 frac1 = frac1 - (frac2 >> expdiff); 121 121 done: 122 / /TODO: find first nonzero digit and shift result and detect possibly underflow123 while ((exp1 > 0) && (!( mant1 & (FLOAT32_HIDDEN_BIT_MASK << 6 )))) {122 /* TODO: find first nonzero digit and shift result and detect possibly underflow */ 123 while ((exp1 > 0) && (!(frac1 & (FLOAT32_HIDDEN_BIT_MASK << 6 )))) { 124 124 --exp1; 125 mant1 <<= 1;126 /* TODO: fix underflow - mant1 == 0 does not necessary means underflow... */127 }; 128 129 /* rounding - if first bit after mantisais set then round up */130 mant1 += 0x20;131 132 if ( mant1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) {125 frac1 <<= 1; 126 /* TODO: fix underflow - frac1 == 0 does not necessary means underflow... */ 127 }; 128 129 /* rounding - if first bit after fraction is set then round up */ 130 frac1 += 0x20; 131 132 if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) { 133 133 ++exp1; 134 mant1 >>= 1;134 frac1 >>= 1; 135 135 }; 136 136 137 137 /*Clear hidden bit and shift */ 138 result.parts. mantisa = ((mant1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK));138 result.parts.fraction = ((frac1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)); 139 139 result.parts.exp = exp1; 140 140 … … 148 148 int expdiff; 149 149 __u32 exp1, exp2; 150 __u64 mant1, mant2;150 __u64 frac1, frac2; 151 151 float64 result; 152 152 … … 154 154 155 155 expdiff = a.parts.exp - b.parts.exp; 156 if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts. mantisa < b.parts.mantisa))) {156 if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts.fraction < b.parts.fraction))) { 157 157 if (isFloat64NaN(b)) { 158 / /TODO: fix SigNaN158 /* TODO: fix SigNaN */ 159 159 if (isFloat64SigNaN(b)) { 160 160 }; … … 169 169 result.parts.sign = !a.parts.sign; 170 170 171 mant1 = b.parts.mantisa;171 frac1 = b.parts.fraction; 172 172 exp1 = b.parts.exp; 173 mant2 = a.parts.mantisa;173 frac2 = a.parts.fraction; 174 174 exp2 = a.parts.exp; 175 175 expdiff *= -1; 176 176 } else { 177 177 if (isFloat64NaN(a)) { 178 / /TODO: fix SigNaN178 /* TODO: fix SigNaN */ 179 179 if (isFloat64SigNaN(a) || isFloat64SigNaN(b)) { 180 180 }; … … 185 185 if (b.parts.exp == FLOAT64_MAX_EXPONENT) { 186 186 /* inf - inf => nan */ 187 / /TODO: fix exception187 /* TODO: fix exception */ 188 188 result.binary = FLOAT64_NAN; 189 189 return result; … … 194 194 result.parts.sign = a.parts.sign; 195 195 196 mant1 = a.parts.mantisa;196 frac1 = a.parts.fraction; 197 197 exp1 = a.parts.exp; 198 mant2 = b.parts.mantisa;198 frac2 = b.parts.fraction; 199 199 exp2 = b.parts.exp; 200 200 }; 201 201 202 202 if (exp1 == 0) { 203 / /both are denormalized204 result.parts. mantisa = mant1 - mant2;205 if (result.parts. mantisa > mant1) {206 / /TODO: underflow exception203 /* both are denormalized */ 204 result.parts.fraction = frac1 - frac2; 205 if (result.parts.fraction > frac1) { 206 /* TODO: underflow exception */ 207 207 return result; 208 208 }; … … 212 212 213 213 /* add hidden bit */ 214 mant1 |= FLOAT64_HIDDEN_BIT_MASK;214 frac1 |= FLOAT64_HIDDEN_BIT_MASK; 215 215 216 216 if (exp2 == 0) { … … 219 219 } else { 220 220 /* normalized */ 221 mant2 |= FLOAT64_HIDDEN_BIT_MASK;221 frac2 |= FLOAT64_HIDDEN_BIT_MASK; 222 222 }; 223 223 224 224 /* create some space for rounding */ 225 mant1 <<= 6;226 mant2 <<= 6;227 228 if (expdiff > FLOAT64_ MANTISA_SIZE + 1) {225 frac1 <<= 6; 226 frac2 <<= 6; 227 228 if (expdiff > FLOAT64_FRACTION_SIZE + 1) { 229 229 goto done; 230 230 }; 231 231 232 mant1 = mant1 - (mant2 >> expdiff);232 frac1 = frac1 - (frac2 >> expdiff); 233 233 done: 234 / /TODO: find first nonzero digit and shift result and detect possibly underflow235 while ((exp1 > 0) && (!( mant1 & (FLOAT64_HIDDEN_BIT_MASK << 6 )))) {234 /* TODO: find first nonzero digit and shift result and detect possibly underflow */ 235 while ((exp1 > 0) && (!(frac1 & (FLOAT64_HIDDEN_BIT_MASK << 6 )))) { 236 236 --exp1; 237 mant1 <<= 1;238 /* TODO: fix underflow - mant1 == 0 does not necessary means underflow... */239 }; 240 241 /* rounding - if first bit after mantisais set then round up */242 mant1 += 0x20;243 244 if ( mant1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) {237 frac1 <<= 1; 238 /* TODO: fix underflow - frac1 == 0 does not necessary means underflow... */ 239 }; 240 241 /* rounding - if first bit after fraction is set then round up */ 242 frac1 += 0x20; 243 244 if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) { 245 245 ++exp1; 246 mant1 >>= 1;246 frac1 >>= 1; 247 247 }; 248 248 249 249 /*Clear hidden bit and shift */ 250 result.parts. mantisa = ((mant1 >> 6) & (~FLOAT64_HIDDEN_BIT_MASK));250 result.parts.fraction = ((frac1 >> 6) & (~FLOAT64_HIDDEN_BIT_MASK)); 251 251 result.parts.exp = exp1; 252 252 -
softfloat/include/sftypes.h
rb7e65d4 r1266543 38 38 __u32 sign:1; 39 39 __u32 exp:8; 40 __u32 mantisa:23;40 __u32 fraction:23; 41 41 #elif defined __LITTLE_ENDIAN__ 42 __u32 mantisa:23;42 __u32 fraction:23; 43 43 __u32 exp:8; 44 44 __u32 sign:1; … … 57 57 __u64 sign:1; 58 58 __u64 exp:11; 59 __u64 mantisa:52;59 __u64 fraction:52; 60 60 #elif defined __LITTLE_ENDIAN__ 61 __u64 mantisa:52;61 __u64 fraction:52; 62 62 __u64 exp:11; 63 63 __u64 sign:1; … … 82 82 #define FLOAT64_INF 0x7FF0000000000000ll 83 83 84 #define FLOAT32_ MANTISA_SIZE 2385 #define FLOAT64_ MANTISA_SIZE 5284 #define FLOAT32_FRACTION_SIZE 23 85 #define FLOAT64_FRACTION_SIZE 52 86 86 87 87 #define FLOAT32_HIDDEN_BIT_MASK 0x800000
Note:
See TracChangeset
for help on using the changeset viewer.