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

Side by Side Diff: src/mips/code-stubs-mips.cc

Issue 12703014: ARM: fix dictionary negative lookup. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 9 months 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 | Annotate | Revision Log
« no previous file with comments | « src/arm/code-stubs-arm.cc ('k') | 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 7536 matching lines...) Expand 10 before | Expand all | Expand 10 after
7547 ASSERT_EQ(kSmiTagSize, 1); 7547 ASSERT_EQ(kSmiTagSize, 1);
7548 Register tmp = properties; 7548 Register tmp = properties;
7549 __ sll(scratch0, index, 1); 7549 __ sll(scratch0, index, 1);
7550 __ Addu(tmp, properties, scratch0); 7550 __ Addu(tmp, properties, scratch0);
7551 __ lw(entity_name, FieldMemOperand(tmp, kElementsStartOffset)); 7551 __ lw(entity_name, FieldMemOperand(tmp, kElementsStartOffset));
7552 7552
7553 ASSERT(!tmp.is(entity_name)); 7553 ASSERT(!tmp.is(entity_name));
7554 __ LoadRoot(tmp, Heap::kUndefinedValueRootIndex); 7554 __ LoadRoot(tmp, Heap::kUndefinedValueRootIndex);
7555 __ Branch(done, eq, entity_name, Operand(tmp)); 7555 __ Branch(done, eq, entity_name, Operand(tmp));
7556 7556
7557 if (i != kInlinedProbes - 1) { 7557 // Load the hole ready for use below:
7558 // Load the hole ready for use below: 7558 __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex);
7559 __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex);
7560 7559
7561 // Stop if found the property. 7560 // Stop if found the property.
7562 __ Branch(miss, eq, entity_name, Operand(Handle<Name>(name))); 7561 __ Branch(miss, eq, entity_name, Operand(Handle<Name>(name)));
7563 7562
7564 Label good; 7563 Label good;
7565 __ Branch(&good, eq, entity_name, Operand(tmp)); 7564 __ Branch(&good, eq, entity_name, Operand(tmp));
7566 7565
7567 // Check if the entry name is not a unique name. 7566 // Check if the entry name is not a unique name.
7568 __ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); 7567 __ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
7569 __ lbu(entity_name, 7568 __ lbu(entity_name,
7570 FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); 7569 FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
7571 __ And(scratch0, entity_name, Operand(kIsInternalizedMask)); 7570 __ And(scratch0, entity_name, Operand(kIsInternalizedMask));
7572 __ Branch(&good, ne, scratch0, Operand(zero_reg)); 7571 __ Branch(&good, ne, scratch0, Operand(zero_reg));
7573 __ Branch(miss, ne, entity_name, Operand(SYMBOL_TYPE)); 7572 __ Branch(miss, ne, entity_name, Operand(SYMBOL_TYPE));
7574 7573
7575 __ bind(&good); 7574 __ bind(&good);
7576 7575
7577 // Restore the properties. 7576 // Restore the properties.
7578 __ lw(properties, 7577 __ lw(properties,
7579 FieldMemOperand(receiver, JSObject::kPropertiesOffset)); 7578 FieldMemOperand(receiver, JSObject::kPropertiesOffset));
7580 }
7581 } 7579 }
7582 7580
7583 const int spill_mask = 7581 const int spill_mask =
7584 (ra.bit() | t2.bit() | t1.bit() | t0.bit() | a3.bit() | 7582 (ra.bit() | t2.bit() | t1.bit() | t0.bit() | a3.bit() |
7585 a2.bit() | a1.bit() | a0.bit() | v0.bit()); 7583 a2.bit() | a1.bit() | a0.bit() | v0.bit());
7586 7584
7587 __ MultiPush(spill_mask); 7585 __ MultiPush(spill_mask);
7588 __ lw(a0, FieldMemOperand(receiver, JSObject::kPropertiesOffset)); 7586 __ lw(a0, FieldMemOperand(receiver, JSObject::kPropertiesOffset));
7589 __ li(a1, Operand(Handle<Name>(name))); 7587 __ li(a1, Operand(Handle<Name>(name)));
7590 NameDictionaryLookupStub stub(NEGATIVE_LOOKUP); 7588 NameDictionaryLookupStub stub(NEGATIVE_LOOKUP);
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
8203 __ Pop(ra, t1, a1); 8201 __ Pop(ra, t1, a1);
8204 __ Ret(); 8202 __ Ret();
8205 } 8203 }
8206 8204
8207 8205
8208 #undef __ 8206 #undef __
8209 8207
8210 } } // namespace v8::internal 8208 } } // namespace v8::internal
8211 8209
8212 #endif // V8_TARGET_ARCH_MIPS 8210 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/arm/code-stubs-arm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698