• Home
  • Raw
  • Download

Lines Matching full:__

16 #define __ ACCESS_MASM(masm)  macro
30 __ AssertFunction(edi); in Generate_Adaptor()
36 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_Adaptor()
41 __ add(eax, Immediate(num_extra_args + 1)); in Generate_Adaptor()
44 __ PopReturnAddressTo(ecx); in Generate_Adaptor()
45 __ SmiTag(eax); in Generate_Adaptor()
46 __ Push(eax); in Generate_Adaptor()
47 __ SmiUntag(eax); in Generate_Adaptor()
48 __ Push(edi); in Generate_Adaptor()
49 __ Push(edx); in Generate_Adaptor()
50 __ PushReturnAddressFrom(ecx); in Generate_Adaptor()
52 __ JumpToExternalReference(ExternalReference(address, masm->isolate()), in Generate_Adaptor()
66 __ SmiTag(eax); in GenerateTailCallToReturnedCode()
67 __ push(eax); in GenerateTailCallToReturnedCode()
69 __ push(edi); in GenerateTailCallToReturnedCode()
70 __ push(edx); in GenerateTailCallToReturnedCode()
72 __ push(edi); in GenerateTailCallToReturnedCode()
74 __ CallRuntime(function_id, 1); in GenerateTailCallToReturnedCode()
75 __ mov(ebx, eax); in GenerateTailCallToReturnedCode()
78 __ pop(edx); in GenerateTailCallToReturnedCode()
79 __ pop(edi); in GenerateTailCallToReturnedCode()
80 __ pop(eax); in GenerateTailCallToReturnedCode()
81 __ SmiUntag(eax); in GenerateTailCallToReturnedCode()
84 __ lea(ebx, FieldOperand(ebx, Code::kHeaderSize)); in GenerateTailCallToReturnedCode()
85 __ jmp(ebx); in GenerateTailCallToReturnedCode()
89 __ mov(ebx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in GenerateTailCallToSharedCode()
90 __ mov(ebx, FieldOperand(ebx, SharedFunctionInfo::kCodeOffset)); in GenerateTailCallToSharedCode()
91 __ lea(ebx, FieldOperand(ebx, Code::kHeaderSize)); in GenerateTailCallToSharedCode()
92 __ jmp(ebx); in GenerateTailCallToSharedCode()
104 __ cmp(esp, Operand::StaticVariable(stack_limit)); in Generate_InOptimizationQueue()
105 __ j(above_equal, &ok, Label::kNear); in Generate_InOptimizationQueue()
109 __ bind(&ok); in Generate_InOptimizationQueue()
132 __ SmiTag(eax); in Generate_JSConstructStubHelper()
133 __ push(esi); in Generate_JSConstructStubHelper()
134 __ push(eax); in Generate_JSConstructStubHelper()
138 __ Push(edi); in Generate_JSConstructStubHelper()
139 __ Push(edx); in Generate_JSConstructStubHelper()
140 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), in Generate_JSConstructStubHelper()
142 __ mov(ebx, eax); in Generate_JSConstructStubHelper()
143 __ Pop(edx); in Generate_JSConstructStubHelper()
144 __ Pop(edi); in Generate_JSConstructStubHelper()
153 __ mov(eax, Operand(esp, 0)); in Generate_JSConstructStubHelper()
156 __ SmiUntag(eax); in Generate_JSConstructStubHelper()
162 __ push(ebx); in Generate_JSConstructStubHelper()
163 __ push(ebx); in Generate_JSConstructStubHelper()
165 __ PushRoot(Heap::kTheHoleValueRootIndex); in Generate_JSConstructStubHelper()
169 __ bind(&post_instantiation_deopt_entry); in Generate_JSConstructStubHelper()
172 __ lea(ebx, Operand(ebp, StandardFrameConstants::kCallerSPOffset)); in Generate_JSConstructStubHelper()
176 __ mov(ecx, eax); in Generate_JSConstructStubHelper()
177 __ jmp(&entry); in Generate_JSConstructStubHelper()
178 __ bind(&loop); in Generate_JSConstructStubHelper()
179 __ push(Operand(ebx, ecx, times_4, 0)); in Generate_JSConstructStubHelper()
180 __ bind(&entry); in Generate_JSConstructStubHelper()
181 __ dec(ecx); in Generate_JSConstructStubHelper()
182 __ j(greater_equal, &loop); in Generate_JSConstructStubHelper()
186 __ InvokeFunction(edi, edx, actual, CALL_FUNCTION, in Generate_JSConstructStubHelper()
196 __ mov(esi, Operand(ebp, ConstructFrameConstants::kContextOffset)); in Generate_JSConstructStubHelper()
204 __ JumpIfSmi(eax, &use_receiver, Label::kNear); in Generate_JSConstructStubHelper()
208 __ CmpObjectType(eax, FIRST_JS_RECEIVER_TYPE, ecx); in Generate_JSConstructStubHelper()
209 __ j(above_equal, &exit, Label::kNear); in Generate_JSConstructStubHelper()
213 __ bind(&use_receiver); in Generate_JSConstructStubHelper()
214 __ mov(eax, Operand(esp, 0)); in Generate_JSConstructStubHelper()
218 __ bind(&exit); in Generate_JSConstructStubHelper()
219 __ mov(ebx, Operand(esp, 1 * kPointerSize)); in Generate_JSConstructStubHelper()
221 __ mov(ebx, Operand(esp, 0)); in Generate_JSConstructStubHelper()
232 __ JumpIfNotSmi(eax, &dont_throw); in Generate_JSConstructStubHelper()
235 __ CallRuntime(Runtime::kThrowDerivedConstructorReturnedNonObject); in Generate_JSConstructStubHelper()
237 __ bind(&dont_throw); in Generate_JSConstructStubHelper()
242 __ pop(ecx); in Generate_JSConstructStubHelper()
243 __ lea(esp, Operand(esp, ebx, times_2, 1 * kPointerSize)); // 1 ~ receiver in Generate_JSConstructStubHelper()
244 __ push(ecx); in Generate_JSConstructStubHelper()
246 __ IncrementCounter(masm->isolate()->counters()->constructed_objects(), 1); in Generate_JSConstructStubHelper()
248 __ ret(0); in Generate_JSConstructStubHelper()
262 __ pop(edi); in Generate_JSConstructStubHelper()
263 __ push(eax); in Generate_JSConstructStubHelper()
264 __ push(eax); in Generate_JSConstructStubHelper()
267 __ mov(eax, Operand(ebp, ConstructFrameConstants::kLengthOffset)); in Generate_JSConstructStubHelper()
268 __ SmiUntag(eax); in Generate_JSConstructStubHelper()
272 __ mov(edx, Operand(ebp, eax, times_pointer_size, in Generate_JSConstructStubHelper()
276 __ jmp(&post_instantiation_deopt_entry); in Generate_JSConstructStubHelper()
301 __ push(edi); in Generate_ConstructedNonConstructable()
302 __ CallRuntime(Runtime::kThrowConstructedNonConstructable); in Generate_ConstructedNonConstructable()
318 __ mov(edi, Operand::StaticVariable(real_stack_limit)); in Generate_CheckStackOverflow()
321 __ mov(ecx, esp); in Generate_CheckStackOverflow()
322 __ sub(ecx, edi); in Generate_CheckStackOverflow()
325 __ mov(edx, eax); in Generate_CheckStackOverflow()
327 __ shl(edx, kPointerSizeLog2 - smi_tag); in Generate_CheckStackOverflow()
329 __ cmp(ecx, edx); in Generate_CheckStackOverflow()
330 __ j(greater, &okay); // Signed comparison. in Generate_CheckStackOverflow()
333 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_CheckStackOverflow()
335 __ bind(&okay); in Generate_CheckStackOverflow()
348 __ mov(esi, Operand::StaticVariable(context_address)); in Generate_JSEntryTrampolineHelper()
351 __ mov(ebx, Operand(ebp, 0)); in Generate_JSEntryTrampolineHelper()
354 __ push(Operand(ebx, EntryFrameConstants::kFunctionArgOffset)); in Generate_JSEntryTrampolineHelper()
355 __ push(Operand(ebx, EntryFrameConstants::kReceiverArgOffset)); in Generate_JSEntryTrampolineHelper()
358 __ mov(eax, Operand(ebx, EntryFrameConstants::kArgcOffset)); in Generate_JSEntryTrampolineHelper()
359 __ mov(ebx, Operand(ebx, EntryFrameConstants::kArgvOffset)); in Generate_JSEntryTrampolineHelper()
367 __ Move(ecx, Immediate(0)); in Generate_JSEntryTrampolineHelper()
368 __ jmp(&entry, Label::kNear); in Generate_JSEntryTrampolineHelper()
369 __ bind(&loop); in Generate_JSEntryTrampolineHelper()
370 __ mov(edx, Operand(ebx, ecx, times_4, 0)); // push parameter from argv in Generate_JSEntryTrampolineHelper()
371 __ push(Operand(edx, 0)); // dereference handle in Generate_JSEntryTrampolineHelper()
372 __ inc(ecx); in Generate_JSEntryTrampolineHelper()
373 __ bind(&entry); in Generate_JSEntryTrampolineHelper()
374 __ cmp(ecx, eax); in Generate_JSEntryTrampolineHelper()
375 __ j(not_equal, &loop); in Generate_JSEntryTrampolineHelper()
378 __ mov(ebx, Operand(ebp, 0)); in Generate_JSEntryTrampolineHelper()
381 __ mov(edx, Operand(ebx, EntryFrameConstants::kNewTargetArgOffset)); in Generate_JSEntryTrampolineHelper()
382 __ mov(edi, Operand(ebx, EntryFrameConstants::kFunctionArgOffset)); in Generate_JSEntryTrampolineHelper()
388 __ Call(builtin, RelocInfo::CODE_TARGET); in Generate_JSEntryTrampolineHelper()
394 __ ret(kPointerSize); // Remove receiver. in Generate_JSEntryTrampolineHelper()
413 __ AssertGeneratorObject(ebx); in Generate_ResumeGeneratorTrampoline()
416 __ mov(FieldOperand(ebx, JSGeneratorObject::kInputOrDebugPosOffset), eax); in Generate_ResumeGeneratorTrampoline()
417 __ RecordWriteField(ebx, JSGeneratorObject::kInputOrDebugPosOffset, eax, ecx, in Generate_ResumeGeneratorTrampoline()
421 __ mov(FieldOperand(ebx, JSGeneratorObject::kResumeModeOffset), edx); in Generate_ResumeGeneratorTrampoline()
424 __ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset)); in Generate_ResumeGeneratorTrampoline()
425 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_ResumeGeneratorTrampoline()
432 __ cmpb(Operand::StaticVariable(debug_hook), Immediate(0)); in Generate_ResumeGeneratorTrampoline()
433 __ j(not_equal, &prepare_step_in_if_stepping); in Generate_ResumeGeneratorTrampoline()
438 __ cmp(ebx, Operand::StaticVariable(debug_suspended_generator)); in Generate_ResumeGeneratorTrampoline()
439 __ j(equal, &prepare_step_in_suspended_generator); in Generate_ResumeGeneratorTrampoline()
440 __ bind(&stepping_prepared); in Generate_ResumeGeneratorTrampoline()
443 __ PopReturnAddressTo(eax); in Generate_ResumeGeneratorTrampoline()
446 __ Push(FieldOperand(ebx, JSGeneratorObject::kReceiverOffset)); in Generate_ResumeGeneratorTrampoline()
461 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ResumeGeneratorTrampoline()
462 __ mov(ecx, in Generate_ResumeGeneratorTrampoline()
466 __ bind(&loop); in Generate_ResumeGeneratorTrampoline()
467 __ sub(ecx, Immediate(Smi::FromInt(1))); in Generate_ResumeGeneratorTrampoline()
468 __ j(carry, &done_loop, Label::kNear); in Generate_ResumeGeneratorTrampoline()
469 __ PushRoot(Heap::kTheHoleValueRootIndex); in Generate_ResumeGeneratorTrampoline()
470 __ jmp(&loop); in Generate_ResumeGeneratorTrampoline()
471 __ bind(&done_loop); in Generate_ResumeGeneratorTrampoline()
476 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ResumeGeneratorTrampoline()
477 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kFunctionDataOffset)); in Generate_ResumeGeneratorTrampoline()
478 __ CmpObjectType(ecx, BYTECODE_ARRAY_TYPE, ecx); in Generate_ResumeGeneratorTrampoline()
479 __ Assert(equal, kMissingBytecodeArray); in Generate_ResumeGeneratorTrampoline()
484 __ PushReturnAddressFrom(eax); in Generate_ResumeGeneratorTrampoline()
485 __ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ResumeGeneratorTrampoline()
486 __ mov(eax, in Generate_ResumeGeneratorTrampoline()
491 __ mov(edx, ebx); in Generate_ResumeGeneratorTrampoline()
492 __ jmp(FieldOperand(edi, JSFunction::kCodeEntryOffset)); in Generate_ResumeGeneratorTrampoline()
495 __ bind(&prepare_step_in_if_stepping); in Generate_ResumeGeneratorTrampoline()
498 __ Push(ebx); in Generate_ResumeGeneratorTrampoline()
499 __ Push(edx); in Generate_ResumeGeneratorTrampoline()
500 __ Push(edi); in Generate_ResumeGeneratorTrampoline()
501 __ CallRuntime(Runtime::kDebugOnFunctionCall); in Generate_ResumeGeneratorTrampoline()
502 __ Pop(edx); in Generate_ResumeGeneratorTrampoline()
503 __ Pop(ebx); in Generate_ResumeGeneratorTrampoline()
504 __ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset)); in Generate_ResumeGeneratorTrampoline()
506 __ jmp(&stepping_prepared); in Generate_ResumeGeneratorTrampoline()
508 __ bind(&prepare_step_in_suspended_generator); in Generate_ResumeGeneratorTrampoline()
511 __ Push(ebx); in Generate_ResumeGeneratorTrampoline()
512 __ Push(edx); in Generate_ResumeGeneratorTrampoline()
513 __ CallRuntime(Runtime::kDebugPrepareStepInSuspendedGenerator); in Generate_ResumeGeneratorTrampoline()
514 __ Pop(edx); in Generate_ResumeGeneratorTrampoline()
515 __ Pop(ebx); in Generate_ResumeGeneratorTrampoline()
516 __ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset)); in Generate_ResumeGeneratorTrampoline()
518 __ jmp(&stepping_prepared); in Generate_ResumeGeneratorTrampoline()
527 __ mov(args_count, in LeaveInterpreterFrame()
529 __ mov(args_count, in LeaveInterpreterFrame()
533 __ leave(); in LeaveInterpreterFrame()
536 __ pop(return_pc); in LeaveInterpreterFrame()
537 __ add(esp, args_count); in LeaveInterpreterFrame()
538 __ push(return_pc); in LeaveInterpreterFrame()
562 __ push(ebp); // Caller's frame pointer. in Generate_InterpreterEntryTrampoline()
563 __ mov(ebp, esp); in Generate_InterpreterEntryTrampoline()
564 __ push(esi); // Callee's context. in Generate_InterpreterEntryTrampoline()
565 __ push(edi); // Callee's JS function. in Generate_InterpreterEntryTrampoline()
566 __ push(edx); // Callee's new target. in Generate_InterpreterEntryTrampoline()
570 __ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_InterpreterEntryTrampoline()
572 __ JumpIfNotSmi(FieldOperand(eax, SharedFunctionInfo::kDebugInfoOffset), in Generate_InterpreterEntryTrampoline()
574 __ mov(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
576 __ bind(&bytecode_array_loaded); in Generate_InterpreterEntryTrampoline()
580 __ Move(ecx, masm->CodeObject()); // Self-reference to this code. in Generate_InterpreterEntryTrampoline()
581 __ cmp(ecx, FieldOperand(eax, SharedFunctionInfo::kCodeOffset)); in Generate_InterpreterEntryTrampoline()
582 __ j(not_equal, &switch_to_different_code_kind); in Generate_InterpreterEntryTrampoline()
585 __ EmitLoadFeedbackVector(ecx); in Generate_InterpreterEntryTrampoline()
586 __ add( in Generate_InterpreterEntryTrampoline()
593 __ AssertNotSmi(kInterpreterBytecodeArrayRegister); in Generate_InterpreterEntryTrampoline()
594 __ CmpObjectType(kInterpreterBytecodeArrayRegister, BYTECODE_ARRAY_TYPE, in Generate_InterpreterEntryTrampoline()
596 __ Assert(equal, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry); in Generate_InterpreterEntryTrampoline()
600 __ mov_b(FieldOperand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
605 __ push(kInterpreterBytecodeArrayRegister); in Generate_InterpreterEntryTrampoline()
607 __ push(Immediate(Smi::FromInt(BytecodeArray::kHeaderSize - kHeapObjectTag))); in Generate_InterpreterEntryTrampoline()
612 __ mov(ebx, FieldOperand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
617 __ mov(ecx, esp); in Generate_InterpreterEntryTrampoline()
618 __ sub(ecx, ebx); in Generate_InterpreterEntryTrampoline()
621 __ cmp(ecx, Operand::StaticVariable(stack_limit)); in Generate_InterpreterEntryTrampoline()
622 __ j(above_equal, &ok); in Generate_InterpreterEntryTrampoline()
623 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterEntryTrampoline()
624 __ bind(&ok); in Generate_InterpreterEntryTrampoline()
629 __ mov(eax, Immediate(masm->isolate()->factory()->undefined_value())); in Generate_InterpreterEntryTrampoline()
630 __ jmp(&loop_check); in Generate_InterpreterEntryTrampoline()
631 __ bind(&loop_header); in Generate_InterpreterEntryTrampoline()
633 __ push(eax); in Generate_InterpreterEntryTrampoline()
635 __ bind(&loop_check); in Generate_InterpreterEntryTrampoline()
636 __ sub(ebx, Immediate(kPointerSize)); in Generate_InterpreterEntryTrampoline()
637 __ j(greater_equal, &loop_header); in Generate_InterpreterEntryTrampoline()
641 __ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex); in Generate_InterpreterEntryTrampoline()
642 __ mov(kInterpreterBytecodeOffsetRegister, in Generate_InterpreterEntryTrampoline()
644 __ mov(kInterpreterDispatchTableRegister, in Generate_InterpreterEntryTrampoline()
649 __ movzx_b(ebx, Operand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
651 __ mov(ebx, Operand(kInterpreterDispatchTableRegister, ebx, in Generate_InterpreterEntryTrampoline()
653 __ call(ebx); in Generate_InterpreterEntryTrampoline()
658 __ ret(0); in Generate_InterpreterEntryTrampoline()
661 __ bind(&load_debug_bytecode_array); in Generate_InterpreterEntryTrampoline()
663 __ mov(debug_info, FieldOperand(eax, SharedFunctionInfo::kDebugInfoOffset)); in Generate_InterpreterEntryTrampoline()
664 __ mov(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
666 __ jmp(&bytecode_array_loaded); in Generate_InterpreterEntryTrampoline()
671 __ bind(&switch_to_different_code_kind); in Generate_InterpreterEntryTrampoline()
672 __ pop(edx); // Callee's new target. in Generate_InterpreterEntryTrampoline()
673 __ pop(edi); // Callee's JS function. in Generate_InterpreterEntryTrampoline()
674 __ pop(esi); // Callee's context. in Generate_InterpreterEntryTrampoline()
675 __ leave(); // Leave the frame so we can tail call. in Generate_InterpreterEntryTrampoline()
676 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_InterpreterEntryTrampoline()
677 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kCodeOffset)); in Generate_InterpreterEntryTrampoline()
678 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_InterpreterEntryTrampoline()
679 __ mov(FieldOperand(edi, JSFunction::kCodeEntryOffset), ecx); in Generate_InterpreterEntryTrampoline()
680 __ RecordWriteCodeEntryField(edi, ecx, ebx); in Generate_InterpreterEntryTrampoline()
681 __ jmp(ecx); in Generate_InterpreterEntryTrampoline()
693 __ mov(scratch1, Operand::StaticVariable(real_stack_limit)); in Generate_StackOverflowCheck()
696 __ mov(scratch2, esp); in Generate_StackOverflowCheck()
697 __ sub(scratch2, scratch1); in Generate_StackOverflowCheck()
700 __ mov(scratch1, num_args); in Generate_StackOverflowCheck()
702 __ add(scratch1, Immediate(1)); in Generate_StackOverflowCheck()
704 __ shl(scratch1, kPointerSizeLog2); in Generate_StackOverflowCheck()
706 __ cmp(scratch2, scratch1); in Generate_StackOverflowCheck()
707 __ j(less_equal, stack_overflow); // Signed comparison. in Generate_StackOverflowCheck()
719 __ jmp(&loop_check); in Generate_InterpreterPushArgs()
720 __ bind(&loop_header); in Generate_InterpreterPushArgs()
721 __ Push(Operand(start_address, 0)); in Generate_InterpreterPushArgs()
722 __ sub(start_address, Immediate(kPointerSize)); in Generate_InterpreterPushArgs()
723 __ bind(&loop_check); in Generate_InterpreterPushArgs()
724 __ cmp(start_address, array_limit); in Generate_InterpreterPushArgs()
725 __ j(greater, &loop_header, Label::kNear); in Generate_InterpreterPushArgs()
741 __ mov(ecx, eax); in Generate_InterpreterPushArgsAndCallImpl()
742 __ add(ecx, Immediate(1)); // Add one for receiver. in Generate_InterpreterPushArgsAndCallImpl()
747 __ Push(edi); in Generate_InterpreterPushArgsAndCallImpl()
749 __ Pop(edi); in Generate_InterpreterPushArgsAndCallImpl()
752 __ Pop(edx); in Generate_InterpreterPushArgsAndCallImpl()
755 __ shl(ecx, kPointerSizeLog2); in Generate_InterpreterPushArgsAndCallImpl()
756 __ neg(ecx); in Generate_InterpreterPushArgsAndCallImpl()
757 __ add(ecx, ebx); in Generate_InterpreterPushArgsAndCallImpl()
761 __ Push(edx); // Re-push return address. in Generate_InterpreterPushArgsAndCallImpl()
764 __ Jump(masm->isolate()->builtins()->CallFunction(ConvertReceiverMode::kAny, in Generate_InterpreterPushArgsAndCallImpl()
768 __ Jump(masm->isolate()->builtins()->CallWithSpread(), in Generate_InterpreterPushArgsAndCallImpl()
771 __ Jump(masm->isolate()->builtins()->Call(ConvertReceiverMode::kAny, in Generate_InterpreterPushArgsAndCallImpl()
776 __ bind(&stack_overflow); in Generate_InterpreterPushArgsAndCallImpl()
779 __ Pop(edi); in Generate_InterpreterPushArgsAndCallImpl()
781 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterPushArgsAndCallImpl()
784 __ int3(); in Generate_InterpreterPushArgsAndCallImpl()
829 __ bind(&check_offset); in Generate_InterpreterPushArgsAndReturnAddress()
830 __ cmp(scratch1, page_size); in Generate_InterpreterPushArgsAndReturnAddress()
831 __ j(less, &update_stack_pointer); in Generate_InterpreterPushArgsAndReturnAddress()
832 __ sub(esp, Immediate(page_size)); in Generate_InterpreterPushArgsAndReturnAddress()
834 __ mov(Operand(esp, 0), Immediate(0)); in Generate_InterpreterPushArgsAndReturnAddress()
835 __ sub(scratch1, Immediate(page_size)); in Generate_InterpreterPushArgsAndReturnAddress()
836 __ jmp(&check_offset); in Generate_InterpreterPushArgsAndReturnAddress()
837 __ bind(&update_stack_pointer); in Generate_InterpreterPushArgsAndReturnAddress()
840 __ sub(esp, scratch1); in Generate_InterpreterPushArgsAndReturnAddress()
847 __ mov(scratch1, in Generate_InterpreterPushArgsAndReturnAddress()
849 __ mov(Operand(esp, i * kPointerSize), scratch1); in Generate_InterpreterPushArgsAndReturnAddress()
854 __ mov(scratch1, num_args); in Generate_InterpreterPushArgsAndReturnAddress()
855 __ add(scratch1, Immediate(1)); in Generate_InterpreterPushArgsAndReturnAddress()
859 __ mov(Operand(esp, num_args, times_pointer_size, in Generate_InterpreterPushArgsAndReturnAddress()
862 __ mov(scratch1, num_args); in Generate_InterpreterPushArgsAndReturnAddress()
866 __ jmp(&loop_check); in Generate_InterpreterPushArgsAndReturnAddress()
867 __ bind(&loop_header); in Generate_InterpreterPushArgsAndReturnAddress()
868 __ mov(scratch2, Operand(start_addr, 0)); in Generate_InterpreterPushArgsAndReturnAddress()
869 __ mov(Operand(esp, scratch1, times_pointer_size, in Generate_InterpreterPushArgsAndReturnAddress()
872 __ sub(start_addr, Immediate(kPointerSize)); in Generate_InterpreterPushArgsAndReturnAddress()
873 __ sub(scratch1, Immediate(1)); in Generate_InterpreterPushArgsAndReturnAddress()
874 __ bind(&loop_check); in Generate_InterpreterPushArgsAndReturnAddress()
875 __ cmp(scratch1, Immediate(0)); in Generate_InterpreterPushArgsAndReturnAddress()
876 __ j(greater, &loop_header, Label::kNear); in Generate_InterpreterPushArgsAndReturnAddress()
895 __ Push(edi); in Generate_InterpreterPushArgsAndConstructImpl()
896 __ Push(edx); in Generate_InterpreterPushArgsAndConstructImpl()
905 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructImpl()
906 __ Pop(edi); in Generate_InterpreterPushArgsAndConstructImpl()
908 __ AssertUndefinedOrAllocationSite(ebx); in Generate_InterpreterPushArgsAndConstructImpl()
912 __ AssertFunction(edi); in Generate_InterpreterPushArgsAndConstructImpl()
914 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_InterpreterPushArgsAndConstructImpl()
915 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kConstructStubOffset)); in Generate_InterpreterPushArgsAndConstructImpl()
916 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_InterpreterPushArgsAndConstructImpl()
917 __ jmp(ecx); in Generate_InterpreterPushArgsAndConstructImpl()
920 __ Jump(masm->isolate()->builtins()->ConstructWithSpread(), in Generate_InterpreterPushArgsAndConstructImpl()
925 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); in Generate_InterpreterPushArgsAndConstructImpl()
928 __ bind(&stack_overflow); in Generate_InterpreterPushArgsAndConstructImpl()
931 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructImpl()
932 __ Pop(edi); in Generate_InterpreterPushArgsAndConstructImpl()
934 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterPushArgsAndConstructImpl()
937 __ int3(); in Generate_InterpreterPushArgsAndConstructImpl()
955 __ Push(edx); in Generate_InterpreterPushArgsAndConstructArray()
964 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructArray()
967 __ Move(edi, edx); in Generate_InterpreterPushArgsAndConstructArray()
970 __ TailCallStub(&stub); in Generate_InterpreterPushArgsAndConstructArray()
972 __ bind(&stack_overflow); in Generate_InterpreterPushArgsAndConstructArray()
975 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructArray()
977 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterPushArgsAndConstructArray()
980 __ int3(); in Generate_InterpreterPushArgsAndConstructArray()
990 __ LoadHeapObject(ebx, in Generate_InterpreterEnterBytecode()
992 __ add(ebx, Immediate(interpreter_entry_return_pc_offset->value() + in Generate_InterpreterEnterBytecode()
994 __ push(ebx); in Generate_InterpreterEnterBytecode()
997 __ mov(kInterpreterDispatchTableRegister, in Generate_InterpreterEnterBytecode()
1002 __ mov(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEnterBytecode()
1007 __ AssertNotSmi(kInterpreterBytecodeArrayRegister); in Generate_InterpreterEnterBytecode()
1008 __ CmpObjectType(kInterpreterBytecodeArrayRegister, BYTECODE_ARRAY_TYPE, in Generate_InterpreterEnterBytecode()
1010 __ Assert(equal, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry); in Generate_InterpreterEnterBytecode()
1014 __ mov(kInterpreterBytecodeOffsetRegister, in Generate_InterpreterEnterBytecode()
1016 __ SmiUntag(kInterpreterBytecodeOffsetRegister); in Generate_InterpreterEnterBytecode()
1019 __ movzx_b(ebx, Operand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEnterBytecode()
1021 __ mov(ebx, Operand(kInterpreterDispatchTableRegister, ebx, in Generate_InterpreterEnterBytecode()
1023 __ jmp(ebx); in Generate_InterpreterEnterBytecode()
1030 __ mov(ebx, Operand(ebp, InterpreterFrameConstants::kBytecodeArrayFromFp)); in Generate_InterpreterEnterBytecodeAdvance()
1031 __ mov(edx, Operand(ebp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); in Generate_InterpreterEnterBytecodeAdvance()
1032 __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); in Generate_InterpreterEnterBytecodeAdvance()
1035 __ Push(kInterpreterAccumulatorRegister); in Generate_InterpreterEnterBytecodeAdvance()
1036 __ Push(ebx); // First argument is the bytecode array. in Generate_InterpreterEnterBytecodeAdvance()
1037 __ Push(edx); // Second argument is the bytecode offset. in Generate_InterpreterEnterBytecodeAdvance()
1038 __ CallRuntime(Runtime::kInterpreterAdvanceBytecodeOffset); in Generate_InterpreterEnterBytecodeAdvance()
1039 __ Move(edx, eax); // Result is the new bytecode offset. in Generate_InterpreterEnterBytecodeAdvance()
1040 __ Pop(kInterpreterAccumulatorRegister); in Generate_InterpreterEnterBytecodeAdvance()
1042 __ mov(Operand(ebp, InterpreterFrameConstants::kBytecodeOffsetFromFp), edx); in Generate_InterpreterEnterBytecodeAdvance()
1067 __ mov(ebx, FieldOperand(closure, JSFunction::kFeedbackVectorOffset)); in Generate_CompileLazy()
1068 __ mov(ebx, FieldOperand(ebx, Cell::kValueOffset)); in Generate_CompileLazy()
1069 __ JumpIfRoot(ebx, Heap::kUndefinedValueRootIndex, in Generate_CompileLazy()
1072 __ push(argument_count); in Generate_CompileLazy()
1073 __ push(new_target); in Generate_CompileLazy()
1074 __ push(closure); in Generate_CompileLazy()
1078 __ mov(map, FieldOperand(closure, JSFunction::kSharedFunctionInfoOffset)); in Generate_CompileLazy()
1079 __ mov(map, FieldOperand(map, SharedFunctionInfo::kOptimizedCodeMapOffset)); in Generate_CompileLazy()
1080 __ mov(index, FieldOperand(map, FixedArray::kLengthOffset)); in Generate_CompileLazy()
1081 __ cmp(index, Immediate(Smi::FromInt(2))); in Generate_CompileLazy()
1082 __ j(less, &try_shared); in Generate_CompileLazy()
1090 __ mov(native_context, NativeContextOperand()); in Generate_CompileLazy()
1092 __ bind(&loop_top); in Generate_CompileLazy()
1096 __ mov(temp, FieldOperand(map, index, times_half_pointer_size, in Generate_CompileLazy()
1098 __ mov(temp, FieldOperand(temp, WeakCell::kValueOffset)); in Generate_CompileLazy()
1099 __ cmp(temp, native_context); in Generate_CompileLazy()
1100 __ j(not_equal, &loop_bottom); in Generate_CompileLazy()
1104 __ mov(entry, FieldOperand(map, index, times_half_pointer_size, in Generate_CompileLazy()
1106 __ mov(entry, FieldOperand(entry, WeakCell::kValueOffset)); in Generate_CompileLazy()
1107 __ JumpIfSmi(entry, &try_shared); in Generate_CompileLazy()
1110 __ pop(closure); in Generate_CompileLazy()
1112 __ lea(entry, FieldOperand(entry, Code::kHeaderSize)); in Generate_CompileLazy()
1113 __ mov(FieldOperand(closure, JSFunction::kCodeEntryOffset), entry); in Generate_CompileLazy()
1114 __ RecordWriteCodeEntryField(closure, entry, eax); in Generate_CompileLazy()
1120 __ mov(ebx, in Generate_CompileLazy()
1122 __ mov(FieldOperand(closure, JSFunction::kNextFunctionLinkOffset), ebx); in Generate_CompileLazy()
1123 __ RecordWriteField(closure, JSFunction::kNextFunctionLinkOffset, ebx, eax, in Generate_CompileLazy()
1127 __ mov(ContextOperand(native_context, Context::OPTIMIZED_FUNCTIONS_LIST), in Generate_CompileLazy()
1130 __ mov(ebx, closure); in Generate_CompileLazy()
1131 __ RecordWriteContextSlot(native_context, function_list_offset, closure, eax, in Generate_CompileLazy()
1133 __ mov(closure, ebx); in Generate_CompileLazy()
1134 __ pop(new_target); in Generate_CompileLazy()
1135 __ pop(argument_count); in Generate_CompileLazy()
1136 __ jmp(entry); in Generate_CompileLazy()
1138 __ bind(&loop_bottom); in Generate_CompileLazy()
1139 __ sub(index, Immediate(Smi::FromInt(SharedFunctionInfo::kEntryLength))); in Generate_CompileLazy()
1140 __ cmp(index, Immediate(Smi::FromInt(1))); in Generate_CompileLazy()
1141 __ j(greater, &loop_top); in Generate_CompileLazy()
1144 __ bind(&try_shared); in Generate_CompileLazy()
1145 __ pop(closure); in Generate_CompileLazy()
1146 __ pop(new_target); in Generate_CompileLazy()
1147 __ pop(argument_count); in Generate_CompileLazy()
1148 __ mov(entry, FieldOperand(closure, JSFunction::kSharedFunctionInfoOffset)); in Generate_CompileLazy()
1150 __ test_b(FieldOperand(entry, SharedFunctionInfo::kMarkedForTierUpByteOffset), in Generate_CompileLazy()
1152 __ j(not_zero, &gotta_call_runtime_no_stack); in Generate_CompileLazy()
1155 __ mov(entry, FieldOperand(entry, SharedFunctionInfo::kCodeOffset)); in Generate_CompileLazy()
1156 __ Move(ebx, masm->CodeObject()); in Generate_CompileLazy()
1157 __ cmp(entry, ebx); in Generate_CompileLazy()
1158 __ j(equal, &gotta_call_runtime_no_stack); in Generate_CompileLazy()
1161 __ lea(entry, FieldOperand(entry, Code::kHeaderSize)); in Generate_CompileLazy()
1162 __ mov(FieldOperand(closure, JSFunction::kCodeEntryOffset), entry); in Generate_CompileLazy()
1163 __ RecordWriteCodeEntryField(closure, entry, ebx); in Generate_CompileLazy()
1164 __ jmp(entry); in Generate_CompileLazy()
1166 __ bind(&gotta_call_runtime); in Generate_CompileLazy()
1167 __ pop(closure); in Generate_CompileLazy()
1168 __ pop(new_target); in Generate_CompileLazy()
1169 __ pop(argument_count); in Generate_CompileLazy()
1170 __ bind(&gotta_call_runtime_no_stack); in Generate_CompileLazy()
1198 __ mov(ecx, eax); in Generate_InstantiateAsmJs()
1200 __ SmiTag(eax); in Generate_InstantiateAsmJs()
1201 __ push(eax); in Generate_InstantiateAsmJs()
1203 __ push(edi); in Generate_InstantiateAsmJs()
1204 __ push(edx); in Generate_InstantiateAsmJs()
1207 __ push(edi); in Generate_InstantiateAsmJs()
1213 __ cmp(ecx, Immediate(j)); in Generate_InstantiateAsmJs()
1214 __ j(not_equal, &over, Label::kNear); in Generate_InstantiateAsmJs()
1217 __ Push(Operand( in Generate_InstantiateAsmJs()
1221 __ PushRoot(Heap::kUndefinedValueRootIndex); in Generate_InstantiateAsmJs()
1224 __ jmp(&args_done, Label::kNear); in Generate_InstantiateAsmJs()
1225 __ bind(&over); in Generate_InstantiateAsmJs()
1228 __ bind(&args_done); in Generate_InstantiateAsmJs()
1231 __ CallRuntime(Runtime::kInstantiateAsmJs, 4); in Generate_InstantiateAsmJs()
1233 __ JumpIfSmi(eax, &failed, Label::kNear); in Generate_InstantiateAsmJs()
1235 __ Drop(2); in Generate_InstantiateAsmJs()
1236 __ Pop(ecx); in Generate_InstantiateAsmJs()
1237 __ SmiUntag(ecx); in Generate_InstantiateAsmJs()
1240 __ PopReturnAddressTo(ebx); in Generate_InstantiateAsmJs()
1241 __ inc(ecx); in Generate_InstantiateAsmJs()
1242 __ lea(esp, Operand(esp, ecx, times_pointer_size, 0)); in Generate_InstantiateAsmJs()
1243 __ PushReturnAddressFrom(ebx); in Generate_InstantiateAsmJs()
1244 __ ret(0); in Generate_InstantiateAsmJs()
1246 __ bind(&failed); in Generate_InstantiateAsmJs()
1248 __ pop(edx); in Generate_InstantiateAsmJs()
1249 __ pop(edi); in Generate_InstantiateAsmJs()
1250 __ pop(eax); in Generate_InstantiateAsmJs()
1251 __ SmiUntag(eax); in Generate_InstantiateAsmJs()
1266 __ sub(Operand(esp, 0), Immediate(5)); in GenerateMakeCodeYoungAgainCommon()
1267 __ pushad(); in GenerateMakeCodeYoungAgainCommon()
1268 __ mov(eax, Operand(esp, 8 * kPointerSize)); in GenerateMakeCodeYoungAgainCommon()
1271 __ PrepareCallCFunction(2, ebx); in GenerateMakeCodeYoungAgainCommon()
1272 __ mov(Operand(esp, 1 * kPointerSize), in GenerateMakeCodeYoungAgainCommon()
1274 __ mov(Operand(esp, 0), eax); in GenerateMakeCodeYoungAgainCommon()
1275 __ CallCFunction( in GenerateMakeCodeYoungAgainCommon()
1278 __ popad(); in GenerateMakeCodeYoungAgainCommon()
1279 __ ret(0); in GenerateMakeCodeYoungAgainCommon()
1294 __ pushad(); in CODE_AGE_LIST()
1295 __ mov(eax, Operand(esp, 8 * kPointerSize)); in CODE_AGE_LIST()
1296 __ sub(eax, Immediate(Assembler::kCallInstructionLength)); in CODE_AGE_LIST()
1299 __ PrepareCallCFunction(2, ebx); in CODE_AGE_LIST()
1300 __ mov(Operand(esp, 1 * kPointerSize), in CODE_AGE_LIST()
1302 __ mov(Operand(esp, 0), eax); in CODE_AGE_LIST()
1303 __ CallCFunction( in CODE_AGE_LIST()
1307 __ popad(); in CODE_AGE_LIST()
1310 __ pop(eax); // Pop return address into scratch register. in CODE_AGE_LIST()
1311 __ push(ebp); // Caller's frame pointer. in CODE_AGE_LIST()
1312 __ mov(ebp, esp); in CODE_AGE_LIST()
1313 __ push(esi); // Callee's context. in CODE_AGE_LIST()
1314 __ push(edi); // Callee's JS Function. in CODE_AGE_LIST()
1315 __ push(eax); // Push return address after frame prologue. in CODE_AGE_LIST()
1318 __ ret(0); in CODE_AGE_LIST()
1338 __ pushad(); in Generate_NotifyStubFailureHelper()
1339 __ CallRuntime(Runtime::kNotifyStubFailure, save_doubles); in Generate_NotifyStubFailureHelper()
1340 __ popad(); in Generate_NotifyStubFailureHelper()
1344 __ pop(MemOperand(esp, 0)); // Ignore state offset in Generate_NotifyStubFailureHelper()
1345 __ ret(0); // Return to IC Miss stub, continuation still on stack. in Generate_NotifyStubFailureHelper()
1362 __ push(Immediate(Smi::FromInt(static_cast<int>(type)))); in Generate_NotifyDeoptimizedHelper()
1363 __ CallRuntime(Runtime::kNotifyDeoptimized); in Generate_NotifyDeoptimizedHelper()
1369 __ mov(ecx, Operand(esp, 1 * kPointerSize)); in Generate_NotifyDeoptimizedHelper()
1370 __ SmiUntag(ecx); in Generate_NotifyDeoptimizedHelper()
1374 __ cmp(ecx, static_cast<int>(Deoptimizer::BailoutState::NO_REGISTERS)); in Generate_NotifyDeoptimizedHelper()
1375 __ j(not_equal, &not_no_registers, Label::kNear); in Generate_NotifyDeoptimizedHelper()
1376 __ ret(1 * kPointerSize); // Remove state. in Generate_NotifyDeoptimizedHelper()
1378 __ bind(&not_no_registers); in Generate_NotifyDeoptimizedHelper()
1380 __ mov(eax, Operand(esp, 2 * kPointerSize)); in Generate_NotifyDeoptimizedHelper()
1381 __ cmp(ecx, static_cast<int>(Deoptimizer::BailoutState::TOS_REGISTER)); in Generate_NotifyDeoptimizedHelper()
1382 __ j(not_equal, &not_tos_eax, Label::kNear); in Generate_NotifyDeoptimizedHelper()
1383 __ ret(2 * kPointerSize); // Remove state, eax. in Generate_NotifyDeoptimizedHelper()
1385 __ bind(&not_tos_eax); in Generate_NotifyDeoptimizedHelper()
1386 __ Abort(kNoCasesLeft); in Generate_NotifyDeoptimizedHelper()
1416 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_FunctionPrototypeApply()
1417 __ mov(ebx, edx); in Generate_FunctionPrototypeApply()
1418 __ mov(edi, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_FunctionPrototypeApply()
1419 __ test(eax, eax); in Generate_FunctionPrototypeApply()
1420 __ j(zero, &no_this_arg, Label::kNear); in Generate_FunctionPrototypeApply()
1422 __ mov(edx, Operand(esp, eax, times_pointer_size, 0)); in Generate_FunctionPrototypeApply()
1423 __ cmp(eax, Immediate(1)); in Generate_FunctionPrototypeApply()
1424 __ j(equal, &no_arg_array, Label::kNear); in Generate_FunctionPrototypeApply()
1425 __ mov(ebx, Operand(esp, eax, times_pointer_size, -kPointerSize)); in Generate_FunctionPrototypeApply()
1426 __ bind(&no_arg_array); in Generate_FunctionPrototypeApply()
1428 __ bind(&no_this_arg); in Generate_FunctionPrototypeApply()
1429 __ PopReturnAddressTo(ecx); in Generate_FunctionPrototypeApply()
1430 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_FunctionPrototypeApply()
1431 __ Push(edx); in Generate_FunctionPrototypeApply()
1432 __ PushReturnAddressFrom(ecx); in Generate_FunctionPrototypeApply()
1433 __ Move(eax, ebx); in Generate_FunctionPrototypeApply()
1445 __ JumpIfSmi(edi, &receiver_not_callable, Label::kNear); in Generate_FunctionPrototypeApply()
1446 __ mov(ecx, FieldOperand(edi, HeapObject::kMapOffset)); in Generate_FunctionPrototypeApply()
1447 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_FunctionPrototypeApply()
1449 __ j(zero, &receiver_not_callable, Label::kNear); in Generate_FunctionPrototypeApply()
1453 __ JumpIfRoot(eax, Heap::kNullValueRootIndex, &no_arguments, Label::kNear); in Generate_FunctionPrototypeApply()
1454 __ JumpIfRoot(eax, Heap::kUndefinedValueRootIndex, &no_arguments, in Generate_FunctionPrototypeApply()
1459 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_FunctionPrototypeApply()
1460 __ Jump(masm->isolate()->builtins()->Apply(), RelocInfo::CODE_TARGET); in Generate_FunctionPrototypeApply()
1464 __ bind(&no_arguments); in Generate_FunctionPrototypeApply()
1466 __ Set(eax, 0); in Generate_FunctionPrototypeApply()
1467 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); in Generate_FunctionPrototypeApply()
1471 __ bind(&receiver_not_callable); in Generate_FunctionPrototypeApply()
1473 __ mov(Operand(esp, kPointerSize), edi); in Generate_FunctionPrototypeApply()
1474 __ TailCallRuntime(Runtime::kThrowApplyNonFunction); in Generate_FunctionPrototypeApply()
1493 __ test(eax, eax); in Generate_FunctionPrototypeCall()
1494 __ j(not_zero, &done, Label::kNear); in Generate_FunctionPrototypeCall()
1495 __ PopReturnAddressTo(ebx); in Generate_FunctionPrototypeCall()
1496 __ PushRoot(Heap::kUndefinedValueRootIndex); in Generate_FunctionPrototypeCall()
1497 __ PushReturnAddressFrom(ebx); in Generate_FunctionPrototypeCall()
1498 __ inc(eax); in Generate_FunctionPrototypeCall()
1499 __ bind(&done); in Generate_FunctionPrototypeCall()
1503 __ mov(edi, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_FunctionPrototypeCall()
1510 __ mov(ecx, eax); in Generate_FunctionPrototypeCall()
1511 __ bind(&loop); in Generate_FunctionPrototypeCall()
1512 __ mov(ebx, Operand(esp, ecx, times_pointer_size, 0)); in Generate_FunctionPrototypeCall()
1513 __ mov(Operand(esp, ecx, times_pointer_size, kPointerSize), ebx); in Generate_FunctionPrototypeCall()
1514 __ dec(ecx); in Generate_FunctionPrototypeCall()
1515 __ j(not_sign, &loop); // While non-negative (to copy return address). in Generate_FunctionPrototypeCall()
1516 __ pop(ebx); // Discard copy of return address. in Generate_FunctionPrototypeCall()
1517 __ dec(eax); // One fewer argument (first argument is new receiver). in Generate_FunctionPrototypeCall()
1521 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); in Generate_FunctionPrototypeCall()
1539 __ LoadRoot(edi, Heap::kUndefinedValueRootIndex); in Generate_ReflectApply()
1540 __ mov(edx, edi); in Generate_ReflectApply()
1541 __ mov(ebx, edi); in Generate_ReflectApply()
1542 __ cmp(eax, Immediate(1)); in Generate_ReflectApply()
1543 __ j(below, &done, Label::kNear); in Generate_ReflectApply()
1544 __ mov(edi, Operand(esp, eax, times_pointer_size, -0 * kPointerSize)); in Generate_ReflectApply()
1545 __ j(equal, &done, Label::kNear); in Generate_ReflectApply()
1546 __ mov(edx, Operand(esp, eax, times_pointer_size, -1 * kPointerSize)); in Generate_ReflectApply()
1547 __ cmp(eax, Immediate(3)); in Generate_ReflectApply()
1548 __ j(below, &done, Label::kNear); in Generate_ReflectApply()
1549 __ mov(ebx, Operand(esp, eax, times_pointer_size, -2 * kPointerSize)); in Generate_ReflectApply()
1550 __ bind(&done); in Generate_ReflectApply()
1551 __ PopReturnAddressTo(ecx); in Generate_ReflectApply()
1552 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_ReflectApply()
1553 __ Push(edx); in Generate_ReflectApply()
1554 __ PushReturnAddressFrom(ecx); in Generate_ReflectApply()
1555 __ Move(eax, ebx); in Generate_ReflectApply()
1567 __ JumpIfSmi(edi, &target_not_callable, Label::kNear); in Generate_ReflectApply()
1568 __ mov(ecx, FieldOperand(edi, HeapObject::kMapOffset)); in Generate_ReflectApply()
1569 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_ReflectApply()
1571 __ j(zero, &target_not_callable, Label::kNear); in Generate_ReflectApply()
1575 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_ReflectApply()
1576 __ Jump(masm->isolate()->builtins()->Apply(), RelocInfo::CODE_TARGET); in Generate_ReflectApply()
1579 __ bind(&target_not_callable); in Generate_ReflectApply()
1581 __ mov(Operand(esp, kPointerSize), edi); in Generate_ReflectApply()
1582 __ TailCallRuntime(Runtime::kThrowApplyNonFunction); in Generate_ReflectApply()
1602 __ LoadRoot(edi, Heap::kUndefinedValueRootIndex); in Generate_ReflectConstruct()
1603 __ mov(edx, edi); in Generate_ReflectConstruct()
1604 __ mov(ebx, edi); in Generate_ReflectConstruct()
1605 __ cmp(eax, Immediate(1)); in Generate_ReflectConstruct()
1606 __ j(below, &done, Label::kNear); in Generate_ReflectConstruct()
1607 __ mov(edi, Operand(esp, eax, times_pointer_size, -0 * kPointerSize)); in Generate_ReflectConstruct()
1608 __ mov(edx, edi); in Generate_ReflectConstruct()
1609 __ j(equal, &done, Label::kNear); in Generate_ReflectConstruct()
1610 __ mov(ebx, Operand(esp, eax, times_pointer_size, -1 * kPointerSize)); in Generate_ReflectConstruct()
1611 __ cmp(eax, Immediate(3)); in Generate_ReflectConstruct()
1612 __ j(below, &done, Label::kNear); in Generate_ReflectConstruct()
1613 __ mov(edx, Operand(esp, eax, times_pointer_size, -2 * kPointerSize)); in Generate_ReflectConstruct()
1614 __ bind(&done); in Generate_ReflectConstruct()
1615 __ PopReturnAddressTo(ecx); in Generate_ReflectConstruct()
1616 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_ReflectConstruct()
1617 __ PushRoot(Heap::kUndefinedValueRootIndex); in Generate_ReflectConstruct()
1618 __ PushReturnAddressFrom(ecx); in Generate_ReflectConstruct()
1619 __ Move(eax, ebx); in Generate_ReflectConstruct()
1632 __ JumpIfSmi(edi, &target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1633 __ mov(ecx, FieldOperand(edi, HeapObject::kMapOffset)); in Generate_ReflectConstruct()
1634 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_ReflectConstruct()
1636 __ j(zero, &target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1640 __ JumpIfSmi(edx, &new_target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1641 __ mov(ecx, FieldOperand(edx, HeapObject::kMapOffset)); in Generate_ReflectConstruct()
1642 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_ReflectConstruct()
1644 __ j(zero, &new_target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1647 __ Jump(masm->isolate()->builtins()->Apply(), RelocInfo::CODE_TARGET); in Generate_ReflectConstruct()
1650 __ bind(&target_not_constructor); in Generate_ReflectConstruct()
1652 __ mov(Operand(esp, kPointerSize), edi); in Generate_ReflectConstruct()
1653 __ TailCallRuntime(Runtime::kThrowNotConstructor); in Generate_ReflectConstruct()
1657 __ bind(&new_target_not_constructor); in Generate_ReflectConstruct()
1659 __ mov(Operand(esp, kPointerSize), edx); in Generate_ReflectConstruct()
1660 __ TailCallRuntime(Runtime::kThrowNotConstructor); in Generate_ReflectConstruct()
1673 __ LoadGlobalFunction(Context::INTERNAL_ARRAY_FUNCTION_INDEX, edi); in Generate_InternalArrayCode()
1677 __ mov(ebx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset)); in Generate_InternalArrayCode()
1679 __ test(ebx, Immediate(kSmiTagMask)); in Generate_InternalArrayCode()
1680 __ Assert(not_zero, kUnexpectedInitialMapForInternalArrayFunction); in Generate_InternalArrayCode()
1681 __ CmpObjectType(ebx, MAP_TYPE, ecx); in Generate_InternalArrayCode()
1682 __ Assert(equal, kUnexpectedInitialMapForInternalArrayFunction); in Generate_InternalArrayCode()
1689 __ TailCallStub(&stub); in Generate_InternalArrayCode()
1701 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, edi); in Generate_ArrayCode()
1702 __ mov(edx, edi); in Generate_ArrayCode()
1706 __ mov(ebx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset)); in Generate_ArrayCode()
1708 __ test(ebx, Immediate(kSmiTagMask)); in Generate_ArrayCode()
1709 __ Assert(not_zero, kUnexpectedInitialMapForArrayFunction); in Generate_ArrayCode()
1710 __ CmpObjectType(ebx, MAP_TYPE, ecx); in Generate_ArrayCode()
1711 __ Assert(equal, kUnexpectedInitialMapForArrayFunction); in Generate_ArrayCode()
1716 __ mov(ebx, masm->isolate()->factory()->undefined_value()); in Generate_ArrayCode()
1718 __ TailCallStub(&stub); in Generate_ArrayCode()
1739 __ LoadRoot(edx, root_index); in Generate_MathMaxMin()
1740 __ movsd(xmm0, FieldOperand(edx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1741 __ Move(ecx, eax); in Generate_MathMaxMin()
1744 __ bind(&loop); in Generate_MathMaxMin()
1747 __ test(ecx, ecx); in Generate_MathMaxMin()
1748 __ j(zero, &done_loop); in Generate_MathMaxMin()
1751 __ mov(ebx, Operand(esp, ecx, times_pointer_size, 0)); in Generate_MathMaxMin()
1756 __ bind(&convert); in Generate_MathMaxMin()
1757 __ JumpIfSmi(ebx, &convert_smi); in Generate_MathMaxMin()
1758 __ JumpIfRoot(FieldOperand(ebx, HeapObject::kMapOffset), in Generate_MathMaxMin()
1763 __ SmiTag(eax); in Generate_MathMaxMin()
1764 __ SmiTag(ecx); in Generate_MathMaxMin()
1765 __ EnterBuiltinFrame(esi, edi, eax); in Generate_MathMaxMin()
1766 __ Push(ecx); in Generate_MathMaxMin()
1767 __ Push(edx); in Generate_MathMaxMin()
1768 __ mov(eax, ebx); in Generate_MathMaxMin()
1769 __ Call(masm->isolate()->builtins()->ToNumber(), RelocInfo::CODE_TARGET); in Generate_MathMaxMin()
1770 __ mov(ebx, eax); in Generate_MathMaxMin()
1771 __ Pop(edx); in Generate_MathMaxMin()
1772 __ Pop(ecx); in Generate_MathMaxMin()
1773 __ LeaveBuiltinFrame(esi, edi, eax); in Generate_MathMaxMin()
1774 __ SmiUntag(ecx); in Generate_MathMaxMin()
1775 __ SmiUntag(eax); in Generate_MathMaxMin()
1779 __ JumpIfSmi(edx, &restore_smi, Label::kNear); in Generate_MathMaxMin()
1780 __ movsd(xmm0, FieldOperand(edx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1781 __ jmp(&done_restore, Label::kNear); in Generate_MathMaxMin()
1782 __ bind(&restore_smi); in Generate_MathMaxMin()
1783 __ SmiUntag(edx); in Generate_MathMaxMin()
1784 __ Cvtsi2sd(xmm0, edx); in Generate_MathMaxMin()
1785 __ SmiTag(edx); in Generate_MathMaxMin()
1786 __ bind(&done_restore); in Generate_MathMaxMin()
1789 __ jmp(&convert); in Generate_MathMaxMin()
1790 __ bind(&convert_number); in Generate_MathMaxMin()
1791 __ movsd(xmm1, FieldOperand(ebx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1792 __ jmp(&done_convert, Label::kNear); in Generate_MathMaxMin()
1793 __ bind(&convert_smi); in Generate_MathMaxMin()
1794 __ SmiUntag(ebx); in Generate_MathMaxMin()
1795 __ Cvtsi2sd(xmm1, ebx); in Generate_MathMaxMin()
1796 __ SmiTag(ebx); in Generate_MathMaxMin()
1797 __ bind(&done_convert); in Generate_MathMaxMin()
1802 __ ucomisd(xmm0, xmm1); in Generate_MathMaxMin()
1803 __ j(parity_even, &compare_nan, Label::kNear); in Generate_MathMaxMin()
1804 __ j(cc, &done_compare, Label::kNear); in Generate_MathMaxMin()
1805 __ j(equal, &compare_equal, Label::kNear); in Generate_MathMaxMin()
1808 __ bind(&compare_swap); in Generate_MathMaxMin()
1809 __ movaps(xmm0, xmm1); in Generate_MathMaxMin()
1810 __ mov(edx, ebx); in Generate_MathMaxMin()
1811 __ jmp(&done_compare, Label::kNear); in Generate_MathMaxMin()
1814 __ bind(&compare_nan); in Generate_MathMaxMin()
1815 __ LoadRoot(edx, Heap::kNanValueRootIndex); in Generate_MathMaxMin()
1816 __ movsd(xmm0, FieldOperand(edx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1817 __ jmp(&done_compare, Label::kNear); in Generate_MathMaxMin()
1820 __ bind(&compare_equal); in Generate_MathMaxMin()
1821 __ Push(edi); // Preserve function in edi. in Generate_MathMaxMin()
1822 __ movmskpd(edi, reg); in Generate_MathMaxMin()
1823 __ test(edi, Immediate(1)); in Generate_MathMaxMin()
1824 __ Pop(edi); in Generate_MathMaxMin()
1825 __ j(not_zero, &compare_swap); in Generate_MathMaxMin()
1827 __ bind(&done_compare); in Generate_MathMaxMin()
1828 __ dec(ecx); in Generate_MathMaxMin()
1829 __ jmp(&loop); in Generate_MathMaxMin()
1832 __ bind(&done_loop); in Generate_MathMaxMin()
1833 __ PopReturnAddressTo(ecx); in Generate_MathMaxMin()
1834 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_MathMaxMin()
1835 __ PushReturnAddressFrom(ecx); in Generate_MathMaxMin()
1836 __ mov(eax, edx); in Generate_MathMaxMin()
1837 __ Ret(); in Generate_MathMaxMin()
1854 __ test(eax, eax); in Generate_NumberConstructor()
1855 __ j(zero, &no_arguments, Label::kNear); in Generate_NumberConstructor()
1856 __ mov(ebx, Operand(esp, eax, times_pointer_size, 0)); in Generate_NumberConstructor()
1862 __ SmiTag(eax); in Generate_NumberConstructor()
1863 __ EnterBuiltinFrame(esi, edi, eax); in Generate_NumberConstructor()
1864 __ mov(eax, ebx); in Generate_NumberConstructor()
1865 __ Call(masm->isolate()->builtins()->ToNumber(), RelocInfo::CODE_TARGET); in Generate_NumberConstructor()
1866 __ LeaveBuiltinFrame(esi, edi, ebx); // Argc popped to ebx. in Generate_NumberConstructor()
1867 __ SmiUntag(ebx); in Generate_NumberConstructor()
1872 __ PopReturnAddressTo(ecx); in Generate_NumberConstructor()
1873 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_NumberConstructor()
1874 __ PushReturnAddressFrom(ecx); in Generate_NumberConstructor()
1875 __ Ret(); in Generate_NumberConstructor()
1879 __ bind(&no_arguments); in Generate_NumberConstructor()
1880 __ ret(1 * kPointerSize); in Generate_NumberConstructor()
1896 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_NumberConstructor_ConstructStub()
1899 __ mov(ecx, eax); in Generate_NumberConstructor_ConstructStub()
1900 __ SmiTag(ecx); in Generate_NumberConstructor_ConstructStub()
1905 __ test(eax, eax); in Generate_NumberConstructor_ConstructStub()
1906 __ j(zero, &no_arguments, Label::kNear); in Generate_NumberConstructor_ConstructStub()
1907 __ mov(ebx, Operand(esp, eax, times_pointer_size, 0)); in Generate_NumberConstructor_ConstructStub()
1908 __ jmp(&done, Label::kNear); in Generate_NumberConstructor_ConstructStub()
1909 __ bind(&no_arguments); in Generate_NumberConstructor_ConstructStub()
1910 __ Move(ebx, Smi::kZero); in Generate_NumberConstructor_ConstructStub()
1911 __ bind(&done); in Generate_NumberConstructor_ConstructStub()
1917 __ JumpIfSmi(ebx, &done_convert); in Generate_NumberConstructor_ConstructStub()
1918 __ CompareRoot(FieldOperand(ebx, HeapObject::kMapOffset), in Generate_NumberConstructor_ConstructStub()
1920 __ j(equal, &done_convert); in Generate_NumberConstructor_ConstructStub()
1923 __ EnterBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1924 __ Push(edx); in Generate_NumberConstructor_ConstructStub()
1925 __ Move(eax, ebx); in Generate_NumberConstructor_ConstructStub()
1926 __ Call(masm->isolate()->builtins()->ToNumber(), RelocInfo::CODE_TARGET); in Generate_NumberConstructor_ConstructStub()
1927 __ Move(ebx, eax); in Generate_NumberConstructor_ConstructStub()
1928 __ Pop(edx); in Generate_NumberConstructor_ConstructStub()
1929 __ LeaveBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1931 __ bind(&done_convert); in Generate_NumberConstructor_ConstructStub()
1936 __ cmp(edx, edi); in Generate_NumberConstructor_ConstructStub()
1937 __ j(not_equal, &new_object); in Generate_NumberConstructor_ConstructStub()
1940 __ AllocateJSValue(eax, edi, ebx, esi, &done_alloc); in Generate_NumberConstructor_ConstructStub()
1941 __ jmp(&drop_frame_and_ret); in Generate_NumberConstructor_ConstructStub()
1943 __ bind(&done_alloc); in Generate_NumberConstructor_ConstructStub()
1944 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); // Restore esi. in Generate_NumberConstructor_ConstructStub()
1947 __ bind(&new_object); in Generate_NumberConstructor_ConstructStub()
1950 __ EnterBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1951 __ Push(ebx); // the first argument in Generate_NumberConstructor_ConstructStub()
1952 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), in Generate_NumberConstructor_ConstructStub()
1954 __ Pop(FieldOperand(eax, JSValue::kValueOffset)); in Generate_NumberConstructor_ConstructStub()
1955 __ LeaveBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1958 __ bind(&drop_frame_and_ret); in Generate_NumberConstructor_ConstructStub()
1961 __ PopReturnAddressTo(esi); in Generate_NumberConstructor_ConstructStub()
1962 __ SmiUntag(ecx); in Generate_NumberConstructor_ConstructStub()
1963 __ lea(esp, Operand(esp, ecx, times_pointer_size, kPointerSize)); in Generate_NumberConstructor_ConstructStub()
1964 __ PushReturnAddressFrom(esi); in Generate_NumberConstructor_ConstructStub()
1965 __ Ret(); in Generate_NumberConstructor_ConstructStub()
1983 __ mov(ebx, eax); // Store argc in ebx. in Generate_StringConstructor()
1984 __ test(eax, eax); in Generate_StringConstructor()
1985 __ j(zero, &no_arguments, Label::kNear); in Generate_StringConstructor()
1986 __ mov(eax, Operand(esp, eax, times_pointer_size, 0)); in Generate_StringConstructor()
1993 __ JumpIfSmi(eax, &to_string, Label::kNear); in Generate_StringConstructor()
1995 __ CmpObjectType(eax, FIRST_NONSTRING_TYPE, edx); in Generate_StringConstructor()
1996 __ j(above, &to_string, Label::kNear); in Generate_StringConstructor()
1997 __ j(equal, &symbol_descriptive_string, Label::kNear); in Generate_StringConstructor()
1998 __ jmp(&drop_frame_and_ret, Label::kNear); in Generate_StringConstructor()
2002 __ bind(&no_arguments); in Generate_StringConstructor()
2004 __ LoadRoot(eax, Heap::kempty_stringRootIndex); in Generate_StringConstructor()
2005 __ ret(1 * kPointerSize); in Generate_StringConstructor()
2009 __ bind(&to_string); in Generate_StringConstructor()
2012 __ SmiTag(ebx); in Generate_StringConstructor()
2013 __ EnterBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor()
2014 __ Call(masm->isolate()->builtins()->ToString(), RelocInfo::CODE_TARGET); in Generate_StringConstructor()
2015 __ LeaveBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor()
2016 __ SmiUntag(ebx); in Generate_StringConstructor()
2018 __ jmp(&drop_frame_and_ret, Label::kNear); in Generate_StringConstructor()
2021 __ bind(&symbol_descriptive_string); in Generate_StringConstructor()
2023 __ PopReturnAddressTo(ecx); in Generate_StringConstructor()
2024 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_StringConstructor()
2025 __ Push(eax); in Generate_StringConstructor()
2026 __ PushReturnAddressFrom(ecx); in Generate_StringConstructor()
2027 __ TailCallRuntime(Runtime::kSymbolDescriptiveString); in Generate_StringConstructor()
2030 __ bind(&drop_frame_and_ret); in Generate_StringConstructor()
2033 __ PopReturnAddressTo(ecx); in Generate_StringConstructor()
2034 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_StringConstructor()
2035 __ PushReturnAddressFrom(ecx); in Generate_StringConstructor()
2036 __ Ret(); in Generate_StringConstructor()
2053 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_StringConstructor_ConstructStub()
2055 __ mov(ebx, eax); in Generate_StringConstructor_ConstructStub()
2060 __ test(ebx, ebx); in Generate_StringConstructor_ConstructStub()
2061 __ j(zero, &no_arguments, Label::kNear); in Generate_StringConstructor_ConstructStub()
2062 __ mov(eax, Operand(esp, ebx, times_pointer_size, 0)); in Generate_StringConstructor_ConstructStub()
2063 __ jmp(&done, Label::kNear); in Generate_StringConstructor_ConstructStub()
2064 __ bind(&no_arguments); in Generate_StringConstructor_ConstructStub()
2065 __ LoadRoot(eax, Heap::kempty_stringRootIndex); in Generate_StringConstructor_ConstructStub()
2066 __ bind(&done); in Generate_StringConstructor_ConstructStub()
2072 __ JumpIfSmi(eax, &convert, Label::kNear); in Generate_StringConstructor_ConstructStub()
2073 __ CmpObjectType(eax, FIRST_NONSTRING_TYPE, ecx); in Generate_StringConstructor_ConstructStub()
2074 __ j(below, &done_convert); in Generate_StringConstructor_ConstructStub()
2075 __ bind(&convert); in Generate_StringConstructor_ConstructStub()
2078 __ SmiTag(ebx); in Generate_StringConstructor_ConstructStub()
2079 __ EnterBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2080 __ Push(edx); in Generate_StringConstructor_ConstructStub()
2081 __ Call(masm->isolate()->builtins()->ToString(), RelocInfo::CODE_TARGET); in Generate_StringConstructor_ConstructStub()
2082 __ Pop(edx); in Generate_StringConstructor_ConstructStub()
2083 __ LeaveBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2084 __ SmiUntag(ebx); in Generate_StringConstructor_ConstructStub()
2086 __ bind(&done_convert); in Generate_StringConstructor_ConstructStub()
2091 __ cmp(edx, edi); in Generate_StringConstructor_ConstructStub()
2092 __ j(not_equal, &new_object); in Generate_StringConstructor_ConstructStub()
2097 __ mov(esi, eax); in Generate_StringConstructor_ConstructStub()
2098 __ AllocateJSValue(eax, edi, esi, ecx, &done_alloc); in Generate_StringConstructor_ConstructStub()
2099 __ jmp(&drop_frame_and_ret); in Generate_StringConstructor_ConstructStub()
2101 __ bind(&done_alloc); in Generate_StringConstructor_ConstructStub()
2104 __ mov(eax, esi); in Generate_StringConstructor_ConstructStub()
2105 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_StringConstructor_ConstructStub()
2109 __ bind(&new_object); in Generate_StringConstructor_ConstructStub()
2112 __ SmiTag(ebx); in Generate_StringConstructor_ConstructStub()
2113 __ EnterBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2114 __ Push(eax); // the first argument in Generate_StringConstructor_ConstructStub()
2115 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), in Generate_StringConstructor_ConstructStub()
2117 __ Pop(FieldOperand(eax, JSValue::kValueOffset)); in Generate_StringConstructor_ConstructStub()
2118 __ LeaveBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2119 __ SmiUntag(ebx); in Generate_StringConstructor_ConstructStub()
2122 __ bind(&drop_frame_and_ret); in Generate_StringConstructor_ConstructStub()
2125 __ PopReturnAddressTo(ecx); in Generate_StringConstructor_ConstructStub()
2126 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_StringConstructor_ConstructStub()
2127 __ PushReturnAddressFrom(ecx); in Generate_StringConstructor_ConstructStub()
2128 __ Ret(); in Generate_StringConstructor_ConstructStub()
2133 __ push(ebp); in EnterArgumentsAdaptorFrame()
2134 __ mov(ebp, esp); in EnterArgumentsAdaptorFrame()
2137 __ push(Immediate(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR))); in EnterArgumentsAdaptorFrame()
2140 __ push(edi); in EnterArgumentsAdaptorFrame()
2146 __ lea(edi, Operand(eax, eax, times_1, kSmiTag)); in EnterArgumentsAdaptorFrame()
2147 __ push(edi); in EnterArgumentsAdaptorFrame()
2152 __ mov(ebx, Operand(ebp, ArgumentsAdaptorFrameConstants::kLengthOffset)); in LeaveArgumentsAdaptorFrame()
2155 __ leave(); in LeaveArgumentsAdaptorFrame()
2159 __ pop(ecx); in LeaveArgumentsAdaptorFrame()
2160 __ lea(esp, Operand(esp, ebx, times_2, 1 * kPointerSize)); // 1 ~ receiver in LeaveArgumentsAdaptorFrame()
2161 __ push(ecx); in LeaveArgumentsAdaptorFrame()
2178 __ JumpIfSmi(eax, &create_runtime); in Generate_Apply()
2181 __ mov(ecx, FieldOperand(eax, HeapObject::kMapOffset)); in Generate_Apply()
2184 __ mov(ebx, NativeContextOperand()); in Generate_Apply()
2187 __ cmp(ecx, ContextOperand(ebx, Context::SLOPPY_ARGUMENTS_MAP_INDEX)); in Generate_Apply()
2188 __ j(equal, &create_arguments); in Generate_Apply()
2189 __ cmp(ecx, ContextOperand(ebx, Context::STRICT_ARGUMENTS_MAP_INDEX)); in Generate_Apply()
2190 __ j(equal, &create_arguments); in Generate_Apply()
2193 __ CmpInstanceType(ecx, JS_ARRAY_TYPE); in Generate_Apply()
2194 __ j(equal, &create_array); in Generate_Apply()
2197 __ bind(&create_runtime); in Generate_Apply()
2200 __ Push(edi); in Generate_Apply()
2201 __ Push(edx); in Generate_Apply()
2202 __ Push(eax); in Generate_Apply()
2203 __ CallRuntime(Runtime::kCreateListFromArrayLike); in Generate_Apply()
2204 __ Pop(edx); in Generate_Apply()
2205 __ Pop(edi); in Generate_Apply()
2206 __ mov(ebx, FieldOperand(eax, FixedArray::kLengthOffset)); in Generate_Apply()
2207 __ SmiUntag(ebx); in Generate_Apply()
2209 __ jmp(&done_create); in Generate_Apply()
2212 __ bind(&create_arguments); in Generate_Apply()
2213 __ mov(ebx, FieldOperand(eax, JSArgumentsObject::kLengthOffset)); in Generate_Apply()
2214 __ mov(ecx, FieldOperand(eax, JSObject::kElementsOffset)); in Generate_Apply()
2215 __ cmp(ebx, FieldOperand(ecx, FixedArray::kLengthOffset)); in Generate_Apply()
2216 __ j(not_equal, &create_runtime); in Generate_Apply()
2217 __ SmiUntag(ebx); in Generate_Apply()
2218 __ mov(eax, ecx); in Generate_Apply()
2219 __ jmp(&done_create); in Generate_Apply()
2223 __ bind(&create_holey_array); in Generate_Apply()
2224 __ mov(ecx, FieldOperand(eax, HeapObject::kMapOffset)); in Generate_Apply()
2225 __ mov(ecx, FieldOperand(ecx, Map::kPrototypeOffset)); in Generate_Apply()
2226 __ cmp(ecx, ContextOperand(ebx, Context::INITIAL_ARRAY_PROTOTYPE_INDEX)); in Generate_Apply()
2227 __ j(not_equal, &create_runtime); in Generate_Apply()
2228 __ LoadRoot(ecx, Heap::kArrayProtectorRootIndex); in Generate_Apply()
2229 __ cmp(FieldOperand(ecx, PropertyCell::kValueOffset), in Generate_Apply()
2231 __ j(not_equal, &create_runtime); in Generate_Apply()
2232 __ mov(ebx, FieldOperand(eax, JSArray::kLengthOffset)); in Generate_Apply()
2233 __ SmiUntag(ebx); in Generate_Apply()
2234 __ mov(eax, FieldOperand(eax, JSArray::kElementsOffset)); in Generate_Apply()
2235 __ jmp(&done_create); in Generate_Apply()
2238 __ bind(&create_array); in Generate_Apply()
2239 __ mov(ecx, FieldOperand(ecx, Map::kBitField2Offset)); in Generate_Apply()
2240 __ DecodeField<Map::ElementsKindBits>(ecx); in Generate_Apply()
2245 __ cmp(ecx, Immediate(FAST_HOLEY_SMI_ELEMENTS)); in Generate_Apply()
2246 __ j(equal, &create_holey_array, Label::kNear); in Generate_Apply()
2247 __ cmp(ecx, Immediate(FAST_HOLEY_ELEMENTS)); in Generate_Apply()
2248 __ j(equal, &create_holey_array, Label::kNear); in Generate_Apply()
2249 __ j(above, &create_runtime); in Generate_Apply()
2250 __ mov(ebx, FieldOperand(eax, JSArray::kLengthOffset)); in Generate_Apply()
2251 __ SmiUntag(ebx); in Generate_Apply()
2252 __ mov(eax, FieldOperand(eax, JSArray::kElementsOffset)); in Generate_Apply()
2254 __ bind(&done_create); in Generate_Apply()
2264 __ mov(ecx, Operand::StaticVariable(real_stack_limit)); in Generate_Apply()
2267 __ neg(ecx); in Generate_Apply()
2268 __ add(ecx, esp); in Generate_Apply()
2269 __ sar(ecx, kPointerSizeLog2); in Generate_Apply()
2271 __ cmp(ecx, ebx); in Generate_Apply()
2272 __ j(greater, &done, Label::kNear); // Signed comparison. in Generate_Apply()
2273 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_Apply()
2274 __ bind(&done); in Generate_Apply()
2288 __ movd(xmm0, edx); in Generate_Apply()
2289 __ movd(xmm1, edi); in Generate_Apply()
2290 __ PopReturnAddressTo(edx); in Generate_Apply()
2291 __ Move(ecx, Immediate(0)); in Generate_Apply()
2293 __ bind(&loop); in Generate_Apply()
2294 __ cmp(ecx, ebx); in Generate_Apply()
2295 __ j(equal, &done, Label::kNear); in Generate_Apply()
2297 __ mov(edi, in Generate_Apply()
2299 __ CompareRoot(edi, Heap::kTheHoleValueRootIndex); in Generate_Apply()
2300 __ j(not_equal, &push, Label::kNear); in Generate_Apply()
2301 __ LoadRoot(edi, Heap::kUndefinedValueRootIndex); in Generate_Apply()
2302 __ bind(&push); in Generate_Apply()
2303 __ Push(edi); in Generate_Apply()
2304 __ inc(ecx); in Generate_Apply()
2305 __ jmp(&loop); in Generate_Apply()
2306 __ bind(&done); in Generate_Apply()
2307 __ PushReturnAddressFrom(edx); in Generate_Apply()
2308 __ movd(edi, xmm1); in Generate_Apply()
2309 __ movd(edx, xmm0); in Generate_Apply()
2310 __ Move(eax, ebx); in Generate_Apply()
2315 __ CompareRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_Apply()
2316 __ j(equal, masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); in Generate_Apply()
2317 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); in Generate_Apply()
2333 __ mov(ebx, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); in Generate_CallForwardVarargs()
2334 __ cmp(Operand(ebx, CommonFrameConstants::kContextOrFrameTypeOffset), in Generate_CallForwardVarargs()
2336 __ j(equal, &arguments_adaptor, Label::kNear); in Generate_CallForwardVarargs()
2338 __ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); in Generate_CallForwardVarargs()
2339 __ mov(eax, FieldOperand(eax, JSFunction::kSharedFunctionInfoOffset)); in Generate_CallForwardVarargs()
2340 __ mov(eax, in Generate_CallForwardVarargs()
2342 __ mov(ebx, ebp); in Generate_CallForwardVarargs()
2344 __ jmp(&arguments_done, Label::kNear); in Generate_CallForwardVarargs()
2345 __ bind(&arguments_adaptor); in Generate_CallForwardVarargs()
2348 __ mov(eax, Operand(ebx, ArgumentsAdaptorFrameConstants::kLengthOffset)); in Generate_CallForwardVarargs()
2350 __ bind(&arguments_done); in Generate_CallForwardVarargs()
2353 __ SmiUntag(eax); in Generate_CallForwardVarargs()
2354 __ sub(eax, ecx); in Generate_CallForwardVarargs()
2355 __ j(less_equal, &stack_empty); in Generate_CallForwardVarargs()
2363 __ LoadRoot(ecx, Heap::kRealStackLimitRootIndex); in Generate_CallForwardVarargs()
2366 __ neg(ecx); in Generate_CallForwardVarargs()
2367 __ add(ecx, esp); in Generate_CallForwardVarargs()
2368 __ sar(ecx, kPointerSizeLog2); in Generate_CallForwardVarargs()
2370 __ cmp(ecx, eax); in Generate_CallForwardVarargs()
2371 __ j(greater, &done, Label::kNear); // Signed comparison. in Generate_CallForwardVarargs()
2372 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_CallForwardVarargs()
2373 __ bind(&done); in Generate_CallForwardVarargs()
2379 __ mov(ecx, eax); in Generate_CallForwardVarargs()
2380 __ pop(edx); in Generate_CallForwardVarargs()
2381 __ bind(&loop); in Generate_CallForwardVarargs()
2383 __ Push(Operand(ebx, ecx, times_pointer_size, 1 * kPointerSize)); in Generate_CallForwardVarargs()
2384 __ dec(ecx); in Generate_CallForwardVarargs()
2385 __ j(not_zero, &loop); in Generate_CallForwardVarargs()
2387 __ push(edx); in Generate_CallForwardVarargs()
2390 __ jmp(&stack_done, Label::kNear); in Generate_CallForwardVarargs()
2391 __ bind(&stack_empty); in Generate_CallForwardVarargs()
2394 __ Move(eax, Immediate(0)); in Generate_CallForwardVarargs()
2396 __ bind(&stack_done); in Generate_CallForwardVarargs()
2398 __ Jump(code, RelocInfo::CODE_TARGET); in Generate_CallForwardVarargs()
2442 __ movzx_b(scratch1, in PrepareForTailCall()
2444 __ cmp(scratch1, Immediate(0)); in PrepareForTailCall()
2445 __ j(equal, &done, Label::kNear); in PrepareForTailCall()
2450 __ cmp(Operand(ebp, CommonFrameConstants::kContextOrFrameTypeOffset), in PrepareForTailCall()
2452 __ j(not_equal, &no_interpreter_frame, Label::kNear); in PrepareForTailCall()
2453 __ mov(ebp, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); in PrepareForTailCall()
2454 __ bind(&no_interpreter_frame); in PrepareForTailCall()
2460 __ mov(scratch2, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); in PrepareForTailCall()
2461 __ cmp(Operand(scratch2, CommonFrameConstants::kContextOrFrameTypeOffset), in PrepareForTailCall()
2463 __ j(not_equal, &no_arguments_adaptor, Label::kNear); in PrepareForTailCall()
2466 __ mov(ebp, scratch2); in PrepareForTailCall()
2467 __ mov(caller_args_count_reg, in PrepareForTailCall()
2469 __ SmiUntag(caller_args_count_reg); in PrepareForTailCall()
2470 __ jmp(&formal_parameter_count_loaded, Label::kNear); in PrepareForTailCall()
2472 __ bind(&no_arguments_adaptor); in PrepareForTailCall()
2474 __ mov(scratch1, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); in PrepareForTailCall()
2475 __ mov(scratch1, in PrepareForTailCall()
2477 __ mov( in PrepareForTailCall()
2480 __ SmiUntag(caller_args_count_reg); in PrepareForTailCall()
2482 __ bind(&formal_parameter_count_loaded); in PrepareForTailCall()
2485 __ PrepareForTailCall(callee_args_count, caller_args_count_reg, scratch2, in PrepareForTailCall()
2487 __ bind(&done); in PrepareForTailCall()
2499 __ AssertFunction(edi); in Generate_CallFunction()
2504 __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_CallFunction()
2505 __ test_b(FieldOperand(edx, SharedFunctionInfo::kFunctionKindByteOffset), in Generate_CallFunction()
2507 __ j(not_zero, &class_constructor); in Generate_CallFunction()
2514 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_CallFunction()
2517 __ test_b(FieldOperand(edx, SharedFunctionInfo::kNativeByteOffset), in Generate_CallFunction()
2520 __ j(not_zero, &done_convert); in Generate_CallFunction()
2531 __ LoadGlobalProxy(ecx); in Generate_CallFunction()
2534 __ mov(ecx, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_CallFunction()
2535 __ JumpIfSmi(ecx, &convert_to_object, Label::kNear); in Generate_CallFunction()
2537 __ CmpObjectType(ecx, FIRST_JS_RECEIVER_TYPE, ebx); in Generate_CallFunction()
2538 __ j(above_equal, &done_convert); in Generate_CallFunction()
2541 __ JumpIfRoot(ecx, Heap::kUndefinedValueRootIndex, in Generate_CallFunction()
2543 __ JumpIfNotRoot(ecx, Heap::kNullValueRootIndex, &convert_to_object, in Generate_CallFunction()
2545 __ bind(&convert_global_proxy); in Generate_CallFunction()
2548 __ LoadGlobalProxy(ecx); in Generate_CallFunction()
2550 __ jmp(&convert_receiver); in Generate_CallFunction()
2552 __ bind(&convert_to_object); in Generate_CallFunction()
2558 __ SmiTag(eax); in Generate_CallFunction()
2559 __ Push(eax); in Generate_CallFunction()
2560 __ Push(edi); in Generate_CallFunction()
2561 __ mov(eax, ecx); in Generate_CallFunction()
2562 __ Push(esi); in Generate_CallFunction()
2563 __ Call(masm->isolate()->builtins()->ToObject(), in Generate_CallFunction()
2565 __ Pop(esi); in Generate_CallFunction()
2566 __ mov(ecx, eax); in Generate_CallFunction()
2567 __ Pop(edi); in Generate_CallFunction()
2568 __ Pop(eax); in Generate_CallFunction()
2569 __ SmiUntag(eax); in Generate_CallFunction()
2571 __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_CallFunction()
2572 __ bind(&convert_receiver); in Generate_CallFunction()
2574 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), ecx); in Generate_CallFunction()
2576 __ bind(&done_convert); in Generate_CallFunction()
2588 __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_CallFunction()
2591 __ mov(ebx, in Generate_CallFunction()
2593 __ SmiUntag(ebx); in Generate_CallFunction()
2596 __ InvokeFunctionCode(edi, no_reg, expected, actual, JUMP_FUNCTION, in Generate_CallFunction()
2599 __ bind(&class_constructor); in Generate_CallFunction()
2602 __ push(edi); in Generate_CallFunction()
2603 __ CallRuntime(Runtime::kThrowConstructorNonCallableError); in Generate_CallFunction()
2618 __ mov(ecx, FieldOperand(edi, JSBoundFunction::kBoundArgumentsOffset)); in Generate_PushBoundArguments()
2619 __ mov(ebx, FieldOperand(ecx, FixedArray::kLengthOffset)); in Generate_PushBoundArguments()
2620 __ SmiUntag(ebx); in Generate_PushBoundArguments()
2621 __ test(ebx, ebx); in Generate_PushBoundArguments()
2622 __ j(zero, &no_bound_arguments); in Generate_PushBoundArguments()
2635 __ lea(ecx, Operand(ebx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2636 __ sub(esp, ecx); in Generate_PushBoundArguments()
2640 __ CompareRoot(esp, ecx, Heap::kRealStackLimitRootIndex); in Generate_PushBoundArguments()
2641 __ j(greater, &done, Label::kNear); // Signed comparison. in Generate_PushBoundArguments()
2643 __ lea(esp, Operand(esp, ebx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2646 __ EnterFrame(StackFrame::INTERNAL); in Generate_PushBoundArguments()
2647 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_PushBoundArguments()
2649 __ bind(&done); in Generate_PushBoundArguments()
2653 __ inc(eax); in Generate_PushBoundArguments()
2658 __ Set(ecx, 0); in Generate_PushBoundArguments()
2659 __ lea(ebx, Operand(esp, ebx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2660 __ bind(&loop); in Generate_PushBoundArguments()
2661 __ movd(xmm0, Operand(ebx, ecx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2662 __ movd(Operand(esp, ecx, times_pointer_size, 0), xmm0); in Generate_PushBoundArguments()
2663 __ inc(ecx); in Generate_PushBoundArguments()
2664 __ cmp(ecx, eax); in Generate_PushBoundArguments()
2665 __ j(less, &loop); in Generate_PushBoundArguments()
2671 __ mov(ecx, FieldOperand(edi, JSBoundFunction::kBoundArgumentsOffset)); in Generate_PushBoundArguments()
2672 __ mov(ebx, FieldOperand(ecx, FixedArray::kLengthOffset)); in Generate_PushBoundArguments()
2673 __ SmiUntag(ebx); in Generate_PushBoundArguments()
2674 __ bind(&loop); in Generate_PushBoundArguments()
2675 __ dec(ebx); in Generate_PushBoundArguments()
2676 __ movd(xmm0, FieldOperand(ecx, ebx, times_pointer_size, in Generate_PushBoundArguments()
2678 __ movd(Operand(esp, eax, times_pointer_size, 0), xmm0); in Generate_PushBoundArguments()
2679 __ lea(eax, Operand(eax, 1)); in Generate_PushBoundArguments()
2680 __ j(greater, &loop); in Generate_PushBoundArguments()
2686 __ dec(eax); in Generate_PushBoundArguments()
2688 __ bind(&no_bound_arguments); in Generate_PushBoundArguments()
2700 __ AssertBoundFunction(edi); in Generate_CallBoundFunctionImpl()
2707 __ mov(ebx, FieldOperand(edi, JSBoundFunction::kBoundThisOffset)); in Generate_CallBoundFunctionImpl()
2708 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), ebx); in Generate_CallBoundFunctionImpl()
2714 __ mov(edi, FieldOperand(edi, JSBoundFunction::kBoundTargetFunctionOffset)); in Generate_CallBoundFunctionImpl()
2715 __ mov(ecx, Operand::StaticVariable(ExternalReference( in Generate_CallBoundFunctionImpl()
2717 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_CallBoundFunctionImpl()
2718 __ jmp(ecx); in Generate_CallBoundFunctionImpl()
2730 __ JumpIfSmi(edi, &non_callable); in Generate_Call()
2731 __ bind(&non_smi); in Generate_Call()
2732 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx); in Generate_Call()
2733 __ j(equal, masm->isolate()->builtins()->CallFunction(mode, tail_call_mode), in Generate_Call()
2735 __ CmpInstanceType(ecx, JS_BOUND_FUNCTION_TYPE); in Generate_Call()
2736 __ j(equal, masm->isolate()->builtins()->CallBoundFunction(tail_call_mode), in Generate_Call()
2740 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_Call()
2742 __ j(zero, &non_callable); in Generate_Call()
2744 __ CmpInstanceType(ecx, JS_PROXY_TYPE); in Generate_Call()
2745 __ j(not_equal, &non_function); in Generate_Call()
2753 __ PopReturnAddressTo(ecx); in Generate_Call()
2754 __ Push(edi); in Generate_Call()
2755 __ PushReturnAddressFrom(ecx); in Generate_Call()
2758 __ add(eax, Immediate(2)); in Generate_Call()
2760 __ JumpToExternalReference( in Generate_Call()
2765 __ bind(&non_function); in Generate_Call()
2767 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), edi); in Generate_Call()
2769 __ LoadGlobalFunction(Context::CALL_AS_FUNCTION_DELEGATE_INDEX, edi); in Generate_Call()
2770 __ Jump(masm->isolate()->builtins()->CallFunction( in Generate_Call()
2775 __ bind(&non_callable); in Generate_Call()
2778 __ Push(edi); in Generate_Call()
2779 __ CallRuntime(Runtime::kThrowCalledNonCallable); in Generate_Call()
2785 __ movd(xmm0, edx); in CheckSpreadAndPushToStack()
2786 __ movd(xmm1, edi); in CheckSpreadAndPushToStack()
2799 __ mov(spread, Operand(esp, kPointerSize)); in CheckSpreadAndPushToStack()
2800 __ JumpIfSmi(spread, &runtime_call); in CheckSpreadAndPushToStack()
2801 __ mov(spread_map, FieldOperand(spread, HeapObject::kMapOffset)); in CheckSpreadAndPushToStack()
2804 __ CmpInstanceType(spread_map, JS_ARRAY_TYPE); in CheckSpreadAndPushToStack()
2805 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2808 __ mov(scratch, FieldOperand(spread_map, Map::kPrototypeOffset)); in CheckSpreadAndPushToStack()
2809 __ mov(scratch2, NativeContextOperand()); in CheckSpreadAndPushToStack()
2810 __ cmp(scratch, in CheckSpreadAndPushToStack()
2812 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2816 __ LoadRoot(scratch, Heap::kArrayIteratorProtectorRootIndex); in CheckSpreadAndPushToStack()
2817 __ cmp(FieldOperand(scratch, PropertyCell::kValueOffset), in CheckSpreadAndPushToStack()
2819 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2822 __ mov(scratch2, NativeContextOperand()); in CheckSpreadAndPushToStack()
2823 __ mov(scratch, in CheckSpreadAndPushToStack()
2826 __ mov(scratch, FieldOperand(scratch, HeapObject::kMapOffset)); in CheckSpreadAndPushToStack()
2827 __ cmp(scratch, in CheckSpreadAndPushToStack()
2830 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2835 __ mov(scratch, FieldOperand(spread_map, Map::kBitField2Offset)); in CheckSpreadAndPushToStack()
2836 __ DecodeField<Map::ElementsKindBits>(scratch); in CheckSpreadAndPushToStack()
2837 __ cmp(scratch, Immediate(FAST_HOLEY_ELEMENTS)); in CheckSpreadAndPushToStack()
2838 __ j(above, &runtime_call); in CheckSpreadAndPushToStack()
2840 __ cmp(scratch, Immediate(FAST_SMI_ELEMENTS)); in CheckSpreadAndPushToStack()
2841 __ j(equal, &no_protector_check); in CheckSpreadAndPushToStack()
2842 __ cmp(scratch, Immediate(FAST_ELEMENTS)); in CheckSpreadAndPushToStack()
2843 __ j(equal, &no_protector_check); in CheckSpreadAndPushToStack()
2845 __ LoadRoot(scratch, Heap::kArrayProtectorRootIndex); in CheckSpreadAndPushToStack()
2846 __ cmp(FieldOperand(scratch, PropertyCell::kValueOffset), in CheckSpreadAndPushToStack()
2848 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2850 __ bind(&no_protector_check); in CheckSpreadAndPushToStack()
2852 __ mov(spread_len, FieldOperand(spread, JSArray::kLengthOffset)); in CheckSpreadAndPushToStack()
2853 __ SmiUntag(spread_len); in CheckSpreadAndPushToStack()
2854 __ mov(spread, FieldOperand(spread, JSArray::kElementsOffset)); in CheckSpreadAndPushToStack()
2855 __ jmp(&push_args); in CheckSpreadAndPushToStack()
2857 __ bind(&runtime_call); in CheckSpreadAndPushToStack()
2862 __ movd(edi, xmm1); in CheckSpreadAndPushToStack()
2863 __ movd(edx, xmm0); in CheckSpreadAndPushToStack()
2864 __ Push(edi); in CheckSpreadAndPushToStack()
2865 __ Push(edx); in CheckSpreadAndPushToStack()
2866 __ SmiTag(argc); in CheckSpreadAndPushToStack()
2867 __ Push(argc); in CheckSpreadAndPushToStack()
2868 __ Push(spread); in CheckSpreadAndPushToStack()
2869 __ CallRuntime(Runtime::kSpreadIterableFixed); in CheckSpreadAndPushToStack()
2870 __ mov(spread, eax); in CheckSpreadAndPushToStack()
2871 __ Pop(argc); in CheckSpreadAndPushToStack()
2872 __ SmiUntag(argc); in CheckSpreadAndPushToStack()
2873 __ Pop(edx); in CheckSpreadAndPushToStack()
2874 __ Pop(edi); in CheckSpreadAndPushToStack()
2876 __ movd(xmm0, edx); in CheckSpreadAndPushToStack()
2877 __ movd(xmm1, edi); in CheckSpreadAndPushToStack()
2882 __ mov(spread_len, FieldOperand(spread, FixedArray::kLengthOffset)); in CheckSpreadAndPushToStack()
2883 __ SmiUntag(spread_len); in CheckSpreadAndPushToStack()
2885 __ bind(&push_args); in CheckSpreadAndPushToStack()
2887 __ lea(argc, Operand(argc, spread_len, times_1, -1)); in CheckSpreadAndPushToStack()
2895 __ LoadRoot(scratch, Heap::kRealStackLimitRootIndex); in CheckSpreadAndPushToStack()
2898 __ neg(scratch); in CheckSpreadAndPushToStack()
2899 __ add(scratch, esp); in CheckSpreadAndPushToStack()
2900 __ sar(scratch, kPointerSizeLog2); in CheckSpreadAndPushToStack()
2902 __ cmp(scratch, spread_len); in CheckSpreadAndPushToStack()
2903 __ j(greater, &done, Label::kNear); // Signed comparison. in CheckSpreadAndPushToStack()
2904 __ TailCallRuntime(Runtime::kThrowStackOverflow); in CheckSpreadAndPushToStack()
2905 __ bind(&done); in CheckSpreadAndPushToStack()
2912 __ PopReturnAddressTo(return_address); in CheckSpreadAndPushToStack()
2913 __ Pop(scratch); in CheckSpreadAndPushToStack()
2916 __ movd(xmm2, esi); in CheckSpreadAndPushToStack()
2918 __ mov(scratch, Immediate(0)); in CheckSpreadAndPushToStack()
2920 __ bind(&loop); in CheckSpreadAndPushToStack()
2921 __ cmp(scratch, spread_len); in CheckSpreadAndPushToStack()
2922 __ j(equal, &done, Label::kNear); in CheckSpreadAndPushToStack()
2923 __ mov(scratch2, FieldOperand(spread, scratch, times_pointer_size, in CheckSpreadAndPushToStack()
2925 __ CompareRoot(scratch2, Heap::kTheHoleValueRootIndex); in CheckSpreadAndPushToStack()
2926 __ j(not_equal, &push, Label::kNear); in CheckSpreadAndPushToStack()
2927 __ LoadRoot(scratch2, Heap::kUndefinedValueRootIndex); in CheckSpreadAndPushToStack()
2928 __ bind(&push); in CheckSpreadAndPushToStack()
2929 __ Push(scratch2); in CheckSpreadAndPushToStack()
2930 __ inc(scratch); in CheckSpreadAndPushToStack()
2931 __ jmp(&loop); in CheckSpreadAndPushToStack()
2932 __ bind(&done); in CheckSpreadAndPushToStack()
2933 __ PushReturnAddressFrom(return_address); in CheckSpreadAndPushToStack()
2934 __ movd(esi, xmm2); in CheckSpreadAndPushToStack()
2935 __ movd(edi, xmm1); in CheckSpreadAndPushToStack()
2936 __ movd(edx, xmm0); in CheckSpreadAndPushToStack()
2948 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_CallWithSpread()
2950 __ Jump(masm->isolate()->builtins()->Call(ConvertReceiverMode::kAny, in Generate_CallWithSpread()
2962 __ AssertFunction(edi); in Generate_ConstructFunction()
2966 __ LoadRoot(ebx, Heap::kUndefinedValueRootIndex); in Generate_ConstructFunction()
2970 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ConstructFunction()
2971 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kConstructStubOffset)); in Generate_ConstructFunction()
2972 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_ConstructFunction()
2973 __ jmp(ecx); in Generate_ConstructFunction()
2983 __ AssertBoundFunction(edi); in Generate_ConstructBoundFunction()
2991 __ cmp(edi, edx); in Generate_ConstructBoundFunction()
2992 __ j(not_equal, &done, Label::kNear); in Generate_ConstructBoundFunction()
2993 __ mov(edx, FieldOperand(edi, JSBoundFunction::kBoundTargetFunctionOffset)); in Generate_ConstructBoundFunction()
2994 __ bind(&done); in Generate_ConstructBoundFunction()
2998 __ mov(edi, FieldOperand(edi, JSBoundFunction::kBoundTargetFunctionOffset)); in Generate_ConstructBoundFunction()
2999 __ mov(ecx, Operand::StaticVariable( in Generate_ConstructBoundFunction()
3001 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_ConstructBoundFunction()
3002 __ jmp(ecx); in Generate_ConstructBoundFunction()
3015 __ PopReturnAddressTo(ecx); in Generate_ConstructProxy()
3016 __ Push(edi); in Generate_ConstructProxy()
3017 __ Push(edx); in Generate_ConstructProxy()
3018 __ PushReturnAddressFrom(ecx); in Generate_ConstructProxy()
3020 __ add(eax, Immediate(3)); in Generate_ConstructProxy()
3022 __ JumpToExternalReference( in Generate_ConstructProxy()
3037 __ JumpIfSmi(edi, &non_constructor, Label::kNear); in Generate_Construct()
3040 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx); in Generate_Construct()
3041 __ j(equal, masm->isolate()->builtins()->ConstructFunction(), in Generate_Construct()
3045 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_Construct()
3047 __ j(zero, &non_constructor, Label::kNear); in Generate_Construct()
3051 __ CmpInstanceType(ecx, JS_BOUND_FUNCTION_TYPE); in Generate_Construct()
3052 __ j(equal, masm->isolate()->builtins()->ConstructBoundFunction(), in Generate_Construct()
3056 __ CmpInstanceType(ecx, JS_PROXY_TYPE); in Generate_Construct()
3057 __ j(equal, masm->isolate()->builtins()->ConstructProxy(), in Generate_Construct()
3063 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), edi); in Generate_Construct()
3065 __ LoadGlobalFunction(Context::CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, edi); in Generate_Construct()
3066 __ Jump(masm->isolate()->builtins()->CallFunction(), in Generate_Construct()
3072 __ bind(&non_constructor); in Generate_Construct()
3073 __ Jump(masm->isolate()->builtins()->ConstructedNonConstructable(), in Generate_Construct()
3087 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); in Generate_ConstructWithSpread()
3096 __ SmiTag(edx); in Generate_AllocateInNewSpace()
3097 __ PopReturnAddressTo(ecx); in Generate_AllocateInNewSpace()
3098 __ Push(edx); in Generate_AllocateInNewSpace()
3099 __ PushReturnAddressFrom(ecx); in Generate_AllocateInNewSpace()
3100 __ Move(esi, Smi::kZero); in Generate_AllocateInNewSpace()
3101 __ TailCallRuntime(Runtime::kAllocateInNewSpace); in Generate_AllocateInNewSpace()
3110 __ SmiTag(edx); in Generate_AllocateInOldSpace()
3111 __ PopReturnAddressTo(ecx); in Generate_AllocateInOldSpace()
3112 __ Push(edx); in Generate_AllocateInOldSpace()
3113 __ Push(Smi::FromInt(AllocateTargetSpace::encode(OLD_SPACE))); in Generate_AllocateInOldSpace()
3114 __ PushReturnAddressFrom(ecx); in Generate_AllocateInOldSpace()
3115 __ Move(esi, Smi::kZero); in Generate_AllocateInOldSpace()
3116 __ TailCallRuntime(Runtime::kAllocateInTargetSpace); in Generate_AllocateInOldSpace()
3125 __ PopReturnAddressTo(ecx); in Generate_Abort()
3126 __ Push(edx); in Generate_Abort()
3127 __ PushReturnAddressFrom(ecx); in Generate_Abort()
3128 __ Move(esi, Smi::kZero); in Generate_Abort()
3129 __ TailCallRuntime(Runtime::kAbort); in Generate_Abort()
3141 __ IncrementCounter(masm->isolate()->counters()->arguments_adaptors(), 1); in Generate_ArgumentsAdaptorTrampoline()
3144 __ cmp(eax, ebx); in Generate_ArgumentsAdaptorTrampoline()
3145 __ j(less, &too_few); in Generate_ArgumentsAdaptorTrampoline()
3146 __ cmp(ebx, SharedFunctionInfo::kDontAdaptArgumentsSentinel); in Generate_ArgumentsAdaptorTrampoline()
3147 __ j(equal, &dont_adapt_arguments); in Generate_ArgumentsAdaptorTrampoline()
3150 __ bind(&enough); in Generate_ArgumentsAdaptorTrampoline()
3158 __ lea(edi, Operand(ebp, eax, times_4, offset)); in Generate_ArgumentsAdaptorTrampoline()
3159 __ mov(eax, -1); // account for receiver in Generate_ArgumentsAdaptorTrampoline()
3162 __ bind(&copy); in Generate_ArgumentsAdaptorTrampoline()
3163 __ inc(eax); in Generate_ArgumentsAdaptorTrampoline()
3164 __ push(Operand(edi, 0)); in Generate_ArgumentsAdaptorTrampoline()
3165 __ sub(edi, Immediate(kPointerSize)); in Generate_ArgumentsAdaptorTrampoline()
3166 __ cmp(eax, ebx); in Generate_ArgumentsAdaptorTrampoline()
3167 __ j(less, &copy); in Generate_ArgumentsAdaptorTrampoline()
3169 __ jmp(&invoke); in Generate_ArgumentsAdaptorTrampoline()
3173 __ bind(&too_few); in Generate_ArgumentsAdaptorTrampoline()
3180 __ mov(ecx, ebx); in Generate_ArgumentsAdaptorTrampoline()
3184 __ lea(edi, Operand(ebp, eax, times_4, offset)); in Generate_ArgumentsAdaptorTrampoline()
3186 __ sub(ebx, eax); in Generate_ArgumentsAdaptorTrampoline()
3188 __ neg(eax); in Generate_ArgumentsAdaptorTrampoline()
3189 __ sub(eax, Immediate(1)); in Generate_ArgumentsAdaptorTrampoline()
3192 __ bind(&copy); in Generate_ArgumentsAdaptorTrampoline()
3193 __ inc(eax); in Generate_ArgumentsAdaptorTrampoline()
3194 __ push(Operand(edi, 0)); in Generate_ArgumentsAdaptorTrampoline()
3195 __ sub(edi, Immediate(kPointerSize)); in Generate_ArgumentsAdaptorTrampoline()
3196 __ test(eax, eax); in Generate_ArgumentsAdaptorTrampoline()
3197 __ j(not_zero, &copy); in Generate_ArgumentsAdaptorTrampoline()
3201 __ bind(&fill); in Generate_ArgumentsAdaptorTrampoline()
3202 __ inc(eax); in Generate_ArgumentsAdaptorTrampoline()
3203 __ push(Immediate(masm->isolate()->factory()->undefined_value())); in Generate_ArgumentsAdaptorTrampoline()
3204 __ cmp(eax, ebx); in Generate_ArgumentsAdaptorTrampoline()
3205 __ j(less, &fill); in Generate_ArgumentsAdaptorTrampoline()
3208 __ mov(eax, ecx); in Generate_ArgumentsAdaptorTrampoline()
3212 __ bind(&invoke); in Generate_ArgumentsAdaptorTrampoline()
3214 __ mov(edi, Operand(ebp, ArgumentsAdaptorFrameConstants::kFunctionOffset)); in Generate_ArgumentsAdaptorTrampoline()
3218 __ mov(ecx, FieldOperand(edi, JSFunction::kCodeEntryOffset)); in Generate_ArgumentsAdaptorTrampoline()
3219 __ call(ecx); in Generate_ArgumentsAdaptorTrampoline()
3226 __ ret(0); in Generate_ArgumentsAdaptorTrampoline()
3231 __ bind(&dont_adapt_arguments); in Generate_ArgumentsAdaptorTrampoline()
3232 __ mov(ecx, FieldOperand(edi, JSFunction::kCodeEntryOffset)); in Generate_ArgumentsAdaptorTrampoline()
3233 __ jmp(ecx); in Generate_ArgumentsAdaptorTrampoline()
3235 __ bind(&stack_overflow); in Generate_ArgumentsAdaptorTrampoline()
3238 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_ArgumentsAdaptorTrampoline()
3239 __ int3(); in Generate_ArgumentsAdaptorTrampoline()
3248 __ CompareRoot(FieldOperand(function_template_info, in CompatibleReceiverCheck()
3252 __ j(equal, &receiver_check_passed, Label::kNear); in CompatibleReceiverCheck()
3255 __ mov(scratch0, FieldOperand(receiver, HeapObject::kMapOffset)); in CompatibleReceiverCheck()
3257 __ bind(&prototype_loop_start); in CompatibleReceiverCheck()
3260 __ GetMapConstructor(scratch0, scratch0, scratch1); in CompatibleReceiverCheck()
3261 __ CmpInstanceType(scratch1, JS_FUNCTION_TYPE); in CompatibleReceiverCheck()
3263 __ j(not_equal, &next_prototype, Label::kNear); in CompatibleReceiverCheck()
3266 __ mov(scratch0, in CompatibleReceiverCheck()
3268 __ mov(scratch0, in CompatibleReceiverCheck()
3273 __ bind(&function_template_loop); in CompatibleReceiverCheck()
3276 __ cmp(scratch0, FieldOperand(function_template_info, in CompatibleReceiverCheck()
3278 __ j(equal, &receiver_check_passed, Label::kNear); in CompatibleReceiverCheck()
3282 __ JumpIfSmi(scratch0, &next_prototype, Label::kNear); in CompatibleReceiverCheck()
3283 __ CmpObjectType(scratch0, FUNCTION_TEMPLATE_INFO_TYPE, scratch1); in CompatibleReceiverCheck()
3284 __ j(not_equal, &next_prototype, Label::kNear); in CompatibleReceiverCheck()
3287 __ mov(scratch0, in CompatibleReceiverCheck()
3289 __ jmp(&function_template_loop, Label::kNear); in CompatibleReceiverCheck()
3292 __ bind(&next_prototype); in CompatibleReceiverCheck()
3293 __ mov(receiver, FieldOperand(receiver, HeapObject::kMapOffset)); in CompatibleReceiverCheck()
3294 __ test(FieldOperand(receiver, Map::kBitField3Offset), in CompatibleReceiverCheck()
3296 __ j(zero, receiver_check_failed); in CompatibleReceiverCheck()
3298 __ mov(receiver, FieldOperand(receiver, Map::kPrototypeOffset)); in CompatibleReceiverCheck()
3299 __ mov(scratch0, FieldOperand(receiver, HeapObject::kMapOffset)); in CompatibleReceiverCheck()
3301 __ jmp(&prototype_loop_start, Label::kNear); in CompatibleReceiverCheck()
3303 __ bind(&receiver_check_passed); in CompatibleReceiverCheck()
3319 __ mov(ebx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_HandleFastApiCall()
3320 __ mov(ebx, FieldOperand(ebx, SharedFunctionInfo::kFunctionDataOffset)); in Generate_HandleFastApiCall()
3324 __ mov(ecx, Operand(esp, eax, times_pointer_size, kPCOnStackSize)); in Generate_HandleFastApiCall()
3325 __ Push(eax); in Generate_HandleFastApiCall()
3327 __ Pop(eax); in Generate_HandleFastApiCall()
3330 __ mov(edx, FieldOperand(ebx, FunctionTemplateInfo::kCallCodeOffset)); in Generate_HandleFastApiCall()
3331 __ mov(edx, FieldOperand(edx, CallHandlerInfo::kFastHandlerOffset)); in Generate_HandleFastApiCall()
3332 __ add(edx, Immediate(Code::kHeaderSize - kHeapObjectTag)); in Generate_HandleFastApiCall()
3333 __ jmp(edx); in Generate_HandleFastApiCall()
3337 __ bind(&receiver_check_failed); in Generate_HandleFastApiCall()
3338 __ Pop(eax); in Generate_HandleFastApiCall()
3339 __ PopReturnAddressTo(ebx); in Generate_HandleFastApiCall()
3340 __ lea(eax, Operand(eax, times_pointer_size, 1 * kPointerSize)); in Generate_HandleFastApiCall()
3341 __ add(esp, eax); in Generate_HandleFastApiCall()
3342 __ PushReturnAddressFrom(ebx); in Generate_HandleFastApiCall()
3345 __ TailCallRuntime(Runtime::kThrowIllegalInvocation); in Generate_HandleFastApiCall()
3353 __ mov(eax, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); in Generate_OnStackReplacementHelper()
3354 __ mov(eax, Operand(eax, JavaScriptFrameConstants::kFunctionOffset)); in Generate_OnStackReplacementHelper()
3356 __ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); in Generate_OnStackReplacementHelper()
3362 __ push(eax); in Generate_OnStackReplacementHelper()
3363 __ CallRuntime(Runtime::kCompileForOnStackReplacement); in Generate_OnStackReplacementHelper()
3368 __ cmp(eax, Immediate(0)); in Generate_OnStackReplacementHelper()
3369 __ j(not_equal, &skip, Label::kNear); in Generate_OnStackReplacementHelper()
3370 __ ret(0); in Generate_OnStackReplacementHelper()
3372 __ bind(&skip); in Generate_OnStackReplacementHelper()
3377 __ leave(); in Generate_OnStackReplacementHelper()
3381 __ mov(ebx, Operand(eax, Code::kDeoptimizationDataOffset - kHeapObjectTag)); in Generate_OnStackReplacementHelper()
3384 __ mov(ebx, Operand(ebx, FixedArray::OffsetOfElementAt( in Generate_OnStackReplacementHelper()
3387 __ SmiUntag(ebx); in Generate_OnStackReplacementHelper()
3390 __ lea(eax, Operand(eax, ebx, times_1, Code::kHeaderSize - kHeapObjectTag)); in Generate_OnStackReplacementHelper()
3393 __ mov(Operand(esp, 0), eax); in Generate_OnStackReplacementHelper()
3396 __ ret(0); in Generate_OnStackReplacementHelper()
3407 #undef __