1// Copyright 2020 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_TORQUE_CC_GENERATOR_H_ 6#define V8_TORQUE_CC_GENERATOR_H_ 7 8#include "src/torque/torque-code-generator.h" 9 10namespace v8 { 11namespace internal { 12namespace torque { 13 14class CCGenerator : public TorqueCodeGenerator { 15 public: 16 CCGenerator(const ControlFlowGraph& cfg, std::ostream& out, 17 bool is_cc_debug = false) 18 : TorqueCodeGenerator(cfg, out), is_cc_debug_(is_cc_debug) {} 19 base::Optional<Stack<std::string>> EmitGraph(Stack<std::string> parameters); 20 21 static void EmitCCValue(VisitResult result, const Stack<std::string>& values, 22 std::ostream& out); 23 24 private: 25 bool is_cc_debug_; 26 27 void EmitSourcePosition(SourcePosition pos, 28 bool always_emit = false) override; 29 30 void EmitGoto(const Block* destination, Stack<std::string>* stack, 31 std::string indentation); 32 33 std::vector<std::string> ProcessArgumentsCommon( 34 const TypeVector& parameter_types, 35 std::vector<std::string> constexpr_arguments, Stack<std::string>* stack); 36 37 Stack<std::string> EmitBlock(const Block* block); 38#define EMIT_INSTRUCTION_DECLARATION(T) \ 39 void EmitInstruction(const T& instruction, Stack<std::string>* stack) \ 40 override; 41 TORQUE_BACKEND_DEPENDENT_INSTRUCTION_LIST(EMIT_INSTRUCTION_DECLARATION) 42#undef EMIT_INSTRUCTION_DECLARATION 43}; 44 45} // namespace torque 46} // namespace internal 47} // namespace v8 48 49#endif // V8_TORQUE_CC_GENERATOR_H_ 50