Index: src/arm/code-stubs-arm.cc |
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc |
index 995f0d9f4386d9bbaf21a4d3476a94e8628f3d2f..82fa8ceaf318a043620d0c67255c4dc344ba97fe 100644 |
--- a/src/arm/code-stubs-arm.cc |
+++ b/src/arm/code-stubs-arm.cc |
@@ -6315,14 +6315,8 @@ void DirectCEntryStub::Generate(MacroAssembler* masm) { |
void DirectCEntryStub::GenerateCall(MacroAssembler* masm, |
ExternalReference function) { |
- __ mov(lr, Operand(reinterpret_cast<intptr_t>(GetCode().location()), |
- RelocInfo::CODE_TARGET)); |
__ mov(r2, Operand(function)); |
- // Push return address (accessible to GC through exit frame pc). |
- // Note that using pc with str is deprecated. |
- __ add(ip, pc, Operand(4)); |
- __ str(ip, MemOperand(sp, 0)); |
- __ Jump(r2); // Call the api function. |
+ GenerateCall(masm, r2); |
} |
@@ -6332,9 +6326,13 @@ void DirectCEntryStub::GenerateCall(MacroAssembler* masm, |
RelocInfo::CODE_TARGET)); |
// Push return address (accessible to GC through exit frame pc). |
// Note that using pc with str is deprecated. |
- __ add(ip, pc, Operand(4)); |
+ Label start; |
+ __ bind(&start); |
+ __ add(ip, pc, Operand(Assembler::kInstrSize)); |
__ str(ip, MemOperand(sp, 0)); |
__ Jump(target); // Call the C++ function. |
+ ASSERT_EQ(Assembler::kInstrSize + Assembler::kPcLoadDelta, |
+ masm->SizeOfCodeGeneratedSince(&start)); |
} |