• 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()
130 __ SmiTag(eax); in Generate_JSConstructStubHelper()
131 __ push(esi); in Generate_JSConstructStubHelper()
132 __ push(eax); in Generate_JSConstructStubHelper()
136 __ Push(edi); in Generate_JSConstructStubHelper()
137 __ Push(edx); in Generate_JSConstructStubHelper()
138 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), in Generate_JSConstructStubHelper()
140 __ mov(ebx, eax); in Generate_JSConstructStubHelper()
141 __ Pop(edx); in Generate_JSConstructStubHelper()
142 __ Pop(edi); in Generate_JSConstructStubHelper()
151 __ mov(eax, Operand(esp, 0)); in Generate_JSConstructStubHelper()
154 __ SmiUntag(eax); in Generate_JSConstructStubHelper()
160 __ push(ebx); in Generate_JSConstructStubHelper()
161 __ push(ebx); in Generate_JSConstructStubHelper()
163 __ PushRoot(Heap::kTheHoleValueRootIndex); in Generate_JSConstructStubHelper()
167 __ lea(ebx, Operand(ebp, StandardFrameConstants::kCallerSPOffset)); in Generate_JSConstructStubHelper()
171 __ mov(ecx, eax); in Generate_JSConstructStubHelper()
172 __ jmp(&entry); in Generate_JSConstructStubHelper()
173 __ bind(&loop); in Generate_JSConstructStubHelper()
174 __ push(Operand(ebx, ecx, times_4, 0)); in Generate_JSConstructStubHelper()
175 __ bind(&entry); in Generate_JSConstructStubHelper()
176 __ dec(ecx); in Generate_JSConstructStubHelper()
177 __ j(greater_equal, &loop); in Generate_JSConstructStubHelper()
181 __ InvokeFunction(edi, edx, actual, CALL_FUNCTION, in Generate_JSConstructStubHelper()
190 __ mov(esi, Operand(ebp, ConstructFrameConstants::kContextOffset)); in Generate_JSConstructStubHelper()
199 __ JumpIfSmi(eax, &use_receiver, Label::kNear); in Generate_JSConstructStubHelper()
203 __ CmpObjectType(eax, FIRST_JS_RECEIVER_TYPE, ecx); in Generate_JSConstructStubHelper()
204 __ j(above_equal, &exit, Label::kNear); in Generate_JSConstructStubHelper()
208 __ bind(&use_receiver); in Generate_JSConstructStubHelper()
209 __ mov(eax, Operand(esp, 0)); in Generate_JSConstructStubHelper()
213 __ bind(&exit); in Generate_JSConstructStubHelper()
214 __ mov(ebx, Operand(esp, 1 * kPointerSize)); in Generate_JSConstructStubHelper()
216 __ mov(ebx, Operand(esp, 0)); in Generate_JSConstructStubHelper()
227 __ JumpIfNotSmi(eax, &dont_throw); in Generate_JSConstructStubHelper()
230 __ CallRuntime(Runtime::kThrowDerivedConstructorReturnedNonObject); in Generate_JSConstructStubHelper()
232 __ bind(&dont_throw); in Generate_JSConstructStubHelper()
237 __ pop(ecx); in Generate_JSConstructStubHelper()
238 __ lea(esp, Operand(esp, ebx, times_2, 1 * kPointerSize)); // 1 ~ receiver in Generate_JSConstructStubHelper()
239 __ push(ecx); in Generate_JSConstructStubHelper()
241 __ IncrementCounter(masm->isolate()->counters()->constructed_objects(), 1); in Generate_JSConstructStubHelper()
243 __ ret(0); in Generate_JSConstructStubHelper()
267 __ push(edi); in Generate_ConstructedNonConstructable()
268 __ CallRuntime(Runtime::kThrowConstructedNonConstructable); in Generate_ConstructedNonConstructable()
284 __ mov(edi, Operand::StaticVariable(real_stack_limit)); in Generate_CheckStackOverflow()
287 __ mov(ecx, esp); in Generate_CheckStackOverflow()
288 __ sub(ecx, edi); in Generate_CheckStackOverflow()
291 __ mov(edx, eax); in Generate_CheckStackOverflow()
293 __ shl(edx, kPointerSizeLog2 - smi_tag); in Generate_CheckStackOverflow()
295 __ cmp(ecx, edx); in Generate_CheckStackOverflow()
296 __ j(greater, &okay); // Signed comparison. in Generate_CheckStackOverflow()
299 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_CheckStackOverflow()
301 __ bind(&okay); in Generate_CheckStackOverflow()
314 __ mov(esi, Operand::StaticVariable(context_address)); in Generate_JSEntryTrampolineHelper()
317 __ mov(ebx, Operand(ebp, 0)); in Generate_JSEntryTrampolineHelper()
320 __ push(Operand(ebx, EntryFrameConstants::kFunctionArgOffset)); in Generate_JSEntryTrampolineHelper()
321 __ push(Operand(ebx, EntryFrameConstants::kReceiverArgOffset)); in Generate_JSEntryTrampolineHelper()
324 __ mov(eax, Operand(ebx, EntryFrameConstants::kArgcOffset)); in Generate_JSEntryTrampolineHelper()
325 __ mov(ebx, Operand(ebx, EntryFrameConstants::kArgvOffset)); in Generate_JSEntryTrampolineHelper()
333 __ Move(ecx, Immediate(0)); in Generate_JSEntryTrampolineHelper()
334 __ jmp(&entry, Label::kNear); in Generate_JSEntryTrampolineHelper()
335 __ bind(&loop); in Generate_JSEntryTrampolineHelper()
336 __ mov(edx, Operand(ebx, ecx, times_4, 0)); // push parameter from argv in Generate_JSEntryTrampolineHelper()
337 __ push(Operand(edx, 0)); // dereference handle in Generate_JSEntryTrampolineHelper()
338 __ inc(ecx); in Generate_JSEntryTrampolineHelper()
339 __ bind(&entry); in Generate_JSEntryTrampolineHelper()
340 __ cmp(ecx, eax); in Generate_JSEntryTrampolineHelper()
341 __ j(not_equal, &loop); in Generate_JSEntryTrampolineHelper()
344 __ mov(ebx, Operand(ebp, 0)); in Generate_JSEntryTrampolineHelper()
347 __ mov(edx, Operand(ebx, EntryFrameConstants::kNewTargetArgOffset)); in Generate_JSEntryTrampolineHelper()
348 __ mov(edi, Operand(ebx, EntryFrameConstants::kFunctionArgOffset)); in Generate_JSEntryTrampolineHelper()
354 __ Call(builtin, RelocInfo::CODE_TARGET); in Generate_JSEntryTrampolineHelper()
360 __ ret(kPointerSize); // Remove receiver. in Generate_JSEntryTrampolineHelper()
379 __ AssertGeneratorObject(ebx); in Generate_ResumeGeneratorTrampoline()
382 __ mov(FieldOperand(ebx, JSGeneratorObject::kInputOrDebugPosOffset), eax); in Generate_ResumeGeneratorTrampoline()
383 __ RecordWriteField(ebx, JSGeneratorObject::kInputOrDebugPosOffset, eax, ecx, in Generate_ResumeGeneratorTrampoline()
387 __ mov(FieldOperand(ebx, JSGeneratorObject::kResumeModeOffset), edx); in Generate_ResumeGeneratorTrampoline()
390 __ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset)); in Generate_ResumeGeneratorTrampoline()
391 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_ResumeGeneratorTrampoline()
398 __ cmpb(Operand::StaticVariable(debug_hook), Immediate(0)); in Generate_ResumeGeneratorTrampoline()
399 __ j(not_equal, &prepare_step_in_if_stepping); in Generate_ResumeGeneratorTrampoline()
404 __ cmp(ebx, Operand::StaticVariable(debug_suspended_generator)); in Generate_ResumeGeneratorTrampoline()
405 __ j(equal, &prepare_step_in_suspended_generator); in Generate_ResumeGeneratorTrampoline()
406 __ bind(&stepping_prepared); in Generate_ResumeGeneratorTrampoline()
409 __ PopReturnAddressTo(eax); in Generate_ResumeGeneratorTrampoline()
412 __ Push(FieldOperand(ebx, JSGeneratorObject::kReceiverOffset)); in Generate_ResumeGeneratorTrampoline()
427 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ResumeGeneratorTrampoline()
428 __ mov(ecx, in Generate_ResumeGeneratorTrampoline()
432 __ bind(&loop); in Generate_ResumeGeneratorTrampoline()
433 __ sub(ecx, Immediate(Smi::FromInt(1))); in Generate_ResumeGeneratorTrampoline()
434 __ j(carry, &done_loop, Label::kNear); in Generate_ResumeGeneratorTrampoline()
435 __ PushRoot(Heap::kTheHoleValueRootIndex); in Generate_ResumeGeneratorTrampoline()
436 __ jmp(&loop); in Generate_ResumeGeneratorTrampoline()
437 __ bind(&done_loop); in Generate_ResumeGeneratorTrampoline()
442 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ResumeGeneratorTrampoline()
443 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kFunctionDataOffset)); in Generate_ResumeGeneratorTrampoline()
444 __ CmpObjectType(ecx, BYTECODE_ARRAY_TYPE, ecx); in Generate_ResumeGeneratorTrampoline()
445 __ Assert(equal, kMissingBytecodeArray); in Generate_ResumeGeneratorTrampoline()
450 __ PushReturnAddressFrom(eax); in Generate_ResumeGeneratorTrampoline()
451 __ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ResumeGeneratorTrampoline()
452 __ mov(eax, in Generate_ResumeGeneratorTrampoline()
457 __ mov(edx, ebx); in Generate_ResumeGeneratorTrampoline()
458 __ jmp(FieldOperand(edi, JSFunction::kCodeEntryOffset)); in Generate_ResumeGeneratorTrampoline()
461 __ bind(&prepare_step_in_if_stepping); in Generate_ResumeGeneratorTrampoline()
464 __ Push(ebx); in Generate_ResumeGeneratorTrampoline()
465 __ Push(edx); in Generate_ResumeGeneratorTrampoline()
466 __ Push(edi); in Generate_ResumeGeneratorTrampoline()
467 __ CallRuntime(Runtime::kDebugOnFunctionCall); in Generate_ResumeGeneratorTrampoline()
468 __ Pop(edx); in Generate_ResumeGeneratorTrampoline()
469 __ Pop(ebx); in Generate_ResumeGeneratorTrampoline()
470 __ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset)); in Generate_ResumeGeneratorTrampoline()
472 __ jmp(&stepping_prepared); in Generate_ResumeGeneratorTrampoline()
474 __ bind(&prepare_step_in_suspended_generator); in Generate_ResumeGeneratorTrampoline()
477 __ Push(ebx); in Generate_ResumeGeneratorTrampoline()
478 __ Push(edx); in Generate_ResumeGeneratorTrampoline()
479 __ CallRuntime(Runtime::kDebugPrepareStepInSuspendedGenerator); in Generate_ResumeGeneratorTrampoline()
480 __ Pop(edx); in Generate_ResumeGeneratorTrampoline()
481 __ Pop(ebx); in Generate_ResumeGeneratorTrampoline()
482 __ mov(edi, FieldOperand(ebx, JSGeneratorObject::kFunctionOffset)); in Generate_ResumeGeneratorTrampoline()
484 __ jmp(&stepping_prepared); in Generate_ResumeGeneratorTrampoline()
493 __ mov(args_count, in LeaveInterpreterFrame()
495 __ mov(args_count, in LeaveInterpreterFrame()
499 __ leave(); in LeaveInterpreterFrame()
502 __ pop(return_pc); in LeaveInterpreterFrame()
503 __ add(esp, args_count); in LeaveInterpreterFrame()
504 __ push(return_pc); in LeaveInterpreterFrame()
528 __ push(ebp); // Caller's frame pointer. in Generate_InterpreterEntryTrampoline()
529 __ mov(ebp, esp); in Generate_InterpreterEntryTrampoline()
530 __ push(esi); // Callee's context. in Generate_InterpreterEntryTrampoline()
531 __ push(edi); // Callee's JS function. in Generate_InterpreterEntryTrampoline()
532 __ push(edx); // Callee's new target. in Generate_InterpreterEntryTrampoline()
536 __ mov(eax, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_InterpreterEntryTrampoline()
538 __ JumpIfNotSmi(FieldOperand(eax, SharedFunctionInfo::kDebugInfoOffset), in Generate_InterpreterEntryTrampoline()
540 __ mov(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
542 __ bind(&bytecode_array_loaded); in Generate_InterpreterEntryTrampoline()
546 __ Move(ecx, masm->CodeObject()); // Self-reference to this code. in Generate_InterpreterEntryTrampoline()
547 __ cmp(ecx, FieldOperand(eax, SharedFunctionInfo::kCodeOffset)); in Generate_InterpreterEntryTrampoline()
548 __ j(not_equal, &switch_to_different_code_kind); in Generate_InterpreterEntryTrampoline()
551 __ EmitLoadFeedbackVector(ecx); in Generate_InterpreterEntryTrampoline()
552 __ add( in Generate_InterpreterEntryTrampoline()
559 __ AssertNotSmi(kInterpreterBytecodeArrayRegister); in Generate_InterpreterEntryTrampoline()
560 __ CmpObjectType(kInterpreterBytecodeArrayRegister, BYTECODE_ARRAY_TYPE, in Generate_InterpreterEntryTrampoline()
562 __ Assert(equal, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry); in Generate_InterpreterEntryTrampoline()
566 __ mov_b(FieldOperand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
571 __ push(kInterpreterBytecodeArrayRegister); in Generate_InterpreterEntryTrampoline()
573 __ push(Immediate(Smi::FromInt(BytecodeArray::kHeaderSize - kHeapObjectTag))); in Generate_InterpreterEntryTrampoline()
578 __ mov(ebx, FieldOperand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
583 __ mov(ecx, esp); in Generate_InterpreterEntryTrampoline()
584 __ sub(ecx, ebx); in Generate_InterpreterEntryTrampoline()
587 __ cmp(ecx, Operand::StaticVariable(stack_limit)); in Generate_InterpreterEntryTrampoline()
588 __ j(above_equal, &ok); in Generate_InterpreterEntryTrampoline()
589 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterEntryTrampoline()
590 __ bind(&ok); in Generate_InterpreterEntryTrampoline()
595 __ mov(eax, Immediate(masm->isolate()->factory()->undefined_value())); in Generate_InterpreterEntryTrampoline()
596 __ jmp(&loop_check); in Generate_InterpreterEntryTrampoline()
597 __ bind(&loop_header); in Generate_InterpreterEntryTrampoline()
599 __ push(eax); in Generate_InterpreterEntryTrampoline()
601 __ bind(&loop_check); in Generate_InterpreterEntryTrampoline()
602 __ sub(ebx, Immediate(kPointerSize)); in Generate_InterpreterEntryTrampoline()
603 __ j(greater_equal, &loop_header); in Generate_InterpreterEntryTrampoline()
607 __ LoadRoot(kInterpreterAccumulatorRegister, Heap::kUndefinedValueRootIndex); in Generate_InterpreterEntryTrampoline()
608 __ mov(kInterpreterBytecodeOffsetRegister, in Generate_InterpreterEntryTrampoline()
610 __ mov(kInterpreterDispatchTableRegister, in Generate_InterpreterEntryTrampoline()
615 __ movzx_b(ebx, Operand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
617 __ mov(ebx, Operand(kInterpreterDispatchTableRegister, ebx, in Generate_InterpreterEntryTrampoline()
619 __ call(ebx); in Generate_InterpreterEntryTrampoline()
624 __ ret(0); in Generate_InterpreterEntryTrampoline()
627 __ bind(&load_debug_bytecode_array); in Generate_InterpreterEntryTrampoline()
629 __ mov(debug_info, FieldOperand(eax, SharedFunctionInfo::kDebugInfoOffset)); in Generate_InterpreterEntryTrampoline()
630 __ mov(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEntryTrampoline()
632 __ jmp(&bytecode_array_loaded); in Generate_InterpreterEntryTrampoline()
637 __ bind(&switch_to_different_code_kind); in Generate_InterpreterEntryTrampoline()
638 __ pop(edx); // Callee's new target. in Generate_InterpreterEntryTrampoline()
639 __ pop(edi); // Callee's JS function. in Generate_InterpreterEntryTrampoline()
640 __ pop(esi); // Callee's context. in Generate_InterpreterEntryTrampoline()
641 __ leave(); // Leave the frame so we can tail call. in Generate_InterpreterEntryTrampoline()
642 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_InterpreterEntryTrampoline()
643 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kCodeOffset)); in Generate_InterpreterEntryTrampoline()
644 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_InterpreterEntryTrampoline()
645 __ mov(FieldOperand(edi, JSFunction::kCodeEntryOffset), ecx); in Generate_InterpreterEntryTrampoline()
646 __ RecordWriteCodeEntryField(edi, ecx, ebx); in Generate_InterpreterEntryTrampoline()
647 __ jmp(ecx); in Generate_InterpreterEntryTrampoline()
659 __ mov(scratch1, Operand::StaticVariable(real_stack_limit)); in Generate_StackOverflowCheck()
662 __ mov(scratch2, esp); in Generate_StackOverflowCheck()
663 __ sub(scratch2, scratch1); in Generate_StackOverflowCheck()
666 __ mov(scratch1, num_args); in Generate_StackOverflowCheck()
668 __ add(scratch1, Immediate(1)); in Generate_StackOverflowCheck()
670 __ shl(scratch1, kPointerSizeLog2); in Generate_StackOverflowCheck()
672 __ cmp(scratch2, scratch1); in Generate_StackOverflowCheck()
673 __ j(less_equal, stack_overflow); // Signed comparison. in Generate_StackOverflowCheck()
685 __ jmp(&loop_check); in Generate_InterpreterPushArgs()
686 __ bind(&loop_header); in Generate_InterpreterPushArgs()
687 __ Push(Operand(start_address, 0)); in Generate_InterpreterPushArgs()
688 __ sub(start_address, Immediate(kPointerSize)); in Generate_InterpreterPushArgs()
689 __ bind(&loop_check); in Generate_InterpreterPushArgs()
690 __ cmp(start_address, array_limit); in Generate_InterpreterPushArgs()
691 __ j(greater, &loop_header, Label::kNear); in Generate_InterpreterPushArgs()
707 __ mov(ecx, eax); in Generate_InterpreterPushArgsAndCallImpl()
708 __ add(ecx, Immediate(1)); // Add one for receiver. in Generate_InterpreterPushArgsAndCallImpl()
713 __ Push(edi); in Generate_InterpreterPushArgsAndCallImpl()
715 __ Pop(edi); in Generate_InterpreterPushArgsAndCallImpl()
718 __ Pop(edx); in Generate_InterpreterPushArgsAndCallImpl()
721 __ shl(ecx, kPointerSizeLog2); in Generate_InterpreterPushArgsAndCallImpl()
722 __ neg(ecx); in Generate_InterpreterPushArgsAndCallImpl()
723 __ add(ecx, ebx); in Generate_InterpreterPushArgsAndCallImpl()
727 __ Push(edx); // Re-push return address. in Generate_InterpreterPushArgsAndCallImpl()
730 __ Jump(masm->isolate()->builtins()->CallFunction(ConvertReceiverMode::kAny, in Generate_InterpreterPushArgsAndCallImpl()
734 __ Jump(masm->isolate()->builtins()->CallWithSpread(), in Generate_InterpreterPushArgsAndCallImpl()
737 __ Jump(masm->isolate()->builtins()->Call(ConvertReceiverMode::kAny, in Generate_InterpreterPushArgsAndCallImpl()
742 __ bind(&stack_overflow); in Generate_InterpreterPushArgsAndCallImpl()
745 __ Pop(edi); in Generate_InterpreterPushArgsAndCallImpl()
747 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterPushArgsAndCallImpl()
750 __ int3(); in Generate_InterpreterPushArgsAndCallImpl()
795 __ bind(&check_offset); in Generate_InterpreterPushArgsAndReturnAddress()
796 __ cmp(scratch1, page_size); in Generate_InterpreterPushArgsAndReturnAddress()
797 __ j(less, &update_stack_pointer); in Generate_InterpreterPushArgsAndReturnAddress()
798 __ sub(esp, Immediate(page_size)); in Generate_InterpreterPushArgsAndReturnAddress()
800 __ mov(Operand(esp, 0), Immediate(0)); in Generate_InterpreterPushArgsAndReturnAddress()
801 __ sub(scratch1, Immediate(page_size)); in Generate_InterpreterPushArgsAndReturnAddress()
802 __ jmp(&check_offset); in Generate_InterpreterPushArgsAndReturnAddress()
803 __ bind(&update_stack_pointer); in Generate_InterpreterPushArgsAndReturnAddress()
806 __ sub(esp, scratch1); in Generate_InterpreterPushArgsAndReturnAddress()
813 __ mov(scratch1, in Generate_InterpreterPushArgsAndReturnAddress()
815 __ mov(Operand(esp, i * kPointerSize), scratch1); in Generate_InterpreterPushArgsAndReturnAddress()
820 __ mov(scratch1, num_args); in Generate_InterpreterPushArgsAndReturnAddress()
821 __ add(scratch1, Immediate(1)); in Generate_InterpreterPushArgsAndReturnAddress()
825 __ mov(Operand(esp, num_args, times_pointer_size, in Generate_InterpreterPushArgsAndReturnAddress()
828 __ mov(scratch1, num_args); in Generate_InterpreterPushArgsAndReturnAddress()
832 __ jmp(&loop_check); in Generate_InterpreterPushArgsAndReturnAddress()
833 __ bind(&loop_header); in Generate_InterpreterPushArgsAndReturnAddress()
834 __ mov(scratch2, Operand(start_addr, 0)); in Generate_InterpreterPushArgsAndReturnAddress()
835 __ mov(Operand(esp, scratch1, times_pointer_size, in Generate_InterpreterPushArgsAndReturnAddress()
838 __ sub(start_addr, Immediate(kPointerSize)); in Generate_InterpreterPushArgsAndReturnAddress()
839 __ sub(scratch1, Immediate(1)); in Generate_InterpreterPushArgsAndReturnAddress()
840 __ bind(&loop_check); in Generate_InterpreterPushArgsAndReturnAddress()
841 __ cmp(scratch1, Immediate(0)); in Generate_InterpreterPushArgsAndReturnAddress()
842 __ j(greater, &loop_header, Label::kNear); in Generate_InterpreterPushArgsAndReturnAddress()
861 __ Push(edi); in Generate_InterpreterPushArgsAndConstructImpl()
862 __ Push(edx); in Generate_InterpreterPushArgsAndConstructImpl()
871 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructImpl()
872 __ Pop(edi); in Generate_InterpreterPushArgsAndConstructImpl()
874 __ AssertUndefinedOrAllocationSite(ebx); in Generate_InterpreterPushArgsAndConstructImpl()
878 __ AssertFunction(edi); in Generate_InterpreterPushArgsAndConstructImpl()
880 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_InterpreterPushArgsAndConstructImpl()
881 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kConstructStubOffset)); in Generate_InterpreterPushArgsAndConstructImpl()
882 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_InterpreterPushArgsAndConstructImpl()
883 __ jmp(ecx); in Generate_InterpreterPushArgsAndConstructImpl()
886 __ Jump(masm->isolate()->builtins()->ConstructWithSpread(), in Generate_InterpreterPushArgsAndConstructImpl()
891 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); in Generate_InterpreterPushArgsAndConstructImpl()
894 __ bind(&stack_overflow); in Generate_InterpreterPushArgsAndConstructImpl()
897 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructImpl()
898 __ Pop(edi); in Generate_InterpreterPushArgsAndConstructImpl()
900 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterPushArgsAndConstructImpl()
903 __ int3(); in Generate_InterpreterPushArgsAndConstructImpl()
921 __ Push(edx); in Generate_InterpreterPushArgsAndConstructArray()
930 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructArray()
933 __ Move(edi, edx); in Generate_InterpreterPushArgsAndConstructArray()
936 __ TailCallStub(&stub); in Generate_InterpreterPushArgsAndConstructArray()
938 __ bind(&stack_overflow); in Generate_InterpreterPushArgsAndConstructArray()
941 __ Pop(edx); in Generate_InterpreterPushArgsAndConstructArray()
943 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_InterpreterPushArgsAndConstructArray()
946 __ int3(); in Generate_InterpreterPushArgsAndConstructArray()
956 __ LoadHeapObject(ebx, in Generate_InterpreterEnterBytecode()
958 __ add(ebx, Immediate(interpreter_entry_return_pc_offset->value() + in Generate_InterpreterEnterBytecode()
960 __ push(ebx); in Generate_InterpreterEnterBytecode()
963 __ mov(kInterpreterDispatchTableRegister, in Generate_InterpreterEnterBytecode()
968 __ mov(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEnterBytecode()
973 __ AssertNotSmi(kInterpreterBytecodeArrayRegister); in Generate_InterpreterEnterBytecode()
974 __ CmpObjectType(kInterpreterBytecodeArrayRegister, BYTECODE_ARRAY_TYPE, in Generate_InterpreterEnterBytecode()
976 __ Assert(equal, kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry); in Generate_InterpreterEnterBytecode()
980 __ mov(kInterpreterBytecodeOffsetRegister, in Generate_InterpreterEnterBytecode()
982 __ SmiUntag(kInterpreterBytecodeOffsetRegister); in Generate_InterpreterEnterBytecode()
985 __ movzx_b(ebx, Operand(kInterpreterBytecodeArrayRegister, in Generate_InterpreterEnterBytecode()
987 __ mov(ebx, Operand(kInterpreterDispatchTableRegister, ebx, in Generate_InterpreterEnterBytecode()
989 __ jmp(ebx); in Generate_InterpreterEnterBytecode()
996 __ mov(ebx, Operand(ebp, InterpreterFrameConstants::kBytecodeArrayFromFp)); in Generate_InterpreterEnterBytecodeAdvance()
997 __ mov(edx, Operand(ebp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); in Generate_InterpreterEnterBytecodeAdvance()
998 __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); in Generate_InterpreterEnterBytecodeAdvance()
1001 __ Push(kInterpreterAccumulatorRegister); in Generate_InterpreterEnterBytecodeAdvance()
1002 __ Push(ebx); // First argument is the bytecode array. in Generate_InterpreterEnterBytecodeAdvance()
1003 __ Push(edx); // Second argument is the bytecode offset. in Generate_InterpreterEnterBytecodeAdvance()
1004 __ CallRuntime(Runtime::kInterpreterAdvanceBytecodeOffset); in Generate_InterpreterEnterBytecodeAdvance()
1005 __ Move(edx, eax); // Result is the new bytecode offset. in Generate_InterpreterEnterBytecodeAdvance()
1006 __ Pop(kInterpreterAccumulatorRegister); in Generate_InterpreterEnterBytecodeAdvance()
1008 __ mov(Operand(ebp, InterpreterFrameConstants::kBytecodeOffsetFromFp), edx); in Generate_InterpreterEnterBytecodeAdvance()
1033 __ mov(ebx, FieldOperand(closure, JSFunction::kFeedbackVectorOffset)); in Generate_CompileLazy()
1034 __ mov(ebx, FieldOperand(ebx, Cell::kValueOffset)); in Generate_CompileLazy()
1035 __ cmp(ebx, masm->isolate()->factory()->undefined_value()); in Generate_CompileLazy()
1036 __ j(equal, &gotta_call_runtime_no_stack); in Generate_CompileLazy()
1038 __ push(argument_count); in Generate_CompileLazy()
1039 __ push(new_target); in Generate_CompileLazy()
1040 __ push(closure); in Generate_CompileLazy()
1044 __ mov(map, FieldOperand(closure, JSFunction::kSharedFunctionInfoOffset)); in Generate_CompileLazy()
1045 __ mov(map, FieldOperand(map, SharedFunctionInfo::kOptimizedCodeMapOffset)); in Generate_CompileLazy()
1046 __ mov(index, FieldOperand(map, FixedArray::kLengthOffset)); in Generate_CompileLazy()
1047 __ cmp(index, Immediate(Smi::FromInt(2))); in Generate_CompileLazy()
1048 __ j(less, &try_shared); in Generate_CompileLazy()
1056 __ mov(native_context, NativeContextOperand()); in Generate_CompileLazy()
1058 __ bind(&loop_top); in Generate_CompileLazy()
1062 __ mov(temp, FieldOperand(map, index, times_half_pointer_size, in Generate_CompileLazy()
1064 __ mov(temp, FieldOperand(temp, WeakCell::kValueOffset)); in Generate_CompileLazy()
1065 __ cmp(temp, native_context); in Generate_CompileLazy()
1066 __ j(not_equal, &loop_bottom); in Generate_CompileLazy()
1069 __ mov(entry, FieldOperand(map, index, times_half_pointer_size, in Generate_CompileLazy()
1071 __ mov(entry, FieldOperand(entry, WeakCell::kValueOffset)); in Generate_CompileLazy()
1072 __ JumpIfSmi(entry, &try_shared); in Generate_CompileLazy()
1075 __ pop(closure); in Generate_CompileLazy()
1077 __ lea(entry, FieldOperand(entry, Code::kHeaderSize)); in Generate_CompileLazy()
1078 __ mov(FieldOperand(closure, JSFunction::kCodeEntryOffset), entry); in Generate_CompileLazy()
1079 __ RecordWriteCodeEntryField(closure, entry, eax); in Generate_CompileLazy()
1085 __ mov(ebx, in Generate_CompileLazy()
1087 __ mov(FieldOperand(closure, JSFunction::kNextFunctionLinkOffset), ebx); in Generate_CompileLazy()
1088 __ RecordWriteField(closure, JSFunction::kNextFunctionLinkOffset, ebx, eax, in Generate_CompileLazy()
1092 __ mov(ContextOperand(native_context, Context::OPTIMIZED_FUNCTIONS_LIST), in Generate_CompileLazy()
1095 __ mov(ebx, closure); in Generate_CompileLazy()
1096 __ RecordWriteContextSlot(native_context, function_list_offset, closure, eax, in Generate_CompileLazy()
1098 __ mov(closure, ebx); in Generate_CompileLazy()
1099 __ pop(new_target); in Generate_CompileLazy()
1100 __ pop(argument_count); in Generate_CompileLazy()
1101 __ jmp(entry); in Generate_CompileLazy()
1103 __ bind(&loop_bottom); in Generate_CompileLazy()
1104 __ sub(index, Immediate(Smi::FromInt(SharedFunctionInfo::kEntryLength))); in Generate_CompileLazy()
1105 __ cmp(index, Immediate(Smi::FromInt(1))); in Generate_CompileLazy()
1106 __ j(greater, &loop_top); in Generate_CompileLazy()
1109 __ jmp(&gotta_call_runtime); in Generate_CompileLazy()
1111 __ bind(&try_shared); in Generate_CompileLazy()
1112 __ pop(closure); in Generate_CompileLazy()
1113 __ pop(new_target); in Generate_CompileLazy()
1114 __ pop(argument_count); in Generate_CompileLazy()
1115 __ mov(entry, FieldOperand(closure, JSFunction::kSharedFunctionInfoOffset)); in Generate_CompileLazy()
1117 __ test_b(FieldOperand(entry, SharedFunctionInfo::kMarkedForTierUpByteOffset), in Generate_CompileLazy()
1119 __ j(not_zero, &gotta_call_runtime_no_stack); in Generate_CompileLazy()
1122 __ mov(entry, FieldOperand(entry, SharedFunctionInfo::kCodeOffset)); in Generate_CompileLazy()
1123 __ Move(ebx, masm->CodeObject()); in Generate_CompileLazy()
1124 __ cmp(entry, ebx); in Generate_CompileLazy()
1125 __ j(equal, &gotta_call_runtime_no_stack); in Generate_CompileLazy()
1128 __ lea(entry, FieldOperand(entry, Code::kHeaderSize)); in Generate_CompileLazy()
1129 __ mov(FieldOperand(closure, JSFunction::kCodeEntryOffset), entry); in Generate_CompileLazy()
1130 __ RecordWriteCodeEntryField(closure, entry, ebx); in Generate_CompileLazy()
1131 __ jmp(entry); in Generate_CompileLazy()
1133 __ bind(&gotta_call_runtime); in Generate_CompileLazy()
1134 __ pop(closure); in Generate_CompileLazy()
1135 __ pop(new_target); in Generate_CompileLazy()
1136 __ pop(argument_count); in Generate_CompileLazy()
1137 __ bind(&gotta_call_runtime_no_stack); in Generate_CompileLazy()
1165 __ mov(ecx, eax); in Generate_InstantiateAsmJs()
1167 __ SmiTag(eax); in Generate_InstantiateAsmJs()
1168 __ push(eax); in Generate_InstantiateAsmJs()
1170 __ push(edi); in Generate_InstantiateAsmJs()
1171 __ push(edx); in Generate_InstantiateAsmJs()
1174 __ push(edi); in Generate_InstantiateAsmJs()
1180 __ cmp(ecx, Immediate(j)); in Generate_InstantiateAsmJs()
1181 __ j(not_equal, &over, Label::kNear); in Generate_InstantiateAsmJs()
1184 __ Push(Operand( in Generate_InstantiateAsmJs()
1188 __ PushRoot(Heap::kUndefinedValueRootIndex); in Generate_InstantiateAsmJs()
1191 __ jmp(&args_done, Label::kNear); in Generate_InstantiateAsmJs()
1192 __ bind(&over); in Generate_InstantiateAsmJs()
1195 __ bind(&args_done); in Generate_InstantiateAsmJs()
1198 __ CallRuntime(Runtime::kInstantiateAsmJs, 4); in Generate_InstantiateAsmJs()
1200 __ JumpIfSmi(eax, &failed, Label::kNear); in Generate_InstantiateAsmJs()
1202 __ Drop(2); in Generate_InstantiateAsmJs()
1203 __ Pop(ecx); in Generate_InstantiateAsmJs()
1204 __ SmiUntag(ecx); in Generate_InstantiateAsmJs()
1207 __ PopReturnAddressTo(ebx); in Generate_InstantiateAsmJs()
1208 __ inc(ecx); in Generate_InstantiateAsmJs()
1209 __ lea(esp, Operand(esp, ecx, times_pointer_size, 0)); in Generate_InstantiateAsmJs()
1210 __ PushReturnAddressFrom(ebx); in Generate_InstantiateAsmJs()
1211 __ ret(0); in Generate_InstantiateAsmJs()
1213 __ bind(&failed); in Generate_InstantiateAsmJs()
1215 __ pop(edx); in Generate_InstantiateAsmJs()
1216 __ pop(edi); in Generate_InstantiateAsmJs()
1217 __ pop(eax); in Generate_InstantiateAsmJs()
1218 __ SmiUntag(eax); in Generate_InstantiateAsmJs()
1233 __ sub(Operand(esp, 0), Immediate(5)); in GenerateMakeCodeYoungAgainCommon()
1234 __ pushad(); in GenerateMakeCodeYoungAgainCommon()
1235 __ mov(eax, Operand(esp, 8 * kPointerSize)); in GenerateMakeCodeYoungAgainCommon()
1238 __ PrepareCallCFunction(2, ebx); in GenerateMakeCodeYoungAgainCommon()
1239 __ mov(Operand(esp, 1 * kPointerSize), in GenerateMakeCodeYoungAgainCommon()
1241 __ mov(Operand(esp, 0), eax); in GenerateMakeCodeYoungAgainCommon()
1242 __ CallCFunction( in GenerateMakeCodeYoungAgainCommon()
1245 __ popad(); in GenerateMakeCodeYoungAgainCommon()
1246 __ ret(0); in GenerateMakeCodeYoungAgainCommon()
1261 __ pushad(); in CODE_AGE_LIST()
1262 __ mov(eax, Operand(esp, 8 * kPointerSize)); in CODE_AGE_LIST()
1263 __ sub(eax, Immediate(Assembler::kCallInstructionLength)); in CODE_AGE_LIST()
1266 __ PrepareCallCFunction(2, ebx); in CODE_AGE_LIST()
1267 __ mov(Operand(esp, 1 * kPointerSize), in CODE_AGE_LIST()
1269 __ mov(Operand(esp, 0), eax); in CODE_AGE_LIST()
1270 __ CallCFunction( in CODE_AGE_LIST()
1274 __ popad(); in CODE_AGE_LIST()
1277 __ pop(eax); // Pop return address into scratch register. in CODE_AGE_LIST()
1278 __ push(ebp); // Caller's frame pointer. in CODE_AGE_LIST()
1279 __ mov(ebp, esp); in CODE_AGE_LIST()
1280 __ push(esi); // Callee's context. in CODE_AGE_LIST()
1281 __ push(edi); // Callee's JS Function. in CODE_AGE_LIST()
1282 __ push(eax); // Push return address after frame prologue. in CODE_AGE_LIST()
1285 __ ret(0); in CODE_AGE_LIST()
1305 __ pushad(); in Generate_NotifyStubFailureHelper()
1306 __ CallRuntime(Runtime::kNotifyStubFailure, save_doubles); in Generate_NotifyStubFailureHelper()
1307 __ popad(); in Generate_NotifyStubFailureHelper()
1311 __ pop(MemOperand(esp, 0)); // Ignore state offset in Generate_NotifyStubFailureHelper()
1312 __ ret(0); // Return to IC Miss stub, continuation still on stack. in Generate_NotifyStubFailureHelper()
1329 __ push(Immediate(Smi::FromInt(static_cast<int>(type)))); in Generate_NotifyDeoptimizedHelper()
1330 __ CallRuntime(Runtime::kNotifyDeoptimized); in Generate_NotifyDeoptimizedHelper()
1336 __ mov(ecx, Operand(esp, 1 * kPointerSize)); in Generate_NotifyDeoptimizedHelper()
1337 __ SmiUntag(ecx); in Generate_NotifyDeoptimizedHelper()
1341 __ cmp(ecx, static_cast<int>(Deoptimizer::BailoutState::NO_REGISTERS)); in Generate_NotifyDeoptimizedHelper()
1342 __ j(not_equal, &not_no_registers, Label::kNear); in Generate_NotifyDeoptimizedHelper()
1343 __ ret(1 * kPointerSize); // Remove state. in Generate_NotifyDeoptimizedHelper()
1345 __ bind(&not_no_registers); in Generate_NotifyDeoptimizedHelper()
1347 __ mov(eax, Operand(esp, 2 * kPointerSize)); in Generate_NotifyDeoptimizedHelper()
1348 __ cmp(ecx, static_cast<int>(Deoptimizer::BailoutState::TOS_REGISTER)); in Generate_NotifyDeoptimizedHelper()
1349 __ j(not_equal, &not_tos_eax, Label::kNear); in Generate_NotifyDeoptimizedHelper()
1350 __ ret(2 * kPointerSize); // Remove state, eax. in Generate_NotifyDeoptimizedHelper()
1352 __ bind(&not_tos_eax); in Generate_NotifyDeoptimizedHelper()
1353 __ Abort(kNoCasesLeft); in Generate_NotifyDeoptimizedHelper()
1383 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_FunctionPrototypeApply()
1384 __ mov(ebx, edx); in Generate_FunctionPrototypeApply()
1385 __ mov(edi, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_FunctionPrototypeApply()
1386 __ test(eax, eax); in Generate_FunctionPrototypeApply()
1387 __ j(zero, &no_this_arg, Label::kNear); in Generate_FunctionPrototypeApply()
1389 __ mov(edx, Operand(esp, eax, times_pointer_size, 0)); in Generate_FunctionPrototypeApply()
1390 __ cmp(eax, Immediate(1)); in Generate_FunctionPrototypeApply()
1391 __ j(equal, &no_arg_array, Label::kNear); in Generate_FunctionPrototypeApply()
1392 __ mov(ebx, Operand(esp, eax, times_pointer_size, -kPointerSize)); in Generate_FunctionPrototypeApply()
1393 __ bind(&no_arg_array); in Generate_FunctionPrototypeApply()
1395 __ bind(&no_this_arg); in Generate_FunctionPrototypeApply()
1396 __ PopReturnAddressTo(ecx); in Generate_FunctionPrototypeApply()
1397 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_FunctionPrototypeApply()
1398 __ Push(edx); in Generate_FunctionPrototypeApply()
1399 __ PushReturnAddressFrom(ecx); in Generate_FunctionPrototypeApply()
1400 __ Move(eax, ebx); in Generate_FunctionPrototypeApply()
1412 __ JumpIfSmi(edi, &receiver_not_callable, Label::kNear); in Generate_FunctionPrototypeApply()
1413 __ mov(ecx, FieldOperand(edi, HeapObject::kMapOffset)); in Generate_FunctionPrototypeApply()
1414 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_FunctionPrototypeApply()
1416 __ j(zero, &receiver_not_callable, Label::kNear); in Generate_FunctionPrototypeApply()
1420 __ JumpIfRoot(eax, Heap::kNullValueRootIndex, &no_arguments, Label::kNear); in Generate_FunctionPrototypeApply()
1421 __ JumpIfRoot(eax, Heap::kUndefinedValueRootIndex, &no_arguments, in Generate_FunctionPrototypeApply()
1426 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_FunctionPrototypeApply()
1427 __ Jump(masm->isolate()->builtins()->Apply(), RelocInfo::CODE_TARGET); in Generate_FunctionPrototypeApply()
1431 __ bind(&no_arguments); in Generate_FunctionPrototypeApply()
1433 __ Set(eax, 0); in Generate_FunctionPrototypeApply()
1434 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); in Generate_FunctionPrototypeApply()
1438 __ bind(&receiver_not_callable); in Generate_FunctionPrototypeApply()
1440 __ mov(Operand(esp, kPointerSize), edi); in Generate_FunctionPrototypeApply()
1441 __ TailCallRuntime(Runtime::kThrowApplyNonFunction); in Generate_FunctionPrototypeApply()
1460 __ test(eax, eax); in Generate_FunctionPrototypeCall()
1461 __ j(not_zero, &done, Label::kNear); in Generate_FunctionPrototypeCall()
1462 __ PopReturnAddressTo(ebx); in Generate_FunctionPrototypeCall()
1463 __ PushRoot(Heap::kUndefinedValueRootIndex); in Generate_FunctionPrototypeCall()
1464 __ PushReturnAddressFrom(ebx); in Generate_FunctionPrototypeCall()
1465 __ inc(eax); in Generate_FunctionPrototypeCall()
1466 __ bind(&done); in Generate_FunctionPrototypeCall()
1470 __ mov(edi, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_FunctionPrototypeCall()
1477 __ mov(ecx, eax); in Generate_FunctionPrototypeCall()
1478 __ bind(&loop); in Generate_FunctionPrototypeCall()
1479 __ mov(ebx, Operand(esp, ecx, times_pointer_size, 0)); in Generate_FunctionPrototypeCall()
1480 __ mov(Operand(esp, ecx, times_pointer_size, kPointerSize), ebx); in Generate_FunctionPrototypeCall()
1481 __ dec(ecx); in Generate_FunctionPrototypeCall()
1482 __ j(not_sign, &loop); // While non-negative (to copy return address). in Generate_FunctionPrototypeCall()
1483 __ pop(ebx); // Discard copy of return address. in Generate_FunctionPrototypeCall()
1484 __ dec(eax); // One fewer argument (first argument is new receiver). in Generate_FunctionPrototypeCall()
1488 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); in Generate_FunctionPrototypeCall()
1506 __ LoadRoot(edi, Heap::kUndefinedValueRootIndex); in Generate_ReflectApply()
1507 __ mov(edx, edi); in Generate_ReflectApply()
1508 __ mov(ebx, edi); in Generate_ReflectApply()
1509 __ cmp(eax, Immediate(1)); in Generate_ReflectApply()
1510 __ j(below, &done, Label::kNear); in Generate_ReflectApply()
1511 __ mov(edi, Operand(esp, eax, times_pointer_size, -0 * kPointerSize)); in Generate_ReflectApply()
1512 __ j(equal, &done, Label::kNear); in Generate_ReflectApply()
1513 __ mov(edx, Operand(esp, eax, times_pointer_size, -1 * kPointerSize)); in Generate_ReflectApply()
1514 __ cmp(eax, Immediate(3)); in Generate_ReflectApply()
1515 __ j(below, &done, Label::kNear); in Generate_ReflectApply()
1516 __ mov(ebx, Operand(esp, eax, times_pointer_size, -2 * kPointerSize)); in Generate_ReflectApply()
1517 __ bind(&done); in Generate_ReflectApply()
1518 __ PopReturnAddressTo(ecx); in Generate_ReflectApply()
1519 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_ReflectApply()
1520 __ Push(edx); in Generate_ReflectApply()
1521 __ PushReturnAddressFrom(ecx); in Generate_ReflectApply()
1522 __ Move(eax, ebx); in Generate_ReflectApply()
1534 __ JumpIfSmi(edi, &target_not_callable, Label::kNear); in Generate_ReflectApply()
1535 __ mov(ecx, FieldOperand(edi, HeapObject::kMapOffset)); in Generate_ReflectApply()
1536 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_ReflectApply()
1538 __ j(zero, &target_not_callable, Label::kNear); in Generate_ReflectApply()
1542 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_ReflectApply()
1543 __ Jump(masm->isolate()->builtins()->Apply(), RelocInfo::CODE_TARGET); in Generate_ReflectApply()
1546 __ bind(&target_not_callable); in Generate_ReflectApply()
1548 __ mov(Operand(esp, kPointerSize), edi); in Generate_ReflectApply()
1549 __ TailCallRuntime(Runtime::kThrowApplyNonFunction); in Generate_ReflectApply()
1569 __ LoadRoot(edi, Heap::kUndefinedValueRootIndex); in Generate_ReflectConstruct()
1570 __ mov(edx, edi); in Generate_ReflectConstruct()
1571 __ mov(ebx, edi); in Generate_ReflectConstruct()
1572 __ cmp(eax, Immediate(1)); in Generate_ReflectConstruct()
1573 __ j(below, &done, Label::kNear); in Generate_ReflectConstruct()
1574 __ mov(edi, Operand(esp, eax, times_pointer_size, -0 * kPointerSize)); in Generate_ReflectConstruct()
1575 __ mov(edx, edi); in Generate_ReflectConstruct()
1576 __ j(equal, &done, Label::kNear); in Generate_ReflectConstruct()
1577 __ mov(ebx, Operand(esp, eax, times_pointer_size, -1 * kPointerSize)); in Generate_ReflectConstruct()
1578 __ cmp(eax, Immediate(3)); in Generate_ReflectConstruct()
1579 __ j(below, &done, Label::kNear); in Generate_ReflectConstruct()
1580 __ mov(edx, Operand(esp, eax, times_pointer_size, -2 * kPointerSize)); in Generate_ReflectConstruct()
1581 __ bind(&done); in Generate_ReflectConstruct()
1582 __ PopReturnAddressTo(ecx); in Generate_ReflectConstruct()
1583 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_ReflectConstruct()
1584 __ PushRoot(Heap::kUndefinedValueRootIndex); in Generate_ReflectConstruct()
1585 __ PushReturnAddressFrom(ecx); in Generate_ReflectConstruct()
1586 __ Move(eax, ebx); in Generate_ReflectConstruct()
1599 __ JumpIfSmi(edi, &target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1600 __ mov(ecx, FieldOperand(edi, HeapObject::kMapOffset)); in Generate_ReflectConstruct()
1601 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_ReflectConstruct()
1603 __ j(zero, &target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1607 __ JumpIfSmi(edx, &new_target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1608 __ mov(ecx, FieldOperand(edx, HeapObject::kMapOffset)); in Generate_ReflectConstruct()
1609 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_ReflectConstruct()
1611 __ j(zero, &new_target_not_constructor, Label::kNear); in Generate_ReflectConstruct()
1614 __ Jump(masm->isolate()->builtins()->Apply(), RelocInfo::CODE_TARGET); in Generate_ReflectConstruct()
1617 __ bind(&target_not_constructor); in Generate_ReflectConstruct()
1619 __ mov(Operand(esp, kPointerSize), edi); in Generate_ReflectConstruct()
1620 __ TailCallRuntime(Runtime::kThrowNotConstructor); in Generate_ReflectConstruct()
1624 __ bind(&new_target_not_constructor); in Generate_ReflectConstruct()
1626 __ mov(Operand(esp, kPointerSize), edx); in Generate_ReflectConstruct()
1627 __ TailCallRuntime(Runtime::kThrowNotConstructor); in Generate_ReflectConstruct()
1640 __ LoadGlobalFunction(Context::INTERNAL_ARRAY_FUNCTION_INDEX, edi); in Generate_InternalArrayCode()
1644 __ mov(ebx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset)); in Generate_InternalArrayCode()
1646 __ test(ebx, Immediate(kSmiTagMask)); in Generate_InternalArrayCode()
1647 __ Assert(not_zero, kUnexpectedInitialMapForInternalArrayFunction); in Generate_InternalArrayCode()
1648 __ CmpObjectType(ebx, MAP_TYPE, ecx); in Generate_InternalArrayCode()
1649 __ Assert(equal, kUnexpectedInitialMapForInternalArrayFunction); in Generate_InternalArrayCode()
1656 __ TailCallStub(&stub); in Generate_InternalArrayCode()
1668 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, edi); in Generate_ArrayCode()
1669 __ mov(edx, edi); in Generate_ArrayCode()
1673 __ mov(ebx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset)); in Generate_ArrayCode()
1675 __ test(ebx, Immediate(kSmiTagMask)); in Generate_ArrayCode()
1676 __ Assert(not_zero, kUnexpectedInitialMapForArrayFunction); in Generate_ArrayCode()
1677 __ CmpObjectType(ebx, MAP_TYPE, ecx); in Generate_ArrayCode()
1678 __ Assert(equal, kUnexpectedInitialMapForArrayFunction); in Generate_ArrayCode()
1683 __ mov(ebx, masm->isolate()->factory()->undefined_value()); in Generate_ArrayCode()
1685 __ TailCallStub(&stub); in Generate_ArrayCode()
1706 __ LoadRoot(edx, root_index); in Generate_MathMaxMin()
1707 __ fld_d(FieldOperand(edx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1708 __ Move(ecx, eax); in Generate_MathMaxMin()
1711 __ bind(&loop); in Generate_MathMaxMin()
1714 __ test(ecx, ecx); in Generate_MathMaxMin()
1715 __ j(zero, &done_loop); in Generate_MathMaxMin()
1718 __ mov(ebx, Operand(esp, ecx, times_pointer_size, 0)); in Generate_MathMaxMin()
1723 __ bind(&convert); in Generate_MathMaxMin()
1724 __ JumpIfSmi(ebx, &convert_smi); in Generate_MathMaxMin()
1725 __ JumpIfRoot(FieldOperand(ebx, HeapObject::kMapOffset), in Generate_MathMaxMin()
1730 __ SmiTag(eax); in Generate_MathMaxMin()
1731 __ SmiTag(ecx); in Generate_MathMaxMin()
1732 __ EnterBuiltinFrame(esi, edi, eax); in Generate_MathMaxMin()
1733 __ Push(ecx); in Generate_MathMaxMin()
1734 __ Push(edx); in Generate_MathMaxMin()
1735 __ mov(eax, ebx); in Generate_MathMaxMin()
1736 __ Call(masm->isolate()->builtins()->ToNumber(), RelocInfo::CODE_TARGET); in Generate_MathMaxMin()
1737 __ mov(ebx, eax); in Generate_MathMaxMin()
1738 __ Pop(edx); in Generate_MathMaxMin()
1739 __ Pop(ecx); in Generate_MathMaxMin()
1740 __ LeaveBuiltinFrame(esi, edi, eax); in Generate_MathMaxMin()
1741 __ SmiUntag(ecx); in Generate_MathMaxMin()
1742 __ SmiUntag(eax); in Generate_MathMaxMin()
1746 __ JumpIfSmi(edx, &restore_smi, Label::kNear); in Generate_MathMaxMin()
1747 __ fld_d(FieldOperand(edx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1748 __ jmp(&done_restore, Label::kNear); in Generate_MathMaxMin()
1749 __ bind(&restore_smi); in Generate_MathMaxMin()
1750 __ SmiUntag(edx); in Generate_MathMaxMin()
1751 __ push(edx); in Generate_MathMaxMin()
1752 __ fild_s(Operand(esp, 0)); in Generate_MathMaxMin()
1753 __ pop(edx); in Generate_MathMaxMin()
1754 __ SmiTag(edx); in Generate_MathMaxMin()
1755 __ bind(&done_restore); in Generate_MathMaxMin()
1758 __ jmp(&convert); in Generate_MathMaxMin()
1759 __ bind(&convert_number); in Generate_MathMaxMin()
1761 __ fld_d(FieldOperand(ebx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1762 __ fxch(); in Generate_MathMaxMin()
1763 __ jmp(&done_convert, Label::kNear); in Generate_MathMaxMin()
1764 __ bind(&convert_smi); in Generate_MathMaxMin()
1765 __ SmiUntag(ebx); in Generate_MathMaxMin()
1766 __ push(ebx); in Generate_MathMaxMin()
1767 __ fild_s(Operand(esp, 0)); in Generate_MathMaxMin()
1768 __ pop(ebx); in Generate_MathMaxMin()
1769 __ fxch(); in Generate_MathMaxMin()
1770 __ SmiTag(ebx); in Generate_MathMaxMin()
1771 __ bind(&done_convert); in Generate_MathMaxMin()
1778 __ fld(1); in Generate_MathMaxMin()
1779 __ fld(1); in Generate_MathMaxMin()
1780 __ FCmp(); in Generate_MathMaxMin()
1781 __ j(parity_even, &compare_nan, Label::kNear); in Generate_MathMaxMin()
1782 __ j(cc, &done_compare, Label::kNear); in Generate_MathMaxMin()
1783 __ j(equal, &compare_equal, Label::kNear); in Generate_MathMaxMin()
1786 __ bind(&compare_swap); in Generate_MathMaxMin()
1787 __ fxch(); in Generate_MathMaxMin()
1788 __ mov(edx, ebx); in Generate_MathMaxMin()
1789 __ jmp(&done_compare, Label::kNear); in Generate_MathMaxMin()
1792 __ bind(&compare_nan); in Generate_MathMaxMin()
1794 __ fstp(0); in Generate_MathMaxMin()
1795 __ LoadRoot(edx, Heap::kNanValueRootIndex); in Generate_MathMaxMin()
1796 __ fld_d(FieldOperand(edx, HeapNumber::kValueOffset)); in Generate_MathMaxMin()
1797 __ jmp(&done_compare, Label::kNear); in Generate_MathMaxMin()
1800 __ bind(&compare_equal); in Generate_MathMaxMin()
1802 __ fld(reg_sel); in Generate_MathMaxMin()
1803 __ FXamSign(); in Generate_MathMaxMin()
1804 __ j(not_zero, &compare_swap); in Generate_MathMaxMin()
1806 __ bind(&done_compare); in Generate_MathMaxMin()
1809 __ fxch(); in Generate_MathMaxMin()
1810 __ fstp(0); in Generate_MathMaxMin()
1811 __ dec(ecx); in Generate_MathMaxMin()
1812 __ jmp(&loop); in Generate_MathMaxMin()
1815 __ bind(&done_loop); in Generate_MathMaxMin()
1816 __ PopReturnAddressTo(ecx); in Generate_MathMaxMin()
1817 __ lea(esp, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_MathMaxMin()
1818 __ PushReturnAddressFrom(ecx); in Generate_MathMaxMin()
1819 __ mov(eax, edx); in Generate_MathMaxMin()
1820 __ Ret(); in Generate_MathMaxMin()
1837 __ test(eax, eax); in Generate_NumberConstructor()
1838 __ j(zero, &no_arguments, Label::kNear); in Generate_NumberConstructor()
1839 __ mov(ebx, Operand(esp, eax, times_pointer_size, 0)); in Generate_NumberConstructor()
1845 __ SmiTag(eax); in Generate_NumberConstructor()
1846 __ EnterBuiltinFrame(esi, edi, eax); in Generate_NumberConstructor()
1847 __ mov(eax, ebx); in Generate_NumberConstructor()
1848 __ Call(masm->isolate()->builtins()->ToNumber(), RelocInfo::CODE_TARGET); in Generate_NumberConstructor()
1849 __ LeaveBuiltinFrame(esi, edi, ebx); // Argc popped to ebx. in Generate_NumberConstructor()
1850 __ SmiUntag(ebx); in Generate_NumberConstructor()
1855 __ PopReturnAddressTo(ecx); in Generate_NumberConstructor()
1856 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_NumberConstructor()
1857 __ PushReturnAddressFrom(ecx); in Generate_NumberConstructor()
1858 __ Ret(); in Generate_NumberConstructor()
1862 __ bind(&no_arguments); in Generate_NumberConstructor()
1863 __ ret(1 * kPointerSize); in Generate_NumberConstructor()
1879 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_NumberConstructor_ConstructStub()
1882 __ mov(ecx, eax); in Generate_NumberConstructor_ConstructStub()
1883 __ SmiTag(ecx); in Generate_NumberConstructor_ConstructStub()
1888 __ test(eax, eax); in Generate_NumberConstructor_ConstructStub()
1889 __ j(zero, &no_arguments, Label::kNear); in Generate_NumberConstructor_ConstructStub()
1890 __ mov(ebx, Operand(esp, eax, times_pointer_size, 0)); in Generate_NumberConstructor_ConstructStub()
1891 __ jmp(&done, Label::kNear); in Generate_NumberConstructor_ConstructStub()
1892 __ bind(&no_arguments); in Generate_NumberConstructor_ConstructStub()
1893 __ Move(ebx, Smi::kZero); in Generate_NumberConstructor_ConstructStub()
1894 __ bind(&done); in Generate_NumberConstructor_ConstructStub()
1900 __ JumpIfSmi(ebx, &done_convert); in Generate_NumberConstructor_ConstructStub()
1901 __ CompareRoot(FieldOperand(ebx, HeapObject::kMapOffset), in Generate_NumberConstructor_ConstructStub()
1903 __ j(equal, &done_convert); in Generate_NumberConstructor_ConstructStub()
1906 __ EnterBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1907 __ Push(edx); in Generate_NumberConstructor_ConstructStub()
1908 __ Move(eax, ebx); in Generate_NumberConstructor_ConstructStub()
1909 __ Call(masm->isolate()->builtins()->ToNumber(), RelocInfo::CODE_TARGET); in Generate_NumberConstructor_ConstructStub()
1910 __ Move(ebx, eax); in Generate_NumberConstructor_ConstructStub()
1911 __ Pop(edx); in Generate_NumberConstructor_ConstructStub()
1912 __ LeaveBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1914 __ bind(&done_convert); in Generate_NumberConstructor_ConstructStub()
1919 __ cmp(edx, edi); in Generate_NumberConstructor_ConstructStub()
1920 __ j(not_equal, &new_object); in Generate_NumberConstructor_ConstructStub()
1923 __ AllocateJSValue(eax, edi, ebx, esi, &done_alloc); in Generate_NumberConstructor_ConstructStub()
1924 __ jmp(&drop_frame_and_ret); in Generate_NumberConstructor_ConstructStub()
1926 __ bind(&done_alloc); in Generate_NumberConstructor_ConstructStub()
1927 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); // Restore esi. in Generate_NumberConstructor_ConstructStub()
1930 __ bind(&new_object); in Generate_NumberConstructor_ConstructStub()
1933 __ EnterBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1934 __ Push(ebx); // the first argument in Generate_NumberConstructor_ConstructStub()
1935 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), in Generate_NumberConstructor_ConstructStub()
1937 __ Pop(FieldOperand(eax, JSValue::kValueOffset)); in Generate_NumberConstructor_ConstructStub()
1938 __ LeaveBuiltinFrame(esi, edi, ecx); in Generate_NumberConstructor_ConstructStub()
1941 __ bind(&drop_frame_and_ret); in Generate_NumberConstructor_ConstructStub()
1944 __ PopReturnAddressTo(esi); in Generate_NumberConstructor_ConstructStub()
1945 __ SmiUntag(ecx); in Generate_NumberConstructor_ConstructStub()
1946 __ lea(esp, Operand(esp, ecx, times_pointer_size, kPointerSize)); in Generate_NumberConstructor_ConstructStub()
1947 __ PushReturnAddressFrom(esi); in Generate_NumberConstructor_ConstructStub()
1948 __ Ret(); in Generate_NumberConstructor_ConstructStub()
1966 __ mov(ebx, eax); // Store argc in ebx. in Generate_StringConstructor()
1967 __ test(eax, eax); in Generate_StringConstructor()
1968 __ j(zero, &no_arguments, Label::kNear); in Generate_StringConstructor()
1969 __ mov(eax, Operand(esp, eax, times_pointer_size, 0)); in Generate_StringConstructor()
1976 __ JumpIfSmi(eax, &to_string, Label::kNear); in Generate_StringConstructor()
1978 __ CmpObjectType(eax, FIRST_NONSTRING_TYPE, edx); in Generate_StringConstructor()
1979 __ j(above, &to_string, Label::kNear); in Generate_StringConstructor()
1980 __ j(equal, &symbol_descriptive_string, Label::kNear); in Generate_StringConstructor()
1981 __ jmp(&drop_frame_and_ret, Label::kNear); in Generate_StringConstructor()
1985 __ bind(&no_arguments); in Generate_StringConstructor()
1987 __ LoadRoot(eax, Heap::kempty_stringRootIndex); in Generate_StringConstructor()
1988 __ ret(1 * kPointerSize); in Generate_StringConstructor()
1992 __ bind(&to_string); in Generate_StringConstructor()
1995 __ SmiTag(ebx); in Generate_StringConstructor()
1996 __ EnterBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor()
1997 __ Call(masm->isolate()->builtins()->ToString(), RelocInfo::CODE_TARGET); in Generate_StringConstructor()
1998 __ LeaveBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor()
1999 __ SmiUntag(ebx); in Generate_StringConstructor()
2001 __ jmp(&drop_frame_and_ret, Label::kNear); in Generate_StringConstructor()
2004 __ bind(&symbol_descriptive_string); in Generate_StringConstructor()
2006 __ PopReturnAddressTo(ecx); in Generate_StringConstructor()
2007 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_StringConstructor()
2008 __ Push(eax); in Generate_StringConstructor()
2009 __ PushReturnAddressFrom(ecx); in Generate_StringConstructor()
2010 __ TailCallRuntime(Runtime::kSymbolDescriptiveString); in Generate_StringConstructor()
2013 __ bind(&drop_frame_and_ret); in Generate_StringConstructor()
2016 __ PopReturnAddressTo(ecx); in Generate_StringConstructor()
2017 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_StringConstructor()
2018 __ PushReturnAddressFrom(ecx); in Generate_StringConstructor()
2019 __ Ret(); in Generate_StringConstructor()
2036 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_StringConstructor_ConstructStub()
2038 __ mov(ebx, eax); in Generate_StringConstructor_ConstructStub()
2043 __ test(ebx, ebx); in Generate_StringConstructor_ConstructStub()
2044 __ j(zero, &no_arguments, Label::kNear); in Generate_StringConstructor_ConstructStub()
2045 __ mov(eax, Operand(esp, ebx, times_pointer_size, 0)); in Generate_StringConstructor_ConstructStub()
2046 __ jmp(&done, Label::kNear); in Generate_StringConstructor_ConstructStub()
2047 __ bind(&no_arguments); in Generate_StringConstructor_ConstructStub()
2048 __ LoadRoot(eax, Heap::kempty_stringRootIndex); in Generate_StringConstructor_ConstructStub()
2049 __ bind(&done); in Generate_StringConstructor_ConstructStub()
2055 __ JumpIfSmi(eax, &convert, Label::kNear); in Generate_StringConstructor_ConstructStub()
2056 __ CmpObjectType(eax, FIRST_NONSTRING_TYPE, ecx); in Generate_StringConstructor_ConstructStub()
2057 __ j(below, &done_convert); in Generate_StringConstructor_ConstructStub()
2058 __ bind(&convert); in Generate_StringConstructor_ConstructStub()
2061 __ SmiTag(ebx); in Generate_StringConstructor_ConstructStub()
2062 __ EnterBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2063 __ Push(edx); in Generate_StringConstructor_ConstructStub()
2064 __ Call(masm->isolate()->builtins()->ToString(), RelocInfo::CODE_TARGET); in Generate_StringConstructor_ConstructStub()
2065 __ Pop(edx); in Generate_StringConstructor_ConstructStub()
2066 __ LeaveBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2067 __ SmiUntag(ebx); in Generate_StringConstructor_ConstructStub()
2069 __ bind(&done_convert); in Generate_StringConstructor_ConstructStub()
2074 __ cmp(edx, edi); in Generate_StringConstructor_ConstructStub()
2075 __ j(not_equal, &new_object); in Generate_StringConstructor_ConstructStub()
2080 __ mov(esi, eax); in Generate_StringConstructor_ConstructStub()
2081 __ AllocateJSValue(eax, edi, esi, ecx, &done_alloc); in Generate_StringConstructor_ConstructStub()
2082 __ jmp(&drop_frame_and_ret); in Generate_StringConstructor_ConstructStub()
2084 __ bind(&done_alloc); in Generate_StringConstructor_ConstructStub()
2087 __ mov(eax, esi); in Generate_StringConstructor_ConstructStub()
2088 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_StringConstructor_ConstructStub()
2092 __ bind(&new_object); in Generate_StringConstructor_ConstructStub()
2095 __ SmiTag(ebx); in Generate_StringConstructor_ConstructStub()
2096 __ EnterBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2097 __ Push(eax); // the first argument in Generate_StringConstructor_ConstructStub()
2098 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), in Generate_StringConstructor_ConstructStub()
2100 __ Pop(FieldOperand(eax, JSValue::kValueOffset)); in Generate_StringConstructor_ConstructStub()
2101 __ LeaveBuiltinFrame(esi, edi, ebx); in Generate_StringConstructor_ConstructStub()
2102 __ SmiUntag(ebx); in Generate_StringConstructor_ConstructStub()
2105 __ bind(&drop_frame_and_ret); in Generate_StringConstructor_ConstructStub()
2108 __ PopReturnAddressTo(ecx); in Generate_StringConstructor_ConstructStub()
2109 __ lea(esp, Operand(esp, ebx, times_pointer_size, kPointerSize)); in Generate_StringConstructor_ConstructStub()
2110 __ PushReturnAddressFrom(ecx); in Generate_StringConstructor_ConstructStub()
2111 __ Ret(); in Generate_StringConstructor_ConstructStub()
2116 __ push(ebp); in EnterArgumentsAdaptorFrame()
2117 __ mov(ebp, esp); in EnterArgumentsAdaptorFrame()
2120 __ push(Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); in EnterArgumentsAdaptorFrame()
2123 __ push(edi); in EnterArgumentsAdaptorFrame()
2129 __ lea(edi, Operand(eax, eax, times_1, kSmiTag)); in EnterArgumentsAdaptorFrame()
2130 __ push(edi); in EnterArgumentsAdaptorFrame()
2135 __ mov(ebx, Operand(ebp, ArgumentsAdaptorFrameConstants::kLengthOffset)); in LeaveArgumentsAdaptorFrame()
2138 __ leave(); in LeaveArgumentsAdaptorFrame()
2142 __ pop(ecx); in LeaveArgumentsAdaptorFrame()
2143 __ lea(esp, Operand(esp, ebx, times_2, 1 * kPointerSize)); // 1 ~ receiver in LeaveArgumentsAdaptorFrame()
2144 __ push(ecx); in LeaveArgumentsAdaptorFrame()
2161 __ JumpIfSmi(eax, &create_runtime); in Generate_Apply()
2164 __ mov(ecx, FieldOperand(eax, HeapObject::kMapOffset)); in Generate_Apply()
2167 __ mov(ebx, NativeContextOperand()); in Generate_Apply()
2170 __ cmp(ecx, ContextOperand(ebx, Context::SLOPPY_ARGUMENTS_MAP_INDEX)); in Generate_Apply()
2171 __ j(equal, &create_arguments); in Generate_Apply()
2172 __ cmp(ecx, ContextOperand(ebx, Context::STRICT_ARGUMENTS_MAP_INDEX)); in Generate_Apply()
2173 __ j(equal, &create_arguments); in Generate_Apply()
2176 __ CmpInstanceType(ecx, JS_ARRAY_TYPE); in Generate_Apply()
2177 __ j(equal, &create_array); in Generate_Apply()
2180 __ bind(&create_runtime); in Generate_Apply()
2183 __ Push(edi); in Generate_Apply()
2184 __ Push(edx); in Generate_Apply()
2185 __ Push(eax); in Generate_Apply()
2186 __ CallRuntime(Runtime::kCreateListFromArrayLike); in Generate_Apply()
2187 __ Pop(edx); in Generate_Apply()
2188 __ Pop(edi); in Generate_Apply()
2189 __ mov(ebx, FieldOperand(eax, FixedArray::kLengthOffset)); in Generate_Apply()
2190 __ SmiUntag(ebx); in Generate_Apply()
2192 __ jmp(&done_create); in Generate_Apply()
2195 __ bind(&create_arguments); in Generate_Apply()
2196 __ mov(ebx, FieldOperand(eax, JSArgumentsObject::kLengthOffset)); in Generate_Apply()
2197 __ mov(ecx, FieldOperand(eax, JSObject::kElementsOffset)); in Generate_Apply()
2198 __ cmp(ebx, FieldOperand(ecx, FixedArray::kLengthOffset)); in Generate_Apply()
2199 __ j(not_equal, &create_runtime); in Generate_Apply()
2200 __ SmiUntag(ebx); in Generate_Apply()
2201 __ mov(eax, ecx); in Generate_Apply()
2202 __ jmp(&done_create); in Generate_Apply()
2206 __ bind(&create_holey_array); in Generate_Apply()
2207 __ mov(ecx, FieldOperand(eax, HeapObject::kMapOffset)); in Generate_Apply()
2208 __ mov(ecx, FieldOperand(ecx, Map::kPrototypeOffset)); in Generate_Apply()
2209 __ cmp(ecx, ContextOperand(ebx, Context::INITIAL_ARRAY_PROTOTYPE_INDEX)); in Generate_Apply()
2210 __ j(not_equal, &create_runtime); in Generate_Apply()
2211 __ LoadRoot(ecx, Heap::kArrayProtectorRootIndex); in Generate_Apply()
2212 __ cmp(FieldOperand(ecx, PropertyCell::kValueOffset), in Generate_Apply()
2214 __ j(not_equal, &create_runtime); in Generate_Apply()
2215 __ mov(ebx, FieldOperand(eax, JSArray::kLengthOffset)); in Generate_Apply()
2216 __ SmiUntag(ebx); in Generate_Apply()
2217 __ mov(eax, FieldOperand(eax, JSArray::kElementsOffset)); in Generate_Apply()
2218 __ jmp(&done_create); in Generate_Apply()
2221 __ bind(&create_array); in Generate_Apply()
2222 __ mov(ecx, FieldOperand(ecx, Map::kBitField2Offset)); in Generate_Apply()
2223 __ DecodeField<Map::ElementsKindBits>(ecx); in Generate_Apply()
2228 __ cmp(ecx, Immediate(FAST_HOLEY_SMI_ELEMENTS)); in Generate_Apply()
2229 __ j(equal, &create_holey_array, Label::kNear); in Generate_Apply()
2230 __ cmp(ecx, Immediate(FAST_HOLEY_ELEMENTS)); in Generate_Apply()
2231 __ j(equal, &create_holey_array, Label::kNear); in Generate_Apply()
2232 __ j(above, &create_runtime); in Generate_Apply()
2233 __ mov(ebx, FieldOperand(eax, JSArray::kLengthOffset)); in Generate_Apply()
2234 __ SmiUntag(ebx); in Generate_Apply()
2235 __ mov(eax, FieldOperand(eax, JSArray::kElementsOffset)); in Generate_Apply()
2237 __ bind(&done_create); in Generate_Apply()
2247 __ mov(ecx, Operand::StaticVariable(real_stack_limit)); in Generate_Apply()
2250 __ neg(ecx); in Generate_Apply()
2251 __ add(ecx, esp); in Generate_Apply()
2252 __ sar(ecx, kPointerSizeLog2); in Generate_Apply()
2254 __ cmp(ecx, ebx); in Generate_Apply()
2255 __ j(greater, &done, Label::kNear); // Signed comparison. in Generate_Apply()
2256 __ TailCallRuntime(Runtime::kThrowStackOverflow); in Generate_Apply()
2257 __ bind(&done); in Generate_Apply()
2272 __ push(edx); in Generate_Apply()
2273 __ push(edi); in Generate_Apply()
2274 __ fld_s(MemOperand(esp, 0)); in Generate_Apply()
2275 __ fld_s(MemOperand(esp, 4)); in Generate_Apply()
2276 __ lea(esp, Operand(esp, 2 * kFloatSize)); in Generate_Apply()
2278 __ PopReturnAddressTo(edx); in Generate_Apply()
2279 __ Move(ecx, Immediate(0)); in Generate_Apply()
2281 __ bind(&loop); in Generate_Apply()
2282 __ cmp(ecx, ebx); in Generate_Apply()
2283 __ j(equal, &done, Label::kNear); in Generate_Apply()
2285 __ mov(edi, in Generate_Apply()
2287 __ CompareRoot(edi, Heap::kTheHoleValueRootIndex); in Generate_Apply()
2288 __ j(not_equal, &push, Label::kNear); in Generate_Apply()
2289 __ LoadRoot(edi, Heap::kUndefinedValueRootIndex); in Generate_Apply()
2290 __ bind(&push); in Generate_Apply()
2291 __ Push(edi); in Generate_Apply()
2292 __ inc(ecx); in Generate_Apply()
2293 __ jmp(&loop); in Generate_Apply()
2294 __ bind(&done); in Generate_Apply()
2295 __ PushReturnAddressFrom(edx); in Generate_Apply()
2298 __ lea(esp, Operand(esp, -2 * kFloatSize)); in Generate_Apply()
2299 __ fstp_s(MemOperand(esp, 0)); in Generate_Apply()
2300 __ fstp_s(MemOperand(esp, 4)); in Generate_Apply()
2301 __ pop(edx); in Generate_Apply()
2302 __ pop(edi); in Generate_Apply()
2304 __ Move(eax, ebx); in Generate_Apply()
2309 __ CompareRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_Apply()
2310 __ j(equal, masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); in Generate_Apply()
2311 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); in Generate_Apply()
2356 __ movzx_b(scratch1, in PrepareForTailCall()
2358 __ cmp(scratch1, Immediate(0)); in PrepareForTailCall()
2359 __ j(equal, &done, Label::kNear); in PrepareForTailCall()
2364 __ cmp(Operand(ebp, CommonFrameConstants::kContextOrFrameTypeOffset), in PrepareForTailCall()
2366 __ j(not_equal, &no_interpreter_frame, Label::kNear); in PrepareForTailCall()
2367 __ mov(ebp, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); in PrepareForTailCall()
2368 __ bind(&no_interpreter_frame); in PrepareForTailCall()
2374 __ mov(scratch2, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); in PrepareForTailCall()
2375 __ cmp(Operand(scratch2, CommonFrameConstants::kContextOrFrameTypeOffset), in PrepareForTailCall()
2377 __ j(not_equal, &no_arguments_adaptor, Label::kNear); in PrepareForTailCall()
2380 __ mov(ebp, scratch2); in PrepareForTailCall()
2381 __ mov(caller_args_count_reg, in PrepareForTailCall()
2383 __ SmiUntag(caller_args_count_reg); in PrepareForTailCall()
2384 __ jmp(&formal_parameter_count_loaded, Label::kNear); in PrepareForTailCall()
2386 __ bind(&no_arguments_adaptor); in PrepareForTailCall()
2388 __ mov(scratch1, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); in PrepareForTailCall()
2389 __ mov(scratch1, in PrepareForTailCall()
2391 __ mov( in PrepareForTailCall()
2394 __ SmiUntag(caller_args_count_reg); in PrepareForTailCall()
2396 __ bind(&formal_parameter_count_loaded); in PrepareForTailCall()
2399 __ PrepareForTailCall(callee_args_count, caller_args_count_reg, scratch2, in PrepareForTailCall()
2401 __ bind(&done); in PrepareForTailCall()
2413 __ AssertFunction(edi); in Generate_CallFunction()
2418 __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_CallFunction()
2419 __ test_b(FieldOperand(edx, SharedFunctionInfo::kFunctionKindByteOffset), in Generate_CallFunction()
2421 __ j(not_zero, &class_constructor); in Generate_CallFunction()
2428 __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); in Generate_CallFunction()
2431 __ test_b(FieldOperand(edx, SharedFunctionInfo::kNativeByteOffset), in Generate_CallFunction()
2434 __ j(not_zero, &done_convert); in Generate_CallFunction()
2445 __ LoadGlobalProxy(ecx); in Generate_CallFunction()
2448 __ mov(ecx, Operand(esp, eax, times_pointer_size, kPointerSize)); in Generate_CallFunction()
2449 __ JumpIfSmi(ecx, &convert_to_object, Label::kNear); in Generate_CallFunction()
2451 __ CmpObjectType(ecx, FIRST_JS_RECEIVER_TYPE, ebx); in Generate_CallFunction()
2452 __ j(above_equal, &done_convert); in Generate_CallFunction()
2455 __ JumpIfRoot(ecx, Heap::kUndefinedValueRootIndex, in Generate_CallFunction()
2457 __ JumpIfNotRoot(ecx, Heap::kNullValueRootIndex, &convert_to_object, in Generate_CallFunction()
2459 __ bind(&convert_global_proxy); in Generate_CallFunction()
2462 __ LoadGlobalProxy(ecx); in Generate_CallFunction()
2464 __ jmp(&convert_receiver); in Generate_CallFunction()
2466 __ bind(&convert_to_object); in Generate_CallFunction()
2472 __ SmiTag(eax); in Generate_CallFunction()
2473 __ Push(eax); in Generate_CallFunction()
2474 __ Push(edi); in Generate_CallFunction()
2475 __ mov(eax, ecx); in Generate_CallFunction()
2476 __ Push(esi); in Generate_CallFunction()
2477 __ Call(masm->isolate()->builtins()->ToObject(), in Generate_CallFunction()
2479 __ Pop(esi); in Generate_CallFunction()
2480 __ mov(ecx, eax); in Generate_CallFunction()
2481 __ Pop(edi); in Generate_CallFunction()
2482 __ Pop(eax); in Generate_CallFunction()
2483 __ SmiUntag(eax); in Generate_CallFunction()
2485 __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_CallFunction()
2486 __ bind(&convert_receiver); in Generate_CallFunction()
2488 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), ecx); in Generate_CallFunction()
2490 __ bind(&done_convert); in Generate_CallFunction()
2502 __ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_CallFunction()
2505 __ mov(ebx, in Generate_CallFunction()
2507 __ SmiUntag(ebx); in Generate_CallFunction()
2510 __ InvokeFunctionCode(edi, no_reg, expected, actual, JUMP_FUNCTION, in Generate_CallFunction()
2513 __ bind(&class_constructor); in Generate_CallFunction()
2516 __ push(edi); in Generate_CallFunction()
2517 __ CallRuntime(Runtime::kThrowConstructorNonCallableError); in Generate_CallFunction()
2532 __ mov(ecx, FieldOperand(edi, JSBoundFunction::kBoundArgumentsOffset)); in Generate_PushBoundArguments()
2533 __ mov(ebx, FieldOperand(ecx, FixedArray::kLengthOffset)); in Generate_PushBoundArguments()
2534 __ SmiUntag(ebx); in Generate_PushBoundArguments()
2535 __ test(ebx, ebx); in Generate_PushBoundArguments()
2536 __ j(zero, &no_bound_arguments); in Generate_PushBoundArguments()
2549 __ lea(ecx, Operand(ebx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2550 __ sub(esp, ecx); in Generate_PushBoundArguments()
2554 __ CompareRoot(esp, ecx, Heap::kRealStackLimitRootIndex); in Generate_PushBoundArguments()
2555 __ j(greater, &done, Label::kNear); // Signed comparison. in Generate_PushBoundArguments()
2557 __ lea(esp, Operand(esp, ebx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2560 __ EnterFrame(StackFrame::INTERNAL); in Generate_PushBoundArguments()
2561 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_PushBoundArguments()
2563 __ bind(&done); in Generate_PushBoundArguments()
2567 __ inc(eax); in Generate_PushBoundArguments()
2572 __ Set(ecx, 0); in Generate_PushBoundArguments()
2573 __ lea(ebx, Operand(esp, ebx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2574 __ bind(&loop); in Generate_PushBoundArguments()
2575 __ fld_s(Operand(ebx, ecx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2576 __ fstp_s(Operand(esp, ecx, times_pointer_size, 0)); in Generate_PushBoundArguments()
2577 __ inc(ecx); in Generate_PushBoundArguments()
2578 __ cmp(ecx, eax); in Generate_PushBoundArguments()
2579 __ j(less, &loop); in Generate_PushBoundArguments()
2585 __ mov(ecx, FieldOperand(edi, JSBoundFunction::kBoundArgumentsOffset)); in Generate_PushBoundArguments()
2586 __ mov(ebx, FieldOperand(ecx, FixedArray::kLengthOffset)); in Generate_PushBoundArguments()
2587 __ SmiUntag(ebx); in Generate_PushBoundArguments()
2588 __ bind(&loop); in Generate_PushBoundArguments()
2589 __ dec(ebx); in Generate_PushBoundArguments()
2590 __ fld_s( in Generate_PushBoundArguments()
2592 __ fstp_s(Operand(esp, eax, times_pointer_size, 0)); in Generate_PushBoundArguments()
2593 __ lea(eax, Operand(eax, 1)); in Generate_PushBoundArguments()
2594 __ j(greater, &loop); in Generate_PushBoundArguments()
2600 __ dec(eax); in Generate_PushBoundArguments()
2602 __ bind(&no_bound_arguments); in Generate_PushBoundArguments()
2614 __ AssertBoundFunction(edi); in Generate_CallBoundFunctionImpl()
2621 __ mov(ebx, FieldOperand(edi, JSBoundFunction::kBoundThisOffset)); in Generate_CallBoundFunctionImpl()
2622 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), ebx); in Generate_CallBoundFunctionImpl()
2628 __ mov(edi, FieldOperand(edi, JSBoundFunction::kBoundTargetFunctionOffset)); in Generate_CallBoundFunctionImpl()
2629 __ mov(ecx, Operand::StaticVariable(ExternalReference( in Generate_CallBoundFunctionImpl()
2631 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_CallBoundFunctionImpl()
2632 __ jmp(ecx); in Generate_CallBoundFunctionImpl()
2644 __ JumpIfSmi(edi, &non_callable); in Generate_Call()
2645 __ bind(&non_smi); in Generate_Call()
2646 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx); in Generate_Call()
2647 __ j(equal, masm->isolate()->builtins()->CallFunction(mode, tail_call_mode), in Generate_Call()
2649 __ CmpInstanceType(ecx, JS_BOUND_FUNCTION_TYPE); in Generate_Call()
2650 __ j(equal, masm->isolate()->builtins()->CallBoundFunction(tail_call_mode), in Generate_Call()
2654 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_Call()
2656 __ j(zero, &non_callable); in Generate_Call()
2658 __ CmpInstanceType(ecx, JS_PROXY_TYPE); in Generate_Call()
2659 __ j(not_equal, &non_function); in Generate_Call()
2667 __ PopReturnAddressTo(ecx); in Generate_Call()
2668 __ Push(edi); in Generate_Call()
2669 __ PushReturnAddressFrom(ecx); in Generate_Call()
2672 __ add(eax, Immediate(2)); in Generate_Call()
2674 __ JumpToExternalReference( in Generate_Call()
2679 __ bind(&non_function); in Generate_Call()
2681 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), edi); in Generate_Call()
2683 __ LoadGlobalFunction(Context::CALL_AS_FUNCTION_DELEGATE_INDEX, edi); in Generate_Call()
2684 __ Jump(masm->isolate()->builtins()->CallFunction( in Generate_Call()
2689 __ bind(&non_callable); in Generate_Call()
2692 __ Push(edi); in Generate_Call()
2693 __ CallRuntime(Runtime::kThrowCalledNonCallable); in Generate_Call()
2700 __ push(edx); in CheckSpreadAndPushToStack()
2701 __ push(edi); in CheckSpreadAndPushToStack()
2702 __ fld_s(MemOperand(esp, 0)); in CheckSpreadAndPushToStack()
2703 __ fld_s(MemOperand(esp, 4)); in CheckSpreadAndPushToStack()
2704 __ lea(esp, Operand(esp, 2 * kFloatSize)); in CheckSpreadAndPushToStack()
2717 __ mov(spread, Operand(esp, kPointerSize)); in CheckSpreadAndPushToStack()
2718 __ JumpIfSmi(spread, &runtime_call); in CheckSpreadAndPushToStack()
2719 __ mov(spread_map, FieldOperand(spread, HeapObject::kMapOffset)); in CheckSpreadAndPushToStack()
2722 __ CmpInstanceType(spread_map, JS_ARRAY_TYPE); in CheckSpreadAndPushToStack()
2723 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2726 __ mov(scratch, FieldOperand(spread_map, Map::kPrototypeOffset)); in CheckSpreadAndPushToStack()
2727 __ mov(scratch2, NativeContextOperand()); in CheckSpreadAndPushToStack()
2728 __ cmp(scratch, in CheckSpreadAndPushToStack()
2730 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2734 __ LoadRoot(scratch, Heap::kArrayIteratorProtectorRootIndex); in CheckSpreadAndPushToStack()
2735 __ cmp(FieldOperand(scratch, PropertyCell::kValueOffset), in CheckSpreadAndPushToStack()
2737 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2740 __ mov(scratch2, NativeContextOperand()); in CheckSpreadAndPushToStack()
2741 __ mov(scratch, in CheckSpreadAndPushToStack()
2744 __ mov(scratch, FieldOperand(scratch, HeapObject::kMapOffset)); in CheckSpreadAndPushToStack()
2745 __ cmp(scratch, in CheckSpreadAndPushToStack()
2748 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2753 __ mov(scratch, FieldOperand(spread_map, Map::kBitField2Offset)); in CheckSpreadAndPushToStack()
2754 __ DecodeField<Map::ElementsKindBits>(scratch); in CheckSpreadAndPushToStack()
2755 __ cmp(scratch, Immediate(FAST_HOLEY_ELEMENTS)); in CheckSpreadAndPushToStack()
2756 __ j(above, &runtime_call); in CheckSpreadAndPushToStack()
2758 __ cmp(scratch, Immediate(FAST_SMI_ELEMENTS)); in CheckSpreadAndPushToStack()
2759 __ j(equal, &no_protector_check); in CheckSpreadAndPushToStack()
2760 __ cmp(scratch, Immediate(FAST_ELEMENTS)); in CheckSpreadAndPushToStack()
2761 __ j(equal, &no_protector_check); in CheckSpreadAndPushToStack()
2763 __ LoadRoot(scratch, Heap::kArrayProtectorRootIndex); in CheckSpreadAndPushToStack()
2764 __ cmp(FieldOperand(scratch, PropertyCell::kValueOffset), in CheckSpreadAndPushToStack()
2766 __ j(not_equal, &runtime_call); in CheckSpreadAndPushToStack()
2768 __ bind(&no_protector_check); in CheckSpreadAndPushToStack()
2770 __ mov(spread_len, FieldOperand(spread, JSArray::kLengthOffset)); in CheckSpreadAndPushToStack()
2771 __ SmiUntag(spread_len); in CheckSpreadAndPushToStack()
2772 __ mov(spread, FieldOperand(spread, JSArray::kElementsOffset)); in CheckSpreadAndPushToStack()
2773 __ jmp(&push_args); in CheckSpreadAndPushToStack()
2775 __ bind(&runtime_call); in CheckSpreadAndPushToStack()
2781 __ lea(esp, Operand(esp, -2 * kFloatSize)); in CheckSpreadAndPushToStack()
2782 __ fstp_s(MemOperand(esp, 0)); in CheckSpreadAndPushToStack()
2783 __ fstp_s(MemOperand(esp, 4)); in CheckSpreadAndPushToStack()
2784 __ pop(edx); in CheckSpreadAndPushToStack()
2785 __ pop(edi); in CheckSpreadAndPushToStack()
2787 __ Push(edi); in CheckSpreadAndPushToStack()
2788 __ Push(edx); in CheckSpreadAndPushToStack()
2789 __ SmiTag(argc); in CheckSpreadAndPushToStack()
2790 __ Push(argc); in CheckSpreadAndPushToStack()
2791 __ Push(spread); in CheckSpreadAndPushToStack()
2792 __ CallRuntime(Runtime::kSpreadIterableFixed); in CheckSpreadAndPushToStack()
2793 __ mov(spread, eax); in CheckSpreadAndPushToStack()
2794 __ Pop(argc); in CheckSpreadAndPushToStack()
2795 __ SmiUntag(argc); in CheckSpreadAndPushToStack()
2796 __ Pop(edx); in CheckSpreadAndPushToStack()
2797 __ Pop(edi); in CheckSpreadAndPushToStack()
2800 __ push(edx); in CheckSpreadAndPushToStack()
2801 __ push(edi); in CheckSpreadAndPushToStack()
2802 __ fld_s(MemOperand(esp, 0)); in CheckSpreadAndPushToStack()
2803 __ fld_s(MemOperand(esp, 4)); in CheckSpreadAndPushToStack()
2804 __ lea(esp, Operand(esp, 2 * kFloatSize)); in CheckSpreadAndPushToStack()
2809 __ mov(spread_len, FieldOperand(spread, FixedArray::kLengthOffset)); in CheckSpreadAndPushToStack()
2810 __ SmiUntag(spread_len); in CheckSpreadAndPushToStack()
2812 __ bind(&push_args); in CheckSpreadAndPushToStack()
2814 __ lea(argc, Operand(argc, spread_len, times_1, -1)); in CheckSpreadAndPushToStack()
2822 __ LoadRoot(scratch, Heap::kRealStackLimitRootIndex); in CheckSpreadAndPushToStack()
2825 __ neg(scratch); in CheckSpreadAndPushToStack()
2826 __ add(scratch, esp); in CheckSpreadAndPushToStack()
2827 __ sar(scratch, kPointerSizeLog2); in CheckSpreadAndPushToStack()
2829 __ cmp(scratch, spread_len); in CheckSpreadAndPushToStack()
2830 __ j(greater, &done, Label::kNear); // Signed comparison. in CheckSpreadAndPushToStack()
2831 __ TailCallRuntime(Runtime::kThrowStackOverflow); in CheckSpreadAndPushToStack()
2832 __ bind(&done); in CheckSpreadAndPushToStack()
2839 __ PopReturnAddressTo(return_address); in CheckSpreadAndPushToStack()
2840 __ Pop(scratch); in CheckSpreadAndPushToStack()
2844 __ push(esi); in CheckSpreadAndPushToStack()
2845 __ fld_s(MemOperand(esp, 0)); in CheckSpreadAndPushToStack()
2846 __ lea(esp, Operand(esp, 1 * kFloatSize)); in CheckSpreadAndPushToStack()
2848 __ mov(scratch, Immediate(0)); in CheckSpreadAndPushToStack()
2850 __ bind(&loop); in CheckSpreadAndPushToStack()
2851 __ cmp(scratch, spread_len); in CheckSpreadAndPushToStack()
2852 __ j(equal, &done, Label::kNear); in CheckSpreadAndPushToStack()
2853 __ mov(scratch2, FieldOperand(spread, scratch, times_pointer_size, in CheckSpreadAndPushToStack()
2855 __ JumpIfNotRoot(scratch2, Heap::kTheHoleValueRootIndex, &push); in CheckSpreadAndPushToStack()
2856 __ LoadRoot(scratch2, Heap::kUndefinedValueRootIndex); in CheckSpreadAndPushToStack()
2857 __ bind(&push); in CheckSpreadAndPushToStack()
2858 __ Push(scratch2); in CheckSpreadAndPushToStack()
2859 __ inc(scratch); in CheckSpreadAndPushToStack()
2860 __ jmp(&loop); in CheckSpreadAndPushToStack()
2861 __ bind(&done); in CheckSpreadAndPushToStack()
2862 __ PushReturnAddressFrom(return_address); in CheckSpreadAndPushToStack()
2865 __ lea(esp, Operand(esp, -3 * kFloatSize)); in CheckSpreadAndPushToStack()
2866 __ fstp_s(MemOperand(esp, 0)); in CheckSpreadAndPushToStack()
2867 __ fstp_s(MemOperand(esp, 4)); in CheckSpreadAndPushToStack()
2868 __ fstp_s(MemOperand(esp, 8)); in CheckSpreadAndPushToStack()
2869 __ pop(esi); in CheckSpreadAndPushToStack()
2870 __ pop(edx); in CheckSpreadAndPushToStack()
2871 __ pop(edi); in CheckSpreadAndPushToStack()
2883 __ LoadRoot(edx, Heap::kUndefinedValueRootIndex); in Generate_CallWithSpread()
2885 __ Jump(masm->isolate()->builtins()->Call(ConvertReceiverMode::kAny, in Generate_CallWithSpread()
2897 __ AssertFunction(edi); in Generate_ConstructFunction()
2901 __ LoadRoot(ebx, Heap::kUndefinedValueRootIndex); in Generate_ConstructFunction()
2905 __ mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_ConstructFunction()
2906 __ mov(ecx, FieldOperand(ecx, SharedFunctionInfo::kConstructStubOffset)); in Generate_ConstructFunction()
2907 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_ConstructFunction()
2908 __ jmp(ecx); in Generate_ConstructFunction()
2918 __ AssertBoundFunction(edi); in Generate_ConstructBoundFunction()
2926 __ cmp(edi, edx); in Generate_ConstructBoundFunction()
2927 __ j(not_equal, &done, Label::kNear); in Generate_ConstructBoundFunction()
2928 __ mov(edx, FieldOperand(edi, JSBoundFunction::kBoundTargetFunctionOffset)); in Generate_ConstructBoundFunction()
2929 __ bind(&done); in Generate_ConstructBoundFunction()
2933 __ mov(edi, FieldOperand(edi, JSBoundFunction::kBoundTargetFunctionOffset)); in Generate_ConstructBoundFunction()
2934 __ mov(ecx, Operand::StaticVariable( in Generate_ConstructBoundFunction()
2936 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); in Generate_ConstructBoundFunction()
2937 __ jmp(ecx); in Generate_ConstructBoundFunction()
2950 __ PopReturnAddressTo(ecx); in Generate_ConstructProxy()
2951 __ Push(edi); in Generate_ConstructProxy()
2952 __ Push(edx); in Generate_ConstructProxy()
2953 __ PushReturnAddressFrom(ecx); in Generate_ConstructProxy()
2955 __ add(eax, Immediate(3)); in Generate_ConstructProxy()
2957 __ JumpToExternalReference( in Generate_ConstructProxy()
2972 __ JumpIfSmi(edi, &non_constructor, Label::kNear); in Generate_Construct()
2975 __ CmpObjectType(edi, JS_FUNCTION_TYPE, ecx); in Generate_Construct()
2976 __ j(equal, masm->isolate()->builtins()->ConstructFunction(), in Generate_Construct()
2980 __ test_b(FieldOperand(ecx, Map::kBitFieldOffset), in Generate_Construct()
2982 __ j(zero, &non_constructor, Label::kNear); in Generate_Construct()
2986 __ CmpInstanceType(ecx, JS_BOUND_FUNCTION_TYPE); in Generate_Construct()
2987 __ j(equal, masm->isolate()->builtins()->ConstructBoundFunction(), in Generate_Construct()
2991 __ CmpInstanceType(ecx, JS_PROXY_TYPE); in Generate_Construct()
2992 __ j(equal, masm->isolate()->builtins()->ConstructProxy(), in Generate_Construct()
2998 __ mov(Operand(esp, eax, times_pointer_size, kPointerSize), edi); in Generate_Construct()
3000 __ LoadGlobalFunction(Context::CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, edi); in Generate_Construct()
3001 __ Jump(masm->isolate()->builtins()->CallFunction(), in Generate_Construct()
3007 __ bind(&non_constructor); in Generate_Construct()
3008 __ Jump(masm->isolate()->builtins()->ConstructedNonConstructable(), in Generate_Construct()
3022 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); in Generate_ConstructWithSpread()
3031 __ SmiTag(edx); in Generate_AllocateInNewSpace()
3032 __ PopReturnAddressTo(ecx); in Generate_AllocateInNewSpace()
3033 __ Push(edx); in Generate_AllocateInNewSpace()
3034 __ PushReturnAddressFrom(ecx); in Generate_AllocateInNewSpace()
3035 __ Move(esi, Smi::kZero); in Generate_AllocateInNewSpace()
3036 __ TailCallRuntime(Runtime::kAllocateInNewSpace); in Generate_AllocateInNewSpace()
3045 __ SmiTag(edx); in Generate_AllocateInOldSpace()
3046 __ PopReturnAddressTo(ecx); in Generate_AllocateInOldSpace()
3047 __ Push(edx); in Generate_AllocateInOldSpace()
3048 __ Push(Smi::FromInt(AllocateTargetSpace::encode(OLD_SPACE))); in Generate_AllocateInOldSpace()
3049 __ PushReturnAddressFrom(ecx); in Generate_AllocateInOldSpace()
3050 __ Move(esi, Smi::kZero); in Generate_AllocateInOldSpace()
3051 __ TailCallRuntime(Runtime::kAllocateInTargetSpace); in Generate_AllocateInOldSpace()
3060 __ PopReturnAddressTo(ecx); in Generate_Abort()
3061 __ Push(edx); in Generate_Abort()
3062 __ PushReturnAddressFrom(ecx); in Generate_Abort()
3063 __ Move(esi, Smi::kZero); in Generate_Abort()
3064 __ TailCallRuntime(Runtime::kAbort); in Generate_Abort()
3076 __ IncrementCounter(masm->isolate()->counters()->arguments_adaptors(), 1); in Generate_ArgumentsAdaptorTrampoline()
3079 __ cmp(eax, ebx); in Generate_ArgumentsAdaptorTrampoline()
3080 __ j(less, &too_few); in Generate_ArgumentsAdaptorTrampoline()
3081 __ cmp(ebx, SharedFunctionInfo::kDontAdaptArgumentsSentinel); in Generate_ArgumentsAdaptorTrampoline()
3082 __ j(equal, &dont_adapt_arguments); in Generate_ArgumentsAdaptorTrampoline()
3085 __ bind(&enough); in Generate_ArgumentsAdaptorTrampoline()
3093 __ lea(edi, Operand(ebp, eax, times_4, offset)); in Generate_ArgumentsAdaptorTrampoline()
3094 __ mov(eax, -1); // account for receiver in Generate_ArgumentsAdaptorTrampoline()
3097 __ bind(&copy); in Generate_ArgumentsAdaptorTrampoline()
3098 __ inc(eax); in Generate_ArgumentsAdaptorTrampoline()
3099 __ push(Operand(edi, 0)); in Generate_ArgumentsAdaptorTrampoline()
3100 __ sub(edi, Immediate(kPointerSize)); in Generate_ArgumentsAdaptorTrampoline()
3101 __ cmp(eax, ebx); in Generate_ArgumentsAdaptorTrampoline()
3102 __ j(less, &copy); in Generate_ArgumentsAdaptorTrampoline()
3104 __ jmp(&invoke); in Generate_ArgumentsAdaptorTrampoline()
3108 __ bind(&too_few); in Generate_ArgumentsAdaptorTrampoline()
3115 __ mov(ecx, ebx); in Generate_ArgumentsAdaptorTrampoline()
3119 __ lea(edi, Operand(ebp, eax, times_4, offset)); in Generate_ArgumentsAdaptorTrampoline()
3121 __ sub(ebx, eax); in Generate_ArgumentsAdaptorTrampoline()
3123 __ neg(eax); in Generate_ArgumentsAdaptorTrampoline()
3124 __ sub(eax, Immediate(1)); in Generate_ArgumentsAdaptorTrampoline()
3127 __ bind(&copy); in Generate_ArgumentsAdaptorTrampoline()
3128 __ inc(eax); in Generate_ArgumentsAdaptorTrampoline()
3129 __ push(Operand(edi, 0)); in Generate_ArgumentsAdaptorTrampoline()
3130 __ sub(edi, Immediate(kPointerSize)); in Generate_ArgumentsAdaptorTrampoline()
3131 __ test(eax, eax); in Generate_ArgumentsAdaptorTrampoline()
3132 __ j(not_zero, &copy); in Generate_ArgumentsAdaptorTrampoline()
3136 __ bind(&fill); in Generate_ArgumentsAdaptorTrampoline()
3137 __ inc(eax); in Generate_ArgumentsAdaptorTrampoline()
3138 __ push(Immediate(masm->isolate()->factory()->undefined_value())); in Generate_ArgumentsAdaptorTrampoline()
3139 __ cmp(eax, ebx); in Generate_ArgumentsAdaptorTrampoline()
3140 __ j(less, &fill); in Generate_ArgumentsAdaptorTrampoline()
3143 __ mov(eax, ecx); in Generate_ArgumentsAdaptorTrampoline()
3147 __ bind(&invoke); in Generate_ArgumentsAdaptorTrampoline()
3149 __ mov(edi, Operand(ebp, ArgumentsAdaptorFrameConstants::kFunctionOffset)); in Generate_ArgumentsAdaptorTrampoline()
3153 __ mov(ecx, FieldOperand(edi, JSFunction::kCodeEntryOffset)); in Generate_ArgumentsAdaptorTrampoline()
3154 __ call(ecx); in Generate_ArgumentsAdaptorTrampoline()
3161 __ ret(0); in Generate_ArgumentsAdaptorTrampoline()
3166 __ bind(&dont_adapt_arguments); in Generate_ArgumentsAdaptorTrampoline()
3167 __ mov(ecx, FieldOperand(edi, JSFunction::kCodeEntryOffset)); in Generate_ArgumentsAdaptorTrampoline()
3168 __ jmp(ecx); in Generate_ArgumentsAdaptorTrampoline()
3170 __ bind(&stack_overflow); in Generate_ArgumentsAdaptorTrampoline()
3173 __ CallRuntime(Runtime::kThrowStackOverflow); in Generate_ArgumentsAdaptorTrampoline()
3174 __ int3(); in Generate_ArgumentsAdaptorTrampoline()
3183 __ CompareRoot(FieldOperand(function_template_info, in CompatibleReceiverCheck()
3187 __ j(equal, &receiver_check_passed, Label::kNear); in CompatibleReceiverCheck()
3190 __ mov(scratch0, FieldOperand(receiver, HeapObject::kMapOffset)); in CompatibleReceiverCheck()
3192 __ bind(&prototype_loop_start); in CompatibleReceiverCheck()
3195 __ GetMapConstructor(scratch0, scratch0, scratch1); in CompatibleReceiverCheck()
3196 __ CmpInstanceType(scratch1, JS_FUNCTION_TYPE); in CompatibleReceiverCheck()
3198 __ j(not_equal, &next_prototype, Label::kNear); in CompatibleReceiverCheck()
3201 __ mov(scratch0, in CompatibleReceiverCheck()
3203 __ mov(scratch0, in CompatibleReceiverCheck()
3208 __ bind(&function_template_loop); in CompatibleReceiverCheck()
3211 __ cmp(scratch0, FieldOperand(function_template_info, in CompatibleReceiverCheck()
3213 __ j(equal, &receiver_check_passed, Label::kNear); in CompatibleReceiverCheck()
3217 __ JumpIfSmi(scratch0, &next_prototype, Label::kNear); in CompatibleReceiverCheck()
3218 __ CmpObjectType(scratch0, FUNCTION_TEMPLATE_INFO_TYPE, scratch1); in CompatibleReceiverCheck()
3219 __ j(not_equal, &next_prototype, Label::kNear); in CompatibleReceiverCheck()
3222 __ mov(scratch0, in CompatibleReceiverCheck()
3224 __ jmp(&function_template_loop, Label::kNear); in CompatibleReceiverCheck()
3227 __ bind(&next_prototype); in CompatibleReceiverCheck()
3228 __ mov(receiver, FieldOperand(receiver, HeapObject::kMapOffset)); in CompatibleReceiverCheck()
3229 __ test(FieldOperand(receiver, Map::kBitField3Offset), in CompatibleReceiverCheck()
3231 __ j(zero, receiver_check_failed); in CompatibleReceiverCheck()
3233 __ mov(receiver, FieldOperand(receiver, Map::kPrototypeOffset)); in CompatibleReceiverCheck()
3234 __ mov(scratch0, FieldOperand(receiver, HeapObject::kMapOffset)); in CompatibleReceiverCheck()
3236 __ jmp(&prototype_loop_start, Label::kNear); in CompatibleReceiverCheck()
3238 __ bind(&receiver_check_passed); in CompatibleReceiverCheck()
3254 __ mov(ebx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); in Generate_HandleFastApiCall()
3255 __ mov(ebx, FieldOperand(ebx, SharedFunctionInfo::kFunctionDataOffset)); in Generate_HandleFastApiCall()
3259 __ mov(ecx, Operand(esp, eax, times_pointer_size, kPCOnStackSize)); in Generate_HandleFastApiCall()
3260 __ Push(eax); in Generate_HandleFastApiCall()
3262 __ Pop(eax); in Generate_HandleFastApiCall()
3265 __ mov(edx, FieldOperand(ebx, FunctionTemplateInfo::kCallCodeOffset)); in Generate_HandleFastApiCall()
3266 __ mov(edx, FieldOperand(edx, CallHandlerInfo::kFastHandlerOffset)); in Generate_HandleFastApiCall()
3267 __ add(edx, Immediate(Code::kHeaderSize - kHeapObjectTag)); in Generate_HandleFastApiCall()
3268 __ jmp(edx); in Generate_HandleFastApiCall()
3272 __ bind(&receiver_check_failed); in Generate_HandleFastApiCall()
3273 __ Pop(eax); in Generate_HandleFastApiCall()
3274 __ PopReturnAddressTo(ebx); in Generate_HandleFastApiCall()
3275 __ lea(eax, Operand(eax, times_pointer_size, 1 * kPointerSize)); in Generate_HandleFastApiCall()
3276 __ add(esp, eax); in Generate_HandleFastApiCall()
3277 __ PushReturnAddressFrom(ebx); in Generate_HandleFastApiCall()
3280 __ TailCallRuntime(Runtime::kThrowIllegalInvocation); in Generate_HandleFastApiCall()
3288 __ mov(eax, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); in Generate_OnStackReplacementHelper()
3289 __ mov(eax, Operand(eax, JavaScriptFrameConstants::kFunctionOffset)); in Generate_OnStackReplacementHelper()
3291 __ mov(eax, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); in Generate_OnStackReplacementHelper()
3297 __ push(eax); in Generate_OnStackReplacementHelper()
3298 __ CallRuntime(Runtime::kCompileForOnStackReplacement); in Generate_OnStackReplacementHelper()
3303 __ cmp(eax, Immediate(0)); in Generate_OnStackReplacementHelper()
3304 __ j(not_equal, &skip, Label::kNear); in Generate_OnStackReplacementHelper()
3305 __ ret(0); in Generate_OnStackReplacementHelper()
3307 __ bind(&skip); in Generate_OnStackReplacementHelper()
3312 __ leave(); in Generate_OnStackReplacementHelper()
3316 __ mov(ebx, Operand(eax, Code::kDeoptimizationDataOffset - kHeapObjectTag)); in Generate_OnStackReplacementHelper()
3319 __ mov(ebx, Operand(ebx, FixedArray::OffsetOfElementAt( in Generate_OnStackReplacementHelper()
3322 __ SmiUntag(ebx); in Generate_OnStackReplacementHelper()
3325 __ lea(eax, Operand(eax, ebx, times_1, Code::kHeaderSize - kHeapObjectTag)); in Generate_OnStackReplacementHelper()
3328 __ mov(Operand(esp, 0), eax); in Generate_OnStackReplacementHelper()
3331 __ ret(0); in Generate_OnStackReplacementHelper()
3342 #undef __