X87: [Interpreter] Collect type feedback for calls in the bytecode handler.

port fd420203ec (r37700)

  original commit message:
  Collect type feedback in the call bytecode handler. The current
  implementation only collects feedback for JS function objects. The other
  objects and Array functions do not collect any feedback. They will be
  marked Megamorphic.

BUG=

Review-Url: https://codereview.chromium.org/2149493005
Cr-Commit-Position: refs/heads/master@{#37737}
This commit is contained in:
zhengxing.li 2016-07-13 19:53:52 -07:00 committed by Commit bot
parent 68f205b2a7
commit a3b3888554

View File

@ -732,7 +732,8 @@ static void Generate_InterpreterPushArgs(MacroAssembler* masm,
// static
void Builtins::Generate_InterpreterPushArgsAndCallImpl(
MacroAssembler* masm, TailCallMode tail_call_mode) {
MacroAssembler* masm, TailCallMode tail_call_mode,
CallableType function_type) {
// ----------- S t a t e -------------
// -- eax : the number of arguments (not including the receiver)
// -- ebx : the address of the first argument to be pushed. Subsequent
@ -755,9 +756,17 @@ void Builtins::Generate_InterpreterPushArgsAndCallImpl(
// Call the target.
__ Push(edx); // Re-push return address.
__ Jump(masm->isolate()->builtins()->Call(ConvertReceiverMode::kAny,
tail_call_mode),
RelocInfo::CODE_TARGET);
if (function_type == CallableType::kJSFunction) {
__ Jump(masm->isolate()->builtins()->CallFunction(ConvertReceiverMode::kAny,
tail_call_mode),
RelocInfo::CODE_TARGET);
} else {
DCHECK_EQ(function_type, CallableType::kAny);
__ Jump(masm->isolate()->builtins()->Call(ConvertReceiverMode::kAny,
tail_call_mode),
RelocInfo::CODE_TARGET);
}
}