Beispiel #1
0
Vauto::~Vauto() {
  auto& areas = this->areas();

  for (auto& b : unit().blocks) {
    if (!b.code.empty()) {
      // Found at least one nonempty block.  Finish up.
      if (!main().closed()) {
        main() << fallthru{};
      }
      assertx(areas.size() < 2 || cold().empty() || cold().closed());
      assertx(areas.size() < 3 || frozen().empty() || frozen().closed());

      Trace::Bump bumper{Trace::printir, 10}; // prevent spurious printir

      switch (arch()) {
        case Arch::X64:
          optimizeX64(unit(), vauto_abi);
          emitX64(unit(), areas, nullptr);
          break;
        case Arch::ARM:
          finishARM(unit(), areas, vauto_abi, nullptr);
          break;
      }
      return;
    }
  }
}
Beispiel #2
0
Vauto::~Vauto() {
  for (auto& b : unit().blocks) {
    if (!b.code.empty()) {
      // Found at least one nonempty block.  Finish up.
      if (!main().closed()) main() << fallthru{};

      // Prevent spurious printir traces.
      Trace::Bump bumper{Trace::printir, 10};

      switch (arch()) {
        case Arch::X64:
          optimizeX64(unit(), abi(m_kind));
          emitX64(unit(), m_text, nullptr);
          break;
        case Arch::ARM:
          finishARM(unit(), m_text, abi(m_kind), nullptr);
          break;
      }
      return;
    }
  }
}