blob: 96f0dba094924b7008206c2b8f7550918f747317 [file] [log] [blame]
// 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_renode_register_info.h"
#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 - used below.
CheriotRenodeRegisterInfo *CheriotRenodeRegisterInfo::instance_ = nullptr;
void CheriotRenodeRegisterInfo::InitializeRenodeRegisterInfo() {
using DbgReg = DebugRegisterEnum;
renode_register_info_ = {
{*DbgReg::kPc, 32, true, false}, {*DbgReg::kC0, 32, true, true},
{*DbgReg::kC1, 32, true, false}, {*DbgReg::kC2, 32, true, false},
{*DbgReg::kC3, 32, true, false}, {*DbgReg::kC4, 32, true, false},
{*DbgReg::kC5, 32, true, false}, {*DbgReg::kC6, 32, true, false},
{*DbgReg::kC7, 32, true, false}, {*DbgReg::kC8, 32, true, false},
{*DbgReg::kC9, 32, true, false}, {*DbgReg::kC10, 32, true, false},
{*DbgReg::kC11, 32, true, false}, {*DbgReg::kC12, 32, true, false},
{*DbgReg::kC13, 32, true, false}, {*DbgReg::kC14, 32, true, false},
{*DbgReg::kC15, 32, true, false}, {*DbgReg::kC16, 32, true, false},
{*DbgReg::kC17, 32, true, false}, {*DbgReg::kC18, 32, true, false},
{*DbgReg::kC19, 32, true, false}, {*DbgReg::kC20, 32, true, false},
{*DbgReg::kC21, 32, true, false}, {*DbgReg::kC22, 32, true, false},
{*DbgReg::kC23, 32, true, false}, {*DbgReg::kC24, 32, true, false},
{*DbgReg::kC25, 32, true, false}, {*DbgReg::kC26, 32, true, false},
{*DbgReg::kC27, 32, true, false}, {*DbgReg::kC28, 32, true, false},
{*DbgReg::kC29, 32, true, false}, {*DbgReg::kC30, 32, true, false},
{*DbgReg::kC31, 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},
};
}
CheriotRenodeRegisterInfo::CheriotRenodeRegisterInfo() {
InitializeRenodeRegisterInfo();
}
const CheriotRenodeRegisterInfo::RenodeRegisterInfo &
CheriotRenodeRegisterInfo::GetRenodeRegisterInfo() {
return Instance()->GetRenodeRegisterInfoPrivate();
}
CheriotRenodeRegisterInfo *CheriotRenodeRegisterInfo::Instance() {
if (instance_ == nullptr) {
instance_ = new CheriotRenodeRegisterInfo();
}
return instance_;
}
const CheriotRenodeRegisterInfo::RenodeRegisterInfo &
CheriotRenodeRegisterInfo::GetRenodeRegisterInfoPrivate() {
return renode_register_info_;
}
} // namespace cheriot
} // namespace sim
} // namespace mpact