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

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

Issue 430503007: Rename ASSERT* to DCHECK*. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE and fixes Created 6 years, 4 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/mips64/full-codegen-mips64.cc ('k') | src/mips64/lithium-codegen-mips64.h » ('j') | 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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 5
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #if V8_TARGET_ARCH_MIPS64 9 #if V8_TARGET_ARCH_MIPS64
10 10
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 __ ld(map, FieldMemOperand(receiver, HeapObject::kMapOffset)); 165 __ ld(map, FieldMemOperand(receiver, HeapObject::kMapOffset));
166 // Check bit field. 166 // Check bit field.
167 __ lbu(scratch, FieldMemOperand(map, Map::kBitFieldOffset)); 167 __ lbu(scratch, FieldMemOperand(map, Map::kBitFieldOffset));
168 __ And(at, scratch, 168 __ And(at, scratch,
169 Operand((1 << Map::kIsAccessCheckNeeded) | (1 << interceptor_bit))); 169 Operand((1 << Map::kIsAccessCheckNeeded) | (1 << interceptor_bit)));
170 __ Branch(slow, ne, at, Operand(zero_reg)); 170 __ Branch(slow, ne, at, Operand(zero_reg));
171 // Check that the object is some kind of JS object EXCEPT JS Value type. 171 // Check that the object is some kind of JS object EXCEPT JS Value type.
172 // In the case that the object is a value-wrapper object, 172 // In the case that the object is a value-wrapper object,
173 // we enter the runtime system to make sure that indexing into string 173 // we enter the runtime system to make sure that indexing into string
174 // objects work as intended. 174 // objects work as intended.
175 ASSERT(JS_OBJECT_TYPE > JS_VALUE_TYPE); 175 DCHECK(JS_OBJECT_TYPE > JS_VALUE_TYPE);
176 __ lbu(scratch, FieldMemOperand(map, Map::kInstanceTypeOffset)); 176 __ lbu(scratch, FieldMemOperand(map, Map::kInstanceTypeOffset));
177 __ Branch(slow, lt, scratch, Operand(JS_OBJECT_TYPE)); 177 __ Branch(slow, lt, scratch, Operand(JS_OBJECT_TYPE));
178 } 178 }
179 179
180 180
181 // Loads an indexed element from a fast case array. 181 // Loads an indexed element from a fast case array.
182 // If not_fast_array is NULL, doesn't perform the elements map check. 182 // If not_fast_array is NULL, doesn't perform the elements map check.
183 static void GenerateFastArrayLoad(MacroAssembler* masm, 183 static void GenerateFastArrayLoad(MacroAssembler* masm,
184 Register receiver, 184 Register receiver,
185 Register key, 185 Register key,
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 __ Branch(not_unique, ne, at, Operand(zero_reg)); 272 __ Branch(not_unique, ne, at, Operand(zero_reg));
273 273
274 __ bind(&unique); 274 __ bind(&unique);
275 } 275 }
276 276
277 277
278 void LoadIC::GenerateMegamorphic(MacroAssembler* masm) { 278 void LoadIC::GenerateMegamorphic(MacroAssembler* masm) {
279 // The return address is in lr. 279 // The return address is in lr.
280 Register receiver = ReceiverRegister(); 280 Register receiver = ReceiverRegister();
281 Register name = NameRegister(); 281 Register name = NameRegister();
282 ASSERT(receiver.is(a1)); 282 DCHECK(receiver.is(a1));
283 ASSERT(name.is(a2)); 283 DCHECK(name.is(a2));
284 284
285 // Probe the stub cache. 285 // Probe the stub cache.
286 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( 286 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
287 Code::ComputeHandlerFlags(Code::LOAD_IC)); 287 Code::ComputeHandlerFlags(Code::LOAD_IC));
288 masm->isolate()->stub_cache()->GenerateProbe( 288 masm->isolate()->stub_cache()->GenerateProbe(
289 masm, flags, receiver, name, a3, a4, a5, a6); 289 masm, flags, receiver, name, a3, a4, a5, a6);
290 290
291 // Cache miss: Jump to runtime. 291 // Cache miss: Jump to runtime.
292 GenerateMiss(masm); 292 GenerateMiss(masm);
293 } 293 }
294 294
295 295
296 void LoadIC::GenerateNormal(MacroAssembler* masm) { 296 void LoadIC::GenerateNormal(MacroAssembler* masm) {
297 Register dictionary = a0; 297 Register dictionary = a0;
298 ASSERT(!dictionary.is(ReceiverRegister())); 298 DCHECK(!dictionary.is(ReceiverRegister()));
299 ASSERT(!dictionary.is(NameRegister())); 299 DCHECK(!dictionary.is(NameRegister()));
300 Label slow; 300 Label slow;
301 301
302 __ ld(dictionary, 302 __ ld(dictionary,
303 FieldMemOperand(ReceiverRegister(), JSObject::kPropertiesOffset)); 303 FieldMemOperand(ReceiverRegister(), JSObject::kPropertiesOffset));
304 GenerateDictionaryLoad(masm, &slow, dictionary, NameRegister(), v0, a3, a4); 304 GenerateDictionaryLoad(masm, &slow, dictionary, NameRegister(), v0, a3, a4);
305 __ Ret(); 305 __ Ret();
306 306
307 // Dictionary load failed, go slow (but don't miss). 307 // Dictionary load failed, go slow (but don't miss).
308 __ bind(&slow); 308 __ bind(&slow);
309 GenerateRuntimeGetProperty(masm); 309 GenerateRuntimeGetProperty(masm);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 Operand(FixedArray::kHeaderSize - kHeapObjectTag)); 426 Operand(FixedArray::kHeaderSize - kHeapObjectTag));
427 __ Daddu(scratch, backing_store, scratch); 427 __ Daddu(scratch, backing_store, scratch);
428 return MemOperand(scratch); 428 return MemOperand(scratch);
429 } 429 }
430 430
431 431
432 void KeyedLoadIC::GenerateSloppyArguments(MacroAssembler* masm) { 432 void KeyedLoadIC::GenerateSloppyArguments(MacroAssembler* masm) {
433 // The return address is in ra. 433 // The return address is in ra.
434 Register receiver = ReceiverRegister(); 434 Register receiver = ReceiverRegister();
435 Register key = NameRegister(); 435 Register key = NameRegister();
436 ASSERT(receiver.is(a1)); 436 DCHECK(receiver.is(a1));
437 ASSERT(key.is(a2)); 437 DCHECK(key.is(a2));
438 438
439 Label slow, notin; 439 Label slow, notin;
440 MemOperand mapped_location = 440 MemOperand mapped_location =
441 GenerateMappedArgumentsLookup( 441 GenerateMappedArgumentsLookup(
442 masm, receiver, key, a0, a3, a4, &notin, &slow); 442 masm, receiver, key, a0, a3, a4, &notin, &slow);
443 __ Ret(USE_DELAY_SLOT); 443 __ Ret(USE_DELAY_SLOT);
444 __ ld(v0, mapped_location); 444 __ ld(v0, mapped_location);
445 __ bind(&notin); 445 __ bind(&notin);
446 // The unmapped lookup expects that the parameter map is in a2. 446 // The unmapped lookup expects that the parameter map is in a2.
447 MemOperand unmapped_location = 447 MemOperand unmapped_location =
448 GenerateUnmappedArgumentsLookup(masm, key, a0, a3, &slow); 448 GenerateUnmappedArgumentsLookup(masm, key, a0, a3, &slow);
449 __ ld(a0, unmapped_location); 449 __ ld(a0, unmapped_location);
450 __ LoadRoot(a3, Heap::kTheHoleValueRootIndex); 450 __ LoadRoot(a3, Heap::kTheHoleValueRootIndex);
451 __ Branch(&slow, eq, a0, Operand(a3)); 451 __ Branch(&slow, eq, a0, Operand(a3));
452 __ Ret(USE_DELAY_SLOT); 452 __ Ret(USE_DELAY_SLOT);
453 __ mov(v0, a0); 453 __ mov(v0, a0);
454 __ bind(&slow); 454 __ bind(&slow);
455 GenerateMiss(masm); 455 GenerateMiss(masm);
456 } 456 }
457 457
458 458
459 void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) { 459 void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) {
460 Register receiver = ReceiverRegister(); 460 Register receiver = ReceiverRegister();
461 Register key = NameRegister(); 461 Register key = NameRegister();
462 Register value = ValueRegister(); 462 Register value = ValueRegister();
463 ASSERT(value.is(a0)); 463 DCHECK(value.is(a0));
464 464
465 Label slow, notin; 465 Label slow, notin;
466 // Store address is returned in register (of MemOperand) mapped_location. 466 // Store address is returned in register (of MemOperand) mapped_location.
467 MemOperand mapped_location = GenerateMappedArgumentsLookup( 467 MemOperand mapped_location = GenerateMappedArgumentsLookup(
468 masm, receiver, key, a3, a4, a5, &notin, &slow); 468 masm, receiver, key, a3, a4, a5, &notin, &slow);
469 __ sd(value, mapped_location); 469 __ sd(value, mapped_location);
470 __ mov(t1, value); 470 __ mov(t1, value);
471 ASSERT_EQ(mapped_location.offset(), 0); 471 DCHECK_EQ(mapped_location.offset(), 0);
472 __ RecordWrite(a3, mapped_location.rm(), t1, 472 __ RecordWrite(a3, mapped_location.rm(), t1,
473 kRAHasNotBeenSaved, kDontSaveFPRegs); 473 kRAHasNotBeenSaved, kDontSaveFPRegs);
474 __ Ret(USE_DELAY_SLOT); 474 __ Ret(USE_DELAY_SLOT);
475 __ mov(v0, value); // (In delay slot) return the value stored in v0. 475 __ mov(v0, value); // (In delay slot) return the value stored in v0.
476 __ bind(&notin); 476 __ bind(&notin);
477 // The unmapped lookup expects that the parameter map is in a3. 477 // The unmapped lookup expects that the parameter map is in a3.
478 // Store address is returned in register (of MemOperand) unmapped_location. 478 // Store address is returned in register (of MemOperand) unmapped_location.
479 MemOperand unmapped_location = 479 MemOperand unmapped_location =
480 GenerateUnmappedArgumentsLookup(masm, key, a3, a4, &slow); 480 GenerateUnmappedArgumentsLookup(masm, key, a3, a4, &slow);
481 __ sd(value, unmapped_location); 481 __ sd(value, unmapped_location);
482 __ mov(t1, value); 482 __ mov(t1, value);
483 ASSERT_EQ(unmapped_location.offset(), 0); 483 DCHECK_EQ(unmapped_location.offset(), 0);
484 __ RecordWrite(a3, unmapped_location.rm(), t1, 484 __ RecordWrite(a3, unmapped_location.rm(), t1,
485 kRAHasNotBeenSaved, kDontSaveFPRegs); 485 kRAHasNotBeenSaved, kDontSaveFPRegs);
486 __ Ret(USE_DELAY_SLOT); 486 __ Ret(USE_DELAY_SLOT);
487 __ mov(v0, a0); // (In delay slot) return the value stored in v0. 487 __ mov(v0, a0); // (In delay slot) return the value stored in v0.
488 __ bind(&slow); 488 __ bind(&slow);
489 GenerateMiss(masm); 489 GenerateMiss(masm);
490 } 490 }
491 491
492 492
493 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { 493 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) {
(...skipping 11 matching lines...) Expand all
505 __ TailCallExternalReference(ref, 2, 1); 505 __ TailCallExternalReference(ref, 2, 1);
506 } 506 }
507 507
508 508
509 // IC register specifications 509 // IC register specifications
510 const Register LoadIC::ReceiverRegister() { return a1; } 510 const Register LoadIC::ReceiverRegister() { return a1; }
511 const Register LoadIC::NameRegister() { return a2; } 511 const Register LoadIC::NameRegister() { return a2; }
512 512
513 513
514 const Register LoadIC::SlotRegister() { 514 const Register LoadIC::SlotRegister() {
515 ASSERT(FLAG_vector_ics); 515 DCHECK(FLAG_vector_ics);
516 return a0; 516 return a0;
517 } 517 }
518 518
519 519
520 const Register LoadIC::VectorRegister() { 520 const Register LoadIC::VectorRegister() {
521 ASSERT(FLAG_vector_ics); 521 DCHECK(FLAG_vector_ics);
522 return a3; 522 return a3;
523 } 523 }
524 524
525 525
526 const Register StoreIC::ReceiverRegister() { return a1; } 526 const Register StoreIC::ReceiverRegister() { return a1; }
527 const Register StoreIC::NameRegister() { return a2; } 527 const Register StoreIC::NameRegister() { return a2; }
528 const Register StoreIC::ValueRegister() { return a0; } 528 const Register StoreIC::ValueRegister() { return a0; }
529 529
530 530
531 const Register KeyedStoreIC::MapRegister() { 531 const Register KeyedStoreIC::MapRegister() {
(...skipping 10 matching lines...) Expand all
542 } 542 }
543 543
544 544
545 void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) { 545 void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
546 // The return address is in ra. 546 // The return address is in ra.
547 Label slow, check_name, index_smi, index_name, property_array_property; 547 Label slow, check_name, index_smi, index_name, property_array_property;
548 Label probe_dictionary, check_number_dictionary; 548 Label probe_dictionary, check_number_dictionary;
549 549
550 Register key = NameRegister(); 550 Register key = NameRegister();
551 Register receiver = ReceiverRegister(); 551 Register receiver = ReceiverRegister();
552 ASSERT(key.is(a2)); 552 DCHECK(key.is(a2));
553 ASSERT(receiver.is(a1)); 553 DCHECK(receiver.is(a1));
554 554
555 Isolate* isolate = masm->isolate(); 555 Isolate* isolate = masm->isolate();
556 556
557 // Check that the key is a smi. 557 // Check that the key is a smi.
558 __ JumpIfNotSmi(key, &check_name); 558 __ JumpIfNotSmi(key, &check_name);
559 __ bind(&index_smi); 559 __ bind(&index_smi);
560 // Now the key is known to be a smi. This place is also jumped to from below 560 // Now the key is known to be a smi. This place is also jumped to from below
561 // where a numeric string is converted to a smi. 561 // where a numeric string is converted to a smi.
562 562
563 GenerateKeyedLoadReceiverCheck( 563 GenerateKeyedLoadReceiverCheck(
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 720
721 721
722 void KeyedLoadIC::GenerateString(MacroAssembler* masm) { 722 void KeyedLoadIC::GenerateString(MacroAssembler* masm) {
723 // Return address is in ra. 723 // Return address is in ra.
724 Label miss; 724 Label miss;
725 725
726 Register receiver = ReceiverRegister(); 726 Register receiver = ReceiverRegister();
727 Register index = NameRegister(); 727 Register index = NameRegister();
728 Register scratch = a3; 728 Register scratch = a3;
729 Register result = v0; 729 Register result = v0;
730 ASSERT(!scratch.is(receiver) && !scratch.is(index)); 730 DCHECK(!scratch.is(receiver) && !scratch.is(index));
731 731
732 StringCharAtGenerator char_at_generator(receiver, 732 StringCharAtGenerator char_at_generator(receiver,
733 index, 733 index,
734 scratch, 734 scratch,
735 result, 735 result,
736 &miss, // When not a string. 736 &miss, // When not a string.
737 &miss, // When not a number. 737 &miss, // When not a number.
738 &miss, // When index out of range. 738 &miss, // When index out of range.
739 STRING_INDEX_IS_ARRAY_INDEX); 739 STRING_INDEX_IS_ARRAY_INDEX);
740 char_at_generator.GenerateFast(masm); 740 char_at_generator.GenerateFast(masm);
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 // -- ra : return address 944 // -- ra : return address
945 // ----------------------------------- 945 // -----------------------------------
946 Label slow, fast_object, fast_object_grow; 946 Label slow, fast_object, fast_object_grow;
947 Label fast_double, fast_double_grow; 947 Label fast_double, fast_double_grow;
948 Label array, extra, check_if_double_array; 948 Label array, extra, check_if_double_array;
949 949
950 // Register usage. 950 // Register usage.
951 Register value = ValueRegister(); 951 Register value = ValueRegister();
952 Register key = NameRegister(); 952 Register key = NameRegister();
953 Register receiver = ReceiverRegister(); 953 Register receiver = ReceiverRegister();
954 ASSERT(value.is(a0)); 954 DCHECK(value.is(a0));
955 Register receiver_map = a3; 955 Register receiver_map = a3;
956 Register elements_map = a6; 956 Register elements_map = a6;
957 Register elements = a7; // Elements array of the receiver. 957 Register elements = a7; // Elements array of the receiver.
958 // a4 and a5 are used as general scratch registers. 958 // a4 and a5 are used as general scratch registers.
959 959
960 // Check that the key is a smi. 960 // Check that the key is a smi.
961 __ JumpIfNotSmi(key, &slow); 961 __ JumpIfNotSmi(key, &slow);
962 // Check that the object isn't a smi. 962 // Check that the object isn't a smi.
963 __ JumpIfSmi(receiver, &slow); 963 __ JumpIfSmi(receiver, &slow);
964 // Get the map of the object. 964 // Get the map of the object.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 1032
1033 1033
1034 void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) { 1034 void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
1035 // Return address is in ra. 1035 // Return address is in ra.
1036 Label slow; 1036 Label slow;
1037 1037
1038 Register receiver = ReceiverRegister(); 1038 Register receiver = ReceiverRegister();
1039 Register key = NameRegister(); 1039 Register key = NameRegister();
1040 Register scratch1 = a3; 1040 Register scratch1 = a3;
1041 Register scratch2 = a4; 1041 Register scratch2 = a4;
1042 ASSERT(!scratch1.is(receiver) && !scratch1.is(key)); 1042 DCHECK(!scratch1.is(receiver) && !scratch1.is(key));
1043 ASSERT(!scratch2.is(receiver) && !scratch2.is(key)); 1043 DCHECK(!scratch2.is(receiver) && !scratch2.is(key));
1044 1044
1045 // Check that the receiver isn't a smi. 1045 // Check that the receiver isn't a smi.
1046 __ JumpIfSmi(receiver, &slow); 1046 __ JumpIfSmi(receiver, &slow);
1047 1047
1048 // Check that the key is an array index, that is Uint32. 1048 // Check that the key is an array index, that is Uint32.
1049 __ And(a4, key, Operand(kSmiTagMask | kSmiSignMask)); 1049 __ And(a4, key, Operand(kSmiTagMask | kSmiSignMask));
1050 __ Branch(&slow, ne, a4, Operand(zero_reg)); 1050 __ Branch(&slow, ne, a4, Operand(zero_reg));
1051 1051
1052 // Get the map of the receiver. 1052 // Get the map of the receiver.
1053 __ ld(scratch1, FieldMemOperand(receiver, HeapObject::kMapOffset)); 1053 __ ld(scratch1, FieldMemOperand(receiver, HeapObject::kMapOffset));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 ExternalReference ref = 1100 ExternalReference ref =
1101 ExternalReference(IC_Utility(kKeyedStoreIC_Slow), masm->isolate()); 1101 ExternalReference(IC_Utility(kKeyedStoreIC_Slow), masm->isolate());
1102 1102
1103 __ TailCallExternalReference(ref, 3, 1); 1103 __ TailCallExternalReference(ref, 3, 1);
1104 } 1104 }
1105 1105
1106 1106
1107 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { 1107 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
1108 Register receiver = ReceiverRegister(); 1108 Register receiver = ReceiverRegister();
1109 Register name = NameRegister(); 1109 Register name = NameRegister();
1110 ASSERT(receiver.is(a1)); 1110 DCHECK(receiver.is(a1));
1111 ASSERT(name.is(a2)); 1111 DCHECK(name.is(a2));
1112 ASSERT(ValueRegister().is(a0)); 1112 DCHECK(ValueRegister().is(a0));
1113 1113
1114 // Get the receiver from the stack and probe the stub cache. 1114 // Get the receiver from the stack and probe the stub cache.
1115 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( 1115 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
1116 Code::ComputeHandlerFlags(Code::STORE_IC)); 1116 Code::ComputeHandlerFlags(Code::STORE_IC));
1117 masm->isolate()->stub_cache()->GenerateProbe( 1117 masm->isolate()->stub_cache()->GenerateProbe(
1118 masm, flags, receiver, name, a3, a4, a5, a6); 1118 masm, flags, receiver, name, a3, a4, a5, a6);
1119 1119
1120 // Cache miss: Jump to runtime. 1120 // Cache miss: Jump to runtime.
1121 GenerateMiss(masm); 1121 GenerateMiss(masm);
1122 } 1122 }
1123 1123
1124 1124
1125 void StoreIC::GenerateMiss(MacroAssembler* masm) { 1125 void StoreIC::GenerateMiss(MacroAssembler* masm) {
1126 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); 1126 __ Push(ReceiverRegister(), NameRegister(), ValueRegister());
1127 // Perform tail call to the entry. 1127 // Perform tail call to the entry.
1128 ExternalReference ref = ExternalReference(IC_Utility(kStoreIC_Miss), 1128 ExternalReference ref = ExternalReference(IC_Utility(kStoreIC_Miss),
1129 masm->isolate()); 1129 masm->isolate());
1130 __ TailCallExternalReference(ref, 3, 1); 1130 __ TailCallExternalReference(ref, 3, 1);
1131 } 1131 }
1132 1132
1133 1133
1134 void StoreIC::GenerateNormal(MacroAssembler* masm) { 1134 void StoreIC::GenerateNormal(MacroAssembler* masm) {
1135 Label miss; 1135 Label miss;
1136 Register receiver = ReceiverRegister(); 1136 Register receiver = ReceiverRegister();
1137 Register name = NameRegister(); 1137 Register name = NameRegister();
1138 Register value = ValueRegister(); 1138 Register value = ValueRegister();
1139 Register dictionary = a3; 1139 Register dictionary = a3;
1140 ASSERT(!AreAliased(value, receiver, name, dictionary, a4, a5)); 1140 DCHECK(!AreAliased(value, receiver, name, dictionary, a4, a5));
1141 1141
1142 __ ld(dictionary, FieldMemOperand(receiver, JSObject::kPropertiesOffset)); 1142 __ ld(dictionary, FieldMemOperand(receiver, JSObject::kPropertiesOffset));
1143 1143
1144 GenerateDictionaryStore(masm, &miss, a3, name, value, a4, a5); 1144 GenerateDictionaryStore(masm, &miss, a3, name, value, a4, a5);
1145 Counters* counters = masm->isolate()->counters(); 1145 Counters* counters = masm->isolate()->counters();
1146 __ IncrementCounter(counters->store_normal_hit(), 1, a4, a5); 1146 __ IncrementCounter(counters->store_normal_hit(), 1, a4, a5);
1147 __ Ret(); 1147 __ Ret();
1148 1148
1149 __ bind(&miss); 1149 __ bind(&miss);
1150 __ IncrementCounter(counters->store_normal_miss(), 1, a4, a5); 1150 __ IncrementCounter(counters->store_normal_miss(), 1, a4, a5);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 // Enabling by changing from 1236 // Enabling by changing from
1237 // andi at, rx, 0 1237 // andi at, rx, 0
1238 // Branch <target>, eq, at, Operand(zero_reg) 1238 // Branch <target>, eq, at, Operand(zero_reg)
1239 // to: 1239 // to:
1240 // andi at, rx, #kSmiTagMask 1240 // andi at, rx, #kSmiTagMask
1241 // Branch <target>, ne, at, Operand(zero_reg) 1241 // Branch <target>, ne, at, Operand(zero_reg)
1242 // and vice-versa to be disabled again. 1242 // and vice-versa to be disabled again.
1243 CodePatcher patcher(patch_address, 2); 1243 CodePatcher patcher(patch_address, 2);
1244 Register reg = Register::from_code(Assembler::GetRs(instr_at_patch)); 1244 Register reg = Register::from_code(Assembler::GetRs(instr_at_patch));
1245 if (check == ENABLE_INLINED_SMI_CHECK) { 1245 if (check == ENABLE_INLINED_SMI_CHECK) {
1246 ASSERT(Assembler::IsAndImmediate(instr_at_patch)); 1246 DCHECK(Assembler::IsAndImmediate(instr_at_patch));
1247 ASSERT_EQ(0, Assembler::GetImmediate16(instr_at_patch)); 1247 DCHECK_EQ(0, Assembler::GetImmediate16(instr_at_patch));
1248 patcher.masm()->andi(at, reg, kSmiTagMask); 1248 patcher.masm()->andi(at, reg, kSmiTagMask);
1249 } else { 1249 } else {
1250 ASSERT(check == DISABLE_INLINED_SMI_CHECK); 1250 DCHECK(check == DISABLE_INLINED_SMI_CHECK);
1251 ASSERT(Assembler::IsAndImmediate(instr_at_patch)); 1251 DCHECK(Assembler::IsAndImmediate(instr_at_patch));
1252 patcher.masm()->andi(at, reg, 0); 1252 patcher.masm()->andi(at, reg, 0);
1253 } 1253 }
1254 ASSERT(Assembler::IsBranch(branch_instr)); 1254 DCHECK(Assembler::IsBranch(branch_instr));
1255 if (Assembler::IsBeq(branch_instr)) { 1255 if (Assembler::IsBeq(branch_instr)) {
1256 patcher.ChangeBranchCondition(ne); 1256 patcher.ChangeBranchCondition(ne);
1257 } else { 1257 } else {
1258 ASSERT(Assembler::IsBne(branch_instr)); 1258 DCHECK(Assembler::IsBne(branch_instr));
1259 patcher.ChangeBranchCondition(eq); 1259 patcher.ChangeBranchCondition(eq);
1260 } 1260 }
1261 } 1261 }
1262 1262
1263 1263
1264 } } // namespace v8::internal 1264 } } // namespace v8::internal
1265 1265
1266 #endif // V8_TARGET_ARCH_MIPS64 1266 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/full-codegen-mips64.cc ('k') | src/mips64/lithium-codegen-mips64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698