Revision f230a1cf deps/v8/src/v8utils.h

View differences:

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