| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 private: | 247 private: |
| 248 Vector<char> buffer_; | 248 Vector<char> buffer_; |
| 249 int position_; | 249 int position_; |
| 250 | 250 |
| 251 bool is_finalized() const { return position_ < 0; } | 251 bool is_finalized() const { return position_ < 0; } |
| 252 | 252 |
| 253 DISALLOW_IMPLICIT_CONSTRUCTORS(StringBuilder); | 253 DISALLOW_IMPLICIT_CONSTRUCTORS(StringBuilder); |
| 254 }; | 254 }; |
| 255 | 255 |
| 256 | 256 |
| 257 // Custom memcpy implementation for platforms where the standard version | |
| 258 // may not be good enough. | |
| 259 #if defined(V8_TARGET_ARCH_IA32) | |
| 260 | |
| 261 // The default memcpy on ia32 architectures is generally not as efficient | |
| 262 // as possible. (If any further ia32 platforms are introduced where the | |
| 263 // memcpy function is efficient, exclude them from this branch). | |
| 264 | |
| 265 typedef void (*MemCopyFunction)(void* dest, const void* src, size_t size); | |
| 266 | |
| 267 // Implemented in codegen-<arch>.cc. | |
| 268 MemCopyFunction CreateMemCopyFunction(); | |
| 269 | |
| 270 // Copy memory area to disjoint memory area. | |
| 271 static inline void MemCopy(void* dest, const void* src, size_t size) { | |
| 272 static MemCopyFunction memcopy = CreateMemCopyFunction(); | |
| 273 (*memcopy)(dest, src, size); | |
| 274 #ifdef DEBUG | |
| 275 CHECK_EQ(0, memcmp(dest, src, size)); | |
| 276 #endif | |
| 277 } | |
| 278 | |
| 279 // Limit below which the extra overhead of the MemCopy function is likely | |
| 280 // to outweigh the benefits of faster copying. | |
| 281 static const int kMinComplexMemCopy = 64; | |
| 282 | |
| 283 #else // V8_TARGET_ARCH_IA32 | |
| 284 | |
| 285 static inline void MemCopy(void* dest, const void* src, size_t size) { | |
| 286 memcpy(dest, src, size); | |
| 287 } | |
| 288 | |
| 289 static const int kMinComplexMemCopy = 256; | |
| 290 | |
| 291 #endif // V8_TARGET_ARCH_IA32 | |
| 292 | |
| 293 | |
| 294 // Copy from ASCII/16bit chars to ASCII/16bit chars. | 257 // Copy from ASCII/16bit chars to ASCII/16bit chars. |
| 295 template <typename sourcechar, typename sinkchar> | 258 template <typename sourcechar, typename sinkchar> |
| 296 static inline void CopyChars(sinkchar* dest, const sourcechar* src, int chars) { | 259 static inline void CopyChars(sinkchar* dest, const sourcechar* src, int chars) { |
| 297 sinkchar* limit = dest + chars; | 260 sinkchar* limit = dest + chars; |
| 298 #ifdef V8_HOST_CAN_READ_UNALIGNED | 261 #ifdef V8_HOST_CAN_READ_UNALIGNED |
| 299 if (sizeof(*dest) == sizeof(*src)) { | 262 if (sizeof(*dest) == sizeof(*src)) { |
| 300 if (chars >= static_cast<int>(kMinComplexMemCopy / sizeof(*dest))) { | 263 if (chars >= static_cast<int>(OS::kMinComplexMemCopy / sizeof(*dest))) { |
| 301 MemCopy(dest, src, chars * sizeof(*dest)); | 264 OS::MemCopy(dest, src, chars * sizeof(*dest)); |
| 302 return; | 265 return; |
| 303 } | 266 } |
| 304 // Number of characters in a uintptr_t. | 267 // Number of characters in a uintptr_t. |
| 305 static const int kStepSize = sizeof(uintptr_t) / sizeof(*dest); // NOLINT | 268 static const int kStepSize = sizeof(uintptr_t) / sizeof(*dest); // NOLINT |
| 306 while (dest <= limit - kStepSize) { | 269 while (dest <= limit - kStepSize) { |
| 307 *reinterpret_cast<uintptr_t*>(dest) = | 270 *reinterpret_cast<uintptr_t*>(dest) = |
| 308 *reinterpret_cast<const uintptr_t*>(src); | 271 *reinterpret_cast<const uintptr_t*>(src); |
| 309 dest += kStepSize; | 272 dest += kStepSize; |
| 310 src += kStepSize; | 273 src += kStepSize; |
| 311 } | 274 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 | 308 |
| 346 const char* data_; | 309 const char* data_; |
| 347 size_t length_; | 310 size_t length_; |
| 348 bool remove_file_on_cleanup_; | 311 bool remove_file_on_cleanup_; |
| 349 }; | 312 }; |
| 350 | 313 |
| 351 | 314 |
| 352 } } // namespace v8::internal | 315 } } // namespace v8::internal |
| 353 | 316 |
| 354 #endif // V8_V8UTILS_H_ | 317 #endif // V8_V8UTILS_H_ |
| OLD | NEW |