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

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

Issue 2123983004: [ic] Split megamorphic stub cache in two caches (for loads and for stores). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@flags-fix
Patch Set: Rebasing Created 4 years, 5 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
OLDNEW
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 #if V8_TARGET_ARCH_ARM64 5 #if V8_TARGET_ARCH_ARM64
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 3446 matching lines...) Expand 10 before | Expand all | Expand 10 after
3457 scratch1, &compare_map, &load_smi_map, &try_array); 3457 scratch1, &compare_map, &load_smi_map, &try_array);
3458 3458
3459 // Is it a fixed array? 3459 // Is it a fixed array?
3460 __ Bind(&try_array); 3460 __ Bind(&try_array);
3461 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); 3461 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset));
3462 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, &not_array); 3462 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, &not_array);
3463 HandleArrayCases(masm, feedback, receiver_map, scratch1, x7, true, &miss); 3463 HandleArrayCases(masm, feedback, receiver_map, scratch1, x7, true, &miss);
3464 3464
3465 __ Bind(&not_array); 3465 __ Bind(&not_array);
3466 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, &miss); 3466 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, &miss);
3467 Code::Flags code_flags = 3467 masm->isolate()->load_stub_cache()->GenerateProbe(
3468 Code::RemoveHolderFromFlags(Code::ComputeHandlerFlags(Code::LOAD_IC)); 3468 masm, receiver, name, feedback, receiver_map, scratch1, x7);
3469 masm->isolate()->stub_cache()->GenerateProbe(masm, Code::LOAD_IC, code_flags,
3470 receiver, name, feedback,
3471 receiver_map, scratch1, x7);
3472 3469
3473 __ Bind(&miss); 3470 __ Bind(&miss);
3474 LoadIC::GenerateMiss(masm); 3471 LoadIC::GenerateMiss(masm);
3475 3472
3476 __ Bind(&load_smi_map); 3473 __ Bind(&load_smi_map);
3477 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); 3474 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex);
3478 __ jmp(&compare_map); 3475 __ jmp(&compare_map);
3479 } 3476 }
3480 3477
3481 3478
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
3593 scratch1, &compare_map, &load_smi_map, &try_array); 3590 scratch1, &compare_map, &load_smi_map, &try_array);
3594 3591
3595 // Is it a fixed array? 3592 // Is it a fixed array?
3596 __ Bind(&try_array); 3593 __ Bind(&try_array);
3597 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); 3594 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset));
3598 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, &not_array); 3595 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, &not_array);
3599 HandleArrayCases(masm, feedback, receiver_map, scratch1, x8, true, &miss); 3596 HandleArrayCases(masm, feedback, receiver_map, scratch1, x8, true, &miss);
3600 3597
3601 __ Bind(&not_array); 3598 __ Bind(&not_array);
3602 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, &miss); 3599 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, &miss);
3603 Code::Flags code_flags = 3600 masm->isolate()->store_stub_cache()->GenerateProbe(
3604 Code::RemoveHolderFromFlags(Code::ComputeHandlerFlags(Code::STORE_IC)); 3601 masm, receiver, key, feedback, receiver_map, scratch1, x8);
3605 masm->isolate()->stub_cache()->GenerateProbe(masm, Code::STORE_IC, code_flags,
3606 receiver, key, feedback,
3607 receiver_map, scratch1, x8);
3608 3602
3609 __ Bind(&miss); 3603 __ Bind(&miss);
3610 StoreIC::GenerateMiss(masm); 3604 StoreIC::GenerateMiss(masm);
3611 3605
3612 __ Bind(&load_smi_map); 3606 __ Bind(&load_smi_map);
3613 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); 3607 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex);
3614 __ jmp(&compare_map); 3608 __ jmp(&compare_map);
3615 } 3609 }
3616 3610
3617 3611
(...skipping 1978 matching lines...) Expand 10 before | Expand all | Expand 10 after
5596 kStackUnwindSpace, NULL, spill_offset, 5590 kStackUnwindSpace, NULL, spill_offset,
5597 return_value_operand, NULL); 5591 return_value_operand, NULL);
5598 } 5592 }
5599 5593
5600 #undef __ 5594 #undef __
5601 5595
5602 } // namespace internal 5596 } // namespace internal
5603 } // namespace v8 5597 } // namespace v8
5604 5598
5605 #endif // V8_TARGET_ARCH_ARM64 5599 #endif // V8_TARGET_ARCH_ARM64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698