blob: 49316f127fc6ebfa454019367b86bac8b27a160b [file]
// 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 "riscv/riscv_renode_register_info.h"
#include "mpact/sim/generic/type_helpers.h"
#include "riscv/riscv_debug_info.h"
namespace mpact {
namespace sim {
namespace riscv {
using ::mpact::sim::generic::operator*; // NOLINT - used below.
RiscVRenodeRegisterInfo *RiscVRenodeRegisterInfo::instance_ = nullptr;
void RiscVRenodeRegisterInfo::InitializeRenodeRegisterInfo() {
using DbgReg = DebugRegisterEnum;
renode_register_info_ = {
{*DbgReg::kPc, 32, true, false}, {*DbgReg::kX0, 32, true, true},
{*DbgReg::kX1, 32, true, false}, {*DbgReg::kX2, 32, true, false},
{*DbgReg::kX3, 32, true, false}, {*DbgReg::kX4, 32, true, false},
{*DbgReg::kX5, 32, true, false}, {*DbgReg::kX6, 32, true, false},
{*DbgReg::kX7, 32, true, false}, {*DbgReg::kX8, 32, true, false},
{*DbgReg::kX9, 32, true, false}, {*DbgReg::kX10, 32, true, false},
{*DbgReg::kX11, 32, true, false}, {*DbgReg::kX12, 32, true, false},
{*DbgReg::kX13, 32, true, false}, {*DbgReg::kX14, 32, true, false},
{*DbgReg::kX15, 32, true, false}, {*DbgReg::kX16, 32, true, false},
{*DbgReg::kX17, 32, true, false}, {*DbgReg::kX18, 32, true, false},
{*DbgReg::kX19, 32, true, false}, {*DbgReg::kX20, 32, true, false},
{*DbgReg::kX21, 32, true, false}, {*DbgReg::kX22, 32, true, false},
{*DbgReg::kX23, 32, true, false}, {*DbgReg::kX24, 32, true, false},
{*DbgReg::kX25, 32, true, false}, {*DbgReg::kX26, 32, true, false},
{*DbgReg::kX27, 32, true, false}, {*DbgReg::kX28, 32, true, false},
{*DbgReg::kX29, 32, true, false}, {*DbgReg::kX30, 32, true, false},
{*DbgReg::kX31, 32, true, false}, {*DbgReg::kF0, 32, false, false},
{*DbgReg::kF1, 32, false, false}, {*DbgReg::kF2, 32, false, false},
{*DbgReg::kF3, 32, false, false}, {*DbgReg::kF4, 32, false, false},
{*DbgReg::kF5, 32, false, false}, {*DbgReg::kF6, 32, false, false},
{*DbgReg::kF7, 32, false, false}, {*DbgReg::kF8, 32, false, false},
{*DbgReg::kF9, 32, false, false}, {*DbgReg::kF10, 32, false, false},
{*DbgReg::kF11, 32, false, false}, {*DbgReg::kF12, 32, false, false},
{*DbgReg::kF13, 32, false, false}, {*DbgReg::kF14, 32, false, false},
{*DbgReg::kF15, 32, false, false}, {*DbgReg::kF16, 32, false, false},
{*DbgReg::kF17, 32, false, false}, {*DbgReg::kF18, 32, false, false},
{*DbgReg::kF19, 32, false, false}, {*DbgReg::kF20, 32, false, false},
{*DbgReg::kF21, 32, false, false}, {*DbgReg::kF22, 32, false, false},
{*DbgReg::kF23, 32, false, false}, {*DbgReg::kF24, 32, false, false},
{*DbgReg::kF25, 32, false, false}, {*DbgReg::kF26, 32, false, false},
{*DbgReg::kF27, 32, false, false}, {*DbgReg::kF28, 32, false, false},
{*DbgReg::kF29, 32, false, false}, {*DbgReg::kF30, 32, false, false},
{*DbgReg::kF31, 32, false, false},
};
}
RiscVRenodeRegisterInfo::RiscVRenodeRegisterInfo() {
InitializeRenodeRegisterInfo();
}
const RiscVRenodeRegisterInfo::RenodeRegisterInfo &
RiscVRenodeRegisterInfo::GetRenodeRegisterInfo() {
return Instance()->GetRenodeRegisterInfoPrivate();
}
RiscVRenodeRegisterInfo *RiscVRenodeRegisterInfo::Instance() {
if (instance_ == nullptr) {
instance_ = new RiscVRenodeRegisterInfo();
}
return instance_;
}
const RiscVRenodeRegisterInfo::RenodeRegisterInfo &
RiscVRenodeRegisterInfo::GetRenodeRegisterInfoPrivate() {
return renode_register_info_;
}
} // namespace riscv
} // namespace sim
} // namespace mpact