blob: b7bbc87f6f4ece75a9adef783dbfcb4362ab524b [file]
// Copyright 2023 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
//
// https://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 "riscv/riscv_debug_info.h"
#include "mpact/sim/generic/type_helpers.h"
namespace mpact {
namespace sim {
namespace riscv {
using ::mpact::sim::generic::operator*; // NOLINT: is used below (clang error).
constexpr char kPcName[] = "pc";
constexpr char kX0Name[] = "x0";
constexpr char kX1Name[] = "x1";
constexpr char kX2Name[] = "x2";
constexpr char kX3Name[] = "x3";
constexpr char kX4Name[] = "x4";
constexpr char kX5Name[] = "x5";
constexpr char kX6Name[] = "x6";
constexpr char kX7Name[] = "x7";
constexpr char kX8Name[] = "x8";
constexpr char kX9Name[] = "x9";
constexpr char kX10Name[] = "x10";
constexpr char kX11Name[] = "x11";
constexpr char kX12Name[] = "x12";
constexpr char kX13Name[] = "x13";
constexpr char kX14Name[] = "x14";
constexpr char kX15Name[] = "x15";
constexpr char kX16Name[] = "x16";
constexpr char kX17Name[] = "x17";
constexpr char kX18Name[] = "x18";
constexpr char kX19Name[] = "x19";
constexpr char kX20Name[] = "x20";
constexpr char kX21Name[] = "x21";
constexpr char kX22Name[] = "x22";
constexpr char kX23Name[] = "x23";
constexpr char kX24Name[] = "x24";
constexpr char kX25Name[] = "x25";
constexpr char kX26Name[] = "x26";
constexpr char kX27Name[] = "x27";
constexpr char kX28Name[] = "x28";
constexpr char kX29Name[] = "x29";
constexpr char kX30Name[] = "x30";
constexpr char kX31Name[] = "x31";
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";
constexpr char kV0Name[] = "v0";
constexpr char kV1Name[] = "v1";
constexpr char kV2Name[] = "v2";
constexpr char kV3Name[] = "v3";
constexpr char kV4Name[] = "v4";
constexpr char kV5Name[] = "v5";
constexpr char kV6Name[] = "v6";
constexpr char kV7Name[] = "v7";
constexpr char kV8Name[] = "v8";
constexpr char kV9Name[] = "v9";
constexpr char kV10Name[] = "v10";
constexpr char kV11Name[] = "v11";
constexpr char kV12Name[] = "v12";
constexpr char kV13Name[] = "v13";
constexpr char kV14Name[] = "v14";
constexpr char kV15Name[] = "v15";
constexpr char kV16Name[] = "v16";
constexpr char kV17Name[] = "v17";
constexpr char kV18Name[] = "v18";
constexpr char kV19Name[] = "v19";
constexpr char kV20Name[] = "v20";
constexpr char kV21Name[] = "v21";
constexpr char kV22Name[] = "v22";
constexpr char kV23Name[] = "v23";
constexpr char kV24Name[] = "v24";
constexpr char kV25Name[] = "v25";
constexpr char kV26Name[] = "v26";
constexpr char kV27Name[] = "v27";
constexpr char kV28Name[] = "v28";
constexpr char kV29Name[] = "v29";
constexpr char kV30Name[] = "v30";
constexpr char kV31Name[] = "v31";
RiscVDebugInfo::RiscVDebugInfo()
: debug_register_map_({{*DebugRegisterEnum::kPc, kPcName},
{*DebugRegisterEnum::kX0, kX0Name},
{*DebugRegisterEnum::kX1, kX1Name},
{*DebugRegisterEnum::kX2, kX2Name},
{*DebugRegisterEnum::kX3, kX3Name},
{*DebugRegisterEnum::kX4, kX4Name},
{*DebugRegisterEnum::kX5, kX5Name},
{*DebugRegisterEnum::kX6, kX6Name},
{*DebugRegisterEnum::kX7, kX7Name},
{*DebugRegisterEnum::kX8, kX8Name},
{*DebugRegisterEnum::kX9, kX9Name},
{*DebugRegisterEnum::kX10, kX10Name},
{*DebugRegisterEnum::kX11, kX11Name},
{*DebugRegisterEnum::kX12, kX12Name},
{*DebugRegisterEnum::kX13, kX13Name},
{*DebugRegisterEnum::kX14, kX14Name},
{*DebugRegisterEnum::kX15, kX15Name},
{*DebugRegisterEnum::kX16, kX16Name},
{*DebugRegisterEnum::kX17, kX17Name},
{*DebugRegisterEnum::kX18, kX18Name},
{*DebugRegisterEnum::kX19, kX19Name},
{*DebugRegisterEnum::kX20, kX20Name},
{*DebugRegisterEnum::kX21, kX21Name},
{*DebugRegisterEnum::kX22, kX22Name},
{*DebugRegisterEnum::kX23, kX23Name},
{*DebugRegisterEnum::kX24, kX24Name},
{*DebugRegisterEnum::kX25, kX25Name},
{*DebugRegisterEnum::kX26, kX26Name},
{*DebugRegisterEnum::kX27, kX27Name},
{*DebugRegisterEnum::kX28, kX28Name},
{*DebugRegisterEnum::kX29, kX29Name},
{*DebugRegisterEnum::kX30, kX30Name},
{*DebugRegisterEnum::kX31, kX31Name},
{*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},
{*DebugRegisterEnum::kV0, kV0Name},
{*DebugRegisterEnum::kV1, kV1Name},
{*DebugRegisterEnum::kV2, kV2Name},
{*DebugRegisterEnum::kV3, kV3Name},
{*DebugRegisterEnum::kV4, kV4Name},
{*DebugRegisterEnum::kV5, kV5Name},
{*DebugRegisterEnum::kV6, kV6Name},
{*DebugRegisterEnum::kV7, kV7Name},
{*DebugRegisterEnum::kV8, kV8Name},
{*DebugRegisterEnum::kV9, kV9Name},
{*DebugRegisterEnum::kV10, kV10Name},
{*DebugRegisterEnum::kV11, kV11Name},
{*DebugRegisterEnum::kV12, kV12Name},
{*DebugRegisterEnum::kV13, kV13Name},
{*DebugRegisterEnum::kV14, kV14Name},
{*DebugRegisterEnum::kV15, kV15Name},
{*DebugRegisterEnum::kV16, kV16Name},
{*DebugRegisterEnum::kV17, kV17Name},
{*DebugRegisterEnum::kV18, kV18Name},
{*DebugRegisterEnum::kV19, kV19Name},
{*DebugRegisterEnum::kV20, kV20Name},
{*DebugRegisterEnum::kV21, kV21Name},
{*DebugRegisterEnum::kV22, kV22Name},
{*DebugRegisterEnum::kV23, kV23Name},
{*DebugRegisterEnum::kV24, kV24Name},
{*DebugRegisterEnum::kV25, kV25Name},
{*DebugRegisterEnum::kV26, kV26Name},
{*DebugRegisterEnum::kV27, kV27Name},
{*DebugRegisterEnum::kV28, kV28Name},
{*DebugRegisterEnum::kV29, kV29Name},
{*DebugRegisterEnum::kV30, kV30Name},
{*DebugRegisterEnum::kV31, kV31Name}}) {}
RiscVDebugInfo* RiscVDebugInfo::Instance() {
static RiscVDebugInfo* instance_ = nullptr;
if (instance_ == nullptr) {
instance_ = new RiscVDebugInfo();
}
return instance_;
}
} // namespace riscv
} // namespace sim
} // namespace mpact