From 601e1cf0d5048b39ca552e878f8ec00b702a0dec Mon Sep 17 00:00:00 2001 From: "wingo@igalia.com" Date: Mon, 10 Jun 2013 09:12:57 +0000 Subject: [PATCH] Fix LoadIC calling convention on ARM The comments in ic-arm.cc::LoadIC indicated that the receiver should be both in a register and on the stack. This isn't true in fact: the code is careful to spill the receiver if needed. This CL also fixes up a mistaken use of this convention in in VisitYield. R=mstarzinger@chromium.org BUG= Review URL: https://codereview.chromium.org/16203004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15027 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/full-codegen-arm.cc | 6 ------ src/arm/ic-arm.cc | 4 ---- 2 files changed, 10 deletions(-) diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index ee5517c..c2124e5 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -2041,11 +2041,9 @@ void FullCodeGenerator::VisitYield(Yield* expr) { __ push(r3); // iter __ push(r0); // exception __ mov(r0, r3); // iter - __ push(r0); // push LoadIC state __ LoadRoot(r2, Heap::kthrow_stringRootIndex); // "throw" Handle throw_ic = isolate()->builtins()->LoadIC_Initialize(); CallIC(throw_ic); // iter.throw in r0 - __ add(sp, sp, Operand(kPointerSize)); // drop LoadIC state __ jmp(&l_call); // try { received = yield result.value } @@ -2071,11 +2069,9 @@ void FullCodeGenerator::VisitYield(Yield* expr) { __ push(r3); // iter __ push(r0); // received __ mov(r0, r3); // iter - __ push(r0); // push LoadIC state __ LoadRoot(r2, Heap::ksend_stringRootIndex); // "send" Handle send_ic = isolate()->builtins()->LoadIC_Initialize(); CallIC(send_ic); // iter.send in r0 - __ add(sp, sp, Operand(kPointerSize)); // drop LoadIC state // result = f.call(receiver, arg); __ bind(&l_call); @@ -2103,11 +2099,9 @@ void FullCodeGenerator::VisitYield(Yield* expr) { __ pop(r1); // result __ push(r0); // result.value __ mov(r0, r1); // result - __ push(r0); // push LoadIC state __ LoadRoot(r2, Heap::kdone_stringRootIndex); // "done" Handle done_ic = isolate()->builtins()->LoadIC_Initialize(); CallIC(done_ic); // result.done in r0 - __ add(sp, sp, Operand(kPointerSize)); // drop LoadIC state Handle bool_ic = ToBooleanStub::GetUninitialized(isolate()); CallIC(bool_ic); __ cmp(r0, Operand(0)); diff --git a/src/arm/ic-arm.cc b/src/arm/ic-arm.cc index 35a9e01..87865b2 100644 --- a/src/arm/ic-arm.cc +++ b/src/arm/ic-arm.cc @@ -651,7 +651,6 @@ void LoadIC::GenerateMegamorphic(MacroAssembler* masm) { // -- r2 : name // -- lr : return address // -- r0 : receiver - // -- sp[0] : receiver // ----------------------------------- // Probe the stub cache. @@ -671,7 +670,6 @@ void LoadIC::GenerateNormal(MacroAssembler* masm) { // -- r2 : name // -- lr : return address // -- r0 : receiver - // -- sp[0] : receiver // ----------------------------------- Label miss; @@ -692,7 +690,6 @@ void LoadIC::GenerateMiss(MacroAssembler* masm) { // -- r2 : name // -- lr : return address // -- r0 : receiver - // -- sp[0] : receiver // ----------------------------------- Isolate* isolate = masm->isolate(); @@ -713,7 +710,6 @@ void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { // -- r2 : name // -- lr : return address // -- r0 : receiver - // -- sp[0] : receiver // ----------------------------------- __ mov(r3, r0); -- 2.7.4