diff options
author | Gabe Black <gabeblack@google.com> | 2017-12-20 00:02:47 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2017-12-23 03:36:45 +0000 |
commit | 87eb9a3a640875d176bec9dfb130450d23d8e8b8 (patch) | |
tree | 305da38c7ea611b9404dcf2d8a79e74cac8bef73 | |
parent | b7618c69a511e3fde5cdb674a91e5683f92e770f (diff) | |
download | gem5-87eb9a3a640875d176bec9dfb130450d23d8e8b8.tar.xz |
riscv,x86: Stop using the arch Nop machine instruction unnecessarily.
That particular ExtMachInst is a convenient placeholder, but a value
of 0 in RISCV or a static uninitialized ExtMachInst (which will
therefore be all zeroes) on x86 works just as well, and removes the
need for an ISA specific constant.
Also, the idea of a universal Nop doesn't always make sense since it
could be that what, exactly, doesn't do anything depends on context
which would be lost on a constant value of an ExtMachInst. For
instance, the value of an ExtMachInst that makes sense might depend on
what mode the CPU was in, etc.
Change-Id: I1f1a43a5c607a667e11b79bcf6e059e4f7141b3f
Reviewed-on: https://gem5-review.googlesource.com/6825
Reviewed-by: Gabe Black <gabeblack@google.com>
Reviewed-by: Alec Roelke <ar4jc@virginia.edu>
Maintainer: Gabe Black <gabeblack@google.com>
-rw-r--r-- | src/arch/riscv/decoder.cc | 2 | ||||
-rw-r--r-- | src/arch/x86/insts/badmicroop.cc | 9 | ||||
-rw-r--r-- | src/arch/x86/isa/microops/base.isa | 3 |
3 files changed, 10 insertions, 4 deletions
diff --git a/src/arch/riscv/decoder.cc b/src/arch/riscv/decoder.cc index 020c5e34e..41a52020e 100644 --- a/src/arch/riscv/decoder.cc +++ b/src/arch/riscv/decoder.cc @@ -45,7 +45,7 @@ void Decoder::reset() aligned = true; mid = false; more = true; - emi = NoopMachInst; + emi = 0; instDone = false; } diff --git a/src/arch/x86/insts/badmicroop.cc b/src/arch/x86/insts/badmicroop.cc index 21af1281b..09248738d 100644 --- a/src/arch/x86/insts/badmicroop.cc +++ b/src/arch/x86/insts/badmicroop.cc @@ -42,14 +42,21 @@ #include "arch/x86/generated/decoder.hh" #include "arch/x86/isa_traits.hh" +namespace { + +static X86ISA::ExtMachInst dummyMachInst; + +} + namespace X86ISA { // This microop needs to be allocated on the heap even though it could // theoretically be statically allocated. The reference counted pointer would // try to delete the static memory when it was destructed. + const StaticInstPtr badMicroop = - new X86ISAInst::MicroPanic(NoopMachInst, "BAD", + new X86ISAInst::MicroPanic(dummyMachInst, "BAD", StaticInst::IsMicroop | StaticInst::IsLastMicroop, "Invalid microop!", 0); diff --git a/src/arch/x86/isa/microops/base.isa b/src/arch/x86/isa/microops/base.isa index dc36d0edb..42e7d2e33 100644 --- a/src/arch/x86/isa/microops/base.isa +++ b/src/arch/x86/isa/microops/base.isa @@ -59,8 +59,7 @@ let {{ ''' + generatorNameTemplate + '''(StaticInstPtr curMacroop) { static const char *macrocodeBlock = romMnemonic; - static const ExtMachInst dummyExtMachInst = \ - X86ISA::NoopMachInst; + static ExtMachInst dummyExtMachInst; static const EmulEnv dummyEmulEnv(0, 0, 1, 1, 1); Macroop * macroop = dynamic_cast<Macroop *>(curMacroop.get()); |