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

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

Issue 508673002: MIPS: Move register conventions out of the IC classes. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix nits. Created 6 years, 3 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/ic/mips64/ic-conventions-mips64.cc ('k') | src/mips/code-stubs-mips.cc » ('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 #include "src/v8.h" 6 #include "src/v8.h"
7 7
8 #if V8_TARGET_ARCH_MIPS64 8 #if V8_TARGET_ARCH_MIPS64
9 9
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 STATIC_ASSERT(kInternalizedTag == 0); 243 STATIC_ASSERT(kInternalizedTag == 0);
244 __ And(at, hash, Operand(kIsNotInternalizedMask)); 244 __ And(at, hash, Operand(kIsNotInternalizedMask));
245 __ Branch(not_unique, ne, at, Operand(zero_reg)); 245 __ Branch(not_unique, ne, at, Operand(zero_reg));
246 246
247 __ bind(&unique); 247 __ bind(&unique);
248 } 248 }
249 249
250 250
251 void LoadIC::GenerateMegamorphic(MacroAssembler* masm) { 251 void LoadIC::GenerateMegamorphic(MacroAssembler* masm) {
252 // The return address is in lr. 252 // The return address is in lr.
253 Register receiver = ReceiverRegister(); 253 Register receiver = LoadConvention::ReceiverRegister();
254 Register name = NameRegister(); 254 Register name = LoadConvention::NameRegister();
255 DCHECK(receiver.is(a1)); 255 DCHECK(receiver.is(a1));
256 DCHECK(name.is(a2)); 256 DCHECK(name.is(a2));
257 257
258 // Probe the stub cache. 258 // Probe the stub cache.
259 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( 259 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
260 Code::ComputeHandlerFlags(Code::LOAD_IC)); 260 Code::ComputeHandlerFlags(Code::LOAD_IC));
261 masm->isolate()->stub_cache()->GenerateProbe(masm, flags, receiver, name, a3, 261 masm->isolate()->stub_cache()->GenerateProbe(masm, flags, receiver, name, a3,
262 a4, a5, a6); 262 a4, a5, a6);
263 263
264 // Cache miss: Jump to runtime. 264 // Cache miss: Jump to runtime.
265 GenerateMiss(masm); 265 GenerateMiss(masm);
266 } 266 }
267 267
268 268
269 void LoadIC::GenerateNormal(MacroAssembler* masm) { 269 void LoadIC::GenerateNormal(MacroAssembler* masm) {
270 Register dictionary = a0; 270 Register dictionary = a0;
271 DCHECK(!dictionary.is(ReceiverRegister())); 271 DCHECK(!dictionary.is(LoadConvention::ReceiverRegister()));
272 DCHECK(!dictionary.is(NameRegister())); 272 DCHECK(!dictionary.is(LoadConvention::NameRegister()));
273 Label slow; 273 Label slow;
274 274
275 __ ld(dictionary, 275 __ ld(dictionary, FieldMemOperand(LoadConvention::ReceiverRegister(),
276 FieldMemOperand(ReceiverRegister(), JSObject::kPropertiesOffset)); 276 JSObject::kPropertiesOffset));
277 GenerateDictionaryLoad(masm, &slow, dictionary, NameRegister(), v0, a3, a4); 277 GenerateDictionaryLoad(masm, &slow, dictionary,
278 LoadConvention::NameRegister(), v0, a3, a4);
278 __ Ret(); 279 __ Ret();
279 280
280 // Dictionary load failed, go slow (but don't miss). 281 // Dictionary load failed, go slow (but don't miss).
281 __ bind(&slow); 282 __ bind(&slow);
282 GenerateRuntimeGetProperty(masm); 283 GenerateRuntimeGetProperty(masm);
283 } 284 }
284 285
285 286
286 // A register that isn't one of the parameters to the load ic. 287 // A register that isn't one of the parameters to the load ic.
287 static const Register LoadIC_TempRegister() { return a3; } 288 static const Register LoadIC_TempRegister() { return a3; }
288 289
289 290
290 void LoadIC::GenerateMiss(MacroAssembler* masm) { 291 void LoadIC::GenerateMiss(MacroAssembler* masm) {
291 // The return address is on the stack. 292 // The return address is on the stack.
292 Isolate* isolate = masm->isolate(); 293 Isolate* isolate = masm->isolate();
293 294
294 __ IncrementCounter(isolate->counters()->keyed_load_miss(), 1, a3, a4); 295 __ IncrementCounter(isolate->counters()->keyed_load_miss(), 1, a3, a4);
295 296
296 __ mov(LoadIC_TempRegister(), ReceiverRegister()); 297 __ mov(LoadIC_TempRegister(), LoadConvention::ReceiverRegister());
297 __ Push(LoadIC_TempRegister(), NameRegister()); 298 __ Push(LoadIC_TempRegister(), LoadConvention::NameRegister());
298 299
299 // Perform tail call to the entry. 300 // Perform tail call to the entry.
300 ExternalReference ref = ExternalReference(IC_Utility(kLoadIC_Miss), isolate); 301 ExternalReference ref = ExternalReference(IC_Utility(kLoadIC_Miss), isolate);
301 __ TailCallExternalReference(ref, 2, 1); 302 __ TailCallExternalReference(ref, 2, 1);
302 } 303 }
303 304
304 305
305 void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { 306 void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
306 // The return address is in ra. 307 // The return address is in ra.
307 308
308 __ mov(LoadIC_TempRegister(), ReceiverRegister()); 309 __ mov(LoadIC_TempRegister(), LoadConvention::ReceiverRegister());
309 __ Push(LoadIC_TempRegister(), NameRegister()); 310 __ Push(LoadIC_TempRegister(), LoadConvention::NameRegister());
310 311
311 __ TailCallRuntime(Runtime::kGetProperty, 2, 1); 312 __ TailCallRuntime(Runtime::kGetProperty, 2, 1);
312 } 313 }
313 314
314 315
315 static MemOperand GenerateMappedArgumentsLookup( 316 static MemOperand GenerateMappedArgumentsLookup(
316 MacroAssembler* masm, Register object, Register key, Register scratch1, 317 MacroAssembler* masm, Register object, Register key, Register scratch1,
317 Register scratch2, Register scratch3, Label* unmapped_case, 318 Register scratch2, Register scratch3, Label* unmapped_case,
318 Label* slow_case) { 319 Label* slow_case) {
319 Heap* heap = masm->isolate()->heap(); 320 Heap* heap = masm->isolate()->heap();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 __ SmiUntag(scratch, key); 385 __ SmiUntag(scratch, key);
385 __ dsll(scratch, scratch, kPointerSizeLog2); 386 __ dsll(scratch, scratch, kPointerSizeLog2);
386 __ Daddu(scratch, scratch, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); 387 __ Daddu(scratch, scratch, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
387 __ Daddu(scratch, backing_store, scratch); 388 __ Daddu(scratch, backing_store, scratch);
388 return MemOperand(scratch); 389 return MemOperand(scratch);
389 } 390 }
390 391
391 392
392 void KeyedLoadIC::GenerateSloppyArguments(MacroAssembler* masm) { 393 void KeyedLoadIC::GenerateSloppyArguments(MacroAssembler* masm) {
393 // The return address is in ra. 394 // The return address is in ra.
394 Register receiver = ReceiverRegister(); 395 Register receiver = LoadConvention::ReceiverRegister();
395 Register key = NameRegister(); 396 Register key = LoadConvention::NameRegister();
396 DCHECK(receiver.is(a1)); 397 DCHECK(receiver.is(a1));
397 DCHECK(key.is(a2)); 398 DCHECK(key.is(a2));
398 399
399 Label slow, notin; 400 Label slow, notin;
400 MemOperand mapped_location = GenerateMappedArgumentsLookup( 401 MemOperand mapped_location = GenerateMappedArgumentsLookup(
401 masm, receiver, key, a0, a3, a4, &notin, &slow); 402 masm, receiver, key, a0, a3, a4, &notin, &slow);
402 __ Ret(USE_DELAY_SLOT); 403 __ Ret(USE_DELAY_SLOT);
403 __ ld(v0, mapped_location); 404 __ ld(v0, mapped_location);
404 __ bind(&notin); 405 __ bind(&notin);
405 // The unmapped lookup expects that the parameter map is in a2. 406 // The unmapped lookup expects that the parameter map is in a2.
406 MemOperand unmapped_location = 407 MemOperand unmapped_location =
407 GenerateUnmappedArgumentsLookup(masm, key, a0, a3, &slow); 408 GenerateUnmappedArgumentsLookup(masm, key, a0, a3, &slow);
408 __ ld(a0, unmapped_location); 409 __ ld(a0, unmapped_location);
409 __ LoadRoot(a3, Heap::kTheHoleValueRootIndex); 410 __ LoadRoot(a3, Heap::kTheHoleValueRootIndex);
410 __ Branch(&slow, eq, a0, Operand(a3)); 411 __ Branch(&slow, eq, a0, Operand(a3));
411 __ Ret(USE_DELAY_SLOT); 412 __ Ret(USE_DELAY_SLOT);
412 __ mov(v0, a0); 413 __ mov(v0, a0);
413 __ bind(&slow); 414 __ bind(&slow);
414 GenerateMiss(masm); 415 GenerateMiss(masm);
415 } 416 }
416 417
417 418
418 void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) { 419 void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) {
419 Register receiver = ReceiverRegister(); 420 Register receiver = StoreConvention::ReceiverRegister();
420 Register key = NameRegister(); 421 Register key = StoreConvention::NameRegister();
421 Register value = ValueRegister(); 422 Register value = StoreConvention::ValueRegister();
422 DCHECK(value.is(a0)); 423 DCHECK(value.is(a0));
423 424
424 Label slow, notin; 425 Label slow, notin;
425 // Store address is returned in register (of MemOperand) mapped_location. 426 // Store address is returned in register (of MemOperand) mapped_location.
426 MemOperand mapped_location = GenerateMappedArgumentsLookup( 427 MemOperand mapped_location = GenerateMappedArgumentsLookup(
427 masm, receiver, key, a3, a4, a5, &notin, &slow); 428 masm, receiver, key, a3, a4, a5, &notin, &slow);
428 __ sd(value, mapped_location); 429 __ sd(value, mapped_location);
429 __ mov(t1, value); 430 __ mov(t1, value);
430 DCHECK_EQ(mapped_location.offset(), 0); 431 DCHECK_EQ(mapped_location.offset(), 0);
431 __ RecordWrite(a3, mapped_location.rm(), t1, kRAHasNotBeenSaved, 432 __ RecordWrite(a3, mapped_location.rm(), t1, kRAHasNotBeenSaved,
(...skipping 16 matching lines...) Expand all
448 GenerateMiss(masm); 449 GenerateMiss(masm);
449 } 450 }
450 451
451 452
452 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { 453 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) {
453 // The return address is in ra. 454 // The return address is in ra.
454 Isolate* isolate = masm->isolate(); 455 Isolate* isolate = masm->isolate();
455 456
456 __ IncrementCounter(isolate->counters()->keyed_load_miss(), 1, a3, a4); 457 __ IncrementCounter(isolate->counters()->keyed_load_miss(), 1, a3, a4);
457 458
458 __ Push(ReceiverRegister(), NameRegister()); 459 __ Push(LoadConvention::ReceiverRegister(), LoadConvention::NameRegister());
459 460
460 // Perform tail call to the entry. 461 // Perform tail call to the entry.
461 ExternalReference ref = 462 ExternalReference ref =
462 ExternalReference(IC_Utility(kKeyedLoadIC_Miss), isolate); 463 ExternalReference(IC_Utility(kKeyedLoadIC_Miss), isolate);
463 464
464 __ TailCallExternalReference(ref, 2, 1); 465 __ TailCallExternalReference(ref, 2, 1);
465 } 466 }
466 467
467 468
468 // IC register specifications
469 const Register LoadIC::ReceiverRegister() { return a1; }
470 const Register LoadIC::NameRegister() { return a2; }
471
472
473 const Register LoadIC::SlotRegister() {
474 DCHECK(FLAG_vector_ics);
475 return a0;
476 }
477
478
479 const Register LoadIC::VectorRegister() {
480 DCHECK(FLAG_vector_ics);
481 return a3;
482 }
483
484
485 const Register StoreIC::ReceiverRegister() { return a1; }
486 const Register StoreIC::NameRegister() { return a2; }
487 const Register StoreIC::ValueRegister() { return a0; }
488
489
490 const Register KeyedStoreIC::MapRegister() { return a3; }
491
492
493 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { 469 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
494 // The return address is in ra. 470 // The return address is in ra.
495 471
496 __ Push(ReceiverRegister(), NameRegister()); 472 __ Push(LoadConvention::ReceiverRegister(), LoadConvention::NameRegister());
497 473
498 __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1); 474 __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1);
499 } 475 }
500 476
501 477
502 void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) { 478 void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
503 // The return address is in ra. 479 // The return address is in ra.
504 Label slow, check_name, index_smi, index_name, property_array_property; 480 Label slow, check_name, index_smi, index_name, property_array_property;
505 Label probe_dictionary, check_number_dictionary; 481 Label probe_dictionary, check_number_dictionary;
506 482
507 Register key = NameRegister(); 483 Register key = LoadConvention::NameRegister();
508 Register receiver = ReceiverRegister(); 484 Register receiver = LoadConvention::ReceiverRegister();
509 DCHECK(key.is(a2)); 485 DCHECK(key.is(a2));
510 DCHECK(receiver.is(a1)); 486 DCHECK(receiver.is(a1));
511 487
512 Isolate* isolate = masm->isolate(); 488 Isolate* isolate = masm->isolate();
513 489
514 // Check that the key is a smi. 490 // Check that the key is a smi.
515 __ JumpIfNotSmi(key, &check_name); 491 __ JumpIfNotSmi(key, &check_name);
516 __ bind(&index_smi); 492 __ bind(&index_smi);
517 // Now the key is known to be a smi. This place is also jumped to from below 493 // Now the key is known to be a smi. This place is also jumped to from below
518 // where a numeric string is converted to a smi. 494 // where a numeric string is converted to a smi.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 __ IndexFromHash(a3, key); 640 __ IndexFromHash(a3, key);
665 // Now jump to the place where smi keys are handled. 641 // Now jump to the place where smi keys are handled.
666 __ Branch(&index_smi); 642 __ Branch(&index_smi);
667 } 643 }
668 644
669 645
670 void KeyedLoadIC::GenerateString(MacroAssembler* masm) { 646 void KeyedLoadIC::GenerateString(MacroAssembler* masm) {
671 // Return address is in ra. 647 // Return address is in ra.
672 Label miss; 648 Label miss;
673 649
674 Register receiver = ReceiverRegister(); 650 Register receiver = LoadConvention::ReceiverRegister();
675 Register index = NameRegister(); 651 Register index = LoadConvention::NameRegister();
676 Register scratch = a3; 652 Register scratch = a3;
677 Register result = v0; 653 Register result = v0;
678 DCHECK(!scratch.is(receiver) && !scratch.is(index)); 654 DCHECK(!scratch.is(receiver) && !scratch.is(index));
679 655
680 StringCharAtGenerator char_at_generator(receiver, index, scratch, result, 656 StringCharAtGenerator char_at_generator(receiver, index, scratch, result,
681 &miss, // When not a string. 657 &miss, // When not a string.
682 &miss, // When not a number. 658 &miss, // When not a number.
683 &miss, // When index out of range. 659 &miss, // When index out of range.
684 STRING_INDEX_IS_ARRAY_INDEX); 660 STRING_INDEX_IS_ARRAY_INDEX);
685 char_at_generator.GenerateFast(masm); 661 char_at_generator.GenerateFast(masm);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 // -- a0 : value 825 // -- a0 : value
850 // -- a1 : key 826 // -- a1 : key
851 // -- a2 : receiver 827 // -- a2 : receiver
852 // -- ra : return address 828 // -- ra : return address
853 // ----------------------------------- 829 // -----------------------------------
854 Label slow, fast_object, fast_object_grow; 830 Label slow, fast_object, fast_object_grow;
855 Label fast_double, fast_double_grow; 831 Label fast_double, fast_double_grow;
856 Label array, extra, check_if_double_array; 832 Label array, extra, check_if_double_array;
857 833
858 // Register usage. 834 // Register usage.
859 Register value = ValueRegister(); 835 Register value = StoreConvention::ValueRegister();
860 Register key = NameRegister(); 836 Register key = StoreConvention::NameRegister();
861 Register receiver = ReceiverRegister(); 837 Register receiver = StoreConvention::ReceiverRegister();
862 DCHECK(value.is(a0)); 838 DCHECK(value.is(a0));
863 Register receiver_map = a3; 839 Register receiver_map = a3;
864 Register elements_map = a6; 840 Register elements_map = a6;
865 Register elements = a7; // Elements array of the receiver. 841 Register elements = a7; // Elements array of the receiver.
866 // a4 and a5 are used as general scratch registers. 842 // a4 and a5 are used as general scratch registers.
867 843
868 // Check that the key is a smi. 844 // Check that the key is a smi.
869 __ JumpIfNotSmi(key, &slow); 845 __ JumpIfNotSmi(key, &slow);
870 // Check that the object isn't a smi. 846 // Check that the object isn't a smi.
871 __ JumpIfSmi(receiver, &slow); 847 __ JumpIfSmi(receiver, &slow);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 &slow, kDontCheckMap, kIncrementLength, value, 911 &slow, kDontCheckMap, kIncrementLength, value,
936 key, receiver, receiver_map, elements_map, 912 key, receiver, receiver_map, elements_map,
937 elements); 913 elements);
938 } 914 }
939 915
940 916
941 void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) { 917 void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
942 // Return address is in ra. 918 // Return address is in ra.
943 Label slow; 919 Label slow;
944 920
945 Register receiver = ReceiverRegister(); 921 Register receiver = LoadConvention::ReceiverRegister();
946 Register key = NameRegister(); 922 Register key = LoadConvention::NameRegister();
947 Register scratch1 = a3; 923 Register scratch1 = a3;
948 Register scratch2 = a4; 924 Register scratch2 = a4;
949 DCHECK(!scratch1.is(receiver) && !scratch1.is(key)); 925 DCHECK(!scratch1.is(receiver) && !scratch1.is(key));
950 DCHECK(!scratch2.is(receiver) && !scratch2.is(key)); 926 DCHECK(!scratch2.is(receiver) && !scratch2.is(key));
951 927
952 // Check that the receiver isn't a smi. 928 // Check that the receiver isn't a smi.
953 __ JumpIfSmi(receiver, &slow); 929 __ JumpIfSmi(receiver, &slow);
954 930
955 // Check that the key is an array index, that is Uint32. 931 // Check that the key is an array index, that is Uint32.
956 __ And(a4, key, Operand(kSmiTagMask | kSmiSignMask)); 932 __ And(a4, key, Operand(kSmiTagMask | kSmiSignMask));
(...skipping 16 matching lines...) Expand all
973 masm->isolate()), 949 masm->isolate()),
974 2, 1); 950 2, 1);
975 951
976 __ bind(&slow); 952 __ bind(&slow);
977 GenerateMiss(masm); 953 GenerateMiss(masm);
978 } 954 }
979 955
980 956
981 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { 957 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) {
982 // Push receiver, key and value for runtime call. 958 // Push receiver, key and value for runtime call.
983 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); 959 __ Push(StoreConvention::ReceiverRegister(), StoreConvention::NameRegister(),
960 StoreConvention::ValueRegister());
984 961
985 ExternalReference ref = 962 ExternalReference ref =
986 ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate()); 963 ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate());
987 __ TailCallExternalReference(ref, 3, 1); 964 __ TailCallExternalReference(ref, 3, 1);
988 } 965 }
989 966
990 967
991 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { 968 void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
992 Register receiver = ReceiverRegister(); 969 Register receiver = StoreConvention::ReceiverRegister();
993 Register name = NameRegister(); 970 Register name = StoreConvention::NameRegister();
994 DCHECK(receiver.is(a1)); 971 DCHECK(receiver.is(a1));
995 DCHECK(name.is(a2)); 972 DCHECK(name.is(a2));
996 DCHECK(ValueRegister().is(a0)); 973 DCHECK(StoreConvention::ValueRegister().is(a0));
997 974
998 // Get the receiver from the stack and probe the stub cache. 975 // Get the receiver from the stack and probe the stub cache.
999 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( 976 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
1000 Code::ComputeHandlerFlags(Code::STORE_IC)); 977 Code::ComputeHandlerFlags(Code::STORE_IC));
1001 masm->isolate()->stub_cache()->GenerateProbe(masm, flags, receiver, name, a3, 978 masm->isolate()->stub_cache()->GenerateProbe(masm, flags, receiver, name, a3,
1002 a4, a5, a6); 979 a4, a5, a6);
1003 980
1004 // Cache miss: Jump to runtime. 981 // Cache miss: Jump to runtime.
1005 GenerateMiss(masm); 982 GenerateMiss(masm);
1006 } 983 }
1007 984
1008 985
1009 void StoreIC::GenerateMiss(MacroAssembler* masm) { 986 void StoreIC::GenerateMiss(MacroAssembler* masm) {
1010 __ Push(ReceiverRegister(), NameRegister(), ValueRegister()); 987 __ Push(StoreConvention::ReceiverRegister(), StoreConvention::NameRegister(),
988 StoreConvention::ValueRegister());
1011 // Perform tail call to the entry. 989 // Perform tail call to the entry.
1012 ExternalReference ref = 990 ExternalReference ref =
1013 ExternalReference(IC_Utility(kStoreIC_Miss), masm->isolate()); 991 ExternalReference(IC_Utility(kStoreIC_Miss), masm->isolate());
1014 __ TailCallExternalReference(ref, 3, 1); 992 __ TailCallExternalReference(ref, 3, 1);
1015 } 993 }
1016 994
1017 995
1018 void StoreIC::GenerateNormal(MacroAssembler* masm) { 996 void StoreIC::GenerateNormal(MacroAssembler* masm) {
1019 Label miss; 997 Label miss;
1020 Register receiver = ReceiverRegister(); 998 Register receiver = StoreConvention::ReceiverRegister();
1021 Register name = NameRegister(); 999 Register name = StoreConvention::NameRegister();
1022 Register value = ValueRegister(); 1000 Register value = StoreConvention::ValueRegister();
1023 Register dictionary = a3; 1001 Register dictionary = a3;
1024 DCHECK(!AreAliased(value, receiver, name, dictionary, a4, a5)); 1002 DCHECK(!AreAliased(value, receiver, name, dictionary, a4, a5));
1025 1003
1026 __ ld(dictionary, FieldMemOperand(receiver, JSObject::kPropertiesOffset)); 1004 __ ld(dictionary, FieldMemOperand(receiver, JSObject::kPropertiesOffset));
1027 1005
1028 GenerateDictionaryStore(masm, &miss, a3, name, value, a4, a5); 1006 GenerateDictionaryStore(masm, &miss, a3, name, value, a4, a5);
1029 Counters* counters = masm->isolate()->counters(); 1007 Counters* counters = masm->isolate()->counters();
1030 __ IncrementCounter(counters->store_normal_hit(), 1, a4, a5); 1008 __ IncrementCounter(counters->store_normal_hit(), 1, a4, a5);
1031 __ Ret(); 1009 __ Ret();
1032 1010
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 patcher.ChangeBranchCondition(ne); 1106 patcher.ChangeBranchCondition(ne);
1129 } else { 1107 } else {
1130 DCHECK(Assembler::IsBne(branch_instr)); 1108 DCHECK(Assembler::IsBne(branch_instr));
1131 patcher.ChangeBranchCondition(eq); 1109 patcher.ChangeBranchCondition(eq);
1132 } 1110 }
1133 } 1111 }
1134 } 1112 }
1135 } // namespace v8::internal 1113 } // namespace v8::internal
1136 1114
1137 #endif // V8_TARGET_ARCH_MIPS64 1115 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/ic/mips64/ic-conventions-mips64.cc ('k') | src/mips/code-stubs-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698