Revision f230a1cf deps/v8/src/v8utils.h
deps/v8/src/v8utils.h | ||
---|---|---|
194 | 194 |
} |
195 | 195 |
|
196 | 196 |
|
197 |
// Copies data from |src| to |dst|. No restrictions. |
|
198 |
template <typename T> |
|
199 |
inline void MoveBytes(T* dst, const T* src, size_t num_bytes) { |
|
200 |
STATIC_ASSERT(sizeof(T) == 1); |
|
201 |
switch (num_bytes) { |
|
202 |
case 0: return; |
|
203 |
case 1: |
|
204 |
*dst = *src; |
|
205 |
return; |
|
206 |
#ifdef V8_HOST_CAN_READ_UNALIGNED |
|
207 |
case 2: |
|
208 |
*reinterpret_cast<uint16_t*>(dst) = *reinterpret_cast<const uint16_t*>(src); |
|
209 |
return; |
|
210 |
case 3: { |
|
211 |
uint16_t part1 = *reinterpret_cast<const uint16_t*>(src); |
|
212 |
byte part2 = *(src + 2); |
|
213 |
*reinterpret_cast<uint16_t*>(dst) = part1; |
|
214 |
*(dst + 2) = part2; |
|
215 |
return; |
|
216 |
} |
|
217 |
case 4: |
|
218 |
*reinterpret_cast<uint32_t*>(dst) = *reinterpret_cast<const uint32_t*>(src); |
|
219 |
return; |
|
220 |
case 5: |
|
221 |
case 6: |
|
222 |
case 7: |
|
223 |
case 8: { |
|
224 |
uint32_t part1 = *reinterpret_cast<const uint32_t*>(src); |
|
225 |
uint32_t part2 = *reinterpret_cast<const uint32_t*>(src + num_bytes - 4); |
|
226 |
*reinterpret_cast<uint32_t*>(dst) = part1; |
|
227 |
*reinterpret_cast<uint32_t*>(dst + num_bytes - 4) = part2; |
|
228 |
return; |
|
229 |
} |
|
230 |
case 9: |
|
231 |
case 10: |
|
232 |
case 11: |
|
233 |
case 12: |
|
234 |
case 13: |
|
235 |
case 14: |
|
236 |
case 15: |
|
237 |
case 16: { |
|
238 |
double part1 = *reinterpret_cast<const double*>(src); |
|
239 |
double part2 = *reinterpret_cast<const double*>(src + num_bytes - 8); |
|
240 |
*reinterpret_cast<double*>(dst) = part1; |
|
241 |
*reinterpret_cast<double*>(dst + num_bytes - 8) = part2; |
|
242 |
return; |
|
243 |
} |
|
244 |
#endif |
|
245 |
default: |
|
246 |
OS::MemMove(dst, src, num_bytes); |
|
247 |
return; |
|
248 |
} |
|
249 |
} |
|
250 |
|
|
251 |
|
|
252 | 197 |
template <typename T, typename U> |
253 | 198 |
inline void MemsetPointer(T** dest, U* value, int counter) { |
254 | 199 |
#ifdef DEBUG |
Also available in: Unified diff