Changeset 9539be6 in mainline for uspace/lib
- Timestamp:
- 2010-06-22T14:13:55Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 851f33a
- Parents:
- 402eda5
- Location:
- uspace/lib
- Files:
-
- 8 deleted
- 15 edited
-
c/arch/abs32le/include/limits.h (deleted)
-
c/arch/abs32le/include/types.h (modified) (1 diff)
-
c/arch/amd64/include/types.h (modified) (1 diff)
-
c/arch/arm32/include/limits.h (deleted)
-
c/arch/arm32/include/types.h (modified) (1 diff)
-
c/arch/ia32/include/limits.h (deleted)
-
c/arch/ia32/include/types.h (modified) (1 diff)
-
c/arch/ia64/include/types.h (modified) (1 diff)
-
c/arch/mips32/include/limits.h (deleted)
-
c/arch/mips32/include/types.h (modified) (1 diff)
-
c/arch/mips32eb/include/limits.h (deleted)
-
c/arch/ppc32/include/limits.h (deleted)
-
c/arch/ppc32/include/types.h (modified) (1 diff)
-
c/arch/sparc64/include/limits.h (deleted)
-
c/arch/sparc64/include/types.h (modified) (1 diff)
-
c/generic/str.c (modified) (1 diff)
-
c/include/limits.h (deleted)
-
c/include/stdint.h (modified) (1 diff)
-
pci/types.h (modified) (1 diff)
-
socket/generic/socket_client.c (modified) (1 diff)
-
socket/generic/socket_core.c (modified) (1 diff)
-
softfloat/generic/conversion.c (modified) (11 diffs)
-
softint/generic/multiplication.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/arch/abs32le/include/types.h
r402eda5 r9539be6 40 40 #include <libarch/common.h> 41 41 42 #define SIZE_MIN UINT32_MIN 43 #define SIZE_MAX UINT32_MAX 44 45 #define SSIZE_MIN INT32_MIN 46 #define SSIZE_MAX INT32_MAX 47 42 48 typedef uint32_t sysarg_t; 43 49 -
uspace/lib/c/arch/amd64/include/types.h
r402eda5 r9539be6 40 40 #include <libarch/common.h> 41 41 42 #define SIZE_MIN UINT64_MIN 43 #define SIZE_MAX UINT64_MAX 44 45 #define SSIZE_MIN INT64_MIN 46 #define SSIZE_MAX INT64_MAX 47 42 48 typedef uint64_t sysarg_t; 43 49 -
uspace/lib/c/arch/arm32/include/types.h
r402eda5 r9539be6 41 41 #include <libarch/common.h> 42 42 43 #define SIZE_MIN UINT32_MIN 44 #define SIZE_MAX UINT32_MAX 45 46 #define SSIZE_MIN INT32_MIN 47 #define SSIZE_MAX INT32_MAX 48 43 49 typedef uint32_t sysarg_t; 44 50 -
uspace/lib/c/arch/ia32/include/types.h
r402eda5 r9539be6 40 40 #include <libarch/common.h> 41 41 42 #define SIZE_MIN UINT32_MIN 43 #define SIZE_MAX UINT32_MAX 44 45 #define SSIZE_MIN INT32_MIN 46 #define SSIZE_MAX INT32_MAX 47 42 48 typedef uint32_t sysarg_t; 43 49 -
uspace/lib/c/arch/ia64/include/types.h
r402eda5 r9539be6 40 40 #include <libarch/common.h> 41 41 42 #define SIZE_MIN UINT64_MIN 43 #define SIZE_MAX UINT64_MAX 44 45 #define SSIZE_MIN INT64_MIN 46 #define SSIZE_MAX INT64_MAX 47 42 48 typedef struct { 43 49 uint64_t lo; -
uspace/lib/c/arch/mips32/include/types.h
r402eda5 r9539be6 41 41 #include <libarch/common.h> 42 42 43 #define SIZE_MIN UINT32_MIN 44 #define SIZE_MAX UINT32_MAX 45 46 #define SSIZE_MIN INT32_MIN 47 #define SSIZE_MAX INT32_MAX 48 43 49 typedef uint32_t sysarg_t; 44 50 -
uspace/lib/c/arch/ppc32/include/types.h
r402eda5 r9539be6 40 40 #include <libarch/common.h> 41 41 42 #define SIZE_MIN UINT32_MIN 43 #define SIZE_MAX UINT32_MAX 44 45 #define SSIZE_MIN INT32_MIN 46 #define SSIZE_MAX INT32_MAX 47 42 48 typedef uint32_t sysarg_t; 43 49 -
uspace/lib/c/arch/sparc64/include/types.h
r402eda5 r9539be6 40 40 #include <libarch/common.h> 41 41 42 #define SIZE_MIN UINT64_MIN 43 #define SIZE_MAX UINT64_MAX 44 45 #define SSIZE_MIN INT64_MIN 46 #define SSIZE_MAX INT64_MAX 47 42 48 typedef uint64_t sysarg_t; 43 49 -
uspace/lib/c/generic/str.c
r402eda5 r9539be6 37 37 #include <stdlib.h> 38 38 #include <assert.h> 39 #include < limits.h>39 #include <stdint.h> 40 40 #include <ctype.h> 41 41 #include <malloc.h> -
uspace/lib/c/include/stdint.h
r402eda5 r9539be6 36 36 #define LIBC_STDINT_H_ 37 37 38 /* Definitions of types with fixed size */ 38 #define INT8_MIN (0x80) 39 #define INT8_MAX (0x7F) 40 41 #define UINT8_MIN (0u) 42 #define UINT8_MAX (0xFFu) 43 44 #define INT16_MIN (0x8000) 45 #define INT16_MAX (0x7FFF) 46 47 #define UINT16_MIN (0u) 48 #define UINT16_MAX (0xFFFFu) 49 50 #define INT32_MIN (0x80000000l) 51 #define INT32_MAX (0x7FFFFFFFl) 52 53 #define UINT32_MIN (0ul) 54 #define UINT32_MAX (0xFFFFFFFFul) 55 56 #define INT64_MIN (0x8000000000000000ll) 57 #define INT64_MAX (0x7FFFFFFFFFFFFFFFll) 58 59 #define UINT64_MIN (0ull) 60 #define UINT64_MAX (0xFFFFFFFFFFFFFFFFull) 61 39 62 #include <libarch/types.h> 40 63 41 #define MAX_INT8 (0x7F) 42 #define MIN_INT8 (0x80) 43 #define MAX_UINT8 (0xFFu) 44 #define MIN_UINT8 (0u) 64 /* off64_t */ 65 #define OFF64_MIN INT64_MIN 66 #define OFF64_MAX INT64_MAX 45 67 46 #define MAX_INT16 (0x7FFF) 47 #define MIN_INT16 (0x8000) 48 #define MAX_UINT16 (0xFFFFu) 49 #define MIN_UINT16 (0u) 50 51 #define MAX_INT32 (0x7FFFFFFF) 52 #define MIN_INT32 (0x80000000) 53 #define MAX_UINT32 (0xFFFFFFFFu) 54 #define MIN_UINT32 (0u) 55 56 #define MAX_INT64 (0x7FFFFFFFFFFFFFFFll) 57 #define MIN_INT64 (0x8000000000000000ll) 58 #define MAX_UINT64 (0xFFFFFFFFFFFFFFFFull) 59 #define MIN_UINT64 (0ull) 68 /* aoff64_t */ 69 #define AOFF64_MIN UINT64_MIN 70 #define AOFF64_MAX UINT64_MAX 60 71 61 72 #endif -
uspace/lib/pci/types.h
r402eda5 r9539be6 18 18 19 19 #ifdef PCI_HAVE_64BIT_ADDRESS 20 #include <limits.h> 20 21 #include <stdint.h> 22 21 23 #if ULONG_MAX > 0xffffffff 24 22 25 typedef unsigned long u64; 23 26 #define PCI_U64_FMT "l" 24 #else 27 28 #else /* ULONG_MAX > 0xffffffff */ 29 25 30 typedef unsigned long long u64; 26 31 #define PCI_U64_FMT "ll" 27 #endif28 #endif29 32 30 #endif /* PCI_HAVE_Uxx_TYPES */ 33 #endif /* ULONG_MAX > 0xffffffff */ 34 #endif /* PCI_HAVE_64BIT_ADDRESS */ 35 #endif /* PCI_HAVE_Uxx_TYPES */ 31 36 32 37 #ifdef PCI_HAVE_64BIT_ADDRESS 38 33 39 typedef u64 pciaddr_t; 34 40 #define PCIADDR_T_FMT "%08" PCI_U64_FMT "x" 35 41 #define PCIADDR_PORT_FMT "%04" PCI_U64_FMT "x" 36 #else 42 43 #else /* PCI_HAVE_64BIT_ADDRESS */ 44 37 45 typedef u32 pciaddr_t; 38 46 #define PCIADDR_T_FMT "%08x" 39 47 #define PCIADDR_PORT_FMT "%04x" 40 #endif 48 49 #endif /* PCI_HAVE_64BIT_ADDRESS */ 41 50 42 51 #ifdef PCI_ARCH_SPARC64 52 43 53 /* On sparc64 Linux the kernel reports remapped port addresses and IRQ numbers */ 44 54 #undef PCIADDR_PORT_FMT 45 55 #define PCIADDR_PORT_FMT PCIADDR_T_FMT 46 56 #define PCIIRQ_FMT "%08x" 47 #else 57 58 #else /* PCI_ARCH_SPARC64 */ 59 48 60 #define PCIIRQ_FMT "%d" 49 #endif 61 62 #endif /* PCI_ARCH_SPARC64 */ -
uspace/lib/socket/generic/socket_client.c
r402eda5 r9539be6 40 40 #include <async.h> 41 41 #include <fibril_synch.h> 42 #include < limits.h>42 #include <stdint.h> 43 43 #include <stdlib.h> 44 44 -
uspace/lib/socket/generic/socket_core.c
r402eda5 r9539be6 35 35 */ 36 36 37 #include < limits.h>37 #include <stdint.h> 38 38 #include <stdlib.h> 39 39 -
uspace/lib/softfloat/generic/conversion.c
r402eda5 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 -
uspace/lib/softint/generic/multiplication.c
r402eda5 r9539be6 29 29 /** @addtogroup softint 30 30 * @{ 31 */ 31 */ 32 32 /** 33 33 * @file … … 36 36 37 37 #include <multiplication.h> 38 #include <stdint.h> 38 #include <stdint.h> 39 39 40 /** Set 1 to return MAX_INT64 or MIN_INT64on overflow */40 /** Set 1 to return INT64_MAX or INT64_MIN on overflow */ 41 41 #ifndef SOFTINT_CHECK_OF 42 # define SOFTINT_CHECK_OF042 #define SOFTINT_CHECK_OF 0 43 43 #endif 44 44 45 /** 46 * Multiply two integers and return long long as result.45 /** Multiply two integers and return long long as result. 46 * 47 47 * This function is overflow safe. 48 * @param a 49 * @param b 50 * @result 48 * 51 49 */ 52 50 static unsigned long long mul(unsigned int a, unsigned int b) { 53 unsigned int a1, a2, b1, b2; 54 unsigned long long t1, t2, t3; 55 56 a1 = a >> 16; 57 a2 = a & MAX_UINT16; 58 b1 = b >> 16; 59 b2 = b & MAX_UINT16; 60 61 t1 = a1 * b1; 62 t2 = a1*b2; 63 t2 += a2*b1; 64 t3 = a2*b2; 65 66 t3 = (((t1 << 16) + t2) << 16) + t3; 67 51 unsigned int a1 = a >> 16; 52 unsigned int a2 = a & UINT16_MAX; 53 unsigned int b1 = b >> 16; 54 unsigned int b2 = b & UINT16_MAX; 55 56 unsigned long long t1 = a1 * b1; 57 unsigned long long t2 = a1 * b2; 58 t2 += a2 * b1; 59 unsigned long long t3 = a2 * b2; 60 61 t3 = (((t1 << 16) + t2) << 16) + t3; 62 68 63 return t3; 69 64 } … … 74 69 long long __muldi3 (long long a, long long b) 75 70 { 76 long long result;77 unsigned long long t1,t2;78 unsigned long long a1, a2, b1, b2;79 71 char neg = 0; 80 72 81 73 if (a < 0) { 82 74 neg = !neg; 83 75 a = -a; 84 76 } 85 77 86 78 if (b < 0) { 87 79 neg = !neg; 88 80 b = -b; 89 81 } 90 91 a1 = a >> 32;92 b1 = b >> 32;93 94 a2 = a & (MAX_UINT32);95 b2 = b & (MAX_UINT32);96 82 83 unsigned long long a1 = a >> 32; 84 unsigned long long b1 = b >> 32; 85 86 unsigned long long a2 = a & (UINT32_MAX); 87 unsigned long long b2 = b & (UINT32_MAX); 88 97 89 if (SOFTINT_CHECK_OF && (a1 != 0) && (b1 != 0)) { 98 / / error, overflow99 return (neg ?MIN_INT64:MAX_INT64);90 /* Error (overflow) */ 91 return (neg ? INT64_MIN : INT64_MAX); 100 92 } 101 102 // (if OF checked) a1 or b1 is zero => result fits in 64 bits, no need to another overflow check 103 t1 = mul(a1,b2) + mul(b1,a2); 104 105 if (SOFTINT_CHECK_OF && t1 > MAX_UINT32) { 106 // error, overflow 107 return (neg?MIN_INT64:MAX_INT64); 93 94 /* (if OF checked) a1 or b1 is zero => result fits in 64 bits, 95 * no need to another overflow check 96 */ 97 unsigned long long t1 = mul(a1, b2) + mul(b1, a2); 98 99 if ((SOFTINT_CHECK_OF) && (t1 > UINT32_MAX)) { 100 /* Error (overflow) */ 101 return (neg ? INT64_MIN : INT64_MAX); 108 102 } 109 103 110 104 t1 = t1 << 32; 111 t2 = mul(a2,b2);105 unsigned long long t2 = mul(a2, b2); 112 106 t2 += t1; 113 107 114 108 /* t2 & (1ull << 63) - if this bit is set in unsigned long long, 115 109 * result does not fit in signed one */ 116 110 if (SOFTINT_CHECK_OF && ((t2 < t1) || (t2 & (1ull << 63)))) { 117 111 // error, overflow 118 return (neg ?MIN_INT64:MAX_INT64);112 return (neg ? INT64_MIN : INT64_MAX); 119 113 } 120 121 result = t2; 122 123 if (neg) { 114 115 long long result = t2; 116 if (neg) 124 117 result = -result; 125 } 126 118 127 119 return result; 128 } 120 } 129 121 130 122 /** @}
Note:
See TracChangeset
for help on using the changeset viewer.
