ISA: Turn the ExtMachInst NoopMachinst into the StaticInstPtr NoopStaticInst.
authorGabe Black <gblack@eecs.umich.edu>
Mon, 4 Jun 2012 17:57:23 +0000 (10:57 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Mon, 4 Jun 2012 17:57:23 +0000 (10:57 -0700)
This eliminates a use of the ExtMachInst type outside of the ISAs.

17 files changed:
src/arch/alpha/SConscript
src/arch/alpha/isa_traits.cc [new file with mode: 0644]
src/arch/alpha/isa_traits.hh
src/arch/mips/SConscript
src/arch/mips/isa_traits.cc [new file with mode: 0644]
src/arch/mips/isa_traits.hh
src/arch/power/SConscript
src/arch/power/isa_traits.cc [new file with mode: 0644]
src/arch/power/isa_traits.hh
src/arch/sparc/SConscript
src/arch/sparc/isa_traits.cc [new file with mode: 0644]
src/arch/sparc/isa_traits.hh
src/arch/x86/SConscript
src/arch/x86/isa_traits.cc [new file with mode: 0644]
src/arch/x86/isa_traits.hh
src/arch/x86/x86_traits.hh
src/cpu/o3/fetch_impl.hh

index 421040bb55010c04e17570bb3ecab45382ffa4c4..aa7ac63c13bd3e149e9b31acd927dc93cc420220 100644 (file)
@@ -40,6 +40,7 @@ if env['TARGET_ISA'] == 'alpha':
     Source('interrupts.cc')
     Source('ipr.cc')
     Source('isa.cc')
+    Source('isa_traits.cc')
     Source('kernel_stats.cc')
     Source('linux/linux.cc')
     Source('linux/process.cc')
diff --git a/src/arch/alpha/isa_traits.cc b/src/arch/alpha/isa_traits.cc
new file mode 100644 (file)
index 0000000..769c6ce
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2012 Google
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "arch/alpha/generated/decoder.hh"
+#include "arch/alpha/isa_traits.hh"
+
+namespace AlphaISA
+{
+
+// Alpha UNOP (ldq_u r31,0(r0))
+const StaticInstPtr NoopStaticInst =
+    AlphaISAInst::makeNop(new AlphaISAInst::Ldq_u(0x2ffe0000));
+
+}
index 5738ccdb1b45e4a1fc924d48a778d467ffa4e86d..eff219a60cbee4c1e75d8efa0f2cf21a46a72130 100644 (file)
@@ -123,8 +123,7 @@ enum {
 };
 
 // return a no-op instruction... used for instruction fetch faults
-// Alpha UNOP (ldq_u r31,0(r0))
-const ExtMachInst NoopMachInst = 0x2ffe0000;
+const extern StaticInstPtr NoopStaticInst;
 
 // Memory accesses cannot be unaligned
 const bool HasUnalignedMemAcc = false;
index 15b4ffc518658bface7dd896c8d99466e342edef..ee6fb03f06db2bfe7914704c343bfd90eae8597b 100644 (file)
@@ -40,6 +40,7 @@ if env['TARGET_ISA'] == 'mips':
     Source('idle_event.cc')
     Source('interrupts.cc')
     Source('isa.cc')
+    Source('isa_traits.cc')
     Source('linux/linux.cc')
     Source('linux/process.cc')
     Source('linux/system.cc')
diff --git a/src/arch/mips/isa_traits.cc b/src/arch/mips/isa_traits.cc
new file mode 100644 (file)
index 0000000..7cdb6f0
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2012 Google
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "arch/mips/generated/decoder.hh"
+#include "arch/mips/isa_traits.hh"
+
+namespace MipsISA
+{
+
+const StaticInstPtr NoopStaticInst = new MipsISAInst::Nop("", 0x00000000);
+
+}
index f2a748da9c3a891e18dda690809993cd88f6975d..5884a969bb0b0b61bf276cead9c402b2d0e2b8a3 100644 (file)
@@ -143,7 +143,7 @@ enum mode_type
 };
 
 // return a no-op instruction... used for instruction fetch faults
-const ExtMachInst NoopMachInst = 0x00000000;
+const extern StaticInstPtr NoopStaticInst;
 
 const int LogVMPageSize = 13;       // 8K bytes
 const int VMPageSize = (1 << LogVMPageSize);
index a9d20b4bde8c5197eae194d9600b4667244a161f..123c70693d5dbb46851fd00b581e77859c1c3b77 100644 (file)
@@ -42,6 +42,7 @@ if env['TARGET_ISA'] == 'power':
     Source('insts/condition.cc')
     Source('insts/static_inst.cc')
     Source('interrupts.cc')
+    Source('isa_traits.cc')
     Source('linux/linux.cc')
     Source('linux/process.cc')
     Source('pagetable.cc')
diff --git a/src/arch/power/isa_traits.cc b/src/arch/power/isa_traits.cc
new file mode 100644 (file)
index 0000000..de77922
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2012 Google
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "arch/power/generated/decoder.hh"
+#include "arch/power/isa_traits.hh"
+
+namespace PowerISA
+{
+
+// This is ori 0, 0, 0
+const StaticInstPtr NoopStaticInst = new PowerISAInst::Or(0x60000000);
+
+}
index 3db4ab5aa4b5956fe3ad136d9da7bb2e4194e5af..d0279618f2a89abd3403ae9ca14b0f53520a1f38 100644 (file)
@@ -66,8 +66,7 @@ const int VMPageSize = (1 << LogVMPageSize);
 
 const int MachineBytes = 4;
 
-// This is ori 0, 0, 0
-const ExtMachInst NoopMachInst = 0x60000000;
+const extern StaticInstPtr NoopStaticInst;
 
 // Memory accesses can be unaligned
 const bool HasUnalignedMemAcc = true;
