OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
8 | 8 |
9 #include "src/arm64/assembler-arm64.h" | 9 #include "src/arm64/assembler-arm64.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 GenerateMiss(masm); | 499 GenerateMiss(masm); |
500 } | 500 } |
501 | 501 |
502 | 502 |
503 void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) { | 503 void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) { |
504 ASM_LOCATION("KeyedStoreIC::GenerateSloppyArguments"); | 504 ASM_LOCATION("KeyedStoreIC::GenerateSloppyArguments"); |
505 Label slow, notin; | 505 Label slow, notin; |
506 Register value = ValueRegister(); | 506 Register value = ValueRegister(); |
507 Register key = NameRegister(); | 507 Register key = NameRegister(); |
508 Register receiver = ReceiverRegister(); | 508 Register receiver = ReceiverRegister(); |
509 ASSERT(receiver.is(x1)); | 509 ASSERT(receiver.is(x2)); |
510 ASSERT(key.is(x2)); | 510 ASSERT(key.is(x1)); |
511 ASSERT(value.is(x0)); | 511 ASSERT(value.is(x0)); |
512 | 512 |
513 Register map = x3; | 513 Register map = x3; |
514 | 514 |
515 // These registers are used by GenerateMappedArgumentsLookup to build a | 515 // These registers are used by GenerateMappedArgumentsLookup to build a |
516 // MemOperand. They are live for as long as the MemOperand is live. | 516 // MemOperand. They are live for as long as the MemOperand is live. |
517 Register mapped1 = x4; | 517 Register mapped1 = x4; |
518 Register mapped2 = x5; | 518 Register mapped2 = x5; |
519 | 519 |
520 MemOperand mapped = | 520 MemOperand mapped = |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 // IC register specifications | 567 // IC register specifications |
568 const Register LoadIC::ReceiverRegister() { return x1; } | 568 const Register LoadIC::ReceiverRegister() { return x1; } |
569 const Register LoadIC::NameRegister() { return x2; } | 569 const Register LoadIC::NameRegister() { return x2; } |
570 | 570 |
571 | 571 |
572 const Register StoreIC::ReceiverRegister() { return x1; } | 572 const Register StoreIC::ReceiverRegister() { return x1; } |
573 const Register StoreIC::NameRegister() { return x2; } | 573 const Register StoreIC::NameRegister() { return x2; } |
574 const Register StoreIC::ValueRegister() { return x0; } | 574 const Register StoreIC::ValueRegister() { return x0; } |
575 | 575 |
576 | 576 |
577 const Register KeyedStoreIC::ReceiverRegister() { | 577 const Register KeyedStoreIC::ReceiverRegister() { return x2; } |
578 return StoreIC::ReceiverRegister(); | 578 const Register KeyedStoreIC::NameRegister() { return x1; } |
579 } | 579 const Register KeyedStoreIC::ValueRegister() { return x0; } |
580 | |
581 | |
582 const Register KeyedStoreIC::NameRegister() { | |
583 return StoreIC::NameRegister(); | |
584 } | |
585 | |
586 | |
587 const Register KeyedStoreIC::ValueRegister() { | |
588 return StoreIC::ValueRegister(); | |
589 } | |
590 | |
591 | |
592 const Register KeyedStoreIC::MapRegister() { | |
593 return x3; | |
594 } | |
595 | 580 |
596 | 581 |
597 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { | 582 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { |
598 // The return address is in lr. | 583 // The return address is in lr. |
599 __ Push(ReceiverRegister(), NameRegister()); | 584 __ Push(ReceiverRegister(), NameRegister()); |
600 __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1); | 585 __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1); |
601 } | 586 } |
602 | 587 |
603 | 588 |
604 static void GenerateKeyedLoadWithSmiKey(MacroAssembler* masm, | 589 static void GenerateKeyedLoadWithSmiKey(MacroAssembler* masm, |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1075 Label array; | 1060 Label array; |
1076 Label fast_object; | 1061 Label fast_object; |
1077 Label extra; | 1062 Label extra; |
1078 Label fast_object_grow; | 1063 Label fast_object_grow; |
1079 Label fast_double_grow; | 1064 Label fast_double_grow; |
1080 Label fast_double; | 1065 Label fast_double; |
1081 | 1066 |
1082 Register value = ValueRegister(); | 1067 Register value = ValueRegister(); |
1083 Register key = NameRegister(); | 1068 Register key = NameRegister(); |
1084 Register receiver = ReceiverRegister(); | 1069 Register receiver = ReceiverRegister(); |
1085 ASSERT(receiver.is(x1)); | 1070 ASSERT(receiver.is(x2)); |
1086 ASSERT(key.is(x2)); | 1071 ASSERT(key.is(x1)); |
1087 ASSERT(value.is(x0)); | 1072 ASSERT(value.is(x0)); |
1088 | 1073 |
1089 Register receiver_map = x3; | 1074 Register receiver_map = x3; |
1090 Register elements = x4; | 1075 Register elements = x4; |
1091 Register elements_map = x5; | 1076 Register elements_map = x5; |
1092 | 1077 |
1093 __ JumpIfNotSmi(key, &slow); | 1078 __ JumpIfNotSmi(key, &slow); |
1094 __ JumpIfSmi(receiver, &slow); | 1079 __ JumpIfSmi(receiver, &slow); |
1095 __ Ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); | 1080 __ Ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); |
1096 | 1081 |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 ASSERT(to_patch->Mask(TestBranchMask) == TBNZ); | 1320 ASSERT(to_patch->Mask(TestBranchMask) == TBNZ); |
1336 // This is JumpIfSmi(smi_reg, branch_imm). | 1321 // This is JumpIfSmi(smi_reg, branch_imm). |
1337 patcher.tbz(smi_reg, 0, branch_imm); | 1322 patcher.tbz(smi_reg, 0, branch_imm); |
1338 } | 1323 } |
1339 } | 1324 } |
1340 | 1325 |
1341 | 1326 |
1342 } } // namespace v8::internal | 1327 } } // namespace v8::internal |
1343 | 1328 |
1344 #endif // V8_TARGET_ARCH_ARM64 | 1329 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |