Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(869)

Side by Side Diff: src/mips/ic-mips.cc

Issue 9026006: MIPS: fix bug in KeyedStoreIC::GenerateNonStrictArguments() (Closed)
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 861
862 862
863 void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) { 863 void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) {
864 // ---------- S t a t e -------------- 864 // ---------- S t a t e --------------
865 // -- a0 : value 865 // -- a0 : value
866 // -- a1 : key 866 // -- a1 : key
867 // -- a2 : receiver 867 // -- a2 : receiver
868 // -- lr : return address 868 // -- lr : return address
869 // ----------------------------------- 869 // -----------------------------------
870 Label slow, notin; 870 Label slow, notin;
871 // Store address is returned in register (of MemOperand) mapped_location.
871 MemOperand mapped_location = 872 MemOperand mapped_location =
872 GenerateMappedArgumentsLookup(masm, a2, a1, a3, t0, t1, &notin, &slow); 873 GenerateMappedArgumentsLookup(masm, a2, a1, a3, t0, t1, &notin, &slow);
873 __ sw(a0, mapped_location); 874 __ sw(a0, mapped_location);
874 __ Addu(t2, a3, t1);
875 __ mov(t5, a0); 875 __ mov(t5, a0);
876 __ RecordWrite(a3, t2, t5, kRAHasNotBeenSaved, kDontSaveFPRegs); 876 ASSERT_EQ(mapped_location.offset(), 0);
877 __ RecordWrite(a3, mapped_location.rm(), t5,
878 kRAHasNotBeenSaved, kDontSaveFPRegs);
877 __ Ret(USE_DELAY_SLOT); 879 __ Ret(USE_DELAY_SLOT);
878 __ mov(v0, a0); // (In delay slot) return the value stored in v0. 880 __ mov(v0, a0); // (In delay slot) return the value stored in v0.
879 __ bind(&notin); 881 __ bind(&notin);
880 // The unmapped lookup expects that the parameter map is in a3. 882 // The unmapped lookup expects that the parameter map is in a3.
883 // Store address is returned in register (of MemOperand) unmapped_location.
881 MemOperand unmapped_location = 884 MemOperand unmapped_location =
882 GenerateUnmappedArgumentsLookup(masm, a1, a3, t0, &slow); 885 GenerateUnmappedArgumentsLookup(masm, a1, a3, t0, &slow);
883 __ sw(a0, unmapped_location); 886 __ sw(a0, unmapped_location);
884 __ Addu(t2, a3, t0);
885 __ mov(t5, a0); 887 __ mov(t5, a0);
886 __ RecordWrite(a3, t2, t5, kRAHasNotBeenSaved, kDontSaveFPRegs); 888 ASSERT_EQ(unmapped_location.offset(), 0);
889 __ RecordWrite(a3, unmapped_location.rm(), t5,
890 kRAHasNotBeenSaved, kDontSaveFPRegs);
887 __ Ret(USE_DELAY_SLOT); 891 __ Ret(USE_DELAY_SLOT);
888 __ mov(v0, a0); // (In delay slot) return the value stored in v0. 892 __ mov(v0, a0); // (In delay slot) return the value stored in v0.
889 __ bind(&slow); 893 __ bind(&slow);
890 GenerateMiss(masm, false); 894 GenerateMiss(masm, false);
891 } 895 }
892 896
893 897
894 void KeyedCallIC::GenerateNonStrictArguments(MacroAssembler* masm, 898 void KeyedCallIC::GenerateNonStrictArguments(MacroAssembler* masm,
895 int argc) { 899 int argc) {
896 // ----------- S t a t e ------------- 900 // ----------- S t a t e -------------
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 Register reg = Register::from_code(Assembler::GetRs(instr_at_patch)); 1679 Register reg = Register::from_code(Assembler::GetRs(instr_at_patch));
1676 patcher.masm()->andi(at, reg, kSmiTagMask); 1680 patcher.masm()->andi(at, reg, kSmiTagMask);
1677 patcher.ChangeBranchCondition(eq); 1681 patcher.ChangeBranchCondition(eq);
1678 } 1682 }
1679 } 1683 }
1680 1684
1681 1685
1682 } } // namespace v8::internal 1686 } } // namespace v8::internal
1683 1687
1684 #endif // V8_TARGET_ARCH_MIPS 1688 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698