Index: src/arm/code-stubs-arm.cc |
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc |
index bfe6da0ef44ce71a30d7706df141796e7527a050..477e79df9549856a1956a9545d50ebc037c67b85 100644 |
--- a/src/arm/code-stubs-arm.cc |
+++ b/src/arm/code-stubs-arm.cc |
@@ -1995,12 +1995,15 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) { |
Isolate* isolate = masm->isolate(); |
int marker = is_construct ? StackFrame::ENTRY_CONSTRUCT : StackFrame::ENTRY; |
__ mov(r8, Operand(Smi::FromInt(marker))); |
Rodolph Perfetta
2013/11/27 20:09:41
if (FLAG_enable_ool_constant_pool)
rmcilroy
2013/11/28 11:32:26
Done.
|
+ __ mov(r7, Operand(Smi::FromInt(marker))); |
__ mov(r6, Operand(Smi::FromInt(marker))); |
__ mov(r5, |
Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate))); |
__ ldr(r5, MemOperand(r5)); |
__ mov(ip, Operand(-1)); // Push a bad frame pointer to fail if it is used. |
- __ Push(ip, r8, r6, r5); |
+ __ stm(db_w, sp, r5.bit() | r6.bit() | r7.bit() | |
+ (FLAG_enable_ool_constant_pool ? r8.bit() : 0) | |
+ ip.bit()); |
// Set up frame pointer for the frame to be pushed. |
__ add(fp, sp, Operand(-EntryFrameConstants::kCallerFPOffset)); |
@@ -2584,7 +2587,7 @@ void ArgumentsAccessStub::GenerateNewNonStrictFast(MacroAssembler* masm) { |
const int kAliasedOffset = |
Context::SlotOffset(Context::ALIASED_ARGUMENTS_BOILERPLATE_INDEX); |
- __ ldr(r4, MemOperand(r8, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); |
+ __ ldr(r4, MemOperand(cp, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); |
__ ldr(r4, FieldMemOperand(r4, GlobalObject::kNativeContextOffset)); |
__ cmp(r1, Operand::Zero()); |
__ ldr(r4, MemOperand(r4, kNormalOffset), eq); |
@@ -2635,7 +2638,7 @@ void ArgumentsAccessStub::GenerateNewNonStrictFast(MacroAssembler* masm) { |
__ str(r6, FieldMemOperand(r4, FixedArray::kMapOffset)); |
__ add(r6, r1, Operand(Smi::FromInt(2))); |
__ str(r6, FieldMemOperand(r4, FixedArray::kLengthOffset)); |
- __ str(r8, FieldMemOperand(r4, FixedArray::kHeaderSize + 0 * kPointerSize)); |
+ __ str(cp, FieldMemOperand(r4, FixedArray::kHeaderSize + 0 * kPointerSize)); |
__ add(r6, r4, Operand(r1, LSL, 1)); |
__ add(r6, r6, Operand(kParameterMapHeaderSize)); |
__ str(r6, FieldMemOperand(r4, FixedArray::kHeaderSize + 1 * kPointerSize)); |
@@ -3029,7 +3032,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
// For arguments 4 and 3 get string length, calculate start of string data and |
// calculate the shift of the index (0 for ASCII and 1 for two byte). |
- __ add(r8, subject, Operand(SeqString::kHeaderSize - kHeapObjectTag)); |
+ __ add(r7, subject, Operand(SeqString::kHeaderSize - kHeapObjectTag)); |
__ eor(r3, r3, Operand(1)); |
// Load the length from the original subject string from the previous stack |
// frame. Therefore we have to use fp, which points exactly to two pointer |
@@ -3040,12 +3043,12 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
// Argument 4, r3: End of string data |
// Argument 3, r2: Start of string data |
// Prepare start and end index of the input. |
- __ add(r9, r8, Operand(r9, LSL, r3)); |
+ __ add(r9, r7, Operand(r9, LSL, r3)); |
__ add(r2, r9, Operand(r1, LSL, r3)); |
- __ ldr(r8, FieldMemOperand(subject, String::kLengthOffset)); |
- __ SmiUntag(r8); |
- __ add(r3, r9, Operand(r8, LSL, r3)); |
+ __ ldr(r7, FieldMemOperand(subject, String::kLengthOffset)); |
+ __ SmiUntag(r7); |
+ __ add(r3, r9, Operand(r7, LSL, r3)); |
// Argument 2 (r1): Previous index. |
// Already there |