Home | History | Annotate | Download | only in x64

Lines Matching refs:__

44 #define __ ACCESS_MASM(masm)
52 __ cmpb(type, Immediate(JS_GLOBAL_OBJECT_TYPE));
53 __ j(equal, global_object);
54 __ cmpb(type, Immediate(JS_BUILTINS_OBJECT_TYPE));
55 __ j(equal, global_object);
56 __ cmpb(type, Immediate(JS_GLOBAL_PROXY_TYPE));
57 __ j(equal, global_object);
74 __ JumpIfSmi(receiver, miss);
77 __ movq(r1, FieldOperand(receiver, HeapObject::kMapOffset));
78 __ movb(r0, FieldOperand(r1, Map::kInstanceTypeOffset));
79 __ cmpb(r0, Immediate(FIRST_SPEC_OBJECT_TYPE));
80 __ j(below, miss);
88 __ testb(FieldOperand(r1, Map::kBitFieldOffset),
91 __ j(not_zero, miss);
93 __ movq(r0, FieldOperand(receiver, JSObject::kPropertiesOffset));
94 __ CompareRoot(FieldOperand(r0, HeapObject::kMapOffset),
96 __ j(not_equal, miss);
141 __ bind(&done);
146 __ Test(Operand(elements, r1, times_pointer_size,
149 __ j(not_zero, miss_label);
153 __ movq(result,
199 __ bind(&done);
207 __ Test(Operand(elements,
212 __ j(not_zero, miss_label);
216 __ lea(scratch1, Operand(elements,
220 __ movq(Operand(scratch1, 0), value);
223 __ movq(scratch0, value);
224 __ RecordWrite(elements, scratch1, scratch0, kDontSaveFPRegs);
237 __ bind(&miss);
252 __ bind(&miss);
266 __ bind(&miss);
284 __ JumpIfSmi(receiver, slow);
291 __ CmpObjectType(receiver, JS_OBJECT_TYPE, map);
292 __ j(below, slow);
295 __ testb(FieldOperand(map, Map::kBitFieldOffset),
298 __ j(not_zero, slow);
331 __ movq(elements, FieldOperand(receiver, JSObject::kElementsOffset));
334 __ CompareRoot(FieldOperand(elements, HeapObject::kMapOffset),
336 __ j(not_equal, not_fast_array);
338 __ AssertFastElements(elements);
341 __ SmiCompare(key, FieldOperand(elements, FixedArray::kLengthOffset));
343 __ j(above_equal, out_of_range);
346 __ movq(scratch, FieldOperand(elements,
350 __ CompareRoot(scratch, Heap::kTheHoleValueRootIndex);
353 __ j(equal, out_of_range);
355 __ movq(result, scratch);
373 __ CmpObjectType(key, FIRST_NONSTRING_TYPE, map);
374 __ j(above_equal, not_symbol);
376 __ movl(hash, FieldOperand(key, String::kHashFieldOffset));
377 __ testl(hash, Immediate(String::kContainsCachedArrayIndexMask));
378 __ j(zero, index_string); // The value in hash is used at jump target.
382 __ testb(FieldOperand(map, Map::kInstanceTypeOffset),
384 __ j(zero, not_symbol);
399 __ JumpIfNotSmi(rax, &check_string);
400 __ bind(&index_smi);
408 __ CheckFastElements(rcx, &check_number_dictionary);
419 __ IncrementCounter(counters->keyed_load_generic_smi(), 1);
420 __ ret(0);
422 __ bind(&check_number_dictionary);
423 __ SmiToInteger32(rbx, rax);
424 __ movq(rcx, FieldOperand(rdx, JSObject::kElementsOffset));
431 __ CompareRoot(FieldOperand(rcx, HeapObject::kMapOffset),
433 __ j(not_equal, &slow);
434 __ LoadFromNumberDictionary(&slow, rcx, rax, rbx, r9, rdi, rax);
435 __ ret(0);
437 __ bind(&slow);
441 __ IncrementCounter(counters->keyed_load_generic_slow(), 1);
444 __ bind(&check_string);
452 __ movq(rbx, FieldOperand(rdx, JSObject::kPropertiesOffset));
453 __ CompareRoot(FieldOperand(rbx, HeapObject::kMapOffset),
455 __ j(equal, &probe_dictionary);
459 __ movq(rbx, FieldOperand(rdx, HeapObject::kMapOffset));
460 __ movl(rcx, rbx);
461 __ shr(rcx, Immediate(KeyedLookupCache::kMapHashShift));
462 __ movl(rdi, FieldOperand(rax, String::kHashFieldOffset));
463 __ shr(rdi, Immediate(String::kHashShift));
464 __ xor_(rcx, rdi);
466 __ and_(rcx, Immediate(mask));
478 __ movq(rdi, rcx);
479 __ shl(rdi, Immediate(kPointerSizeLog2 + 1));
480 __ LoadAddress(kScratchRegister, cache_keys);
482 __ cmpq(rbx, Operand(kScratchRegister, rdi, times_1, off));
483 __ j(not_equal, &try_next_entry);
484 __ cmpq(rax, Operand(kScratchRegister, rdi, times_1, off + kPointerSize));
485 __ j(equal, &hit_on_nth_entry[i]);
486 __ bind(&try_next_entry);
490 __ cmpq(rbx, Operand(kScratchRegister, rdi, times_1, off));
491 __ j(not_equal, &slow);
492 __ cmpq(rax, Operand(kScratchRegister, rdi, times_1, off + kPointerSize));
493 __ j(not_equal, &slow);
501 __ bind(&hit_on_nth_entry[i]);
503 __ addl(rcx, Immediate(i));
505 __ LoadAddress(kScratchRegister, cache_field_offsets);
506 __ movl(rdi, Operand(kScratchRegister, rcx, times_4, 0));
507 __ movzxbq(rcx, FieldOperand(rbx, Map::kInObjectPropertiesOffset));
508 __ subq(rdi, rcx);
509 __ j(above_equal, &property_array_property);
511 __ jmp(&load_in_object_property);
516 __ bind(&load_in_object_property);
517 __ movzxbq(rcx, FieldOperand(rbx, Map::kInstanceSizeOffset));
518 __ addq(rcx, rdi);
519 __ movq(rax, FieldOperand(rdx, rcx, times_pointer_size, 0));
520 __ IncrementCounter(counters->keyed_load_generic_lookup_cache(), 1);
521 __ ret(0);
524 __ bind(&property_array_property);
525 __ movq(rax, FieldOperand(rdx, JSObject::kPropertiesOffset));
526 __ movq(rax, FieldOperand(rax, rdi, times_pointer_size,
528 __ IncrementCounter(counters->keyed_load_generic_lookup_cache(), 1);
529 __ ret(0);
533 __ bind(&probe_dictionary);
538 __ movq(rcx, FieldOperand(rdx, JSObject::kMapOffset));
539 __ movb(rcx, FieldOperand(rcx, Map::kInstanceTypeOffset));
543 __ IncrementCounter(counters->keyed_load_generic_symbol(), 1);
544 __ ret(0);
546 __ bind(&index_string);
547 __ IndexFromHash(rbx, rax);
548 __ jmp(&index_smi);
574 __ ret(0);
579 __ bind(&miss);
593 __ JumpIfSmi(rdx, &slow);
597 __ JumpUnlessNonNegativeSmi(rax, &slow);
600 __ movq(rcx, FieldOperand(rdx, HeapObject::kMapOffset));
604 __ movb(rcx, FieldOperand(rcx, Map::kBitFieldOffset));
605 __ andb(rcx, Immediate(kSlowCaseBitFieldMask));
606 __ cmpb(rcx, Immediate(1 << Map::kHasIndexedInterceptor));
607 __ j(not_zero, &slow);
610 __ pop(rcx);
611 __ push(rdx); // receiver
612 __ push(rax); // key
613 __ push(rcx); // return address
616 __ TailCallExternalReference(
622 __ bind(&slow);
642 __ JumpIfSmi(rdx, &slow_with_tagged_index);
644 __ movq(r9, FieldOperand(rdx, HeapObject::kMapOffset));
647 __ testb(FieldOperand(r9, Map::kBitFieldOffset),
649 __ j(not_zero, &slow_with_tagged_index);
651 __ JumpIfNotSmi(rcx, &slow_with_tagged_index);
652 __ SmiToInteger32(rcx, rcx);
654 __ CmpInstanceType(r9, JS_ARRAY_TYPE);
655 __ j(equal, &array);
657 __ CmpInstanceType(r9, FIRST_JS_OBJECT_TYPE);
658 __ j(below, &slow);
664 __ movq(rbx, FieldOperand(rdx, JSObject::kElementsOffset));
666 __ SmiCompareInteger32(FieldOperand(rbx, FixedArray::kLengthOffset), rcx);
670 __ j(above, &fast_object_with_map_check);
673 __ bind(&slow);
674 __ Integer32ToSmi(rcx, rcx);
675 __ bind(&slow_with_tagged_index);
682 __ bind(&extra);
688 __ j(not_equal, &slow); // do not leave holes in the array
689 __ SmiCompareInteger32(FieldOperand(rbx, FixedArray::kLengthOffset), rcx);
690 __ j(below_equal, &slow);
692 __ movq(rdi, FieldOperand(rbx, HeapObject::kMapOffset));
693 __ CompareRoot(rdi, Heap::kFixedArrayMapRootIndex);
694 __ j(not_equal, &check_extra_double);
695 __ leal(rdi, Operand(rcx, 1));
696 __ Integer32ToSmiField(FieldOperand(rdx, JSArray::kLengthOffset), rdi);
697 __ jmp(&fast_object_without_map_check);
699 __ bind(&check_extra_double);
701 __ CompareRoot(rdi, Heap::kFixedDoubleArrayMapRootIndex);
702 __ j(not_equal, &slow);
703 __ leal(rdi, Operand(rcx, 1));
704 __ Integer32ToSmiField(FieldOperand(rdx, JSArray::kLengthOffset), rdi);
705 __ jmp(&fast_double_without_map_check);
710 __ bind(&array);
714 __ movq(rbx, FieldOperand(rdx, JSObject::kElementsOffset));
718 __ SmiCompareInteger32(FieldOperand(rdx, JSArray::kLengthOffset), rcx);
719 __ j(below_equal, &extra);
722 __ bind(&fast_object_with_map_check);
727 __ movq(rdi, FieldOperand(rbx, HeapObject::kMapOffset));
728 __ CompareRoot(rdi, Heap::kFixedArrayMapRootIndex);
729 __ j(not_equal, &fast_double_with_map_check);
730 __ bind(&fast_object_without_map_check);
733 __ JumpIfNotSmi(rax, &non_smi_value);
735 __ movq(FieldOperand(rbx, rcx, times_pointer_size, FixedArray::kHeaderSize),
737 __ ret(0);
739 __ bind(&non_smi_value);
742 __ CheckFastObjectElements(r9, &transition_smi_elements);
743 __ bind(&finish_object_store);
744 __ movq(FieldOperand(rbx, rcx, times_pointer_size, FixedArray::kHeaderSize),
746 __ movq(rdx, rax); // Preserve the value which is returned.
747 __ RecordWriteArray(
749 __ ret(0);
751 __ bind(&fast_double_with_map_check);
755 __ CompareRoot(rdi, Heap::kFixedDoubleArrayMapRootIndex);
756 __ j(not_equal, &slow);
757 __ bind(&fast_double_without_map_check);
760 __ StoreNumberToDoubleElements(rax, rbx, rcx, xmm0,
762 __ ret(0);
764 __ bind(&transition_smi_elements);
765 __ movq(rbx, FieldOperand(rdx, HeapObject::kMapOffset));
768 __ movq(r9, FieldOperand(rax, HeapObject::kMapOffset));
769 __ CompareRoot(r9, Heap::kHeapNumberMapRootIndex);
770 __ j(not_equal, &non_double_value);
774 __ LoadTransitionedArrayMapConditional(FAST_SMI_ONLY_ELEMENTS,
780 __ movq(rbx, FieldOperand(rdx, JSObject::kElementsOffset));
781 __ jmp(&fast_double_without_map_check);
783 __ bind(&non_double_value);
785 __ LoadTransitionedArrayMapConditional(FAST_SMI_ONLY_ELEMENTS,
791 __ movq(rbx, FieldOperand(rdx, JSObject::kElementsOffset));
792 __ jmp(&finish_object_store);
794 __ bind(&transition_double_elements);
798 __ movq(rbx, FieldOperand(rdx, HeapObject::kMapOffset));
799 __ LoadTransitionedArrayMapConditional(FAST_DOUBLE_ELEMENTS,
805 __ movq(rbx, FieldOperand(rdx, JSObject::kElementsOffset));
806 __ jmp(&finish_object_store);
837 __ JumpIfSmi(rdx, &number);
838 __ CmpObjectType(rdx, HEAP_NUMBER_TYPE, rbx);
839 __ j(not_equal, &non_number);
840 __ bind(&number);
843 __ jmp(&probe);
846 __ bind(&non_number);
847 __ CmpInstanceType(rbx, FIRST_NONSTRING_TYPE);
848 __ j(above_equal, &non_string);
851 __ jmp(&probe);
854 __ bind(&non_string);
855 __ CompareRoot(rdx, Heap::kTrueValueRootIndex);
856 __ j(equal, &boolean);
857 __ CompareRoot(rdx, Heap::kFalseValueRootIndex);
858 __ j(not_equal, &miss);
859 __ bind(&boolean);
864 __ bind(&probe);
868 __ bind(&miss);
885 __ JumpIfSmi(rdi, miss);
887 __ CmpObjectType(rdi, JS_FUNCTION_TYPE, rdx);
888 __ j(not_equal, miss);
892 __ InvokeFunction(rdi, actual, JUMP_FUNCTION,
911 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
921 __ bind(&miss);
941 __ IncrementCounter(counters->call_miss(), 1);
943 __ IncrementCounter(counters->keyed_call_miss(), 1);
947 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
954 __ push(rdx);
955 __ push(rcx);
959 __ Set(rax, 2);
960 __ LoadAddress(rbx, ExternalReference(IC_Utility(id), masm->isolate()));
961 __ CallStub(&stub);
964 __ movq(rdi, rax);
971 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize)); // receiver
972 __ JumpIfSmi(rdx, &invoke);
973 __ CmpObjectType(rdx, JS_GLOBAL_OBJECT_TYPE, rcx);
974 __ j(equal, &global);
975 __ CmpInstanceType(rcx, JS_BUILTINS_OBJECT_TYPE);
976 __ j(not_equal, &invoke);
979 __ bind(&global);
980 __ movq(rdx, FieldOperand(rdx, GlobalObject::kGlobalReceiverOffset));
981 __ movq(Operand(rsp, (argc + 1) * kPointerSize), rdx);
982 __ bind(&invoke);
990 __ InvokeFunction(rdi,
1012 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
1030 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
1037 __ JumpIfNotSmi(rcx, &check_string);
1039 __ bind(&index_smi);
1049 __ IncrementCounter(counters->keyed_call_generic_smi_fast(), 1);
1051 __ bind(&do_call);
1057 __ bind(&check_number_dictionary);
1061 __ CompareRoot(FieldOperand(rax, HeapObject::kMapOffset),
1063 __ j(not_equal, &slow_load);
1064 __ SmiToInteger32(rbx, rcx);
1066 __ LoadFromNumberDictionary(&slow_load, rax, rcx, rbx, r9, rdi, rdi);
1067 __ IncrementCounter(counters->keyed_call_generic_smi_dict(), 1);
1068 __ jmp(&do_call);
1070 __ bind(&slow_load);
1073 __ IncrementCounter(counters->keyed_call_generic_slow_load(), 1);
1076 __ push(rcx); // save the key
1077 __ push(rdx); // pass the receiver
1078 __ push(rcx); // pass the key
1079 __ CallRuntime(Runtime::kKeyedGetProperty, 2);
1080 __ pop(rcx); // restore the key
1082 __ movq(rdi, rax);
1083 __ jmp(&do_call);
1085 __ bind(&check_string);
1095 __ movq(rbx, FieldOperand(rdx, JSObject::kPropertiesOffset));
1096 __ CompareRoot(FieldOperand(rbx, HeapObject::kMapOffset),
1098 __ j(not_equal, &lookup_monomorphic_cache);
1101 __ IncrementCounter(counters->keyed_call_generic_lookup_dict(), 1);
1102 __ jmp(&do_call);
1104 __ bind(&lookup_monomorphic_cache);
1105 __ IncrementCounter(counters->keyed_call_generic_lookup_cache(), 1);
1112 __ bind(&slow_call);
1119 __ IncrementCounter(counters->keyed_call_generic_slow(), 1);
1122 __ bind(&index_string);
1123 __ IndexFromHash(rbx, rcx);
1125 __ jmp(&index_smi);
1142 __ JumpIfSmi(rcx, &miss);
1144 __ j(NegateCondition(cond), &miss);
1146 __ bind(&miss);
1164 __ JumpIfSmi(object, slow_case);
1166 __ CmpObjectType(object, FIRST_JS_RECEIVER_TYPE, scratch1);
1167 __ j(below, slow_case);
1171 __ j(NegateCondition(check), slow_case);
1176 __ movq(scratch1, FieldOperand(object, JSObject::kElementsOffset));
1177 __ CheckMap(scratch1, arguments_map, slow_case, DONT_DO_SMI_CHECK);
1180 __ movq(scratch2, FieldOperand(scratch1, FixedArray::kLengthOffset));
1181 __ SmiSubConstant(scratch2, scratch2, Smi::FromInt(2));
1182 __ cmpq(key, scratch2);
1183 __ j(greater_equal, unmapped_case);
1187 __ SmiToInteger64(scratch3, key);
1188 __ movq(scratch2, FieldOperand(scratch1,
1192 __ CompareRoot(scratch2, Heap::kTheHoleValueRootIndex);
1193 __ j(equal, unmapped_case);
1198 __ movq(scratch1, FieldOperand(scratch1, FixedArray::kHeaderSize));
1199 __ SmiToInteger64(scratch3, scratch2);
1218 __ movq(backing_store, FieldOperand(parameter_map, kBackingStoreOffset));
1220 __ CheckMap(backing_store, fixed_array_map, slow_case, DONT_DO_SMI_CHECK);
1221 __ movq(scratch, FieldOperand(backing_store, FixedArray::kLengthOffset));
1222 __ cmpq(key, scratch);
1223 __ j(greater_equal, slow_case);
1224 __ SmiToInteger64(scratch, key);
1242 __ movq(rax, mapped_location);
1243 __ Ret();
1244 __ bind(&notin);
1248 __ CompareRoot(unmapped_location, Heap::kTheHoleValueRootIndex);
1249 __ j(equal, &slow);
1250 __ movq(rax, unmapped_location);
1251 __ Ret();
1252 __ bind(&slow);
1267 __ movq(mapped_location, rax);
1268 __ lea(r9, mapped_location);
1269 __ movq(r8, rax);
1270 __ RecordWrite(rbx,
1276 __ Ret();
1277 __ bind(&notin);
1281 __ movq(unmapped_location, rax);
1282 __ lea(r9, unmapped_location);
1283 __ movq(r8, rax);
1284 __ RecordWrite(rbx,
1290 __ Ret();
1291 __ bind(&slow);
1308 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
1311 __ movq(rdi, mapped_location);
1313 __ bind(&notin);
1317 __ CompareRoot(unmapped_location, Heap::kTheHoleValueRootIndex);
1318 __ j(equal, &slow);
1319 __ movq(rdi, unmapped_location);
1321 __ bind(&slow);
1356 __ ret(0);
1359 __ bind(&miss);
1372 __ IncrementCounter(counters->load_miss(), 1);
1374 __ pop(rbx);
1375 __ push(rax); // receiver
1376 __ push(rcx); // name
1377 __ push(rbx); // return address
1382 __ TailCallExternalReference(ref, 2, 1);
1394 __ IncrementCounter(counters->keyed_load_miss(), 1);
1396 __ pop(rbx);
1397 __ push(rdx); // receiver
1398 __ push(rax); // name
1399 __ push(rbx); // return address
1406 __ TailCallExternalReference(ref, 2, 1);
1417 __ pop(rbx);
1418 __ push(rdx); // receiver
1419 __ push(rax); // name
1420 __ push(rbx); // return address
1423 __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1);
1455 __ pop(rbx);
1456 __ push(rdx); // receiver
1457 __ push(rcx); // name
1458 __ push(rax); // value
1459 __ push(rbx); // return address
1464 __ TailCallExternalReference(ref, 3, 1);
1488 __ JumpIfSmi(receiver, &miss);
1491 __ CmpObjectType(receiver, JS_ARRAY_TYPE, scratch);
1492 __ j(not_equal, &miss);
1497 __ movq(scratch, FieldOperand(receiver, JSArray::kElementsOffset));
1498 __ CmpObjectType(scratch, FIXED_ARRAY_TYPE, scratch);
1499 __ j(not_equal, &miss);
1503 __ movq(scratch, FieldOperand(receiver, JSArray::kPropertiesOffset));
1504 __ CompareRoot(FieldOperand(scratch, FixedArray::kMapOffset),
1506 __ j(equal, &miss);
1509 __ JumpIfNotSmi(value, &miss);
1512 __ pop(scratch);
1513 __ push(receiver);
1514 __ push(value);
1515 __ push(scratch); // return address
1519 __ TailCallExternalReference(ref, 2, 1);
1521 __ bind(&miss);
1541 __ IncrementCounter(counters->store_normal_hit(), 1);
1542 __ ret(0);
1544 __ bind(&miss);
1545 __ IncrementCounter(counters->store_normal_miss(), 1);
1558 __ pop(rbx);
1559 __ push(rdx);
1560 __ push(rcx);
1561 __ push(rax);
1562 __ Push(Smi::FromInt(NONE)); // PropertyAttributes
1563 __ Push(Smi::FromInt(strict_mode));
1564 __ push(rbx); // return address
1567 __ TailCallRuntime(Runtime::kSetProperty, 5, 1);
1580 __ pop(rbx);
1581 __ push(rdx); // receiver
1582 __ push(rcx); // key
1583 __ push(rax); // value
1584 __ Push(Smi::FromInt(NONE)); // PropertyAttributes
1585 __ Push(Smi::FromInt(strict_mode)); // Strict mode.
1586 __ push(rbx); // return address
1589 __ TailCallRuntime(Runtime::kSetProperty, 5, 1);
1601 __ pop(rbx);
1602 __ push(rdx); // receiver
1603 __ push(rcx); // key
1604 __ push(rax); // value
1605 __ push(rbx); // return address
1609 __ TailCallExternalReference(ref, 3, 1);
1621 __ pop(rbx);
1622 __ push(rdx); // receiver
1623 __ push(rcx); // key
1624 __ push(rax); // value
1625 __ push(rbx); // return address
1632 __ TailCallExternalReference(ref, 3, 1);
1646 __ movq(rax, rdx);
1647 __ Ret();
1648 __ bind(&fail);
1651 __ pop(rbx);
1652 __ push(rdx);
1653 __ push(rbx); // return address
1654 __ TailCallRuntime(Runtime::kTransitionElementsSmiToDouble, 1, 1);
1669 __ movq(rax, rdx);
1670 __ Ret();
1671 __ bind(&fail);
1674 __ pop(rbx);
1675 __ push(rdx);
1676 __ push(rbx); // return address
1677 __ TailCallRuntime(Runtime::kTransitionElementsDoubleToObject, 1, 1);
1681 #undef __