Reviewers: danno, Toon Verwaest, Paul Lind, palfia, dusmil, kisg,

Description:
MIPS: api accessor store ics should return passed value.

Port r19380 (114a9ca)

BUG=

Please review this at https://codereview.chromium.org/167083002/

SVN Base: https://github.com/v8/v8.git@gbl

Affected files (+10, -8 lines):
  M src/mips/code-stubs-mips.cc
  M src/mips/stub-cache-mips.cc


Index: src/mips/code-stubs-mips.cc
diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
index 3d4d60516f7042bf3f698f2cc1eb4d3b3d637c5e..1a3f33659854f404a6588caf0aed39ae58797812 100644
--- a/src/mips/code-stubs-mips.cc
+++ b/src/mips/code-stubs-mips.cc
@@ -5640,7 +5640,7 @@ void CallApiFunctionStub::Generate(MacroAssembler* masm) {
   Register context = cp;

   int argc = ArgumentBits::decode(bit_field_);
-  bool restore_context = RestoreContextBits::decode(bit_field_);
+  bool is_store = IsStoreBits::decode(bit_field_);
   bool call_data_undefined = CallDataUndefinedBits::decode(bit_field_);

   typedef FunctionCallbackArguments FCA;
@@ -5707,15 +5707,16 @@ void CallApiFunctionStub::Generate(MacroAssembler* masm) {
   AllowExternalCallThatCantCauseGC scope(masm);
   MemOperand context_restore_operand(
       fp, (2 + FCA::kContextSaveIndex) * kPointerSize);
-  MemOperand return_value_operand(fp,
- (2 + FCA::kReturnValueOffset) * kPointerSize);
+  // Stores return the first js argument.
+  int return_value_offset =
+      2 + (is_store ? FCA::kArgsLength : FCA::kReturnValueOffset);
+  MemOperand return_value_operand(fp, return_value_offset * kPointerSize);

   __ CallApiFunctionAndReturn(api_function_address,
                               thunk_ref,
                               kStackUnwindSpace,
                               return_value_operand,
-                              restore_context ?
-                                  &context_restore_operand : NULL);
+                              &context_restore_operand);
 }


Index: src/mips/stub-cache-mips.cc
diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
index 60ab0b8704e047c85a92e04b63d336f5a5e2b13d..3d0e1fcf66be437cc193bf057b78e2fe67798c35 100644
--- a/src/mips/stub-cache-mips.cc
+++ b/src/mips/stub-cache-mips.cc
@@ -775,6 +775,7 @@ static void GenerateFastApiCall(MacroAssembler* masm,
                                 Handle<Map> receiver_map,
                                 Register receiver,
                                 Register scratch_in,
+                                bool is_store,
                                 int argc,
                                 Register* values) {
   ASSERT(!receiver.is(scratch_in));
@@ -843,7 +844,7 @@ static void GenerateFastApiCall(MacroAssembler* masm,
   __ li(api_function_address, Operand(ref));

   // Jump to stub.
-  CallApiFunctionStub stub(true, call_data_undefined, argc);
+  CallApiFunctionStub stub(is_store, call_data_undefined, argc);
   __ TailCallStub(&stub);
 }

@@ -1068,7 +1069,7 @@ void LoadStubCompiler::GenerateLoadCallback(
     Handle<Map> receiver_map) {
   GenerateFastApiCall(
       masm(), call_optimization, receiver_map,
-      receiver(), scratch3(), 0, NULL);
+      receiver(), scratch3(), false, 0, NULL);
 }


@@ -1257,7 +1258,7 @@ Handle<Code> StoreStubCompiler::CompileStoreCallback(
   Register values[] = { value() };
   GenerateFastApiCall(
       masm(), call_optimization, handle(object->map()),
-      receiver(), scratch3(), 1, values);
+      receiver(), scratch3(), true, 1, values);

   // Return the generated code.
   return GetCode(kind(), Code::FAST, name);


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to