/*
- * Copyright (c) 2010, 2012-2013, 2015-2020 ARM Limited
+ * Copyright (c) 2010, 2012-2013, 2015-2021 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
*/
const bool _haveLargeAsid64;
+ /**
+ * True if system implements the transactional memory extension (TME)
+ */
+ const bool _haveTME;
+
/**
* True if SVE is implemented (ARMv8)
*/
*/
const bool _haveLSE;
+ /** True if FEAT_VHE (Virtualization Host Extensions) is implemented */
+ const bool _haveVHE;
+
/** True if Priviledge Access Never is implemented */
const unsigned _havePAN;
static constexpr Addr PageShift = ArmISA::PageShift;
typedef ArmSystemParams Params;
- const Params *
+ const Params &
params() const
{
- return dynamic_cast<const Params *>(_params);
+ return dynamic_cast<const Params &>(_params);
}
- ArmSystem(Params *p);
+ ArmSystem(const Params &p);
/** true if this a multiprocessor system */
bool multiProc;
bool highestELIs64() const { return _highestELIs64; }
/** Returns the highest implemented exception level */
- ExceptionLevel
+ ArmISA::ExceptionLevel
highestEL() const
{
if (_haveSecurity)
- return EL3;
+ return ArmISA::EL3;
if (_haveVirtualization)
- return EL2;
- return EL1;
+ return ArmISA::EL2;
+ return ArmISA::EL1;
}
/** Returns the reset address if the highest implemented exception level is
/** Returns true if ASID is 16 bits in AArch64 (ARMv8) */
bool haveLargeAsid64() const { return _haveLargeAsid64; }
+ /** Returns true if this system implements the transactional
+ * memory extension (ARMv9)
+ */
+ bool haveTME() const { return _haveTME; }
+
/** Returns true if SVE is implemented (ARMv8) */
bool haveSVE() const { return _haveSVE; }
/** Returns true if LSE is implemented (ARMv8.1) */
bool haveLSE() const { return _haveLSE; }
+ /** Returns true if Virtualization Host Extensions is implemented */
+ bool haveVHE() const { return _haveVHE; }
+
/** Returns true if Priviledge Access Never is implemented */
bool havePAN() const { return _havePAN; }
/** Returns the highest implemented exception level for the system of a
* specific thread context
*/
- static ExceptionLevel highestEL(ThreadContext *tc);
+ static ArmISA::ExceptionLevel highestEL(ThreadContext *tc);
/** Return true if the system implements a specific exception level */
- static bool haveEL(ThreadContext *tc, ExceptionLevel el);
+ static bool haveEL(ThreadContext *tc, ArmISA::ExceptionLevel el);
+
+ /** Returns true if the system of a specific thread context implements the
+ * transactional memory extension (TME)
+ */
+ static bool haveTME(ThreadContext *tc);
/** Returns the reset address if the highest implemented exception level
* for the system of a specific thread context is 64 bits (ARMv8)