Commit a0ce8392 authored by zhengxing.li's avatar zhengxing.li Committed by Commit bot

X87: [stubs] Change CallICStub to utilize the ConvertReceiverMode.

  port d80fd48e (r32163)

  original commit message:
  The CallICStub has call-site specific knowledge about the receiver,
  which we did not utilize; plus the CallICStub does in some case know
  whether it is about to [[Call]] a function or potentially some other
  callable. In the common case we actually know that the target is a
  function and so we can use the CallFunction builtin directly instead
  of redispatching in the Call builtin.

BUG=

Review URL: https://codereview.chromium.org/1467123002

Cr-Commit-Position: refs/heads/master@{#32167}
parent fb633b0c
...@@ -1828,7 +1828,7 @@ void CallICStub::Generate(MacroAssembler* masm) { ...@@ -1828,7 +1828,7 @@ void CallICStub::Generate(MacroAssembler* masm) {
FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex); FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex);
const int generic_offset = const int generic_offset =
FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex); FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex);
Label extra_checks_or_miss, call; Label extra_checks_or_miss, call, call_function;
int argc = arg_count(); int argc = arg_count();
ParameterCount actual(argc); ParameterCount actual(argc);
...@@ -1862,9 +1862,10 @@ void CallICStub::Generate(MacroAssembler* masm) { ...@@ -1862,9 +1862,10 @@ void CallICStub::Generate(MacroAssembler* masm) {
FixedArray::kHeaderSize + kPointerSize), FixedArray::kHeaderSize + kPointerSize),
Immediate(Smi::FromInt(CallICNexus::kCallCountIncrement))); Immediate(Smi::FromInt(CallICNexus::kCallCountIncrement)));
__ bind(&call); __ bind(&call_function);
__ Set(eax, argc); __ Set(eax, argc);
__ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); __ Jump(masm->isolate()->builtins()->CallFunction(convert_mode()),
RelocInfo::CODE_TARGET);
__ bind(&extra_checks_or_miss); __ bind(&extra_checks_or_miss);
Label uninitialized, miss, not_allocation_site; Label uninitialized, miss, not_allocation_site;
...@@ -1902,7 +1903,11 @@ void CallICStub::Generate(MacroAssembler* masm) { ...@@ -1902,7 +1903,11 @@ void CallICStub::Generate(MacroAssembler* masm) {
// We have to update statistics for runtime profiling. // We have to update statistics for runtime profiling.
__ sub(FieldOperand(ebx, with_types_offset), Immediate(Smi::FromInt(1))); __ sub(FieldOperand(ebx, with_types_offset), Immediate(Smi::FromInt(1)));
__ add(FieldOperand(ebx, generic_offset), Immediate(Smi::FromInt(1))); __ add(FieldOperand(ebx, generic_offset), Immediate(Smi::FromInt(1)));
__ jmp(&call);
__ bind(&call);
__ Set(eax, argc);
__ Jump(masm->isolate()->builtins()->Call(convert_mode()),
RelocInfo::CODE_TARGET);
__ bind(&uninitialized); __ bind(&uninitialized);
...@@ -1946,7 +1951,7 @@ void CallICStub::Generate(MacroAssembler* masm) { ...@@ -1946,7 +1951,7 @@ void CallICStub::Generate(MacroAssembler* masm) {
__ pop(edi); __ pop(edi);
} }
__ jmp(&call); __ jmp(&call_function);
// We are here because tracing is on or we encountered a MISS case we can't // We are here because tracing is on or we encountered a MISS case we can't
// handle here. // handle here.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment