Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/shared/utils.h

Issue 1659163007: Rename fletch -> dartino (Closed) Base URL: https://github.com/dartino/sdk.git@master
Patch Set: address comments Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/shared/test_main.cc ('k') | src/shared/utils.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dartino project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dartino project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 #ifndef SRC_SHARED_UTILS_H_ 5 #ifndef SRC_SHARED_UTILS_H_
6 #define SRC_SHARED_UTILS_H_ 6 #define SRC_SHARED_UTILS_H_
7 7
8 #include "src/shared/assert.h" 8 #include "src/shared/assert.h"
9 #include "src/shared/atomic.h" 9 #include "src/shared/atomic.h"
10 #include "src/shared/globals.h" 10 #include "src/shared/globals.h"
11 11
12 namespace fletch { 12 namespace dartino {
13 13
14 class Mutex; 14 class Mutex;
15 15
16 class PrintInterceptor { 16 class PrintInterceptor {
17 public: 17 public:
18 PrintInterceptor() : next_(NULL) {} 18 PrintInterceptor() : next_(NULL) {}
19 virtual ~PrintInterceptor() { 19 virtual ~PrintInterceptor() {
20 delete next_; 20 delete next_;
21 next_ = NULL; 21 next_ = NULL;
22 } 22 }
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 static bool IsInt8(word value) { return (-128 <= value) && (value < 128); } 102 static bool IsInt8(word value) { return (-128 <= value) && (value < 128); }
103 103
104 static bool IsUint8(word value) { return (0 <= value) && (value < 256); } 104 static bool IsUint8(word value) { return (0 <= value) && (value < 256); }
105 105
106 static bool IsInt16(word value) { 106 static bool IsInt16(word value) {
107 return (-32768 <= value) && (value < 32768); 107 return (-32768 <= value) && (value < 32768);
108 } 108 }
109 109
110 static bool IsUint16(word value) { return (0 <= value) && (value < 65536); } 110 static bool IsUint16(word value) { return (0 <= value) && (value < 65536); }
111 111
112 #ifdef FLETCH64 112 #ifdef DARTINO64
113 static bool IsInt32(word value) { 113 static bool IsInt32(word value) {
114 return (-(WORD_C(1) << 31) <= value) && (value < (WORD_C(1) << 31)); 114 return (-(WORD_C(1) << 31) <= value) && (value < (WORD_C(1) << 31));
115 } 115 }
116 116
117 static bool IsUint32(word value) { 117 static bool IsUint32(word value) {
118 return (0 <= value) && (value < (WORD_C(1) << 32)); 118 return (0 <= value) && (value < (WORD_C(1) << 32));
119 } 119 }
120 #endif 120 #endif
121 121
122 static bool SignedAddOverflow(word lhs, word rhs, word* val) { 122 static bool SignedAddOverflow(word lhs, word rhs, word* val) {
123 #if FLETCH_HAS_BUILTIN_SADDL_OVERFLOW 123 #if DARTINO_HAS_BUILTIN_SADDL_OVERFLOW
124 return __builtin_saddl_overflow(lhs, rhs, val); 124 return __builtin_saddl_overflow(lhs, rhs, val);
125 #else 125 #else
126 uword res = static_cast<uword>(lhs) + static_cast<uword>(rhs); 126 uword res = static_cast<uword>(lhs) + static_cast<uword>(rhs);
127 *val = bit_cast<uword>(res); 127 *val = bit_cast<uword>(res);
128 word bit = (res ^ lhs) & (res ^ rhs) & (UWORD_C(1) << (kBitsPerWord - 1)); 128 word bit = (res ^ lhs) & (res ^ rhs) & (UWORD_C(1) << (kBitsPerWord - 1));
129 return bit != 0; 129 return bit != 0;
130 #endif 130 #endif
131 } 131 }
132 132
133 static bool SignedSubOverflow(word lhs, word rhs, word* val) { 133 static bool SignedSubOverflow(word lhs, word rhs, word* val) {
134 #if FLETCH_HAS_BUILTIN_SSUBL_OVERFLOW 134 #if DARTINO_HAS_BUILTIN_SSUBL_OVERFLOW
135 return __builtin_ssubl_overflow(lhs, rhs, val); 135 return __builtin_ssubl_overflow(lhs, rhs, val);
136 #else 136 #else
137 uword res = static_cast<uword>(lhs) - static_cast<uword>(rhs); 137 uword res = static_cast<uword>(lhs) - static_cast<uword>(rhs);
138 *val = bit_cast<word>(res); 138 *val = bit_cast<word>(res);
139 uword bit = (res ^ lhs) & (res ^ ~rhs) & (UWORD_C(1) << (kBitsPerWord - 1)); 139 uword bit = (res ^ lhs) & (res ^ ~rhs) & (UWORD_C(1) << (kBitsPerWord - 1));
140 return bit != 0; 140 return bit != 0;
141 #endif 141 #endif
142 } 142 }
143 143
144 static int HighestBit(int64 v) { 144 static int HighestBit(int64 v) {
(...skipping 28 matching lines...) Expand all
173 // Flip bits if negative (-1 becomes 0). 173 // Flip bits if negative (-1 becomes 0).
174 value ^= value >> 63; 174 value ^= value >> 63;
175 return (value == 0) ? 0 : (Utils::HighestBit(value) + 1); 175 return (value == 0) ? 0 : (Utils::HighestBit(value) + 1);
176 } 176 }
177 177
178 static bool Signed64BitMulMightOverflow(int64 lhs, int64 rhs) { 178 static bool Signed64BitMulMightOverflow(int64 lhs, int64 rhs) {
179 return (Utils::HighestBit(lhs) + Utils::HighestBit(rhs)) >= 62; 179 return (Utils::HighestBit(lhs) + Utils::HighestBit(rhs)) >= 62;
180 } 180 }
181 181
182 static bool SignedMulOverflow(word lhs, word rhs, word* val) { 182 static bool SignedMulOverflow(word lhs, word rhs, word* val) {
183 #if FLETCH_HAS_BUILTIN_SMULL_OVERFLOW 183 #if DARTINO_HAS_BUILTIN_SMULL_OVERFLOW
184 return __builtin_smull_overflow(lhs, rhs, val); 184 return __builtin_smull_overflow(lhs, rhs, val);
185 #else 185 #else
186 #ifdef FLETCH64 186 #ifdef DARTINO64
187 if (Signed64BitMulMightOverflow(lhs, rhs)) return true; 187 if (Signed64BitMulMightOverflow(lhs, rhs)) return true;
188 *val = lhs * rhs; 188 *val = lhs * rhs;
189 return false; 189 return false;
190 #else 190 #else
191 word res = lhs * rhs; 191 word res = lhs * rhs;
192 bool overflow = (res != static_cast<int64>(lhs) * rhs); 192 bool overflow = (res != static_cast<int64>(lhs) * rhs);
193 if (overflow) return true; 193 if (overflow) return true;
194 *val = res; 194 *val = res;
195 return false; 195 return false;
196 #endif // FLETCH64 196 #endif // DARTINO64
197 #endif // FLETCH_HAS_BUILTIN_SMULL_OVERFLOW 197 #endif // DARTINO_HAS_BUILTIN_SMULL_OVERFLOW
198 } 198 }
199 199
200 // Read a 32-bit integer from the buffer, as little endian. 200 // Read a 32-bit integer from the buffer, as little endian.
201 static inline int32 ReadInt32(uint8* buffer) { 201 static inline int32 ReadInt32(uint8* buffer) {
202 return reinterpret_cast<int32*>(buffer)[0]; 202 return reinterpret_cast<int32*>(buffer)[0];
203 } 203 }
204 204
205 // Write a 32-bit integer to the buffer, as little endian. 205 // Write a 32-bit integer to the buffer, as little endian.
206 static inline void WriteInt32(uint8* buffer, int32 value) { 206 static inline void WriteInt32(uint8* buffer, int32 value) {
207 reinterpret_cast<int32*>(buffer)[0] = value; 207 reinterpret_cast<int32*>(buffer)[0] = value;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 273
274 // Returns a uword with the bool field value encoded based on the 274 // Returns a uword with the bool field value encoded based on the
275 // original value. Only the single bit corresponding to this bool 275 // original value. Only the single bit corresponding to this bool
276 // field will be changed. 276 // field will be changed.
277 static uword update(bool value, uword original) { 277 static uword update(bool value, uword original) {
278 const uword mask = 1U << position; 278 const uword mask = 1U << position;
279 return value ? original | mask : original & ~mask; 279 return value ? original | mask : original & ~mask;
280 } 280 }
281 }; 281 };
282 282
283 } // namespace fletch 283 } // namespace dartino
284 284
285 #endif // SRC_SHARED_UTILS_H_ 285 #endif // SRC_SHARED_UTILS_H_
OLDNEW
« no previous file with comments | « src/shared/test_main.cc ('k') | src/shared/utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698