// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "cheriot/cheriot_debug_info.h"

#include "mpact/sim/generic/type_helpers.h"

namespace mpact {
namespace sim {
namespace cheriot {

using ::mpact::sim::generic::operator*;  // NOLINT: is used below (clang error).

constexpr char kPcName[] = "pcc";

constexpr char kC0Name[] = "c0";
constexpr char kC1Name[] = "c1";
constexpr char kC2Name[] = "c2";
constexpr char kC3Name[] = "c3";
constexpr char kC4Name[] = "c4";
constexpr char kC5Name[] = "c5";
constexpr char kC6Name[] = "c6";
constexpr char kC7Name[] = "c7";
constexpr char kC8Name[] = "c8";
constexpr char kC9Name[] = "c9";
constexpr char kC10Name[] = "c10";
constexpr char kC11Name[] = "c11";
constexpr char kC12Name[] = "c12";
constexpr char kC13Name[] = "c13";
constexpr char kC14Name[] = "c14";
constexpr char kC15Name[] = "c15";
constexpr char kC16Name[] = "c16";
constexpr char kC17Name[] = "c17";
constexpr char kC18Name[] = "c18";
constexpr char kC19Name[] = "c19";
constexpr char kC20Name[] = "c20";
constexpr char kC21Name[] = "c21";
constexpr char kC22Name[] = "c22";
constexpr char kC23Name[] = "c23";
constexpr char kC24Name[] = "c24";
constexpr char kC25Name[] = "c25";
constexpr char kC26Name[] = "c26";
constexpr char kC27Name[] = "c27";
constexpr char kC28Name[] = "c28";
constexpr char kC29Name[] = "c29";
constexpr char kC30Name[] = "c30";
constexpr char kC31Name[] = "c31";

constexpr char kF0Name[] = "f0";
constexpr char kF1Name[] = "f1";
constexpr char kF2Name[] = "f2";
constexpr char kF3Name[] = "f3";
constexpr char kF4Name[] = "f4";
constexpr char kF5Name[] = "f5";
constexpr char kF6Name[] = "f6";
constexpr char kF7Name[] = "f7";
constexpr char kF8Name[] = "f8";
constexpr char kF9Name[] = "f9";
constexpr char kF10Name[] = "f10";
constexpr char kF11Name[] = "f11";
constexpr char kF12Name[] = "f12";
constexpr char kF13Name[] = "f13";
constexpr char kF14Name[] = "f14";
constexpr char kF15Name[] = "f15";
constexpr char kF16Name[] = "f16";
constexpr char kF17Name[] = "f17";
constexpr char kF18Name[] = "f18";
constexpr char kF19Name[] = "f19";
constexpr char kF20Name[] = "f20";
constexpr char kF21Name[] = "f21";
constexpr char kF22Name[] = "f22";
constexpr char kF23Name[] = "f23";
constexpr char kF24Name[] = "f24";
constexpr char kF25Name[] = "f25";
constexpr char kF26Name[] = "f26";
constexpr char kF27Name[] = "f27";
constexpr char kF28Name[] = "f28";
constexpr char kF29Name[] = "f29";
constexpr char kF30Name[] = "f30";
constexpr char kF31Name[] = "f31";

CheriotDebugInfo::CheriotDebugInfo()
    : debug_register_map_({{*DebugRegisterEnum::kPc, kPcName},
                           {*DebugRegisterEnum::kC0, kC0Name},
                           {*DebugRegisterEnum::kC1, kC1Name},
                           {*DebugRegisterEnum::kC2, kC2Name},
                           {*DebugRegisterEnum::kC3, kC3Name},
                           {*DebugRegisterEnum::kC4, kC4Name},
                           {*DebugRegisterEnum::kC5, kC5Name},
                           {*DebugRegisterEnum::kC6, kC6Name},
                           {*DebugRegisterEnum::kC7, kC7Name},
                           {*DebugRegisterEnum::kC8, kC8Name},
                           {*DebugRegisterEnum::kC9, kC9Name},
                           {*DebugRegisterEnum::kC10, kC10Name},
                           {*DebugRegisterEnum::kC11, kC11Name},
                           {*DebugRegisterEnum::kC12, kC12Name},
                           {*DebugRegisterEnum::kC13, kC13Name},
                           {*DebugRegisterEnum::kC14, kC14Name},
                           {*DebugRegisterEnum::kC15, kC15Name},
                           {*DebugRegisterEnum::kC16, kC16Name},
                           {*DebugRegisterEnum::kC17, kC17Name},
                           {*DebugRegisterEnum::kC18, kC18Name},
                           {*DebugRegisterEnum::kC19, kC19Name},
                           {*DebugRegisterEnum::kC20, kC20Name},
                           {*DebugRegisterEnum::kC21, kC21Name},
                           {*DebugRegisterEnum::kC22, kC22Name},
                           {*DebugRegisterEnum::kC23, kC23Name},
                           {*DebugRegisterEnum::kC24, kC24Name},
                           {*DebugRegisterEnum::kC25, kC25Name},
                           {*DebugRegisterEnum::kC26, kC26Name},
                           {*DebugRegisterEnum::kC27, kC27Name},
                           {*DebugRegisterEnum::kC28, kC28Name},
                           {*DebugRegisterEnum::kC29, kC29Name},
                           {*DebugRegisterEnum::kC30, kC30Name},
                           {*DebugRegisterEnum::kC31, kC31Name},
                           {*DebugRegisterEnum::kF0, kF0Name},
                           {*DebugRegisterEnum::kF1, kF1Name},
                           {*DebugRegisterEnum::kF2, kF2Name},
                           {*DebugRegisterEnum::kF3, kF3Name},
                           {*DebugRegisterEnum::kF4, kF4Name},
                           {*DebugRegisterEnum::kF5, kF5Name},
                           {*DebugRegisterEnum::kF6, kF6Name},
                           {*DebugRegisterEnum::kF7, kF7Name},
                           {*DebugRegisterEnum::kF8, kF8Name},
                           {*DebugRegisterEnum::kF9, kF9Name},
                           {*DebugRegisterEnum::kF10, kF10Name},
                           {*DebugRegisterEnum::kF11, kF11Name},
                           {*DebugRegisterEnum::kF12, kF12Name},
                           {*DebugRegisterEnum::kF13, kF13Name},
                           {*DebugRegisterEnum::kF14, kF14Name},
                           {*DebugRegisterEnum::kF15, kF15Name},
                           {*DebugRegisterEnum::kF16, kF16Name},
                           {*DebugRegisterEnum::kF17, kF17Name},
                           {*DebugRegisterEnum::kF18, kF18Name},
                           {*DebugRegisterEnum::kF19, kF19Name},
                           {*DebugRegisterEnum::kF20, kF20Name},
                           {*DebugRegisterEnum::kF21, kF21Name},
                           {*DebugRegisterEnum::kF22, kF22Name},
                           {*DebugRegisterEnum::kF23, kF23Name},
                           {*DebugRegisterEnum::kF24, kF24Name},
                           {*DebugRegisterEnum::kF25, kF25Name},
                           {*DebugRegisterEnum::kF26, kF26Name},
                           {*DebugRegisterEnum::kF27, kF27Name},
                           {*DebugRegisterEnum::kF28, kF28Name},
                           {*DebugRegisterEnum::kF29, kF29Name},
                           {*DebugRegisterEnum::kF30, kF30Name},
                           {*DebugRegisterEnum::kF31, kF31Name}}) {}

CheriotDebugInfo *CheriotDebugInfo::Instance() {
  static CheriotDebugInfo *instance_ = nullptr;
  if (instance_ == nullptr) {
    instance_ = new CheriotDebugInfo();
  }
  return instance_;
}

}  // namespace cheriot
}  // namespace sim
}  // namespace mpact
