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

port d80fd48e5d (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}
This commit is contained in:
zhengxing.li 2015-11-23 00:57:26 -08:00 committed by Commit bot
parent fb633b0cc4
commit a0ce839241

View File

@ -1828,7 +1828,7 @@ void CallICStub::Generate(MacroAssembler* masm) {
FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex);
const int generic_offset =
FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex);
Label extra_checks_or_miss, call;
Label extra_checks_or_miss, call, call_function;
int argc = arg_count();
ParameterCount actual(argc);
@ -1862,9 +1862,10 @@ void CallICStub::Generate(MacroAssembler* masm) {
FixedArray::kHeaderSize + kPointerSize),
Immediate(Smi::FromInt(CallICNexus::kCallCountIncrement)));
__ bind(&call);
__ bind(&call_function);
__ 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);
Label uninitialized, miss, not_allocation_site;
@ -1902,7 +1903,11 @@ void CallICStub::Generate(MacroAssembler* masm) {
// We have to update statistics for runtime profiling.
__ sub(FieldOperand(ebx, with_types_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);
@ -1946,7 +1951,7 @@ void CallICStub::Generate(MacroAssembler* masm) {
__ pop(edi);
}
__ jmp(&call);
__ jmp(&call_function);
// We are here because tracing is on or we encountered a MISS case we can't
// handle here.