Changes in uspace/lib/softfloat/generic/conversion.c [00acd66:9539be6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/softfloat/generic/conversion.c
r00acd66 r9539be6 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 45 45 result.parts.sign = a.parts.sign; 46 46 result.parts.fraction = a.parts.fraction; 47 result.parts.fraction <<= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE 48 49 if ((isFloat32Infinity(a)) ||(isFloat32NaN(a))) {47 result.parts.fraction <<= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE); 48 49 if ((isFloat32Infinity(a)) || (isFloat32NaN(a))) { 50 50 result.parts.exp = 0x7FF; 51 51 /* TODO; check if its correct for SigNaNs*/ … … 53 53 }; 54 54 55 result.parts.exp = a.parts.exp + ( (int)FLOAT64_BIAS - FLOAT32_BIAS);55 result.parts.exp = a.parts.exp + ((int) FLOAT64_BIAS - FLOAT32_BIAS); 56 56 if (a.parts.exp == 0) { 57 57 /* normalize denormalized numbers */ … … 181 181 uint32_t float32_to_uint32(float32 a) 182 182 { 183 if (isFloat32NaN(a)) { 184 return MAX_UINT32; 185 } 186 187 if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS))) { 188 if (a.parts.sign) { 189 return MIN_UINT32; 190 } 191 return MAX_UINT32; 192 } 193 194 return _float32_to_uint32_helper(a); 183 if (isFloat32NaN(a)) 184 return UINT32_MAX; 185 186 if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS))) { 187 if (a.parts.sign) 188 return UINT32_MIN; 189 190 return UINT32_MAX; 191 } 192 193 return _float32_to_uint32_helper(a); 195 194 } 196 195 … … 201 200 int32_t float32_to_int32(float32 a) 202 201 { 203 if (isFloat32NaN(a)) {204 return MAX_INT32;205 }206 207 if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS))) {208 if (a.parts.sign) {209 return MIN_INT32;210 }211 return MAX_INT32;212 }202 if (isFloat32NaN(a)) 203 return INT32_MAX; 204 205 if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS))) { 206 if (a.parts.sign) 207 return INT32_MIN; 208 209 return INT32_MAX; 210 } 211 213 212 return _float32_to_uint32_helper(a); 214 } 213 } 215 214 216 215 … … 249 248 uint64_t float64_to_uint64(float64 a) 250 249 { 251 if (isFloat64NaN(a)) {252 return MAX_UINT64;253 }254 255 if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS))) 256 if (a.parts.sign) {257 return MIN_UINT64;258 }259 return MAX_UINT64;260 } 261 262 return _float64_to_uint64_helper(a); 250 if (isFloat64NaN(a)) 251 return UINT64_MAX; 252 253 254 if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS))) { 255 if (a.parts.sign) 256 return UINT64_MIN; 257 258 return UINT64_MAX; 259 } 260 261 return _float64_to_uint64_helper(a); 263 262 } 264 263 … … 269 268 int64_t float64_to_int64(float64 a) 270 269 { 271 if (isFloat64NaN(a)) { 272 return MAX_INT64; 273 } 274 275 if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS))) { 276 if (a.parts.sign) { 277 return MIN_INT64; 278 } 279 return MAX_INT64; 280 } 270 if (isFloat64NaN(a)) 271 return INT64_MAX; 272 273 274 if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS))) { 275 if (a.parts.sign) 276 return INT64_MIN; 277 278 return INT64_MAX; 279 } 280 281 281 return _float64_to_uint64_helper(a); 282 } 282 } 283 283 284 284 … … 320 320 uint64_t float32_to_uint64(float32 a) 321 321 { 322 if (isFloat32NaN(a)) {323 return MAX_UINT64;324 }325 326 if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS))) 327 if (a.parts.sign) {328 return MIN_UINT64;329 }330 return MAX_UINT64;331 } 332 333 return _float32_to_uint64_helper(a); 322 if (isFloat32NaN(a)) 323 return UINT64_MAX; 324 325 326 if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS))) { 327 if (a.parts.sign) 328 return UINT64_MIN; 329 330 return UINT64_MAX; 331 } 332 333 return _float32_to_uint64_helper(a); 334 334 } 335 335 … … 340 340 int64_t float32_to_int64(float32 a) 341 341 { 342 if (isFloat32NaN(a)) {343 return MAX_INT64;344 }345 346 if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS))) {347 if (a.parts.sign) {348 return (MIN_INT64);349 }350 return MAX_INT64;351 }342 if (isFloat32NaN(a)) 343 return INT64_MAX; 344 345 if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS))) { 346 if (a.parts.sign) 347 return INT64_MIN; 348 349 return INT64_MAX; 350 } 351 352 352 return _float32_to_uint64_helper(a); 353 } 353 } 354 354 355 355 … … 360 360 uint32_t float64_to_uint32(float64 a) 361 361 { 362 if (isFloat64NaN(a)) {363 return MAX_UINT32;364 }365 366 if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS))) 367 if (a.parts.sign) {368 return MIN_UINT32;369 }370 return MAX_UINT32;371 } 372 373 return (uint32_t) _float64_to_uint64_helper(a);362 if (isFloat64NaN(a)) 363 return UINT32_MAX; 364 365 366 if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS))) { 367 if (a.parts.sign) 368 return UINT32_MIN; 369 370 return UINT32_MAX; 371 } 372 373 return (uint32_t) _float64_to_uint64_helper(a); 374 374 } 375 375 … … 380 380 int32_t float64_to_int32(float64 a) 381 381 { 382 if (isFloat64NaN(a)) { 383 return MAX_INT32; 384 } 385 386 if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS))) { 387 if (a.parts.sign) { 388 return MIN_INT32; 389 } 390 return MAX_INT32; 391 } 392 return (int32_t)_float64_to_uint64_helper(a); 393 } 382 if (isFloat64NaN(a)) 383 return INT32_MAX; 384 385 386 if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS))) { 387 if (a.parts.sign) 388 return INT32_MIN; 389 390 return INT32_MAX; 391 } 392 393 return (int32_t) _float64_to_uint64_helper(a); 394 } 394 395 395 396 /** Convert unsigned integer to float32
Note:
See TracChangeset
for help on using the changeset viewer.