index 5e21467504eb487d2a68082a6c4008a6ac80114e..f48b6dd396d4b341f5416dcdd7e6c4a6cc6bbbf9 100644 (file)
@@ -37,6 +37,7 @@ if env['TARGET_ISA'] == 'sparc':
     Source('faults.cc')
     Source('interrupts.cc')
     Source('isa.cc')
+    Source('isa_traits.cc')
     Source('linux/linux.cc')
     Source('linux/process.cc')
     Source('linux/syscalls.cc')
diff --git a/src/arch/sparc/isa_traits.cc b/src/arch/sparc/isa_traits.cc
new file mode 100644 (file)
index 0000000..eee1886
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2012 Google
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "arch/sparc/generated/decoder.hh"
+#include "arch/sparc/isa_traits.hh"
+
+namespace SparcISA
+{
+
+const StaticInstPtr NoopStaticInst =
+    new SparcISAInst::Nop("nop", 0x01000000, No_OpClass);
+
+}
index 9b02a4d80f619d7caebec08a1cb641e09ed18970..4da49758cb04ace154924153ef84de24542009d0 100644 (file)
@@ -50,7 +50,7 @@ using namespace BigEndianGuest;
 #define ISA_HAS_DELAY_SLOT 1
 
 // SPARC NOP (sethi %(hi(0), g0)
-const MachInst NoopMachInst = 0x01000000;
+extern const StaticInstPtr NoopStaticInst;
 
 // 8K. This value is implmentation specific; and should probably
 // be somewhere else.
index 92b30ced1db01013f4b333f2dee900847b18e8df..eb87afd9451b107f32585699dd8b5ffe882f76a1 100644 (file)
@@ -57,6 +57,7 @@ if env['TARGET_ISA'] == 'x86':
     Source('insts/static_inst.cc')
     Source('interrupts.cc')
     Source('isa.cc')
+    Source('isa_traits.cc')
     Source('linux/linux.cc')
     Source('linux/process.cc')
     Source('linux/syscalls.cc')
diff --git a/src/arch/x86/isa_traits.cc b/src/arch/x86/isa_traits.cc
new file mode 100644 (file)
index 0000000..e2c803f
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2012 Google
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "arch/x86/generated/decoder.hh"
+#include "arch/x86/x86_traits.hh"
+
+namespace X86ISA
+{
+
+const StaticInstPtr NoopStaticInst = new X86ISAInst::NOP(NoopMachInst);
+
+}
index 383e56eeec680658b2de31956afba06e2e73d1c0..338ea4f4db360798b87d63154553ff6d8a152cb5 100644 (file)
@@ -43,6 +43,7 @@
 #include "arch/x86/types.hh"
 #include "arch/x86/x86_traits.hh"
 #include "base/types.hh"
+#include "cpu/static_inst_fwd.hh"
 
 namespace LittleEndianGuest {}
 
@@ -71,17 +72,7 @@ namespace X86ISA
     // Memory accesses can be unaligned
     const bool HasUnalignedMemAcc = true;
 
-    const ExtMachInst NoopMachInst = {
-        0x0,                            // No legacy prefixes.
-        0x0,                            // No rex prefix.
-        { 1, 0x0, 0x0, 0x90 },          // One opcode byte, 0x90.
-        0x0, 0x0,                       // No modrm or sib.
-        0, 0,                           // No immediate or displacement.
-        8, 8, 8,                        // All sizes are 8.
-        0,                              // Displacement size is 0.
-        SixtyFourBitMode                // Behave as if we're in 64 bit
-                                        // mode (this doesn't actually matter).
-    };
+    extern const StaticInstPtr NoopStaticInst;
 }
 
 #endif // __ARCH_X86_ISATRAITS_HH__
index 6157cb30ba2bce00a6cedb662b317208c769103c..a94d806ef8530b1182d6f4b4de09b441d036b16f 100644 (file)
@@ -40,6 +40,7 @@
 
 #include <cassert>
 
+#include "arch/x86/types.hh"
 #include "base/types.hh"
 
 namespace X86ISA
@@ -104,6 +105,18 @@ namespace X86ISA
         assert(addr < PhysAddrAPICRangeSize);
         return PhysAddrPrefixInterrupts | (id * PhysAddrAPICRangeSize) | addr;
     }
+
+    const ExtMachInst NoopMachInst = {
+        0x0,                            // No legacy prefixes.
+        0x0,                            // No rex prefix.
+        { 1, 0x0, 0x0, 0x90 },          // One opcode byte, 0x90.
+        0x0, 0x0,                       // No modrm or sib.
+        0, 0,                           // No immediate or displacement.
+        8, 8, 8,                        // All sizes are 8.
+        0,                              // Displacement size is 0.
+        SixtyFourBitMode                // Behave as if we're in 64 bit
+                                        // mode (this doesn't actually matter).
+    };
 }
 
 #endif //__ARCH_X86_X86TRAITS_HH__
index b6eb25c087df81d5aadf49b14bc5113915914c6a..40fe5ae01fb7141ac032f56e78d1da6b88d8a121 100644 (file)
@@ -661,8 +661,7 @@ DefaultFetch<Impl>::finishTranslation(Fault fault, RequestPtr mem_req)
 
         DPRINTF(Fetch, "[tid:%i]: Translation faulted, building noop.\n", tid);
         // We will use a nop in ordier to carry the fault.
-        DynInstPtr instruction = buildInst(tid,
-                decoder[tid]->decode(TheISA::NoopMachInst, fetchPC.instAddr()),
+        DynInstPtr instruction = buildInst(tid, TheISA::NoopStaticInst,
                 NULL, fetchPC, fetchPC, false);
 
         instruction->setPredTarg(fetchPC);