builtins-interpreter.cc 3.19 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "src/builtins/builtins.h"
#include "src/builtins/builtins-utils.h"

namespace v8 {
namespace internal {

11 12 13 14 15
Handle<Code> Builtins::InterpreterPushArgsAndCall(
    TailCallMode tail_call_mode, InterpreterPushArgsMode mode) {
  switch (mode) {
    case InterpreterPushArgsMode::kJSFunction:
      if (tail_call_mode == TailCallMode::kDisallow) {
16 17 18
        return InterpreterPushArgsAndCallFunction();
      } else {
        return InterpreterPushArgsAndTailCallFunction();
19 20 21 22 23 24 25
      }
    case InterpreterPushArgsMode::kWithFinalSpread:
      CHECK(tail_call_mode == TailCallMode::kDisallow);
      return InterpreterPushArgsAndCallWithFinalSpread();
    case InterpreterPushArgsMode::kOther:
      if (tail_call_mode == TailCallMode::kDisallow) {
        return InterpreterPushArgsAndCall();
26 27 28 29 30 31 32 33 34
      } else {
        return InterpreterPushArgsAndTailCall();
      }
  }
  UNREACHABLE();
  return Handle<Code>::null();
}

void Builtins::Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) {
35 36
  return Generate_InterpreterPushArgsAndCallImpl(
      masm, TailCallMode::kDisallow, InterpreterPushArgsMode::kOther);
37 38 39 40
}

void Builtins::Generate_InterpreterPushArgsAndCallFunction(
    MacroAssembler* masm) {
41 42 43 44 45 46 47 48
  return Generate_InterpreterPushArgsAndCallImpl(
      masm, TailCallMode::kDisallow, InterpreterPushArgsMode::kJSFunction);
}

void Builtins::Generate_InterpreterPushArgsAndCallWithFinalSpread(
    MacroAssembler* masm) {
  return Generate_InterpreterPushArgsAndCallImpl(
      masm, TailCallMode::kDisallow, InterpreterPushArgsMode::kWithFinalSpread);
49 50 51
}

void Builtins::Generate_InterpreterPushArgsAndTailCall(MacroAssembler* masm) {
52 53
  return Generate_InterpreterPushArgsAndCallImpl(
      masm, TailCallMode::kAllow, InterpreterPushArgsMode::kOther);
54 55 56 57
}

void Builtins::Generate_InterpreterPushArgsAndTailCallFunction(
    MacroAssembler* masm) {
58 59
  return Generate_InterpreterPushArgsAndCallImpl(
      masm, TailCallMode::kAllow, InterpreterPushArgsMode::kJSFunction);
60 61
}

62
Handle<Code> Builtins::InterpreterPushArgsAndConstruct(
63
    InterpreterPushArgsMode mode) {
64
  switch (mode) {
65
    case InterpreterPushArgsMode::kJSFunction:
66
      return InterpreterPushArgsAndConstructFunction();
67
    case InterpreterPushArgsMode::kWithFinalSpread:
68
      return InterpreterPushArgsAndConstructWithFinalSpread();
69
    case InterpreterPushArgsMode::kOther:
70 71 72 73 74 75 76
      return InterpreterPushArgsAndConstruct();
  }
  UNREACHABLE();
  return Handle<Code>::null();
}

void Builtins::Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm) {
77
  return Generate_InterpreterPushArgsAndConstructImpl(
78
      masm, InterpreterPushArgsMode::kOther);
79 80 81 82 83
}

void Builtins::Generate_InterpreterPushArgsAndConstructWithFinalSpread(
    MacroAssembler* masm) {
  return Generate_InterpreterPushArgsAndConstructImpl(
84
      masm, InterpreterPushArgsMode::kWithFinalSpread);
85 86 87 88 89
}

void Builtins::Generate_InterpreterPushArgsAndConstructFunction(
    MacroAssembler* masm) {
  return Generate_InterpreterPushArgsAndConstructImpl(
90
      masm, InterpreterPushArgsMode::kJSFunction);
91 92
}

93 94
}  // namespace internal
}  // namespace v8