| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <limits.h> // For LONG_MIN, LONG_MAX. | 5 #include <limits.h> // For LONG_MIN, LONG_MAX. |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
| 8 | 8 |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/base/division-by-constant.h" | 10 #include "src/base/division-by-constant.h" |
| (...skipping 3227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3238 // Initialize the JSValue. | 3238 // Initialize the JSValue. |
| 3239 LoadGlobalFunctionInitialMap(constructor, scratch1, scratch2); | 3239 LoadGlobalFunctionInitialMap(constructor, scratch1, scratch2); |
| 3240 str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset)); | 3240 str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset)); |
| 3241 LoadRoot(scratch1, Heap::kEmptyFixedArrayRootIndex); | 3241 LoadRoot(scratch1, Heap::kEmptyFixedArrayRootIndex); |
| 3242 str(scratch1, FieldMemOperand(result, JSObject::kPropertiesOffset)); | 3242 str(scratch1, FieldMemOperand(result, JSObject::kPropertiesOffset)); |
| 3243 str(scratch1, FieldMemOperand(result, JSObject::kElementsOffset)); | 3243 str(scratch1, FieldMemOperand(result, JSObject::kElementsOffset)); |
| 3244 str(value, FieldMemOperand(result, JSValue::kValueOffset)); | 3244 str(value, FieldMemOperand(result, JSValue::kValueOffset)); |
| 3245 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize); | 3245 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize); |
| 3246 } | 3246 } |
| 3247 | 3247 |
| 3248 | |
| 3249 void MacroAssembler::CopyBytes(Register src, | |
| 3250 Register dst, | |
| 3251 Register length, | |
| 3252 Register scratch) { | |
| 3253 Label align_loop_1, word_loop, byte_loop, byte_loop_1, done; | |
| 3254 | |
| 3255 // Align src before copying in word size chunks. | |
| 3256 cmp(length, Operand(kPointerSize)); | |
| 3257 b(le, &byte_loop); | |
| 3258 | |
| 3259 bind(&align_loop_1); | |
| 3260 tst(src, Operand(kPointerSize - 1)); | |
| 3261 b(eq, &word_loop); | |
| 3262 ldrb(scratch, MemOperand(src, 1, PostIndex)); | |
| 3263 strb(scratch, MemOperand(dst, 1, PostIndex)); | |
| 3264 sub(length, length, Operand(1), SetCC); | |
| 3265 b(&align_loop_1); | |
| 3266 // Copy bytes in word size chunks. | |
| 3267 bind(&word_loop); | |
| 3268 if (emit_debug_code()) { | |
| 3269 tst(src, Operand(kPointerSize - 1)); | |
| 3270 Assert(eq, kExpectingAlignmentForCopyBytes); | |
| 3271 } | |
| 3272 cmp(length, Operand(kPointerSize)); | |
| 3273 b(lt, &byte_loop); | |
| 3274 ldr(scratch, MemOperand(src, kPointerSize, PostIndex)); | |
| 3275 str(scratch, MemOperand(dst, kPointerSize, PostIndex)); | |
| 3276 sub(length, length, Operand(kPointerSize)); | |
| 3277 b(&word_loop); | |
| 3278 | |
| 3279 // Copy the last bytes if any left. | |
| 3280 bind(&byte_loop); | |
| 3281 cmp(length, Operand::Zero()); | |
| 3282 b(eq, &done); | |
| 3283 bind(&byte_loop_1); | |
| 3284 ldrb(scratch, MemOperand(src, 1, PostIndex)); | |
| 3285 strb(scratch, MemOperand(dst, 1, PostIndex)); | |
| 3286 sub(length, length, Operand(1), SetCC); | |
| 3287 b(ne, &byte_loop_1); | |
| 3288 bind(&done); | |
| 3289 } | |
| 3290 | |
| 3291 | |
| 3292 void MacroAssembler::InitializeFieldsWithFiller(Register current_address, | 3248 void MacroAssembler::InitializeFieldsWithFiller(Register current_address, |
| 3293 Register end_address, | 3249 Register end_address, |
| 3294 Register filler) { | 3250 Register filler) { |
| 3295 Label loop, entry; | 3251 Label loop, entry; |
| 3296 b(&entry); | 3252 b(&entry); |
| 3297 bind(&loop); | 3253 bind(&loop); |
| 3298 str(filler, MemOperand(current_address, kPointerSize, PostIndex)); | 3254 str(filler, MemOperand(current_address, kPointerSize, PostIndex)); |
| 3299 bind(&entry); | 3255 bind(&entry); |
| 3300 cmp(current_address, end_address); | 3256 cmp(current_address, end_address); |
| 3301 b(lo, &loop); | 3257 b(lo, &loop); |
| (...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4062 } | 4018 } |
| 4063 } | 4019 } |
| 4064 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); | 4020 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); |
| 4065 add(result, result, Operand(dividend, LSR, 31)); | 4021 add(result, result, Operand(dividend, LSR, 31)); |
| 4066 } | 4022 } |
| 4067 | 4023 |
| 4068 } // namespace internal | 4024 } // namespace internal |
| 4069 } // namespace v8 | 4025 } // namespace v8 |
| 4070 | 4026 |
| 4071 #endif // V8_TARGET_ARCH_ARM | 4027 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |