| Index: src/x64/code-stubs-x64.cc
|
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
|
| index 920843dfe3f77560dd7ac3fa5cab6a03f4877e97..d196d0e857785f3690ae550c3e301551cbef4359 100644
|
| --- a/src/x64/code-stubs-x64.cc
|
| +++ b/src/x64/code-stubs-x64.cc
|
| @@ -2350,25 +2350,9 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
|
| Label slow, non_function;
|
| StackArgumentsAccessor args(rsp, argc_);
|
|
|
| - // The receiver might implicitly be the global object. This is
|
| - // indicated by passing the hole as the receiver to the call
|
| - // function stub.
|
| - if (ReceiverMightBeImplicit()) {
|
| - Label call;
|
| - // Get the receiver from the stack.
|
| - __ movq(rax, args.GetReceiverOperand());
|
| - // Call as function is indicated with the hole.
|
| - __ CompareRoot(rax, Heap::kTheHoleValueRootIndex);
|
| - __ j(not_equal, &call, Label::kNear);
|
| - // Patch the receiver on the stack with the global receiver object.
|
| - __ movq(rcx, GlobalObjectOperand());
|
| - __ movq(rcx, FieldOperand(rcx, GlobalObject::kGlobalReceiverOffset));
|
| - __ movq(args.GetReceiverOperand(), rcx);
|
| - __ bind(&call);
|
| - }
|
| -
|
| // Check that the function really is a JavaScript function.
|
| __ JumpIfSmi(rdi, &non_function);
|
| +
|
| // Goto slow case if we do not have a function.
|
| __ CmpObjectType(rdi, JS_FUNCTION_TYPE, rcx);
|
| __ j(not_equal, &slow);
|
| @@ -2380,17 +2364,6 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
|
| // Fast-case: Just invoke the function.
|
| ParameterCount actual(argc_);
|
|
|
| - if (ReceiverMightBeImplicit()) {
|
| - Label call_as_function;
|
| - __ CompareRoot(rax, Heap::kTheHoleValueRootIndex);
|
| - __ j(equal, &call_as_function);
|
| - __ InvokeFunction(rdi,
|
| - actual,
|
| - JUMP_FUNCTION,
|
| - NullCallWrapper(),
|
| - CALL_AS_METHOD);
|
| - __ bind(&call_as_function);
|
| - }
|
| __ InvokeFunction(rdi,
|
| actual,
|
| JUMP_FUNCTION,
|
| @@ -2414,7 +2387,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
|
| __ PushReturnAddressFrom(rcx);
|
| __ Set(rax, argc_ + 1);
|
| __ Set(rbx, 0);
|
| - __ SetCallKind(rcx, CALL_AS_METHOD);
|
| + __ SetCallKind(rcx, CALL_AS_FUNCTION);
|
| __ GetBuiltinEntry(rdx, Builtins::CALL_FUNCTION_PROXY);
|
| {
|
| Handle<Code> adaptor =
|
| @@ -2428,7 +2401,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
|
| __ movq(args.GetReceiverOperand(), rdi);
|
| __ Set(rax, argc_);
|
| __ Set(rbx, 0);
|
| - __ SetCallKind(rcx, CALL_AS_METHOD);
|
| + __ SetCallKind(rcx, CALL_AS_FUNCTION);
|
| __ GetBuiltinEntry(rdx, Builtins::CALL_NON_FUNCTION);
|
| Handle<Code> adaptor =
|
| isolate->builtins()->ArgumentsAdaptorTrampoline();
|
| @@ -2721,7 +2694,7 @@ void CEntryStub::Generate(MacroAssembler* masm) {
|
|
|
| // Do full GC and retry runtime call one final time.
|
| Failure* failure = Failure::InternalError();
|
| - __ movq(rax, failure, RelocInfo::NONE64);
|
| + __ Move(rax, failure, RelocInfo::NONE64);
|
| GenerateCore(masm,
|
| &throw_normal_exception,
|
| &throw_termination_exception,
|
| @@ -2742,7 +2715,7 @@ void CEntryStub::Generate(MacroAssembler* masm) {
|
| isolate);
|
| Label already_have_failure;
|
| JumpIfOOM(masm, rax, kScratchRegister, &already_have_failure);
|
| - __ movq(rax, Failure::OutOfMemoryException(0x1), RelocInfo::NONE64);
|
| + __ Move(rax, Failure::OutOfMemoryException(0x1), RelocInfo::NONE64);
|
| __ bind(&already_have_failure);
|
| __ Store(pending_exception, rax);
|
| // Fall through to the next label.
|
| @@ -2772,7 +2745,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| // Scratch register is neither callee-save, nor an argument register on any
|
| // platform. It's free to use at this point.
|
| // Cannot use smi-register for loading yet.
|
| - __ movq(kScratchRegister, Smi::FromInt(marker), RelocInfo::NONE64);
|
| + __ Move(kScratchRegister, Smi::FromInt(marker), RelocInfo::NONE64);
|
| __ push(kScratchRegister); // context slot
|
| __ push(kScratchRegister); // function slot
|
| // Save callee-saved registers (X64/Win64 calling conventions).
|
| @@ -2840,7 +2813,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| ExternalReference pending_exception(Isolate::kPendingExceptionAddress,
|
| isolate);
|
| __ Store(pending_exception, rax);
|
| - __ movq(rax, Failure::Exception(), RelocInfo::NONE64);
|
| + __ Move(rax, Failure::Exception(), RelocInfo::NONE64);
|
| __ jmp(&exit);
|
|
|
| // Invoke: Link this frame into the handler chain. There's only one
|
| @@ -4257,7 +4230,7 @@ void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) {
|
| // Make sure that we actually patched the allocation site.
|
| if (FLAG_debug_code) {
|
| __ testb(rcx, Immediate(kSmiTagMask));
|
| - __ Assert(zero, kExpectedAllocationSite);
|
| + __ Assert(not_equal, kExpectedAllocationSite);
|
| __ Cmp(FieldOperand(rcx, HeapObject::kMapOffset),
|
| isolate->factory()->allocation_site_map());
|
| __ Assert(equal, kExpectedAllocationSite);
|
| @@ -5169,7 +5142,7 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
|
| masm->PushCallerSaved(kSaveFPRegs, arg_reg_1, arg_reg_2);
|
|
|
| // Call the entry hook function.
|
| - __ movq(rax, FUNCTION_ADDR(masm->isolate()->function_entry_hook()),
|
| + __ Move(rax, FUNCTION_ADDR(masm->isolate()->function_entry_hook()),
|
| RelocInfo::NONE64);
|
|
|
| AllowExternalCallThatCantCauseGC scope(masm);
|
| @@ -5191,9 +5164,7 @@ template<class T>
|
| static void CreateArrayDispatch(MacroAssembler* masm,
|
| AllocationSiteOverrideMode mode) {
|
| if (mode == DISABLE_ALLOCATION_SITES) {
|
| - T stub(GetInitialFastElementsKind(),
|
| - CONTEXT_CHECK_REQUIRED,
|
| - mode);
|
| + T stub(GetInitialFastElementsKind(), mode);
|
| __ TailCallStub(&stub);
|
| } else if (mode == DONT_OVERRIDE) {
|
| int last_index = GetSequenceIndexFromFastElementsKind(
|
| @@ -5253,13 +5224,11 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm,
|
| ElementsKind holey_initial = GetHoleyElementsKind(initial);
|
|
|
| ArraySingleArgumentConstructorStub stub_holey(holey_initial,
|
| - CONTEXT_CHECK_REQUIRED,
|
| DISABLE_ALLOCATION_SITES);
|
| __ TailCallStub(&stub_holey);
|
|
|
| __ bind(&normal_sequence);
|
| ArraySingleArgumentConstructorStub stub(initial,
|
| - CONTEXT_CHECK_REQUIRED,
|
| DISABLE_ALLOCATION_SITES);
|
| __ TailCallStub(&stub);
|
| } else if (mode == DONT_OVERRIDE) {
|
| @@ -5304,19 +5273,14 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm,
|
|
|
| template<class T>
|
| static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
|
| - ElementsKind initial_kind = GetInitialFastElementsKind();
|
| - ElementsKind initial_holey_kind = GetHoleyElementsKind(initial_kind);
|
| -
|
| int to_index = GetSequenceIndexFromFastElementsKind(
|
| TERMINAL_FAST_ELEMENTS_KIND);
|
| for (int i = 0; i <= to_index; ++i) {
|
| ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
|
| T stub(kind);
|
| stub.GetCode(isolate);
|
| - if (AllocationSite::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE ||
|
| - (!FLAG_track_allocation_sites &&
|
| - (kind == initial_kind || kind == initial_holey_kind))) {
|
| - T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES);
|
| + if (AllocationSite::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) {
|
| + T stub1(kind, DISABLE_ALLOCATION_SITES);
|
| stub1.GetCode(isolate);
|
| }
|
| }
|
|
|