34 #include "iris/detail/IrisCppAdapter.h" 35 #include "iris/detail/IrisObjects.h" 42 iris::IrisConnectionInterface *iris_if,
43 const std::string &iris_path) :
68 iris::MemorySpaceId in = iris::IRIS_UINT64_MAX;
69 iris::MemorySpaceId out = iris::IRIS_UINT64_MAX;
72 if (space.canonicalMsn == in_msn)
74 else if (space.canonicalMsn == out_msn)
78 panic_if(in == iris::IRIS_UINT64_MAX || out == iris::IRIS_UINT64_MAX,
79 "Canonical IRIS memory space numbers not found.");
81 return ThreadContext::translateAddress(paddr, out, vaddr, in);
87 ThreadContext::initFromIrisInstance(resources);
106 ArmISA::CPSR orig_cpsr;
108 auto *non_const_this =
const_cast<CortexA76TC *
>(
this);
112 ArmISA::CPSR new_cpsr = orig_cpsr;
129 ArmISA::CPSR orig_cpsr;
133 ArmISA::CPSR new_cpsr = orig_cpsr;
151 result = ((CPSR)result).nz;
154 result =
bits(result, 31, 28);
188 if (
bpSpaceId == iris::IRIS_UINT64_MAX) {
196 "Unable to find address space for breakpoints.");
938 { 0,
"V0" }, { 1,
"V1" }, { 2,
"V2" }, { 3,
"V3" },
939 { 4,
"V4" }, { 5,
"V5" }, { 6,
"V6" }, { 7,
"V7" },
940 { 8,
"V8" }, { 9,
"V9" }, { 10,
"V10" }, { 11,
"V11" },
941 { 12,
"V12" }, { 13,
"V13" }, { 14,
"V14" }, { 15,
"V15" },
942 { 16,
"V16" }, { 17,
"V17" }, { 18,
"V18" }, { 19,
"V19" },
943 { 20,
"V20" }, { 21,
"V21" }, { 22,
"V22" }, { 23,
"V23" },
944 { 24,
"V24" }, { 25,
"V25" }, { 26,
"V26" }, { 27,
"V27" },
945 { 28,
"V28" }, { 29,
"V29" }, { 30,
"V30" }, { 31,
"V31" }
void setCCRegFlat(RegIndex idx, RegVal val) override
RegVal readCCRegFlat(RegIndex idx) const override
static ExceptionLevel currEL(ThreadContext *tc)
void setCCRegFlat(RegIndex idx, RegVal val) override
static IdxNameMap vecRegIdxNameMap
std::vector< iris::MemorySpaceInfo > memorySpaces
std::map< std::string, iris::ResourceInfo > ResourceMap
static IdxNameMap intReg64IdxNameMap
static iris::MemorySpaceId bpSpaceId
ThreadContext is the external interface to all thread state for anything outside of the CPU...
RegVal readMiscRegNoEffect(RegIndex misc_reg) const override
void setMiscReg(RegIndex misc_reg, const RegVal val) override
void initFromIrisInstance(const ResourceMap &resources) override
RegVal readCCRegFlat(RegIndex idx) const override
iris::MemorySpaceId getBpSpaceId(Addr pc) const override
static IdxNameMap ccRegIdxNameMap
iris::ResourceId extractResourceId(const ResourceMap &resources, const std::string &name)
bool translateAddress(Addr &paddr, Addr vaddr) override
T insertBits(T val, int first, int last, B bit_val)
Returns val with bits first to last set to the LSBs of bit_val.
static IdxNameMap intReg32IdxNameMap
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
CortexA76TC(::BaseCPU *cpu, int id, System *system, ::BaseTLB *dtb, ::BaseTLB *itb, iris::IrisConnectionInterface *iris_if, const std::string &iris_path)
static IdxNameMap miscRegIdxNameMap
std::map< int, std::string > IdxNameMap
void setIntRegFlat(RegIndex idx, RegVal val) override
RegVal readIntRegFlat(RegIndex idx) const override
Flat register interfaces.
ResourceIds flattenedIntIds
static IdxNameMap flattenedIntIdxNameMap
virtual RegVal readIntRegFlat(RegIndex idx) const =0
Flat register interfaces.
virtual void setIntRegFlat(RegIndex idx, RegVal val)=0
bool inSecureState(ThreadContext *tc)
T bits(T val, int first, int last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it...
void extractResourceMap(ResourceIds &ids, const ResourceMap &resources, const IdxNameMap &idx_names)
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...