diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/insts/microldstop.hh | 20 | ||||
-rw-r--r-- | src/arch/x86/isa/microops/ldstop.isa | 2 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/arch/x86/insts/microldstop.hh b/src/arch/x86/insts/microldstop.hh index 5b1210d69..eccd37dc2 100644 --- a/src/arch/x86/insts/microldstop.hh +++ b/src/arch/x86/insts/microldstop.hh @@ -59,6 +59,7 @@ #define __ARCH_X86_INSTS_MICROLDSTOP_HH__ #include "arch/x86/insts/microop.hh" +#include "mem/packet.hh" namespace X86ISA { @@ -149,6 +150,25 @@ namespace X86ISA } return fault; } + + uint64_t + get(PacketPtr pkt) const + { + switch(dataSize) + { + case 1: + return pkt->get<uint8_t>(); + case 2: + return pkt->get<uint16_t>(); + case 4: + return pkt->get<uint32_t>(); + case 8: + return pkt->get<uint64_t>(); + default: + panic("Bad operand size %d for read at %#x.\n", + dataSize, pkt->getAddr()); + } + } }; } diff --git a/src/arch/x86/isa/microops/ldstop.isa b/src/arch/x86/isa/microops/ldstop.isa index cb63e7cd9..30a7c8801 100644 --- a/src/arch/x86/isa/microops/ldstop.isa +++ b/src/arch/x86/isa/microops/ldstop.isa @@ -194,7 +194,7 @@ def template MicroLoadCompleteAcc {{ %(op_decl)s; %(op_rd)s; - Mem = pkt->get<typeof(Mem)>(); + Mem = get(pkt); %(code)s; |