Changes in boot/genarch/src/multiplication.c [4872160:9539be6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/genarch/src/multiplication.c
r4872160 r9539be6 33 33 34 34 #include <genarch/multiplication.h> 35 #include <typedefs.h> 35 36 36 /** Set 1 to return MAX_INT64 or MIN_INT64on overflow */37 /** Set 1 to return INT64_MAX or INT64_MIN on overflow */ 37 38 #ifndef SOFTINT_CHECK_OF 38 #define SOFTINT_CHECK_OF 039 #define SOFTINT_CHECK_OF 0 39 40 #endif 40 41 #define MAX_UINT16 (0xFFFFu)42 #define MAX_UINT32 (0xFFFFFFFFu)43 #define MAX_INT64 (0x7FFFFFFFFFFFFFFFll)44 #define MIN_INT64 (0x8000000000000000ll)45 41 46 42 /** Multiply two integers and return long long as result. … … 51 47 static unsigned long long mul(unsigned int a, unsigned int b) { 52 48 unsigned int a1 = a >> 16; 53 unsigned int a2 = a & MAX_UINT16;49 unsigned int a2 = a & UINT16_MAX; 54 50 unsigned int b1 = b >> 16; 55 unsigned int b2 = b & MAX_UINT16;51 unsigned int b2 = b & UINT16_MAX; 56 52 57 53 unsigned long long t1 = a1 * b1; … … 85 81 unsigned long long b1 = b >> 32; 86 82 87 unsigned long long a2 = a & ( MAX_UINT32);88 unsigned long long b2 = b & ( MAX_UINT32);83 unsigned long long a2 = a & (UINT32_MAX); 84 unsigned long long b2 = b & (UINT32_MAX); 89 85 90 86 if (SOFTINT_CHECK_OF && (a1 != 0) && (b1 != 0)) { 91 87 /* Error (overflow) */ 92 return (neg ? MIN_INT64 : MAX_INT64);88 return (neg ? INT64_MIN : INT64_MAX); 93 89 } 94 90 … … 98 94 unsigned long long t1 = mul(a1, b2) + mul(b1, a2); 99 95 100 if ((SOFTINT_CHECK_OF) && (t1 > MAX_UINT32)) {96 if ((SOFTINT_CHECK_OF) && (t1 > UINT32_MAX)) { 101 97 /* Error (overflow) */ 102 return (neg ? MIN_INT64 : MAX_INT64);98 return (neg ? INT64_MIN : INT64_MAX); 103 99 } 104 100 … … 112 108 if ((SOFTINT_CHECK_OF) && ((t2 < t1) || (t2 & (1ull << 63)))) { 113 109 /* Error (overflow) */ 114 return (neg ? MIN_INT64 : MAX_INT64);110 return (neg ? INT64_MIN : INT64_MAX); 115 111 } 116 112
Note:
See TracChangeset
for help on using the changeset viewer.