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

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

Issue 1553523002: [telemetry] Counter Cleanups (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix merge conflicts Created 4 years, 10 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
« no previous file with comments | « src/ic/x87/handler-compiler-x87.cc ('k') | src/log.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 #if V8_TARGET_ARCH_X87 5 #if V8_TARGET_ARCH_X87
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 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 GenerateKeyedLoadReceiverCheck(masm, receiver, eax, 283 GenerateKeyedLoadReceiverCheck(masm, receiver, eax,
284 Map::kHasIndexedInterceptor, &slow); 284 Map::kHasIndexedInterceptor, &slow);
285 285
286 // Check the receiver's map to see if it has fast elements. 286 // Check the receiver's map to see if it has fast elements.
287 __ CheckFastElements(eax, &check_number_dictionary); 287 __ CheckFastElements(eax, &check_number_dictionary);
288 288
289 GenerateFastArrayLoad(masm, receiver, key, eax, ebx, eax, &slow, 289 GenerateFastArrayLoad(masm, receiver, key, eax, ebx, eax, &slow,
290 language_mode); 290 language_mode);
291 Isolate* isolate = masm->isolate(); 291 Isolate* isolate = masm->isolate();
292 Counters* counters = isolate->counters(); 292 Counters* counters = isolate->counters();
293 __ IncrementCounter(counters->keyed_load_generic_smi(), 1); 293 __ IncrementCounter(counters->ic_keyed_load_generic_smi(), 1);
294 __ ret(0); 294 __ ret(0);
295 295
296 __ bind(&check_number_dictionary); 296 __ bind(&check_number_dictionary);
297 __ mov(ebx, key); 297 __ mov(ebx, key);
298 __ SmiUntag(ebx); 298 __ SmiUntag(ebx);
299 __ mov(eax, FieldOperand(receiver, JSObject::kElementsOffset)); 299 __ mov(eax, FieldOperand(receiver, JSObject::kElementsOffset));
300 300
301 // Check whether the elements is a number dictionary. 301 // Check whether the elements is a number dictionary.
302 // ebx: untagged index 302 // ebx: untagged index
303 // eax: elements 303 // eax: elements
304 __ CheckMap(eax, isolate->factory()->hash_table_map(), &slow, 304 __ CheckMap(eax, isolate->factory()->hash_table_map(), &slow,
305 DONT_DO_SMI_CHECK); 305 DONT_DO_SMI_CHECK);
306 Label slow_pop_receiver; 306 Label slow_pop_receiver;
307 // Push receiver on the stack to free up a register for the dictionary 307 // Push receiver on the stack to free up a register for the dictionary
308 // probing. 308 // probing.
309 __ push(receiver); 309 __ push(receiver);
310 __ LoadFromNumberDictionary(&slow_pop_receiver, eax, key, ebx, edx, edi, eax); 310 __ LoadFromNumberDictionary(&slow_pop_receiver, eax, key, ebx, edx, edi, eax);
311 // Pop receiver before returning. 311 // Pop receiver before returning.
312 __ pop(receiver); 312 __ pop(receiver);
313 __ ret(0); 313 __ ret(0);
314 314
315 __ bind(&slow_pop_receiver); 315 __ bind(&slow_pop_receiver);
316 // Pop the receiver from the stack and jump to runtime. 316 // Pop the receiver from the stack and jump to runtime.
317 __ pop(receiver); 317 __ pop(receiver);
318 318
319 __ bind(&slow); 319 __ bind(&slow);
320 // Slow case: jump to runtime. 320 // Slow case: jump to runtime.
321 __ IncrementCounter(counters->keyed_load_generic_slow(), 1); 321 __ IncrementCounter(counters->ic_keyed_load_generic_slow(), 1);
322 GenerateRuntimeGetProperty(masm, language_mode); 322 GenerateRuntimeGetProperty(masm, language_mode);
323 323
324 __ bind(&check_name); 324 __ bind(&check_name);
325 GenerateKeyNameCheck(masm, key, eax, ebx, &index_name, &slow); 325 GenerateKeyNameCheck(masm, key, eax, ebx, &index_name, &slow);
326 326
327 GenerateKeyedLoadReceiverCheck(masm, receiver, eax, Map::kHasNamedInterceptor, 327 GenerateKeyedLoadReceiverCheck(masm, receiver, eax, Map::kHasNamedInterceptor,
328 &slow); 328 &slow);
329 329
330 // If the receiver is a fast-case object, check the stub cache. Otherwise 330 // If the receiver is a fast-case object, check the stub cache. Otherwise
331 // probe the dictionary. 331 // probe the dictionary.
(...skipping 24 matching lines...) Expand all
356 356
357 // Do a quick inline probe of the receiver's dictionary, if it 357 // Do a quick inline probe of the receiver's dictionary, if it
358 // exists. 358 // exists.
359 __ bind(&probe_dictionary); 359 __ bind(&probe_dictionary);
360 360
361 __ mov(eax, FieldOperand(receiver, JSObject::kMapOffset)); 361 __ mov(eax, FieldOperand(receiver, JSObject::kMapOffset));
362 __ movzx_b(eax, FieldOperand(eax, Map::kInstanceTypeOffset)); 362 __ movzx_b(eax, FieldOperand(eax, Map::kInstanceTypeOffset));
363 GenerateGlobalInstanceTypeCheck(masm, eax, &slow); 363 GenerateGlobalInstanceTypeCheck(masm, eax, &slow);
364 364
365 GenerateDictionaryLoad(masm, &slow, ebx, key, eax, edi, eax); 365 GenerateDictionaryLoad(masm, &slow, ebx, key, eax, edi, eax);
366 __ IncrementCounter(counters->keyed_load_generic_symbol(), 1); 366 __ IncrementCounter(counters->ic_keyed_load_generic_symbol(), 1);
367 __ ret(0); 367 __ ret(0);
368 368
369 __ bind(&index_name); 369 __ bind(&index_name);
370 __ IndexFromHash(ebx, key); 370 __ IndexFromHash(ebx, key);
371 // Now jump to the place where smi keys are handled. 371 // Now jump to the place where smi keys are handled.
372 __ jmp(&index_smi); 372 __ jmp(&index_smi);
373 } 373 }
374 374
375 375
376 static void KeyedStoreGenerateMegamorphicHelper( 376 static void KeyedStoreGenerateMegamorphicHelper(
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 __ push(receiver); 661 __ push(receiver);
662 __ push(name); 662 __ push(name);
663 __ push(slot); 663 __ push(slot);
664 __ push(vector); 664 __ push(vector);
665 __ push(edi); 665 __ push(edi);
666 } 666 }
667 667
668 668
669 void LoadIC::GenerateMiss(MacroAssembler* masm) { 669 void LoadIC::GenerateMiss(MacroAssembler* masm) {
670 // Return address is on the stack. 670 // Return address is on the stack.
671 __ IncrementCounter(masm->isolate()->counters()->load_miss(), 1); 671 __ IncrementCounter(masm->isolate()->counters()->ic_load_miss(), 1);
672 LoadIC_PushArgs(masm); 672 LoadIC_PushArgs(masm);
673 673
674 // Perform tail call to the entry. 674 // Perform tail call to the entry.
675 __ TailCallRuntime(Runtime::kLoadIC_Miss); 675 __ TailCallRuntime(Runtime::kLoadIC_Miss);
676 } 676 }
677 677
678 678
679 void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, 679 void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm,
680 LanguageMode language_mode) { 680 LanguageMode language_mode) {
681 // Return address is on the stack. 681 // Return address is on the stack.
682 Register receiver = LoadDescriptor::ReceiverRegister(); 682 Register receiver = LoadDescriptor::ReceiverRegister();
683 Register name = LoadDescriptor::NameRegister(); 683 Register name = LoadDescriptor::NameRegister();
684 DCHECK(!ebx.is(receiver) && !ebx.is(name)); 684 DCHECK(!ebx.is(receiver) && !ebx.is(name));
685 685
686 __ pop(ebx); 686 __ pop(ebx);
687 __ push(receiver); 687 __ push(receiver);
688 __ push(name); 688 __ push(name);
689 __ push(ebx); 689 __ push(ebx);
690 690
691 // Do tail-call to runtime routine. 691 // Do tail-call to runtime routine.
692 __ TailCallRuntime(is_strong(language_mode) ? Runtime::kGetPropertyStrong 692 __ TailCallRuntime(is_strong(language_mode) ? Runtime::kGetPropertyStrong
693 : Runtime::kGetProperty); 693 : Runtime::kGetProperty);
694 } 694 }
695 695
696 696
697 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { 697 void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) {
698 // Return address is on the stack. 698 // Return address is on the stack.
699 __ IncrementCounter(masm->isolate()->counters()->keyed_load_miss(), 1); 699 __ IncrementCounter(masm->isolate()->counters()->ic_keyed_load_miss(), 1);
700 700
701 LoadIC_PushArgs(masm); 701 LoadIC_PushArgs(masm);
702 702
703 // Perform tail call to the entry. 703 // Perform tail call to the entry.
704 __ TailCallRuntime(Runtime::kKeyedLoadIC_Miss); 704 __ TailCallRuntime(Runtime::kKeyedLoadIC_Miss);
705 } 705 }
706 706
707 707
708 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, 708 void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm,
709 LanguageMode language_mode) { 709 LanguageMode language_mode) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 __ push(receiver); 770 __ push(receiver);
771 __ push(vector); 771 __ push(vector);
772 __ push(slot); 772 __ push(slot);
773 773
774 Register dictionary = ebx; 774 Register dictionary = ebx;
775 __ mov(dictionary, FieldOperand(receiver, JSObject::kPropertiesOffset)); 775 __ mov(dictionary, FieldOperand(receiver, JSObject::kPropertiesOffset));
776 GenerateDictionaryStore(masm, &restore_miss, dictionary, name, value, 776 GenerateDictionaryStore(masm, &restore_miss, dictionary, name, value,
777 receiver, edi); 777 receiver, edi);
778 __ Drop(3); 778 __ Drop(3);
779 Counters* counters = masm->isolate()->counters(); 779 Counters* counters = masm->isolate()->counters();
780 __ IncrementCounter(counters->store_normal_hit(), 1); 780 __ IncrementCounter(counters->ic_store_normal_hit(), 1);
781 __ ret(0); 781 __ ret(0);
782 782
783 __ bind(&restore_miss); 783 __ bind(&restore_miss);
784 __ pop(slot); 784 __ pop(slot);
785 __ pop(vector); 785 __ pop(vector);
786 __ pop(receiver); 786 __ pop(receiver);
787 __ IncrementCounter(counters->store_normal_miss(), 1); 787 __ IncrementCounter(counters->ic_store_normal_miss(), 1);
788 GenerateMiss(masm); 788 GenerateMiss(masm);
789 } 789 }
790 790
791 791
792 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { 792 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) {
793 // Return address is on the stack. 793 // Return address is on the stack.
794 StoreIC_PushArgs(masm); 794 StoreIC_PushArgs(masm);
795 795
796 // Do tail-call to runtime routine. 796 // Do tail-call to runtime routine.
797 __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss); 797 __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
866 Condition cc = 866 Condition cc =
867 (check == ENABLE_INLINED_SMI_CHECK) 867 (check == ENABLE_INLINED_SMI_CHECK)
868 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero) 868 ? (*jmp_address == Assembler::kJncShortOpcode ? not_zero : zero)
869 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry); 869 : (*jmp_address == Assembler::kJnzShortOpcode ? not_carry : carry);
870 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc); 870 *jmp_address = static_cast<byte>(Assembler::kJccShortPrefix | cc);
871 } 871 }
872 } // namespace internal 872 } // namespace internal
873 } // namespace v8 873 } // namespace v8
874 874
875 #endif // V8_TARGET_ARCH_X87 875 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « src/ic/x87/handler-compiler-x87.cc ('k') | src/log.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698