| 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" | 
|    11 #include "src/bootstrapper.h" |    11 #include "src/bootstrapper.h" | 
|    12 #include "src/codegen.h" |    12 #include "src/codegen.h" | 
|    13 #include "src/cpu-profiler.h" |    13 #include "src/cpu-profiler.h" | 
|    14 #include "src/debug/debug.h" |    14 #include "src/debug/debug.h" | 
|    15 #include "src/register-configuration.h" |  | 
|    16 #include "src/runtime/runtime.h" |    15 #include "src/runtime/runtime.h" | 
|    17  |    16  | 
|    18 #include "src/arm/macro-assembler-arm.h" |    17 #include "src/arm/macro-assembler-arm.h" | 
|    19  |    18  | 
|    20 namespace v8 { |    19 namespace v8 { | 
|    21 namespace internal { |    20 namespace internal { | 
|    22  |    21  | 
|    23 MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size) |    22 MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size) | 
|    24     : Assembler(arg_isolate, buffer, size), |    23     : Assembler(arg_isolate, buffer, size), | 
|    25       generating_stub_(false), |    24       generating_stub_(false), | 
| (...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   754  |   753  | 
|   755 MemOperand MacroAssembler::SafepointRegisterSlot(Register reg) { |   754 MemOperand MacroAssembler::SafepointRegisterSlot(Register reg) { | 
|   756   return MemOperand(sp, SafepointRegisterStackIndex(reg.code()) * kPointerSize); |   755   return MemOperand(sp, SafepointRegisterStackIndex(reg.code()) * kPointerSize); | 
|   757 } |   756 } | 
|   758  |   757  | 
|   759  |   758  | 
|   760 MemOperand MacroAssembler::SafepointRegistersAndDoublesSlot(Register reg) { |   759 MemOperand MacroAssembler::SafepointRegistersAndDoublesSlot(Register reg) { | 
|   761   // Number of d-regs not known at snapshot time. |   760   // Number of d-regs not known at snapshot time. | 
|   762   DCHECK(!serializer_enabled()); |   761   DCHECK(!serializer_enabled()); | 
|   763   // General purpose registers are pushed last on the stack. |   762   // General purpose registers are pushed last on the stack. | 
|   764   const RegisterConfiguration* config = RegisterConfiguration::ArchDefault(); |   763   int doubles_size = DwVfpRegister::NumAllocatableRegisters() * kDoubleSize; | 
|   765   int doubles_size = config->num_allocatable_double_registers() * kDoubleSize; |  | 
|   766   int register_offset = SafepointRegisterStackIndex(reg.code()) * kPointerSize; |   764   int register_offset = SafepointRegisterStackIndex(reg.code()) * kPointerSize; | 
|   767   return MemOperand(sp, doubles_size + register_offset); |   765   return MemOperand(sp, doubles_size + register_offset); | 
|   768 } |   766 } | 
|   769  |   767  | 
|   770  |   768  | 
|   771 void MacroAssembler::Ldrd(Register dst1, Register dst2, |   769 void MacroAssembler::Ldrd(Register dst1, Register dst2, | 
|   772                           const MemOperand& src, Condition cond) { |   770                           const MemOperand& src, Condition cond) { | 
|   773   DCHECK(src.rm().is(no_reg)); |   771   DCHECK(src.rm().is(no_reg)); | 
|   774   DCHECK(!dst1.is(lr));  // r14. |   772   DCHECK(!dst1.is(lr));  // r14. | 
|   775  |   773  | 
| (...skipping 2790 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3566                                    Register reg5, |  3564                                    Register reg5, | 
|  3567                                    Register reg6) { |  3565                                    Register reg6) { | 
|  3568   RegList regs = 0; |  3566   RegList regs = 0; | 
|  3569   if (reg1.is_valid()) regs |= reg1.bit(); |  3567   if (reg1.is_valid()) regs |= reg1.bit(); | 
|  3570   if (reg2.is_valid()) regs |= reg2.bit(); |  3568   if (reg2.is_valid()) regs |= reg2.bit(); | 
|  3571   if (reg3.is_valid()) regs |= reg3.bit(); |  3569   if (reg3.is_valid()) regs |= reg3.bit(); | 
|  3572   if (reg4.is_valid()) regs |= reg4.bit(); |  3570   if (reg4.is_valid()) regs |= reg4.bit(); | 
|  3573   if (reg5.is_valid()) regs |= reg5.bit(); |  3571   if (reg5.is_valid()) regs |= reg5.bit(); | 
|  3574   if (reg6.is_valid()) regs |= reg6.bit(); |  3572   if (reg6.is_valid()) regs |= reg6.bit(); | 
|  3575  |  3573  | 
|  3576   const RegisterConfiguration* config = RegisterConfiguration::ArchDefault(); |  3574   for (int i = 0; i < Register::NumAllocatableRegisters(); i++) { | 
|  3577   for (int i = 0; i < config->num_allocatable_general_registers(); ++i) { |  3575     Register candidate = Register::FromAllocationIndex(i); | 
|  3578     int code = config->GetAllocatableGeneralCode(i); |  | 
|  3579     Register candidate = Register::from_code(code); |  | 
|  3580     if (regs & candidate.bit()) continue; |  3576     if (regs & candidate.bit()) continue; | 
|  3581     return candidate; |  3577     return candidate; | 
|  3582   } |  3578   } | 
|  3583   UNREACHABLE(); |  3579   UNREACHABLE(); | 
|  3584   return no_reg; |  3580   return no_reg; | 
|  3585 } |  3581 } | 
|  3586  |  3582  | 
|  3587  |  3583  | 
|  3588 void MacroAssembler::JumpIfDictionaryInPrototypeChain( |  3584 void MacroAssembler::JumpIfDictionaryInPrototypeChain( | 
|  3589     Register object, |  3585     Register object, | 
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3714     } |  3710     } | 
|  3715   } |  3711   } | 
|  3716   if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); |  3712   if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); | 
|  3717   add(result, result, Operand(dividend, LSR, 31)); |  3713   add(result, result, Operand(dividend, LSR, 31)); | 
|  3718 } |  3714 } | 
|  3719  |  3715  | 
|  3720 }  // namespace internal |  3716 }  // namespace internal | 
|  3721 }  // namespace v8 |  3717 }  // namespace v8 | 
|  3722  |  3718  | 
|  3723 #endif  // V8_TARGET_ARCH_ARM |  3719 #endif  // V8_TARGET_ARCH_ARM | 
| OLD | NEW |