| // 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 |