| OLD | NEW | 
|---|
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #if V8_TARGET_ARCH_PPC | 5 #if V8_TARGET_ARCH_PPC | 
| 6 | 6 | 
| 7 #include "src/codegen.h" | 7 #include "src/codegen.h" | 
| 8 #include "src/ic/ic.h" | 8 #include "src/ic/ic.h" | 
| 9 #include "src/ic/ic-compiler.h" | 9 #include "src/ic/ic-compiler.h" | 
| 10 #include "src/ic/stub-cache.h" | 10 #include "src/ic/stub-cache.h" | 
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 313   Isolate* isolate = masm->isolate(); | 313   Isolate* isolate = masm->isolate(); | 
| 314 | 314 | 
| 315   DCHECK(!AreAliased(r7, r8, LoadWithVectorDescriptor::SlotRegister(), | 315   DCHECK(!AreAliased(r7, r8, LoadWithVectorDescriptor::SlotRegister(), | 
| 316                      LoadWithVectorDescriptor::VectorRegister())); | 316                      LoadWithVectorDescriptor::VectorRegister())); | 
| 317   __ IncrementCounter(isolate->counters()->load_miss(), 1, r7, r8); | 317   __ IncrementCounter(isolate->counters()->load_miss(), 1, r7, r8); | 
| 318 | 318 | 
| 319   LoadIC_PushArgs(masm); | 319   LoadIC_PushArgs(masm); | 
| 320 | 320 | 
| 321   // Perform tail call to the entry. | 321   // Perform tail call to the entry. | 
| 322   int arg_count = 4; | 322   int arg_count = 4; | 
| 323   __ TailCallRuntime(Runtime::kLoadIC_Miss, arg_count, 1); | 323   __ TailCallRuntime(Runtime::kLoadIC_Miss, arg_count); | 
| 324 } | 324 } | 
| 325 | 325 | 
| 326 | 326 | 
| 327 void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, | 327 void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, | 
| 328                                         LanguageMode language_mode) { | 328                                         LanguageMode language_mode) { | 
| 329   // The return address is in lr. | 329   // The return address is in lr. | 
| 330 | 330 | 
| 331   __ mr(LoadIC_TempRegister(), LoadDescriptor::ReceiverRegister()); | 331   __ mr(LoadIC_TempRegister(), LoadDescriptor::ReceiverRegister()); | 
| 332   __ Push(LoadIC_TempRegister(), LoadDescriptor::NameRegister()); | 332   __ Push(LoadIC_TempRegister(), LoadDescriptor::NameRegister()); | 
| 333 | 333 | 
| 334   // Do tail-call to runtime routine. | 334   // Do tail-call to runtime routine. | 
| 335   __ TailCallRuntime(is_strong(language_mode) ? Runtime::kGetPropertyStrong | 335   __ TailCallRuntime(is_strong(language_mode) ? Runtime::kGetPropertyStrong | 
| 336                                               : Runtime::kGetProperty, | 336                                               : Runtime::kGetProperty, | 
| 337                      2, 1); | 337                      2); | 
| 338 } | 338 } | 
| 339 | 339 | 
| 340 | 340 | 
| 341 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { | 341 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { | 
| 342   // The return address is in lr. | 342   // The return address is in lr. | 
| 343   Isolate* isolate = masm->isolate(); | 343   Isolate* isolate = masm->isolate(); | 
| 344 | 344 | 
| 345   DCHECK(!AreAliased(r7, r8, LoadWithVectorDescriptor::SlotRegister(), | 345   DCHECK(!AreAliased(r7, r8, LoadWithVectorDescriptor::SlotRegister(), | 
| 346                      LoadWithVectorDescriptor::VectorRegister())); | 346                      LoadWithVectorDescriptor::VectorRegister())); | 
| 347   __ IncrementCounter(isolate->counters()->keyed_load_miss(), 1, r7, r8); | 347   __ IncrementCounter(isolate->counters()->keyed_load_miss(), 1, r7, r8); | 
| 348 | 348 | 
| 349   LoadIC_PushArgs(masm); | 349   LoadIC_PushArgs(masm); | 
| 350 | 350 | 
| 351   // Perform tail call to the entry. | 351   // Perform tail call to the entry. | 
| 352   int arg_count = 4; | 352   int arg_count = 4; | 
| 353   __ TailCallRuntime(Runtime::kKeyedLoadIC_Miss, arg_count, 1); | 353   __ TailCallRuntime(Runtime::kKeyedLoadIC_Miss, arg_count); | 
| 354 } | 354 } | 
| 355 | 355 | 
| 356 | 356 | 
| 357 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, | 357 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, | 
| 358                                              LanguageMode language_mode) { | 358                                              LanguageMode language_mode) { | 
| 359   // The return address is in lr. | 359   // The return address is in lr. | 
| 360 | 360 | 
| 361   __ Push(LoadDescriptor::ReceiverRegister(), LoadDescriptor::NameRegister()); | 361   __ Push(LoadDescriptor::ReceiverRegister(), LoadDescriptor::NameRegister()); | 
| 362 | 362 | 
| 363   // Do tail-call to runtime routine. | 363   // Do tail-call to runtime routine. | 
| 364   __ TailCallRuntime(is_strong(language_mode) ? Runtime::kKeyedGetPropertyStrong | 364   __ TailCallRuntime(is_strong(language_mode) ? Runtime::kKeyedGetPropertyStrong | 
| 365                                               : Runtime::kKeyedGetProperty, | 365                                               : Runtime::kKeyedGetProperty, | 
| 366                      2, 1); | 366                      2); | 
| 367 } | 367 } | 
| 368 | 368 | 
| 369 | 369 | 
| 370 void KeyedLoadIC::GenerateMegamorphic(MacroAssembler* masm, | 370 void KeyedLoadIC::GenerateMegamorphic(MacroAssembler* masm, | 
| 371                                       LanguageMode language_mode) { | 371                                       LanguageMode language_mode) { | 
| 372   // The return address is in lr. | 372   // The return address is in lr. | 
| 373   Label slow, check_name, index_smi, index_name, property_array_property; | 373   Label slow, check_name, index_smi, index_name, property_array_property; | 
| 374   Label probe_dictionary, check_number_dictionary; | 374   Label probe_dictionary, check_number_dictionary; | 
| 375 | 375 | 
| 376   Register key = LoadDescriptor::NameRegister(); | 376   Register key = LoadDescriptor::NameRegister(); | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 475   __ Push(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister(), | 475   __ Push(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister(), | 
| 476           StoreDescriptor::ValueRegister(), | 476           StoreDescriptor::ValueRegister(), | 
| 477           VectorStoreICDescriptor::SlotRegister(), | 477           VectorStoreICDescriptor::SlotRegister(), | 
| 478           VectorStoreICDescriptor::VectorRegister()); | 478           VectorStoreICDescriptor::VectorRegister()); | 
| 479 } | 479 } | 
| 480 | 480 | 
| 481 | 481 | 
| 482 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { | 482 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { | 
| 483   StoreIC_PushArgs(masm); | 483   StoreIC_PushArgs(masm); | 
| 484 | 484 | 
| 485   __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, 5, 1); | 485   __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, 5); | 
| 486 } | 486 } | 
| 487 | 487 | 
| 488 | 488 | 
| 489 static void KeyedStoreGenerateMegamorphicHelper( | 489 static void KeyedStoreGenerateMegamorphicHelper( | 
| 490     MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow, | 490     MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow, | 
| 491     KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length, | 491     KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length, | 
| 492     Register value, Register key, Register receiver, Register receiver_map, | 492     Register value, Register key, Register receiver, Register receiver_map, | 
| 493     Register elements_map, Register elements) { | 493     Register elements_map, Register elements) { | 
| 494   Label transition_smi_elements; | 494   Label transition_smi_elements; | 
| 495   Label finish_object_store, non_double_value, transition_double_elements; | 495   Label finish_object_store, non_double_value, transition_double_elements; | 
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 779 | 779 | 
| 780   // Cache miss: Jump to runtime. | 780   // Cache miss: Jump to runtime. | 
| 781   GenerateMiss(masm); | 781   GenerateMiss(masm); | 
| 782 } | 782 } | 
| 783 | 783 | 
| 784 | 784 | 
| 785 void StoreIC::GenerateMiss(MacroAssembler* masm) { | 785 void StoreIC::GenerateMiss(MacroAssembler* masm) { | 
| 786   StoreIC_PushArgs(masm); | 786   StoreIC_PushArgs(masm); | 
| 787 | 787 | 
| 788   // Perform tail call to the entry. | 788   // Perform tail call to the entry. | 
| 789   __ TailCallRuntime(Runtime::kStoreIC_Miss, 5, 1); | 789   __ TailCallRuntime(Runtime::kStoreIC_Miss, 5); | 
| 790 } | 790 } | 
| 791 | 791 | 
| 792 | 792 | 
| 793 void StoreIC::GenerateNormal(MacroAssembler* masm) { | 793 void StoreIC::GenerateNormal(MacroAssembler* masm) { | 
| 794   Label miss; | 794   Label miss; | 
| 795   Register receiver = StoreDescriptor::ReceiverRegister(); | 795   Register receiver = StoreDescriptor::ReceiverRegister(); | 
| 796   Register name = StoreDescriptor::NameRegister(); | 796   Register name = StoreDescriptor::NameRegister(); | 
| 797   Register value = StoreDescriptor::ValueRegister(); | 797   Register value = StoreDescriptor::ValueRegister(); | 
| 798   Register dictionary = r8; | 798   Register dictionary = r8; | 
| 799   DCHECK(receiver.is(r4)); | 799   DCHECK(receiver.is(r4)); | 
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 911     patcher.EmitCondition(ne); | 911     patcher.EmitCondition(ne); | 
| 912   } else { | 912   } else { | 
| 913     DCHECK(Assembler::GetCondition(branch_instr) == ne); | 913     DCHECK(Assembler::GetCondition(branch_instr) == ne); | 
| 914     patcher.EmitCondition(eq); | 914     patcher.EmitCondition(eq); | 
| 915   } | 915   } | 
| 916 } | 916 } | 
| 917 }  // namespace internal | 917 }  // namespace internal | 
| 918 }  // namespace v8 | 918 }  // namespace v8 | 
| 919 | 919 | 
| 920 #endif  // V8_TARGET_ARCH_PPC | 920 #endif  // V8_TARGET_ARCH_PPC | 
| OLD | NEW | 
|---|