Changeset 4a5abddd in mainline
- Timestamp:
- 2006-01-22T14:37:54Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a96c570
- Parents:
- 12c6f2d
- Location:
- softfloat
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
softfloat/generic/add.c
r12c6f2d r4a5abddd 38 38 __u32 exp1, exp2,mant1, mant2; 39 39 40 expdiff =a.parts.exp - b.parts.exp;41 if (expdiff <0) {40 expdiff = a.parts.exp - b.parts.exp; 41 if (expdiff < 0) { 42 42 if (isFloat32NaN(b)) { 43 43 //TODO: fix SigNaN … … 48 48 }; 49 49 50 if (b.parts.exp ==0xFF) {51 return b; 52 } 53 54 mant1 =b.parts.mantisa;55 exp1 =b.parts.exp;56 mant2 =a.parts.mantisa;57 exp2 =a.parts.exp;58 expdiff *=-1;50 if (b.parts.exp == FLOAT32_MAX_EXPONENT) { 51 return b; 52 } 53 54 mant1 = b.parts.mantisa; 55 exp1 = b.parts.exp; 56 mant2 = a.parts.mantisa; 57 exp2 = a.parts.exp; 58 expdiff *= -1; 59 59 } else { 60 60 if (isFloat32NaN(a)) { 61 61 //TODO: fix SigNaN 62 if ( (isFloat32SigNaN(a))||(isFloat32SigNaN(b))) {63 }; 64 return a; 65 }; 66 67 if (a.parts.exp ==0xFF) {68 return a; 69 } 70 71 mant1 =a.parts.mantisa;72 exp1 =a.parts.exp;73 mant2 =b.parts.mantisa;74 exp2 =b.parts.exp;62 if (isFloat32SigNaN(a) || isFloat32SigNaN(b)) { 63 }; 64 return a; 65 }; 66 67 if (a.parts.exp == FLOAT32_MAX_EXPONENT) { 68 return a; 69 } 70 71 mant1 = a.parts.mantisa; 72 exp1 = a.parts.exp; 73 mant2 = b.parts.mantisa; 74 exp2 = b.parts.exp; 75 75 }; 76 76 … … 100 100 mant2 <<= 6; 101 101 102 if (expdiff > 24) {102 if (expdiff > (FLOAT32_MANTISA_SIZE + 1) ) { 103 103 goto done; 104 104 }; 105 105 106 mant2 >>=expdiff;107 mant1 +=mant2;106 mant2 >>= expdiff; 107 mant1 += mant2; 108 108 done: 109 if (mant1 & (FLOAT32_HIDDEN_BIT_MASK << 6) ) {109 if (mant1 & (FLOAT32_HIDDEN_BIT_MASK << 7) ) { 110 110 ++exp1; 111 111 mant1 >>= 1; … … 115 115 mant1 += (0x1 << 5); 116 116 117 if (mant1 & (FLOAT32_HIDDEN_BIT_MASK << 6)) {118 ++exp1; 119 mant1 >> =1;117 if (mant1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) { 118 ++exp1; 119 mant1 >>= 1; 120 120 }; 121 121 … … 123 123 124 124 /*Clear hidden bit and shift */ 125 a.parts.mantisa = ((mant1 >>6) & (~FLOAT32_HIDDEN_BIT_MASK)) ;125 a.parts.mantisa = ((mant1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)) ; 126 126 return a; 127 127 } … … 133 133 { 134 134 int expdiff; 135 __u64 exp1, exp2,mant1,mant2;136 137 expdiff =a.parts.exp - b.parts.exp;138 if (expdiff <0) {135 __u64 exp1, exp2, mant1, mant2; 136 137 expdiff = a.parts.exp - b.parts.exp; 138 if (expdiff < 0) { 139 139 if (isFloat64NaN(b)) { 140 140 //TODO: fix SigNaN … … 146 146 147 147 /* b is infinity and a not */ 148 if (b.parts.exp ==0x8FF) {149 return b; 150 } 151 152 mant1 =b.parts.mantisa;153 exp1 =b.parts.exp;154 mant2 =a.parts.mantisa;155 exp2 =a.parts.exp;156 expdiff *=-1;148 if (b.parts.exp == FLOAT64_MAX_EXPONENT ) { 149 return b; 150 } 151 152 mant1 = b.parts.mantisa; 153 exp1 = b.parts.exp; 154 mant2 = a.parts.mantisa; 155 exp2 = a.parts.exp; 156 expdiff *= -1; 157 157 } else { 158 158 if (isFloat64NaN(a)) { 159 159 //TODO: fix SigNaN 160 if ( (isFloat64SigNaN(a))||(isFloat64SigNaN(b))) {160 if (isFloat64SigNaN(a) || isFloat64SigNaN(b)) { 161 161 }; 162 162 return a; … … 164 164 165 165 /* a is infinity and b not */ 166 if (a.parts.exp == 0x8FF) {166 if (a.parts.exp == FLOAT64_MAX_EXPONENT ) { 167 167 return a; 168 168 } … … 201 201 mant2 <<= 6; 202 202 203 if (expdiff > 53) {203 if (expdiff > (FLOAT64_MANTISA_SIZE + 1) ) { 204 204 goto done; 205 205 }; … … 208 208 mant1 += mant2; 209 209 done: 210 if (mant1 & (FLOAT64_HIDDEN_BIT_MASK << 6) ) {210 if (mant1 & (FLOAT64_HIDDEN_BIT_MASK << 7) ) { 211 211 ++exp1; 212 212 mant1 >>= 1; … … 216 216 mant1 += (0x1 << 5); 217 217 218 if (mant1 & (FLOAT64_HIDDEN_BIT_MASK << 6)) {219 ++exp1; 220 mant1 >> =1;218 if (mant1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) { 219 ++exp1; 220 mant1 >>= 1; 221 221 }; 222 222 223 223 a.parts.exp = exp1; 224 224 /*Clear hidden bit and shift */ 225 a.parts.mantisa = ( (mant1 >> 6 ) & (~ (FLOAT64_HIDDEN_BIT_MASK)));225 a.parts.mantisa = ( (mant1 >> 6 ) & (~FLOAT64_HIDDEN_BIT_MASK)); 226 226 return a; 227 227 } -
softfloat/include/sftypes.h
r12c6f2d r4a5abddd 82 82 83 83 #define FLOAT32_HIDDEN_BIT_MASK 0x800000 84 #define FLOAT64_HIDDEN_BIT_MASK 0x10000000000000l 84 #define FLOAT64_HIDDEN_BIT_MASK 0x10000000000000ll 85 86 #define FLOAT32_MAX_EXPONENT 0xFF 87 #define FLOAT64_MAX_EXPONENT 0x8FF 85 88 86 89 #define FLOAT32_BIAS 0x7F
Note:
See TracChangeset
for help on using the changeset viewer.