*/
#include "arch/arm/decoder.hh"
+
+#include "arch/arm/isa.hh"
#include "arch/arm/isa_traits.hh"
#include "arch/arm/utility.hh"
#include "base/trace.hh"
GenericISA::BasicDecodeCache Decoder::defaultCache;
-Decoder::Decoder()
- : data(0), fpscrLen(0), fpscrStride(0)
+Decoder::Decoder(ISA* isa)
+ : data(0), fpscrLen(0), fpscrStride(0), decoderFlavour(isa
+ ? isa->decoderFlavour()
+ : Enums::Generic)
{
reset();
}
Decoder::consumeBytes(int numBytes)
{
offset += numBytes;
- assert(offset <= sizeof(MachInst));
+ assert(offset <= sizeof(MachInst) || emi.decoderFault);
if (offset == sizeof(MachInst))
outOfBytes = true;
}
emi.fpscrLen = fpscrLen;
emi.fpscrStride = fpscrStride;
+ const Addr alignment(pc.thumb() ? 0x1 : 0x3);
+ emi.decoderFault = static_cast<uint8_t>(
+ pc.instAddr() & alignment ? DecoderFault::UNALIGNED : DecoderFault::OK);
+
outOfBytes = false;
process();
}