Discussion:
[PATCH 1 of 9] Add support for the PowerPC ISA
Timothy M. Jones
2009-10-08 12:37:47 UTC
Permalink
# HG changeset patch
# User Timothy Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004888 -3600
# Node ID 4b6b39589edfceea071214a718bc2492bbc23b5a
# Parent b5bcd4a7b0bc76251fad360f959a3b2d42c805e3
Add support for the PowerPC ISA.

This adds support for the 32-bit, big endian PowerPC ISA. This supports both
integer and floating point instructions based on the Power ISA Book I v2.06.

diff --git a/build_opts/POWERPC_SE b/build_opts/POWERPC_SE
new file mode 100644
--- /dev/null
+++ b/build_opts/POWERPC_SE
@@ -0,0 +1,3 @@
+TARGET_ISA = 'powerpc'
+FULL_SYSTEM = 0
+CPU_MODELS = 'AtomicSimpleCPU'
diff --git a/src/arch/isa_parser.py b/src/arch/isa_parser.py
--- a/src/arch/isa_parser.py
+++ b/src/arch/isa_parser.py
@@ -1465,6 +1465,16 @@
def makeAccSize(self):
return self.size

+class PCOperand(Operand):
+ def makeConstructor(self):
+ return ''
+
+ def makeRead(self):
+ return '%s = xc->readPC();\n' % self.base_name
+
+ def makeWrite(self):
+ return 'xc->setPC(%s);\n' % self.base_name
+
class UPCOperand(Operand):
def makeConstructor(self):
return ''
diff --git a/src/arch/powerpc/PowerPCTLB.py b/src/arch/powerpc/PowerPCTLB.py
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/PowerPCTLB.py
@@ -0,0 +1,37 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The University of Edinburgh
+# 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: Timothy M. Jones
+
+from m5.SimObject import SimObject
+from m5.params import *
+
+class PowerPCTLB(SimObject):
+ type = 'PowerPCTLB'
+ cxx_class = 'PowerpcISA::TLB'
+ size = Param.Int(64, "TLB size")
diff --git a/src/arch/powerpc/SConscript b/src/arch/powerpc/SConscript
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/SConscript
@@ -0,0 +1,61 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The University of Edinburgh
+# 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: Timothy M. Jones
+
+Import('*')
+
+if env['TARGET_ISA'] == 'powerpc':
+# Workaround for bug in SCons version > 0.97d20071212
+# Scons bug id: 2006 M5 Bug id: 308
+ Dir('isa/formats')
+ Source('insts/branch.cc')
+ Source('insts/mem.cc')
+ Source('insts/integer.cc')
+ Source('insts/floating.cc')
+ Source('insts/condition.cc')
+ Source('insts/static_inst.cc')
+ Source('pagetable.cc')
+ Source('tlb.cc')
+
+ SimObject('PowerPCTLB.py')
+ TraceFlag('PowerPC')
+
+ if not env['FULL_SYSTEM']:
+ Source('process.cc')
+ Source('linux/linux.cc')
+ Source('linux/process.cc')
+
+ # Add in files generated by the ISA description.
+ isa_desc_files = env.ISADesc('isa/main.isa')
+
+ # Only non-header files need to be compiled.
+ for f in isa_desc_files:
+ if not f.path.endswith('.hh'):
+ Source(f)
+
diff --git a/src/arch/powerpc/SConsopts b/src/arch/powerpc/SConsopts
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/SConsopts
@@ -0,0 +1,33 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2009 The University of Edinburgh
+# 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: Timothy M. Jones
+
+Import('*')
+
+all_isa_list.append('powerpc')
diff --git a/src/arch/powerpc/faults.hh b/src/arch/powerpc/faults.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/faults.hh
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_FAULTS_HH__
+#define __ARCH_POWERPC_FAULTS_HH__
+
+#include "sim/faults.hh"
+
+namespace PowerpcISA
+{
+
+class PowerPCFault : public FaultBase
+{
+ protected:
+ FaultName _name;
+
+ PowerPCFault(FaultName name)
+ : _name(name)
+ {
+ }
+
+ FaultName
+ name() const
+ {
+ return _name;
+ }
+};
+
+
+class UnimplementedOpcodeFault : public PowerPCFault
+{
+ public:
+ UnimplementedOpcodeFault()
+ : PowerPCFault("opdec")
+ {
+ }
+};
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_FAULTS_HH__
diff --git a/src/arch/powerpc/insts/branch.cc b/src/arch/powerpc/insts/branch.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/branch.cc
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/insts/branch.hh"
+#include "base/loader/symtab.hh"
+
+using namespace PowerpcISA;
+
+const std::string &
+PCDependentDisassembly::disassemble(Addr pc, const SymbolTable *symtab) const
+{
+ if (!cachedDisassembly ||
+ pc != cachedPC || symtab != cachedSymtab)
+ {
+ if (cachedDisassembly)
+ delete cachedDisassembly;
+
+ cachedDisassembly =
+ new std::string(generateDisassembly(pc, symtab));
+ cachedPC = pc;
+ cachedSymtab = symtab;
+ }
+
+ return *cachedDisassembly;
+}
+
+Addr
+BranchPCRel::branchTarget(Addr pc) const
+{
+ return (uint32_t)(pc + disp);
+}
+
+std::string
+BranchPCRel::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ Addr target = pc + disp;
+
+ std::string str;
+ if (symtab && symtab->findSymbol(target, str))
+ ss << str;
+ else
+ ccprintf(ss, "0x%x", target);
+
+ return ss.str();
+}
+
+Addr
+BranchNonPCRel::branchTarget(Addr pc) const
+{
+ return targetAddr;
+}
+
+std::string
+BranchNonPCRel::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ std::string str;
+ if (symtab && symtab->findSymbol(targetAddr, str))
+ ss << str;
+ else
+ ccprintf(ss, "0x%x", targetAddr);
+
+ return ss.str();
+}
+
+Addr
+BranchPCRelCond::branchTarget(Addr pc) const
+{
+ return (uint32_t)(pc + disp);
+}
+
+std::string
+BranchPCRelCond::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ ss << bo << ", " << bi << ", ";
+
+ Addr target = pc + disp;
+
+ std::string str;
+ if (symtab && symtab->findSymbol(target, str))
+ ss << str;
+ else
+ ccprintf(ss, "0x%x", target);
+
+ return ss.str();
+}
+
+Addr
+BranchNonPCRelCond::branchTarget(Addr pc) const
+{
+ return targetAddr;
+}
+
+std::string
+BranchNonPCRelCond::generateDisassembly(Addr pc,
+ const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ ss << bo << ", " << bi << ", ";
+
+ std::string str;
+ if (symtab && symtab->findSymbol(targetAddr, str))
+ ss << str;
+ else
+ ccprintf(ss, "0x%x", targetAddr);
+
+ return ss.str();
+}
+
+Addr
+BranchRegCond::branchTarget(ThreadContext *tc) const
+{
+ uint32_t regVal =
+ tc->readMiscReg(_srcRegIdx[_numSrcRegs - 1] - Ctrl_Base_DepTag);
+ return (regVal & 0xfffffffc);
+}
+
+std::string
+BranchRegCond::generateDisassembly(Addr pc,
+ const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ ss << bo << ", " << bi << ", ";
+
+ return ss.str();
+}
diff --git a/src/arch/powerpc/insts/branch.hh b/src/arch/powerpc/insts/branch.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/branch.hh
@@ -0,0 +1,241 @@
+/* Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_INSTS_BRANCH_HH__
+#define __ARCH_POWERPC_INSTS_BRANCH_HH__
+
+#include "arch/powerpc/insts/static_inst.hh"
+
+namespace PowerpcISA
+{
+
+/**
+ * Base class for instructions whose disassembly is not purely a
+ * function of the machine instruction (i.e., it depends on the
+ * PC). This class overrides the disassemble() method to check
+ * the PC and symbol table values before re-using a cached
+ * disassembly string. This is necessary for branches and jumps,
+ * where the disassembly string includes the target address (which
+ * may depend on the PC and/or symbol table).
+ */
+class PCDependentDisassembly : public PowerPCStaticInst
+{
+ protected:
+ /// Cached program counter from last disassembly
+ mutable Addr cachedPC;
+ /// Cached symbol table pointer from last disassembly
+ mutable const SymbolTable *cachedSymtab;
+
+ /// Constructor
+ PCDependentDisassembly(const char *mnem, ExtMachInst _machInst,
+ OpClass __opClass)
+ : PowerPCStaticInst(mnem, _machInst, __opClass),
+ cachedPC(0), cachedSymtab(0)
+ {
+ }
+
+ const std::string &
+ disassemble(Addr pc, const SymbolTable *symtab) const;
+};
+
+/**
+ * Base class for unconditional, PC-relative branches.
+ */
+class BranchPCRel : public PCDependentDisassembly
+{
+ protected:
+
+ /// Displacement
+ uint32_t disp;
+
+ /// Constructor.
+ BranchPCRel(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PCDependentDisassembly(mnem, _machInst, __opClass),
+ disp(machInst.li << 2)
+ {
+ // If bit 26 is 1 then sign extend
+ if (disp & 0x2000000) {
+ disp |= 0xfc000000;
+ }
+ }
+
+ Addr branchTarget(Addr pc) const;
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+/**
+ * Base class for unconditional, non PC-relative branches.
+ */
+class BranchNonPCRel : public PCDependentDisassembly
+{
+ protected:
+
+ /// Target address
+ uint32_t targetAddr;
+
+ /// Constructor.
+ BranchNonPCRel(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PCDependentDisassembly(mnem, _machInst, __opClass),
+ targetAddr(machInst.li << 2)
+ {
+ // If bit 26 is 1 then sign extend
+ if (targetAddr & 0x2000000) {
+ targetAddr |= 0xfc000000;
+ }
+ }
+
+ Addr branchTarget(Addr pc) const;
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+/**
+ * Base class for conditional branches.
+ */
+class BranchCond : public PCDependentDisassembly
+{
+ protected:
+
+ /// Fields needed for conditions
+ uint32_t bo;
+ uint32_t bi;
+
+ /// Constructor.
+ BranchCond(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PCDependentDisassembly(mnem, _machInst, __opClass),
+ bo(machInst.bo),
+ bi(machInst.bi)
+ {
+ }
+
+ inline bool
+ ctrOk(uint32_t& ctr) const
+ {
+ bool ctr_ok;
+ if (bo & 4) {
+ ctr_ok = true;
+ } else {
+ ctr--;
+ if (ctr != 0) {
+ ctr_ok = ((bo & 2) == 0);
+ } else {
+ ctr_ok = ((bo & 2) != 0);
+ }
+ }
+ return ctr_ok;
+ }
+
+ inline bool
+ condOk(uint32_t cr) const
+ {
+ bool cond_ok;
+ if (bo & 16) {
+ cond_ok = true;
+ } else {
+ cond_ok = (((cr >> (31 - bi)) & 1) == ((bo >> 3) & 1));
+ }
+ return cond_ok;
+ }
+};
+
+/**
+ * Base class for conditional, PC-relative branches.
+ */
+class BranchPCRelCond : public BranchCond
+{
+ protected:
+
+ /// Displacement
+ uint32_t disp;
+
+ /// Constructor.
+ BranchPCRelCond(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : BranchCond(mnem, _machInst, __opClass),
+ disp(machInst.bd << 2)
+ {
+ // If bit 16 is 1 then sign extend
+ if (disp & 0x8000) {
+ disp |= 0xffff0000;
+ }
+ }
+
+ Addr branchTarget(Addr pc) const;
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+/**
+ * Base class for conditional, non PC-relative branches.
+ */
+class BranchNonPCRelCond : public BranchCond
+{
+ protected:
+
+ /// Target address
+ uint32_t targetAddr;
+
+ /// Constructor.
+ BranchNonPCRelCond(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : BranchCond(mnem, _machInst, __opClass),
+ targetAddr(machInst.bd << 2)
+ {
+ // If bit 16 is 1 then sign extend
+ if (targetAddr & 0x8000) {
+ targetAddr |= 0xffff0000;
+ }
+ }
+
+ Addr branchTarget(Addr pc) const;
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+/**
+ * Base class for conditional, register-based branches
+ */
+class BranchRegCond : public BranchCond
+{
+ protected:
+
+ /// Constructor.
+ BranchRegCond(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : BranchCond(mnem, _machInst, __opClass)
+ {
+ }
+
+ Addr branchTarget(ThreadContext *tc) const;
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+} // PowerpcISA namespace
+
+#endif //__ARCH_POWERPC_INSTS_BRANCH_HH__
diff --git a/src/arch/powerpc/insts/condition.cc b/src/arch/powerpc/insts/condition.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/condition.cc
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/insts/condition.hh"
+
+using namespace PowerpcISA;
+
+std::string
+CondLogicOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // Format is <mnemonic> bt, ba, bb
+ ss << bt << ", " << ba << ", " << bb;
+
+ return ss.str();
+}
+
+std::string
+CondMoveOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // Format is <mnemonic> bf, bfa
+ ss << bf << ", " << bfa;
+
+ return ss.str();
+}
diff --git a/src/arch/powerpc/insts/condition.hh b/src/arch/powerpc/insts/condition.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/condition.hh
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_INSTS_CONDITION_HH__
+#define __ARCH_POWERPC_INSTS_CONDITION_HH__
+
+#include "arch/powerpc/insts/static_inst.hh"
+#include "base/cprintf.hh"
+
+namespace PowerpcISA
+{
+
+/**
+ * Class for condition register logical operations.
+ */
+class CondLogicOp : public PowerPCStaticInst
+{
+ protected:
+
+ uint32_t ba;
+ uint32_t bb;
+ uint32_t bt;
+
+ /// Constructor
+ CondLogicOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PowerPCStaticInst(mnem, _machInst, __opClass),
+ ba(machInst.ba),
+ bb(machInst.bb),
+ bt(machInst.bt)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+/**
+ * Class for condition register move operations.
+ */
+class CondMoveOp : public PowerPCStaticInst
+{
+ protected:
+
+ uint32_t bf;
+ uint32_t bfa;
+
+ /// Constructor
+ CondMoveOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PowerPCStaticInst(mnem, _machInst, __opClass),
+ bf(machInst.bf),
+ bfa(machInst.bfa)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+} // PowerpcISA namespace
+
+#endif //__ARCH_POWERPC_INSTS_CONDITION_HH__
diff --git a/src/arch/powerpc/insts/floating.cc b/src/arch/powerpc/insts/floating.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/floating.cc
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/insts/floating.hh"
+
+using namespace PowerpcISA;
+
+std::string
+FloatOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // Print the first destination only
+ if (_numDestRegs > 0) {
+ printReg(ss, _destRegIdx[0]);
+ }
+
+ // Print the (possibly) two source registers
+ if (_numSrcRegs > 0) {
+ if (_numDestRegs > 0) {
+ ss << ", ";
+ }
+ printReg(ss, _srcRegIdx[0]);
+ if (_numSrcRegs > 1) {
+ ss << ", ";
+ printReg(ss, _srcRegIdx[1]);
+ }
+ }
+
+ return ss.str();
+}
diff --git a/src/arch/powerpc/insts/floating.hh b/src/arch/powerpc/insts/floating.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/floating.hh
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ * Korey Sewell
+ */
+
+#ifndef __ARCH_POWERPC_INSTS_FLOATING_HH__
+#define __ARCH_POWERPC_INSTS_FLOATING_HH__
+
+#include "arch/powerpc/insts/static_inst.hh"
+#include "base/cprintf.hh"
+#include "base/bitfield.hh"
+
+namespace PowerpcISA
+{
+
+/**
+ * Base class for floating point operations.
+ */
+class FloatOp : public PowerPCStaticInst
+{
+ protected:
+
+ bool rcSet;
+
+ /// Constructor
+ FloatOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PowerPCStaticInst(mnem, _machInst, __opClass)
+ {
+ }
+
+ // Test for NaN (maximum biased exponent & non-zero fraction)
+ inline bool
+ isNan(uint32_t val_bits) const
+ {
+ return ((bits(val_bits, 30, 23) == 0xFF) && bits(val_bits, 22, 0));
+ }
+
+ inline bool
+ isNan(float val) const
+ {
+ void *val_ptr = &val;
+ uint32_t val_bits = *(uint32_t *) val_ptr;
+ return isNan(val_bits);
+ }
+
+ // Test for SNaN (NaN with high order bit of fraction set to 0)
+ inline bool
+ isSnan(uint32_t val_bits) const
+ {
+ return ((bits(val_bits, 30, 22) == 0x1FE) && bits(val_bits, 22, 0));
+ }
+
+ // Test for QNaN (NaN with high order bit of fraction set to 1)
+ inline bool
+ isQnan(uint32_t val_bits) const
+ {
+ return (bits(val_bits, 30, 22) == 0x1FF);
+ }
+
+ // Test for infinity (maximum biased exponent and zero fraction)
+ inline bool
+ isInfinity(uint32_t val_bits) const
+ {
+ return ((bits(val_bits, 30, 23) == 0xFF) && !bits(val_bits, 22, 0));
+ }
+
+ // Test for normalized numbers (biased exponent in the range 1 to 254)
+ inline bool
+ isNormalized(uint32_t val_bits) const
+ {
+ return ((bits(val_bits, 30, 23) != 0xFF) && bits(val_bits, 22, 0));
+ }
+
+ // Test for denormalized numbers (biased exponent of zero and
+ // non-zero fraction)
+ inline bool
+ isDenormalized(uint32_t val_bits) const
+ {
+ return (!bits(val_bits, 30, 23) && bits(val_bits, 22, 0));
+ }
+
+ // Test for zero (biased exponent of zero and fraction of zero)
+ inline bool
+ isZero(uint32_t val_bits) const
+ {
+ return (!bits(val_bits, 30, 23) && !bits(val_bits, 22, 0));
+ }
+
+ // Test for negative
+ inline bool
+ isNegative(uint32_t val_bits) const
+ {
+ return (bits(val_bits, 31));
+ }
+
+ // Compute the CR field
+ inline uint32_t
+ makeCRField(float a, float b) const
+ {
+ uint32_t c = 0;
+ if (isNan(a) || isNan(b)) { c = 0x1; }
+ if (a < b) { c = 0x8; }
+ else if (a > b) { c = 0x4; }
+ else { c = 0x2; }
+ return c;
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+} // PowerpcISA namespace
+
+#endif //__ARCH_POWERPC_INSTS_FLOATING_HH__
diff --git a/src/arch/powerpc/insts/integer.cc b/src/arch/powerpc/insts/integer.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/integer.cc
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/insts/integer.hh"
+
+using namespace PowerpcISA;
+
+std::string
+IntOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+ bool printDest = true;
+ bool printSrcs = true;
+ bool printSecondSrc = true;
+
+ // Generate the correct mnemonic
+ std::string myMnemonic(mnemonic);
+
+ // Special cases
+ if (mnemonic == "or" && _srcRegIdx[0] == _srcRegIdx[1]) {
+ myMnemonic = "mr";
+ printSecondSrc = false;
+ } else if (mnemonic == "mtlr" || mnemonic == "cmpi") {
+ printDest = false;
+ } else if (mnemonic == "mflr") {
+ printSrcs = false;
+ }
+
+ // Additional characters depending on isa bits being set
+ if (oeSet) myMnemonic = myMnemonic + "o";
+ if (rcSet) myMnemonic = myMnemonic + ".";
+ ccprintf(ss, "%-10s ", myMnemonic);
+
+ // Print the first destination only
+ if (_numDestRegs > 0 && printDest) {
+ printReg(ss, _destRegIdx[0]);
+ }
+
+ // Print the (possibly) two source registers
+ if (_numSrcRegs > 0 && printSrcs) {
+ if (_numDestRegs > 0 && printDest) {
+ ss << ", ";
+ }
+ printReg(ss, _srcRegIdx[0]);
+ if (_numSrcRegs > 1 && printSecondSrc) {
+ ss << ", ";
+ printReg(ss, _srcRegIdx[1]);
+ }
+ }
+
+ return ss.str();
+}
+
+
+std::string
+IntImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ // Generate the correct mnemonic
+ std::string myMnemonic(mnemonic);
+
+ // Special cases
+ if (mnemonic == "addi" && _numSrcRegs == 0) {
+ myMnemonic = "li";
+ } else if (mnemonic == "addis" && _numSrcRegs == 0) {
+ myMnemonic = "lis";
+ }
+ ccprintf(ss, "%-10s ", myMnemonic);
+
+ // Print the first destination only
+ if (_numDestRegs > 0) {
+ printReg(ss, _destRegIdx[0]);
+ }
+
+ // Print the source register
+ if (_numSrcRegs > 0) {
+ if (_numDestRegs > 0) {
+ ss << ", ";
+ }
+ printReg(ss, _srcRegIdx[0]);
+ }
+
+ // Print the immediate value last
+ ss << ", " << (int32_t)imm;
+
+ return ss.str();
+}
+
+
+std::string
+IntShiftOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // Print the first destination only
+ if (_numDestRegs > 0) {
+ printReg(ss, _destRegIdx[0]);
+ }
+
+ // Print the first source register
+ if (_numSrcRegs > 0) {
+ if (_numDestRegs > 0) {
+ ss << ", ";
+ }
+ printReg(ss, _srcRegIdx[0]);
+ }
+
+ // Print the shift
+ ss << ", " << sh;
+
+ return ss.str();
+}
+
+
+std::string
+IntRotateOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // Print the first destination only
+ if (_numDestRegs > 0) {
+ printReg(ss, _destRegIdx[0]);
+ }
+
+ // Print the first source register
+ if (_numSrcRegs > 0) {
+ if (_numDestRegs > 0) {
+ ss << ", ";
+ }
+ printReg(ss, _srcRegIdx[0]);
+ }
+
+ // Print the shift, mask begin and mask end
+ ss << ", " << sh << ", " << mb << ", " << me;
+
+ return ss.str();
+}
diff --git a/src/arch/powerpc/insts/integer.hh b/src/arch/powerpc/insts/integer.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/integer.hh
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_INSTS_INTEGER_HH__
+#define __ARCH_POWERPC_INSTS_INTEGER_HH__
+
+#include "arch/powerpc/insts/static_inst.hh"
+#include "base/cprintf.hh"
+#include "base/bitfield.hh"
+
+namespace PowerpcISA
+{
+
+/**
+ * We provide a base class for integer operations and then inherit for
+ * several other classes. These specialise for instructions using immediate
+ * values and also rotate instructions. We also need to have versions that
+ * consider the Rc and OE bits.
+ */
+
+/**
+ * Base class for integer operations.
+ */
+class IntOp : public PowerPCStaticInst
+{
+ protected:
+
+ bool rcSet;
+ bool oeSet;
+
+ // Needed for srawi only
+ uint32_t sh;
+
+ /// Constructor
+ IntOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PowerPCStaticInst(mnem, _machInst, __opClass),
+ rcSet(false), oeSet(false)
+ {
+ }
+
+ /* Compute the CR (condition register) field using signed comparison */
+ inline uint32_t
+ makeCRField(int32_t a, int32_t b, uint32_t xerSO) const
+ {
+ uint32_t c = xerSO;
+
+ /* We've pre-shifted the immediate values here */
+ if (a < b) { c += 0x8; }
+ else if (a > b) { c += 0x4; }
+ else { c += 0x2; }
+ return c;
+ }
+
+ /* Compute the CR (condition register) field using unsigned comparison */
+ inline uint32_t
+ makeCRField(uint32_t a, uint32_t b, uint32_t xerSO) const
+ {
+ uint32_t c = xerSO;
+
+ /* We've pre-shifted the immediate values here */
+ if (a < b) { c += 0x8; }
+ else if (a > b) { c += 0x4; }
+ else { c += 0x2; }
+ return c;
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+
+/**
+ * Class for integer immediate (signed and unsigned) operations.
+ */
+class IntImmOp : public IntOp
+{
+ protected:
+
+ int32_t imm;
+ uint32_t uimm;
+
+ /// Constructor
+ IntImmOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : IntOp(mnem, _machInst, __opClass),
+ imm(sext<16>(machInst.si)),
+ uimm(machInst.si)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+
+/**
+ * Class for integer operations with a shift.
+ */
+class IntShiftOp : public IntOp
+{
+ protected:
+
+ uint32_t sh;
+
+ /// Constructor
+ IntShiftOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : IntOp(mnem, _machInst, __opClass),
+ sh(machInst.sh)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+
+/**
+ * Class for integer rotate operations.
+ */
+class IntRotateOp : public IntShiftOp
+{
+ protected:
+
+ uint32_t mb;
+ uint32_t me;
+ uint32_t fullMask;
+
+ /// Constructor
+ IntRotateOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : IntShiftOp(mnem, _machInst, __opClass),
+ mb(machInst.mb),
+ me(machInst.me)
+ {
+ if (me >= mb) {
+ fullMask = mask(31 - mb, 31 - me);
+ } else {
+ fullMask = ~mask(31 - (me + 1), 31 - (mb - 1));
+ }
+ }
+
+ uint32_t
+ rotateValue(uint32_t rs, uint32_t shift) const
+ {
+ uint32_t n = shift & 31;
+ return (rs << n) | (rs >> (32 - n));
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+} // PowerpcISA namespace
+
+#endif //__ARCH_POWERPC_INSTS_INTEGER_HH__
diff --git a/src/arch/powerpc/insts/mem.cc b/src/arch/powerpc/insts/mem.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/mem.cc
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/insts/mem.hh"
+#include "base/loader/symtab.hh"
+
+using namespace PowerpcISA;
+
+std::string
+MemOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ return csprintf("%-10s", mnemonic);
+}
+
+std::string
+MemDispOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // Print the destination only for a load
+ if (!flags[IsStore]) {
+ if (_numDestRegs > 0) {
+
+ // If the instruction updates the source register with the
+ // EA, then this source register is placed in position 0,
+ // therefore we print the last destination register.
+ printReg(ss, _destRegIdx[_numDestRegs-1]);
+ }
+ }
+
+ // Print the data register for a store
+ else {
+ printReg(ss, _srcRegIdx[1]);
+ }
+
+ // Print the displacement
+ ss << ", " << (int32_t)disp;
+
+ // Print the address register
+ ss << "(";
+ printReg(ss, _srcRegIdx[0]);
+ ss << ")";
+
+ return ss.str();
+}
diff --git a/src/arch/powerpc/insts/mem.hh b/src/arch/powerpc/insts/mem.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/mem.hh
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_MEM_HH__
+#define __ARCH_POWERPC_MEM_HH__
+
+#include "arch/powerpc/insts/static_inst.hh"
+
+namespace PowerpcISA
+{
+
+/**
+ * Base class for memory operations.
+ */
+class MemOp : public PowerPCStaticInst
+{
+ protected:
+
+ /// Memory request flags. See mem_req_base.hh.
+ unsigned memAccessFlags;
+ /// Pointer to EAComp object.
+ const StaticInstPtr eaCompPtr;
+ /// Pointer to MemAcc object.
+ const StaticInstPtr memAccPtr;
+
+ /// Constructor
+ MemOp(const char *mnem, MachInst _machInst, OpClass __opClass,
+ StaticInstPtr _eaCompPtr = nullStaticInstPtr,
+ StaticInstPtr _memAccPtr = nullStaticInstPtr)
+ : PowerPCStaticInst(mnem, _machInst, __opClass),
+ memAccessFlags(0),
+ eaCompPtr(_eaCompPtr),
+ memAccPtr(_memAccPtr)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+
+/**
+ * Class for memory operations with displacement.
+ */
+class MemDispOp : public MemOp
+{
+ protected:
+
+ int16_t disp;
+
+ /// Constructor
+ MemDispOp(const char *mnem, MachInst _machInst, OpClass __opClass,
+ StaticInstPtr _eaCompPtr = nullStaticInstPtr,
+ StaticInstPtr _memAccPtr = nullStaticInstPtr)
+ : MemOp(mnem, _machInst, __opClass, _eaCompPtr, _memAccPtr),
+ disp(machInst.d)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+} // PowerpcISA namespace
+
+#endif //__ARCH_POWERPC_INSTS_MEM_HH__
diff --git a/src/arch/powerpc/insts/misc.cc b/src/arch/powerpc/insts/misc.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/misc.cc
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/insts/misc.hh"
+
+using namespace PowerpcISA;
+
+std::string
+MiscOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ // Print the first destination only
+ if (_numDestRegs > 0) {
+ printReg(ss, _destRegIdx[0]);
+ }
+
+ // Print the (possibly) two source registers
+ if (_numSrcRegs > 0) {
+ if (_numDestRegs > 0) {
+ ss << ", ";
+ }
+ printReg(ss, _srcRegIdx[0]);
+ if (_numSrcRegs > 1) {
+ ss << ", ";
+ printReg(ss, _srcRegIdx[1]);
+ }
+ }
+
+ return ss.str();
+}
diff --git a/src/arch/powerpc/insts/misc.hh b/src/arch/powerpc/insts/misc.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/misc.hh
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_INSTS_MISC_HH__
+#define __ARCH_POWERPC_INSTS_MISC_HH__
+
+#include "arch/powerpc/insts/static_inst.hh"
+
+namespace PowerpcISA
+{
+
+/**
+ * Class for misc operations.
+ */
+class MiscOp : public PowerPCStaticInst
+{
+ protected:
+
+ /// Constructor
+ MiscOp(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : PowerPCStaticInst(mnem, _machInst, __opClass)
+ {
+ }
+
+ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+} // PowerpcISA namespace
+
+#endif //__ARCH_POWERPC_INSTS_MISC_HH__
diff --git a/src/arch/powerpc/insts/static_inst.cc b/src/arch/powerpc/insts/static_inst.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/static_inst.cc
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/insts/static_inst.hh"
+
+using namespace PowerpcISA;
+
+void
+PowerPCStaticInst::printReg(std::ostream &os, int reg) const
+{
+ if (reg < FP_Base_DepTag) {
+ ccprintf(os, "r%d", reg);
+ } else if (reg < Ctrl_Base_DepTag) {
+ ccprintf(os, "f%d", reg - FP_Base_DepTag);
+ } else {
+ switch (reg - Ctrl_Base_DepTag) {
+ case 0: ccprintf(os, "cr"); break;
+ case 1: ccprintf(os, "xer"); break;
+ case 2: ccprintf(os, "lr"); break;
+ case 3: ccprintf(os, "ctr"); break;
+ default: ccprintf(os, "unknown_reg");
+ }
+ }
+}
+
+std::string
+PowerPCStaticInst::generateDisassembly(Addr pc,
+ const SymbolTable *symtab) const
+{
+ std::stringstream ss;
+
+ ccprintf(ss, "%-10s ", mnemonic);
+
+ return ss.str();
+}
diff --git a/src/arch/powerpc/insts/static_inst.hh b/src/arch/powerpc/insts/static_inst.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/insts/static_inst.hh
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_INSTS_STATICINST_HH__
+#define __ARCH_POWERPC_INSTS_STATICINST_HH__
+
+#include "base/trace.hh"
+#include "cpu/static_inst.hh"
+
+namespace PowerpcISA
+{
+
+class PowerPCStaticInst : public StaticInst
+{
+ protected:
+
+ // Constructor
+ PowerPCStaticInst(const char *mnem, MachInst _machInst, OpClass __opClass)
+ : StaticInst(mnem, _machInst, __opClass)
+ {
+ }
+
+ // Insert a condition value into a CR (condition register) field
+ inline uint32_t
+ insertCRField(uint32_t cr, uint32_t bf, uint32_t value) const
+ {
+ uint32_t bits = value << ((7 - bf) * 4);
+ uint32_t mask = ~(0xf << ((7 - bf) * 4));
+ return (cr & mask) | bits;
+ }
+
+ /// Print a register name for disassembly given the unique
+ /// dependence tag number (FP or int).
+ void
+ printReg(std::ostream &os, int reg) const;
+
+ std::string
+ generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+};
+
+} // PowerpcISA namespace
+
+#endif //__ARCH_POWERPC_INSTS_STATICINST_HH__
diff --git a/src/arch/powerpc/isa.hh b/src/arch/powerpc/isa.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa.hh
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2009 The Regents of The University of Michigan
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_ISA_HH__
+#define __ARCH_POWERPC_ISA_HH__
+
+#include "arch/powerpc/registers.hh"
+#include "arch/powerpc/types.hh"
+
+class ThreadContext;
+class Checkpoint;
+class EventManager;
+
+namespace PowerpcISA
+{
+
+class ISA
+{
+ protected:
+ MiscReg miscRegs[NumMiscRegs];
+
+ public:
+ void
+ clear()
+ {
+ memset(miscRegs, 0, sizeof(miscRegs));
+ }
+
+ MiscReg
+ readMiscRegNoEffect(int misc_reg)
+ {
+ assert(misc_reg < NumMiscRegs);
+ return miscRegs[misc_reg];
+ }
+
+ MiscReg
+ readMiscReg(int misc_reg, ThreadContext *tc)
+ {
+ assert(misc_reg < NumMiscRegs);
+ return miscRegs[misc_reg];
+ }
+
+ void
+ setMiscRegNoEffect(int misc_reg, const MiscReg &val)
+ {
+ assert(misc_reg < NumMiscRegs);
+ miscRegs[misc_reg] = val;
+ }
+
+ void
+ setMiscReg(int misc_reg, const MiscReg &val, ThreadContext *tc)
+ {
+ assert(misc_reg < NumMiscRegs);
+ miscRegs[misc_reg] = val;
+ }
+
+ int
+ flattenIntIndex(int reg)
+ {
+ return reg;
+ }
+
+ int
+ flattenFloatIndex(int reg)
+ {
+ return reg;
+ }
+
+ void
+ serialize(std::ostream &os)
+ {
+ }
+
+ void
+ unserialize(Checkpoint *cp, const std::string &section)
+ {
+ }
+
+ ISA()
+ {
+ clear();
+ }
+};
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_ISA_HH__
diff --git a/src/arch/powerpc/isa/bitfields.isa b/src/arch/powerpc/isa/bitfields.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/bitfields.isa
@@ -0,0 +1,84 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Bitfield definitions.
+//
+// The endianness is the opposite to what's used here, so things
+// are reversed sometimes. Not sure of a fix to this though...
+
+// Opcode fields
+def bitfield OPCODE <31:26>;
+def bitfield X_XO <10:0>;
+def bitfield XO_XO <10:1>;
+def bitfield A_XO <5:1>;
+
+// Register fields
+def bitfield RA <20:16>;
+def bitfield RB <15:11>;
+def bitfield RS <25:21>;
+def bitfield RT <25:21>;
+def bitfield FRA <20:16>;
+def bitfield FRB <15:11>;
+def bitfield FRC <10:6>;
+def bitfield FRS <25:21>;
+def bitfield FRT <25:21>;
+
+// The record bit can be in two positions
+// Used to enable setting of the condition register
+def bitfield RC31 <0>;
+def bitfield RC21 <10>;
+
+// Used to enable setting of the overflow flags
+def bitfield OE <10>;
+
+// SPR field for mtspr instruction
+def bitfield SPR <20:11>;
+
+// FXM field for mtcrf instruction
+def bitfield FXM <19:12>;
+
+// Branch fields
+def bitfield LK <0>;
+def bitfield AA <1>;
+
+// Specifies a CR or FPSCR field
+def bitfield BF <25:23>;
+
+// Fields for FPSCR manipulation instructions
+def bitfield FLM <24:17>;
+def bitfield L <25>;
+def bitfield W <16>;
+// Named so to avoid conflicts with range.hh
+def bitfield U_FIELD <15:12>;
+
+// Field for specifying a bit in CR or FPSCR
+def bitfield BT <25:21>;
diff --git a/src/arch/powerpc/isa/decoder.isa b/src/arch/powerpc/isa/decoder.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/decoder.isa
@@ -0,0 +1,592 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// The actual PowerPC ISA decoder
+// ------------------------------
+//
+// I've used the Power ISA Book I v2.06 for instruction formats,
+// opcode numbers, register names, etc.
+//
+decode OPCODE default Unknown::unknown() {
+
+ format IntImmOp {
+ 10: cmpli({{
+ Xer xer = XER;
+ uint32_t cr = makeCRField(Ra, (uint32_t)uimm, xer.so);
+ CR = insertCRField(CR, BF, cr);
+ }});
+ 11: cmpi({{
+ Xer xer = XER;
+ uint32_t cr = makeCRField(Ra.sw, (int32_t)imm, xer.so);
+ CR = insertCRField(CR, BF, cr);
+ }});
+ }
+
+ // Some instructions use bits 21 - 30, others 22 - 30. We have to use
+ // the larger size to account for all opcodes. For those that use the
+ // smaller value, the OE bit is bit 21. Therefore, we have two versions
+ // of each instruction: 1 with OE set, the other without. For an
+ // example see 'add' and 'addo'.
+ 31: decode XO_XO {
+
+ // These instructions can all be reduced to the form
+ // Rt = src1 + src2 [+ CA], therefore we just give src1 and src2
+ // (and, if necessary, CA) definitions and let the python script
+ // deal with setting things up correctly. We also give flags to
+ // say which control registers to set.
+ format IntSumOp {
+ 266: add({{ Ra }}, {{ Rb }});
+ 40: subf({{ ~Ra }}, {{ Rb }}, {{ 1 }});
+ 10: addc({{ Ra }}, {{ Rb }},
+ computeCA = true);
+ 8: subfc({{ ~Ra }}, {{ Rb }}, {{ 1 }},
+ true);
+ 104: neg({{ ~Ra }}, {{ 1 }});
+ 138: adde({{ Ra }}, {{ Rb }}, {{ xer.ca }},
+ true);
+ 234: addme({{ Ra }}, {{ (uint32_t)-1 }}, {{ xer.ca }},
+ true);
+ 136: subfe({{ ~Ra }}, {{ Rb }}, {{ xer.ca }},
+ true);
+ 232: subfme({{ ~Ra }}, {{ (uint32_t)-1 }}, {{ xer.ca }},
+ true);
+ 202: addze({{ Ra }}, {{ xer.ca }},
+ computeCA = true);
+ 200: subfze({{ ~Ra }}, {{ xer.ca }},
+ computeCA = true);
+ }
+
+ // Arithmetic instructions all use source registers Ra and Rb,
+ // with destination register Rt.
+ format IntArithOp {
+ 75: mulhw({{ int64_t prod = Ra.sq * Rb.sq; Rt = prod >> 32; }});
+ 11: mulhwu({{ uint64_t prod = Ra.uq * Rb.uq; Rt = prod >> 32; }});
+ 235: mullw({{ int64_t prod = Ra.sq * Rb.sq; Rt = prod; }});
+ 747: mullwo({{ int64_t src1 = Ra.sq; int64_t src2 = Rb; int64_t prod = src1 * src2; Rt = prod; }},
+ true);
+
+ 491: divw({{
+ int32_t src1 = Ra.sw;
+ int32_t src2 = Rb.sw;
+ if ((src1 != 0x80000000 || src2 != 0xffffffff)
+ && src2 != 0) {
+ Rt = src1 / src2;
+ } else {
+ Rt = 0;
+ }
+ }});
+
+ 1003: divwo({{
+ int32_t src1 = Ra.sw;
+ int32_t src2 = Rb.sw;
+ if ((src1 != 0x80000000 || src2 != 0xffffffff)
+ && src2 != 0) {
+ Rt = src1 / src2;
+ } else {
+ Rt = 0;
+ divSetOV = true;
+ }
+ }},
+ true);
+
+ 459: divwu({{
+ uint32_t src1 = Ra.sw;
+ uint32_t src2 = Rb.sw;
+ if (src2 != 0) {
+ Rt = src1 / src2;
+ } else {
+ Rt = 0;
+ }
+ }});
+
+ 971: divwuo({{
+ uint32_t src1 = Ra.sw;
+ uint32_t src2 = Rb.sw;
+ if (src2 != 0) {
+ Rt = src1 / src2;
+ } else {
+ Rt = 0;
+ divSetOV = true;
+ }
+ }},
+ true);
+ }
+
+ // Integer logic instructions use source registers Rs and Rb,
+ // with destination register Ra.
+ format IntLogicOp {
+ 28: and({{ Ra = Rs & Rb; }});
+ 316: xor({{ Ra = Rs ^ Rb; }});
+ 476: nand({{ Ra = ~(Rs & Rb); }});
+ 444: or({{ Ra = Rs | Rb; }});
+ 124: nor({{ Ra = ~(Rs | Rb); }});
+ 60: andc({{ Ra = Rs & ~Rb; }});
+ 954: extsb({{ Ra = sext<8>(Rs); }});
+ 284: eqv({{ Ra = ~(Rs ^ Rb); }});
+ 412: orc({{ Ra = Rs | ~Rb; }});
+ 922: extsh({{ Ra = sext<16>(Rs); }});
+ 26: cntlzw({{ Ra = Rs == 0 ? 32 : 31 - findMsbSet(Rs); }});
+ 508: cmpb({{
+ uint32_t val = 0;
+ for (int n = 0; n < 32; n += 8) {
+ if(bits(Rs, n, n+7) == bits(Rb, n, n+7)) {
+ val = insertBits(val, n, n+7, 0xff);
+ }
+ }
+ Ra = val;
+ }});
+
+ 24: slw({{
+ if (Rb & 0x20) {
+ Ra = 0;
+ } else {
+ Ra = Rs << (Rb & 0x1f);
+ }
+ }});
+
+ 536: srw({{
+ if (Rb & 0x20) {
+ Ra = 0;
+ } else {
+ Ra = Rs >> (Rb & 0x1f);
+ }
+ }});
+
+ 792: sraw({{
+ bool shiftSetCA = false;
+ int32_t s = Rs;
+ if (Rb == 0) {
+ Ra = Rs;
+ shiftSetCA = true;
+ } else if (Rb & 0x20) {
+ if (s < 0) {
+ Ra = (uint32_t)-1;
+ if (s & 0x7fffffff) {
+ shiftSetCA = true;
+ } else {
+ shiftSetCA = false;
+ }
+ } else {
+ Ra = 0;
+ shiftSetCA = false;
+ }
+ } else {
+ Ra = s >> (Rb & 0x1f);
+ if (s < 0 && (s << (32 - (Rb & 0x1f))) != 0) {
+ shiftSetCA = true;
+ } else {
+ shiftSetCA = false;
+ }
+ }
+ Xer xer1 = XER;
+ if (shiftSetCA) {
+ xer1.ca = 1;
+ } else {
+ xer1.ca = 0;
+ }
+ XER = xer1;
+ }});
+ }
+
+ // Integer logic instructions with a shift value.
+ format IntShiftOp {
+ 824: srawi({{
+ bool shiftSetCA = false;
+ if (sh == 0) {
+ Ra = Rs;
+ shiftSetCA = false;
+ } else {
+ int32_t s = Rs;
+ Ra = s >> sh;
+ if (s < 0 && (s << (32 - sh)) != 0) {
+ shiftSetCA = true;
+ } else {
+ shiftSetCA = false;
+ }
+ }
+ Xer xer1 = XER;
+ if (shiftSetCA) {
+ xer1.ca = 1;
+ } else {
+ xer1.ca = 0;
+ }
+ XER = xer1;
+ }});
+ }
+
+ // Generic integer format instructions.
+ format IntOp {
+ 0: cmp({{
+ Xer xer = XER;
+ uint32_t cr = makeCRField(Ra.sw, Rb.sw, xer.so);
+ CR = insertCRField(CR, BF, cr);
+ }});
+ 32: cmpl({{
+ Xer xer = XER;
+ uint32_t cr = makeCRField(Ra, Rb, xer.so);
+ CR = insertCRField(CR, BF, cr);
+ }});
+ 144: mtcrf({{
+ uint32_t mask = 0;
+ for (int i = 0; i < 8; ++i) {
+ if (((FXM >> i) & 0x1) == 0x1) {
+ mask |= 0xf << (4 * i);
+ }
+ }
+ CR = (Rs & mask) | (CR & ~mask);
+ }});
+ 19: mfcr({{ Rt = CR; }});
+ 339: decode SPR {
+ 0x20: mfxer({{ Rt = XER; }});
+ 0x100: mflr({{ Rt = LR; }});
+ 0x120: mfctr({{ Rt = CTR; }});
+ }
+ 467: decode SPR {
+ 0x20: mtxer({{ XER = Rs; }});
+ 0x100: mtlr({{ LR = Rs; }});
+ 0x120: mtctr({{ CTR = Rs; }});
+ }
+ }
+
+ // All loads with an index register. The non-update versions
+ // all use the value 0 if Ra == R0, not the value contained in
+ // R0. Others update Ra with the effective address. In all cases,
+ // Ra and Rb are source registers, Rt is the destintation.
+ format LoadIndexOp {
+ 87: lbzx({{ Rt = Mem.ub; }});
+ 279: lhzx({{ Rt = Mem.uh; }});
+ 343: lhax({{ Rt = Mem.sh; }});
+ 23: lwzx({{ Rt = Mem; }});
+ 341: lwax({{ Rt = Mem.sw; }});
+ 20: lwarx({{ Rt = Mem.sw; Rsv = 1; RsvLen = 4; RsvAddr = EA; }});
+ 535: lfsx({{ Ft.sf = Mem.sf; }});
+ 599: lfdx({{ Ft = Mem.df; }});
+ 855: lfiwax({{ Ft.uw = Mem; }});
+ }
+
+ format LoadIndexUpdateOp {
+ 119: lbzux({{ Rt = Mem.ub; }});
+ 311: lhzux({{ Rt = Mem.uh; }});
+ 375: lhaux({{ Rt = Mem.sh; }});
+ 55: lwzux({{ Rt = Mem; }});
+ 373: lwaux({{ Rt = Mem.sw; }});
+ 567: lfsux({{ Ft.sf = Mem.sf; }});
+ 631: lfdux({{ Ft = Mem.df; }});
+ }
+
+ format StoreIndexOp {
+ 215: stbx({{ Mem.ub = Rs.ub; }});
+ 407: sthx({{ Mem.uh = Rs.uh; }});
+ 151: stwx({{ Mem = Rs; }});
+ 150: stwcx({{
+ bool store_performed = false;
+ if (Rsv) {
+ if (RsvLen == 4) {
+ if (RsvAddr == EA) {
+ Mem = Rs;
+ store_performed = true;
+ }
+ }
+ }
+ Xer xer = XER;
+ Cr cr = CR;
+ cr.cr0 = ((store_performed ? 0x2 : 0x0) | xer.so);
+ CR = cr;
+ Rsv = 0;
+ }});
+ 663: stfsx({{ Mem.sf = Fs.sf; }});
+ 727: stfdx({{ Mem.df = Fs; }});
+ 983: stfiwx({{ Mem = Fs.uw; }});
+ }
+
+ format StoreIndexUpdateOp {
+ 247: stbux({{ Mem.ub = Rs.ub; }});
+ 439: sthux({{ Mem.uh = Rs.uh; }});
+ 183: stwux({{ Mem = Rs; }});
+ 695: stfsux({{ Mem.sf = Fs.sf; }});
+ 759: stfdux({{ Mem.df = Fs; }});
+ }
+
+ // These instructions all provide data cache hints
+ format MiscOp {
+ 278: dcbt({{ }});
+ 246: dcbtst({{ }});
+ 598: sync({{ }});
+ 854: eieio({{ }});
+ }
+ }
+
+ format IntImmArithCheckRaOp {
+ 14: addi({{ Rt = Ra + imm; }},
+ {{ Rt = imm }});
+ 15: addis({{ Rt = Ra + (imm << 16); }},
+ {{ Rt = imm << 16; }});
+ }
+
+ format IntImmArithOp {
+ 12: addic({{ uint32_t src = Ra; Rt = src + imm; }},
+ [computeCA]);
+ 13: addic_({{ uint32_t src = Ra; Rt = src + imm; }},
+ [computeCA, computeCR0]);
+ 8: subfic({{ int32_t src = ~Ra; Rt = src + imm + 1; }},
+ [computeCA]);
+ 7: mulli({{
+ int32_t src = Ra.sw;
+ int64_t prod = src * imm;
+ Rt = (uint32_t)prod;
+ }});
+ }
+
+ format IntImmLogicOp {
+ 24: ori({{ Ra = Rs | uimm; }});
+ 25: oris({{ Ra = Rs | (uimm << 16); }});
+ 26: xori({{ Ra = Rs ^ uimm; }});
+ 27: xoris({{ Ra = Rs ^ (uimm << 16); }});
+ 28: andi_({{ Ra = Rs & uimm; }},
+ true);
+ 29: andis_({{ Ra = Rs & (uimm << 16); }},
+ true);
+ }
+
+ 16: decode AA {
+
+ // Conditionally branch relative to PC based on CR and CTR.
+ format BranchPCRelCondCtr {
+ 0: bc({{ NPC = PC + disp; }});
+ }
+
+ // Conditionally branch to fixed address based on CR and CTR.
+ format BranchNonPCRelCondCtr {
+ 1: bca({{ NPC = targetAddr; }});
+ }
+ }
+
+ 18: decode AA {
+
+ // Unconditionally branch relative to PC.
+ format BranchPCRel {
+ 0: b({{ NPC = PC + disp; }});
+ }
+
+ // Unconditionally branch to fixed address.
+ format BranchNonPCRel {
+ 1: ba({{ NPC = targetAddr; }});
+ }
+ }
+
+ 19: decode XO_XO {
+
+ // Conditionally branch to address in LR based on CR and CTR.
+ format BranchLrCondCtr {
+ 16: bclr({{ NPC = LR & 0xfffffffc; }});
+ }
+
+ // Conditionally branch to address in CTR based on CR.
+ format BranchCtrCond {
+ 528: bcctr({{ NPC = CTR & 0xfffffffc; }});
+ }
+
+ // Condition register manipulation instructions.
+ format CondLogicOp {
+ 257: crand({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, crBa & crBb);
+ }});
+ 449: cror({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, crBa | crBb);
+ }});
+ 255: crnand({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, !(crBa & crBb));
+ }});
+ 193: crxor({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, crBa ^ crBb);
+ }});
+ 33: crnor({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, !(crBa | crBb));
+ }});
+ 289: creqv({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, crBa == crBb);
+ }});
+ 129: crandc({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, crBa & !crBb);
+ }});
+ 417: crorc({{
+ uint32_t crBa = bits(CR, 31 - ba);
+ uint32_t crBb = bits(CR, 31 - bb);
+ CR = insertBits(CR, 31 - bt, crBa | !crBb);
+ }});
+ }
+ format CondMoveOp {
+ 0: mcrf({{
+ uint32_t crBfa = bits(CR, 31 - bfa*4, 28 - bfa*4);
+ CR = insertBits(CR, 31 - bf*4, 28 - bf*4, crBfa);
+ }});
+ }
+ format MiscOp {
+ 150: isync({{ }});
+ }
+ }
+
+ format IntRotateOp {
+ 21: rlwinm({{ Ra = rotateValue(Rs, sh) & fullMask; }});
+ 23: rlwnm({{ Ra = rotateValue(Rs, Rb) & fullMask; }});
+ 20: rlwimi({{ Ra = (rotateValue(Rs, sh) & fullMask) | (Ra & ~fullMask); }});
+ }
+
+ format LoadDispOp {
+ 34: lbz({{ Rt = Mem.ub; }});
+ 40: lhz({{ Rt = Mem.uh; }});
+ 42: lha({{ Rt = Mem.sh; }});
+ 32: lwz({{ Rt = Mem; }});
+ 58: lwa({{ Rt = Mem.sw; }},
+ {{ EA = Ra + (disp & 0xfffffffc); }},
+ {{ EA = disp & 0xfffffffc; }});
+ 48: lfs({{ Ft.sf = Mem.sf; }});
+ 50: lfd({{ Ft = Mem.df; }});
+ }
+
+ format LoadDispUpdateOp {
+ 35: lbzu({{ Rt = Mem.ub; }});
+ 41: lhzu({{ Rt = Mem.uh; }});
+ 43: lhau({{ Rt = Mem.sh; }});
+ 33: lwzu({{ Rt = Mem; }});
+ 49: lfsu({{ Ft.sf = Mem.sf; }});
+ 51: lfdu({{ Ft = Mem.df; }});
+ }
+
+ format StoreDispOp {
+ 38: stb({{ Mem.ub = Rs.ub; }});
+ 44: sth({{ Mem.uh = Rs.uh; }});
+ 36: stw({{ Mem = Rs; }});
+ 52: stfs({{ Mem.sf = Fs.sf; }});
+ 54: stfd({{ Mem.df = Fs; }});
+ }
+
+ format StoreDispUpdateOp {
+ 39: stbu({{ Mem.ub = Rs.ub; }});
+ 45: sthu({{ Mem.uh = Rs.uh; }});
+ 37: stwu({{ Mem = Rs; }});
+ 53: stfsu({{ Mem.sf = Fs.sf; }});
+ 55: stfdu({{ Mem.df = Fs; }});
+ }
+
+ 17: IntOp::sc({{ xc->syscall(R0); }});
+
+ format FloatArithOp {
+ 59: decode A_XO {
+ 21: fadds({{ Ft = Fa + Fb; }});
+ 20: fsubs({{ Ft = Fa - Fb; }});
+ 25: fmuls({{ Ft = Fa * Fc; }});
+ 18: fdivs({{ Ft = Fa / Fb; }});
+ 29: fmadds({{ Ft = (Fa * Fc) + Fb; }});
+ 28: fmsubs({{ Ft = (Fa * Fc) - Fb; }});
+ 31: fnmadds({{ Ft = -((Fa * Fc) + Fb); }});
+ 30: fnmsubs({{ Ft = -((Fa * Fc) - Fb); }});
+ }
+ }
+
+ 63: decode A_XO {
+ format FloatArithOp {
+ 21: fadd({{ Ft = Fa + Fb; }});
+ 20: fsub({{ Ft = Fa - Fb; }});
+ 25: fmul({{ Ft = Fa * Fc; }});
+ 18: fdiv({{ Ft = Fa / Fb; }});
+ 29: fmadd({{ Ft = (Fa * Fc) + Fb; }});
+ 28: fmsub({{ Ft = (Fa * Fc) - Fb; }});
+ 31: fnmadd({{ Ft = -((Fa * Fc) + Fb); }});
+ 30: fnmsub({{ Ft = -((Fa * Fc) - Fb); }});
+ }
+
+ default: decode XO_XO {
+ format FloatConvertOp {
+ 12: frsp({{ Ft.sf = Fb; }});
+ 15: fctiwz({{ Ft.sw = (int32_t)trunc(Fb); }});
+ }
+
+ format FloatOp {
+ 0: fcmpu({{
+ uint32_t c = makeCRField(Fa, Fb);
+ Fpscr fpscr = FPSCR;
+ fpscr.fprf.fpcc = c;
+ FPSCR = fpscr;
+ CR = insertCRField(CR, BF, c);
+ }});
+ }
+
+ format FloatRCCheckOp {
+ 72: fmr({{ Ft = Fb; }});
+ 264: fabs({{
+ Ft.uq = Fb.uq;
+ Ft.uq = insertBits(Ft.uq, 63, 0); }});
+ 136: fnabs({{
+ Ft.uq = Fb.uq;
+ Ft.uq = insertBits(Ft.uq, 63, 1); }});
+ 40: fneg({{ Ft = -Fb; }});
+ 8: fcpsgn({{
+ Ft.uq = Fb.uq;
+ Ft.uq = insertBits(Ft.uq, 63, Fa.uq<63:63>);
+ }});
+ 583: mffs({{ Ft.uq = FPSCR; }});
+ 134: mtfsfi({{
+ FPSCR = insertCRField(FPSCR, BF + (8 * (1 - W)), U_FIELD);
+ }});
+ 711: mtfsf({{
+ if (L == 1) { FPSCR = Fb.uq; }
+ else {
+ for (int i = 0; i < 8; ++i) {
+ if (bits(FLM, i) == 1) {
+ int k = 4 * (i + (8 * (1 - W)));
+ FPSCR = insertBits(FPSCR, k, k + 3,
+ bits(Fb.uq, k, k + 3));
+ }
+ }
+ }
+ }});
+ 70: mtfsb0({{ FPSCR = insertBits(FPSCR, 31 - BT, 0); }});
+ 38: mtfsb1({{ FPSCR = insertBits(FPSCR, 31 - BT, 1); }});
+ }
+ }
+ }
+}
diff --git a/src/arch/powerpc/isa/formats/basic.isa b/src/arch/powerpc/isa/formats/basic.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/basic.isa
@@ -0,0 +1,103 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+// Declarations for execute() methods.
+def template BasicExecDeclare {{
+ Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const;
+}};
+
+// Basic instruction class declaration template.
+def template BasicDeclare {{
+ /**
+ * Static instruction class for "%(mnemonic)s".
+ */
+ class %(class_name)s : public %(base_class)s
+ {
+ public:
+ /// Constructor.
+ %(class_name)s(ExtMachInst machInst);
+ %(BasicExecDeclare)s
+ };
+}};
+
+// Basic instruction class constructor template.
+def template BasicConstructor {{
+ inline %(class_name)s::%(class_name)s(ExtMachInst machInst) : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
+ {
+ %(constructor)s;
+ }
+}};
+
+
+// Basic instruction class execute method template.
+def template BasicExecute {{
+ Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
+ {
+ Fault fault = NoFault;
+
+ %(op_decl)s;
+ %(op_rd)s;
+ %(code)s;
+
+ if (fault == NoFault)
+ {
+ %(op_wb)s;
+ }
+
+ return fault;
+ }
+}};
+
+// Basic decode template.
+def template BasicDecode {{
+ return new %(class_name)s(machInst);
+}};
+
+// Basic decode template, passing mnemonic in as string arg to constructor.
+def template BasicDecodeWithMnemonic {{
+ return new %(class_name)s("%(mnemonic)s", machInst);
+}};
+
+// Definitions of execute methods that panic.
+def template BasicExecPanic {{
+Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const
+{
+ panic("Execute method called when it shouldn't!");
+}
+}};
+
+// The most basic instruction format...
+def format BasicOp(code, *flags) {{
+ iop = InstObjParams(name, Name, 'PowerPCStaticInst', code, flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecode.subst(iop)
+ exec_output = BasicExecute.subst(iop)
+}};
diff --git a/src/arch/powerpc/isa/formats/branch.isa b/src/arch/powerpc/isa/formats/branch.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/branch.isa
@@ -0,0 +1,222 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Control transfer instructions
+//
+// From the Power ISA Book I v2.06, page 33, the following rules should
+// be obeyed by programmers:
+//
+// - Use branch instructions where LK == 1 only as subroutine calls.
+// - Pair each subroutine call with a bclr instruction with BH == 00
+// that returns from the subroutine.
+// - Do not use bclrl as a subroutine call.
+//
+// Therefore, I've flagged all versions that update the link register (LR)
+// as calls, except bclrl (BranchLrCtrCond format) which is flagged as
+// a return.
+
+
+let {{
+
+# Simple code to update link register (LR).
+updateLrCode = 'LR = PC + 4;'
+
+}};
+
+// Instructions that unconditionally branch relative to the current PC.
+def format BranchPCRel(br_code, inst_flags = []) {{
+ inst_flags += ('IsUncondControl', 'IsDirectControl')
+ basic_code = br_code
+
+ # The version that does not update LR
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'BranchPCRel', basic_code, inst_flags,
+ CheckLkDecode, BasicConstructor)
+
+ # The version that does the update
+ update_code = basic_code + updateLrCode
+ update_flags = inst_flags + [ 'IsCall' ]
+ (header_output_up, decoder_output_up, _, exec_output_up) = \
+ GenAluOp(name, Name + 'UpdateLr', 'BranchPCRel', update_code,
+ update_flags, CheckLkDecode, BasicConstructor)
+
+ # Add the outputs together
+ header_output += header_output_up
+ decoder_output += decoder_output_up
+ exec_output += exec_output_up
+}};
+
+// Instructions that unconditionally branch to a specific address.
+def format BranchNonPCRel(br_code, inst_flags = []) {{
+ inst_flags += ('IsUncondControl', 'IsDirectControl')
+ basic_code = br_code
+
+ # The version that does not update LR
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'BranchNonPCRel', basic_code, inst_flags,
+ CheckLkDecode, BasicConstructor)
+
+ # The version that does the update
+ update_code = basic_code + updateLrCode
+ update_flags = inst_flags + [ 'IsCall' ]
+ (header_output_up, decoder_output_up, _, exec_output_up) = \
+ GenAluOp(name, Name + 'UpdateLr', 'BranchNonPCRel', update_code,
+ update_flags, CheckLkDecode, BasicConstructor)
+
+ # Add the outputs together
+ header_output += header_output_up
+ decoder_output += decoder_output_up
+ exec_output += exec_output_up
+}};
+
+let {{
+
+# Check the condition register (CR) allows the branch to be taken.
+def GetCondCode(br_code):
+ cond_code = 'if(condOk(CR)) {\n'
+ cond_code += ' ' + br_code + '\n'
+ cond_code += '} else {\n'
+ cond_code += ' NPC = NPC;\n'
+ cond_code += '}\n'
+ return cond_code
+
+# Check the condition register (CR) and count register (CTR) allow the
+# branch to be taken. Also, in certain situations, decrement the count
+# register too. This takes place in ctrOk within BranchCond classes.
+def GetCtrCondCode(br_code):
+ cond_code = 'uint32_t ctr = CTR;\n'
+ cond_code += 'bool ctr_ok = ctrOk(ctr);\n'
+ cond_code += 'bool cond_ok = condOk(CR);\n'
+ cond_code += 'if(ctr_ok && cond_ok) {\n'
+ cond_code += ' ' + br_code + '\n'
+ cond_code += '} else {\n'
+ cond_code += ' NPC = NPC;\n'
+ cond_code += '}\n'
+ cond_code += 'CTR = ctr;\n'
+ return cond_code
+
+}};
+
+// Instructions that conditionally branch relative to the current PC based on
+// the condition register (CR) and count register (CTR).
+def format BranchPCRelCondCtr(br_code, inst_flags = []) {{
+ inst_flags += ('IsCondControl', 'IsDirectControl')
+ basic_code = GetCtrCondCode(br_code)
+
+ # The version that does not update LR
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'BranchPCRelCond', basic_code, inst_flags,
+ CheckLkDecode, BasicConstructor)
+
+ # The version that does the update
+ update_code = basic_code + updateLrCode
+ update_flags = inst_flags + [ 'IsCall' ]
+ (header_output_up, decoder_output_up, _, exec_output_up) = \
+ GenAluOp(name, Name + 'UpdateLr', 'BranchPCRelCond', update_code,
+ update_flags, CheckLkDecode, BasicConstructor)
+
+ # Add the outputs together
+ header_output += header_output_up
+ decoder_output += decoder_output_up
+ exec_output += exec_output_up
+}};
+
+// Instructions that conditionally branch to a specific address based on the
+// condition register (CR) and count register (CTR).
+def format BranchNonPCRelCondCtr(br_code, inst_flags = []) {{
+ inst_flags += ('IsCondControl', 'IsDirectControl')
+ basic_code = GetCtrCondCode(br_code)
+
+ # The version that does not update LR
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'BranchNonPCRelCond', basic_code, inst_flags,
+ CheckLkDecode, BasicConstructor)
+
+ # The version that does the update
+ update_code = basic_code + updateLrCode
+ update_flags = inst_flags + [ 'IsCall' ]
+ (header_output_up, decoder_output_up, _, exec_output_up) = \
+ GenAluOp(name, Name + 'UpdateLr', 'BranchNonPCRelCond', update_code,
+ update_flags, CheckLkDecode, BasicConstructor)
+
+ # Add the outputs together
+ header_output += header_output_up
+ decoder_output += decoder_output_up
+ exec_output += exec_output_up
+}};
+
+// Instructions that conditionally branch to the address in the link register
+// (LR) based on the condition register (CR) and count register (CTR).
+def format BranchLrCondCtr(br_code, inst_flags = []) {{
+ inst_flags += ('IsCondControl', 'IsIndirectControl', 'IsReturn')
+ basic_code = GetCtrCondCode(br_code)
+
+ # The version that does not update LR
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'BranchRegCond', basic_code, inst_flags,
+ CheckLkDecode, BasicConstructor)
+
+ # The version that does the update
+ update_code = basic_code + updateLrCode
+ (header_output_up, decoder_output_up, _, exec_output_up) = \
+ GenAluOp(name, Name + 'UpdateLr', 'BranchRegCond', update_code,
+ inst_flags, CheckLkDecode, BasicConstructor)
+
+ # Add the outputs together
+ header_output += header_output_up
+ decoder_output += decoder_output_up
+ exec_output += exec_output_up
+}};
+
+// Instructions that conditionally branch to the address in the count register
+// (CTR) based on the condition register (CR).
+def format BranchCtrCond(br_code, inst_flags = []) {{
+ inst_flags += ('IsCondControl', 'IsIndirectControl')
+ basic_code = GetCondCode(br_code)
+
+ # The version that does not update LR
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'BranchRegCond', basic_code, inst_flags,
+ CheckLkDecode, BasicConstructor)
+
+ # The version that does the update
+ update_code = basic_code + updateLrCode
+ update_flags = inst_flags + [ 'IsCall' ]
+ (header_output_up, decoder_output_up, _, exec_output_up) = \
+ GenAluOp(name, Name + 'UpdateLr', 'BranchRegCond', update_code,
+ update_flags, CheckLkDecode, BasicConstructor)
+
+ # Add the outputs together
+ header_output += header_output_up
+ decoder_output += decoder_output_up
+ exec_output += exec_output_up
+}};
diff --git a/src/arch/powerpc/isa/formats/condition.isa b/src/arch/powerpc/isa/formats/condition.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/condition.isa
@@ -0,0 +1,47 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+// Logical instructions that manipulate the condition register
+def format CondLogicOp(code, *flags) {{
+ iop = InstObjParams(name, Name, 'CondLogicOp', code, flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecode.subst(iop)
+ exec_output = BasicExecute.subst(iop)
+}};
+
+// Instructions that condition register fields
+def format CondMoveOp(code, *flags) {{
+ iop = InstObjParams(name, Name, 'CondMoveOp', code, flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecode.subst(iop)
+ exec_output = BasicExecute.subst(iop)
+}};
diff --git a/src/arch/powerpc/isa/formats/formats.isa b/src/arch/powerpc/isa/formats/formats.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/formats.isa
@@ -0,0 +1,60 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+//Templates from this format are used later
+//Include the basic format
+##include "basic.isa"
+
+//Include integer instructions
+##include "integer.isa"
+
+//Include condition register instructions
+##include "condition.isa"
+
+//Include utility functions
+##include "util.isa"
+
+//Include the float formats
+##include "fp.isa"
+
+//Include the mem format
+##include "mem.isa"
+
+//Include the branch format
+##include "branch.isa"
+
+//Include the misc format
+##include "misc.isa"
+
+//Include the unimplemented format
+##include "unimp.isa"
+
+//Include the unknown format
+##include "unknown.isa"
diff --git a/src/arch/powerpc/isa/formats/fp.isa b/src/arch/powerpc/isa/formats/fp.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/fp.isa
@@ -0,0 +1,132 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Floating Point operate instructions
+//
+
+
+let {{
+
+ readFPSCRCode = 'Fpscr fpscr = FPSCR;'
+
+ computeCR1Code = '''
+ Cr cr = CR;
+ cr.cr1 = (fpscr.fx << 3) | (fpscr.fex << 2) |
+ (fpscr.vx << 1) | fpscr.ox;
+ CR = cr;
+ '''
+
+}};
+
+// Primary format for floating point operate instructions:
+def format FloatOp(code, inst_flags = []) {{
+ iop = InstObjParams(name, Name, 'FloatOp',
+ {"code": code},
+ inst_flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecode.subst(iop)
+ exec_output = BasicExecute.subst(iop)
+}};
+
+// Floating point operations that compute the CR1 code if RC is set. No other
+// special registers are touched using these operations.
+def format FloatRCCheckOp(code, inst_flags = []) {{
+
+ # Code when Rc is set
+ code_rc1 = code + readFPSCRCode + computeCR1Code
+
+ # Generate the first class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'FloatOp', code, inst_flags,
+ CheckRcDecode, BasicConstructor)
+
+ # Generate the second class
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'FloatOp', code_rc1, inst_flags,
+ CheckRcDecode, IntRcConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_rc1
+ decoder_output += decoder_output_rc1
+ exec_output += exec_output_rc1
+}};
+
+// Floating point elementary arithmetic operations. Besides having two
+// versions of each instruction for when Rc is set or not, we also have
+// to alter lots of special registers depending on the result of the
+// operation. The result is always in Ft.sf.
+def format FloatArithOp(code, inst_flags = []) {{
+
+ # Code when Rc is set
+ code_rc1 = code + readFPSCRCode + computeCR1Code
+
+ # Generate the first class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'FloatOp', code, inst_flags,
+ CheckRcDecode, BasicConstructor)
+
+ # Generate the second class
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'FloatOp', code_rc1, inst_flags,
+ CheckRcDecode, IntRcConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_rc1
+ decoder_output += decoder_output_rc1
+ exec_output += exec_output_rc1
+}};
+
+// Floating point rounding and conversion operations. Besides having two
+// versions of each instruction for when Rc is set or not, we also have
+// to alter lots of special registers depending on the result of the
+// operation. The result is always in Ft.sf.
+def format FloatConvertOp(code, inst_flags = []) {{
+
+ # Code when Rc is set
+ code_rc1 = code + readFPSCRCode + computeCR1Code
+
+ # Generate the first class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'FloatOp', code, inst_flags,
+ CheckRcDecode, BasicConstructor)
+
+ # Generate the second class
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'FloatOp', code_rc1, inst_flags,
+ CheckRcDecode, IntRcConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_rc1
+ decoder_output += decoder_output_rc1
+ exec_output += exec_output_rc1
+}};
diff --git a/src/arch/powerpc/isa/formats/integer.isa b/src/arch/powerpc/isa/formats/integer.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/integer.isa
@@ -0,0 +1,369 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Integer ALU instructions
+//
+
+
+// Instruction class constructor template when Rc is set.
+def template IntRcConstructor {{
+ inline %(class_name)s::%(class_name)s(ExtMachInst machInst) : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
+ {
+ %(constructor)s;
+ rcSet = true;
+ }
+}};
+
+
+// Instruction class constructor template when OE is set.
+def template IntOeConstructor {{
+ inline %(class_name)s::%(class_name)s(ExtMachInst machInst) : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
+ {
+ %(constructor)s;
+ oeSet = true;
+ }
+}};
+
+
+// Instruction class constructor template when both Rc and OE are set.
+def template IntRcOeConstructor {{
+ inline %(class_name)s::%(class_name)s(ExtMachInst machInst) : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
+ {
+ %(constructor)s;
+ rcSet = true;
+ oeSet = true;
+ }
+}};
+
+
+let {{
+
+readXERCode = 'Xer xer = XER;'
+
+setXERCode = 'XER = xer;'
+
+computeCR0Code = '''
+ Cr cr = CR;
+ cr.cr0 = makeCRField((int32_t)%(result)s, (int32_t)0, xer.so);
+ CR = cr;
+'''
+
+computeCACode = '''
+ if (findCarry(32, %(result)s, %(inputa)s, %(inputb)s)) {
+ xer.ca = 1;
+ } else {
+ xer.ca = 0;
+ }
+'''
+
+computeOVCode = '''
+ if (findOverflow(32, %(result)s, %(inputa)s, %(inputb)s)) {
+ xer.ov = 1;
+ xer.so = 1;
+ } else {
+ xer.ov = 0;
+ }
+'''
+
+computeDivOVCode = '''
+ if (divSetOV) {
+ xer.ov = 1;
+ xer.so = 1;
+ } else {
+ if (findOverflow(32, %(result)s, %(inputa)s, %(inputb)s)) {
+ xer.ov = 1;
+ xer.so = 1;
+ } else {
+ xer.ov = 0;
+ }
+ }
+'''
+
+}};
+
+
+// A basic integer instruction.
+def format IntOp(code, inst_flags = []) {{
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntOp', code, inst_flags, BasicDecode,
+ BasicConstructor)
+}};
+
+
+// Integer instructions with immediate (signed or unsigned).
+def format IntImmOp(code, inst_flags = []) {{
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntImmOp', code, inst_flags, BasicDecode,
+ BasicConstructor)
+}};
+
+
+// Integer instructions with immediate that perform arithmetic.
+// These instructions all write to Rt and use an altered form of the
+// value in source register Ra, hence the use of src to hold the actual
+// value. The control flags include the use of code to compute the
+// carry bit or the CR0 code.
+def format IntImmArithOp(code, ctrl_flags = [], inst_flags = []) {{
+
+ # Set up the dictionary and deal with control flags
+ dict = {'result':'Rt', 'inputa':'src', 'inputb':'imm'}
+ if ctrl_flags:
+ code += readXERCode
+ for val in ctrl_flags:
+ if val == 'computeCA':
+ code += computeCACode % dict + setXERCode
+ elif val == 'computeCR0':
+ code += computeCR0Code % dict
+
+ # Generate the class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntImmOp', code, inst_flags, BasicDecode,
+ BasicConstructor)
+}};
+
+
+// Integer instructions with immediate that perform arithmetic but use
+// the value 0 when Ra == 0. We generate two versions of each instruction
+// corresponding to these two different scenarios. The correct version is
+// determined at decode (see the CheckRaDecode template).
+def format IntImmArithCheckRaOp(code, code_ra0, inst_flags = []) {{
+
+ # First the version where Ra is non-zero
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntImmOp', code, inst_flags,
+ CheckRaDecode, BasicConstructor)
+
+ # Now another version where Ra == 0
+ (header_output_ra0, decoder_output_ra0, _, exec_output_ra0) = \
+ GenAluOp(name, Name + 'RaZero', 'IntImmOp', code_ra0, inst_flags,
+ CheckRaDecode, BasicConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_ra0
+ decoder_output += decoder_output_ra0
+ exec_output += exec_output_ra0
+}};
+
+
+// Integer instructions with immediate that perform logic operations.
+// All instructions write to Ra and use Rs as a source register. Some
+// also compute the CR0 code too.
+def format IntImmLogicOp(code, computeCR0 = 0, inst_flags = []) {{
+
+ # Set up the dictionary and deal with computing CR0
+ dict = {'result':'Ra'}
+ if computeCR0:
+ code += readXERCode + computeCR0Code % dict
+
+ # Generate the class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntImmOp', code, inst_flags, BasicDecode,
+ BasicConstructor)
+}};
+
+
+// Integer instructions that perform logic operations. The result is
+// always written into Ra. All instructions have 2 versions depending on
+// whether the Rc bit is set to compute the CR0 code. This is determined
+// at decode as before.
+def format IntLogicOp(code, inst_flags = []) {{
+ dict = {'result':'Ra'}
+
+ # Code when Rc is set
+ code_rc1 = code + readXERCode + computeCR0Code % dict
+
+ # Generate the first class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntOp', code, inst_flags,
+ CheckRcDecode, BasicConstructor)
+
+ # Generate the second class
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'IntOp', code_rc1, inst_flags,
+ CheckRcDecode, IntRcConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_rc1
+ decoder_output += decoder_output_rc1
+ exec_output += exec_output_rc1
+}};
+
+
+// Integer instructions with a shift amount. As above, except inheriting
+// from the IntShiftOp class.
+def format IntShiftOp(code, inst_flags = []) {{
+ dict = {'result':'Ra'}
+
+ # Code when Rc is set
+ code_rc1 = code + readXERCode + computeCR0Code % dict
+
+ # Generate the first class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntShiftOp', code, inst_flags,
+ CheckRcDecode, BasicConstructor)
+
+ # Generate the second class
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'IntShiftOp', code_rc1, inst_flags,
+ CheckRcDecode, IntRcConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_rc1
+ decoder_output += decoder_output_rc1
+ exec_output += exec_output_rc1
+}};
+
+
+// Instructions in this format are all reduced to the form Rt = src1 + src2,
+// therefore we just give src1 and src2 definitions. In working out the
+// template we first put in the definitions of the variables and then
+// the code for the addition. We also deal with computing the carry flag
+// if required.
+//
+// We generate 4 versions of each instruction. This correspond to the
+// different combinations of having the OE bit set or unset (which controls
+// whether the overflow flag is computed) and the Rc bit set or unset too
+// (which controls whether the CR0 code is computed).
+def format IntSumOp(src1, src2, ca = {{ 0 }}, computeCA = 0,
+ inst_flags = []) {{
+
+ # The result is always in Rt, but the source values vary
+ dict = {'result':'Rt', 'inputa':'src1', 'inputb':'src2'}
+
+ # Add code to set up variables and do the sum
+ code = 'uint32_t src1 = ' + src1 + ';\n'
+ code += 'uint32_t src2 = ' + src2 + ';\n'
+ code += 'uint32_t ca = ' + ca + ';\n'
+ code += 'Rt = src1 + src2 + ca;\n'
+
+ # Add code for calculating the carry, if needed
+ if computeCA:
+ code += computeCACode % dict + setXERCode
+
+ # Setup the 4 code versions and add code to access XER if necessary
+ code_rc1 = readXERCode + code
+ code_oe1 = readXERCode + code + computeOVCode % dict + setXERCode
+ code_rc1_oe1 = readXERCode + code + computeOVCode % dict + setXERCode
+ if (computeCA or ca == 'xer.ca'):
+ code = readXERCode + code
+ code_rc1 += computeCR0Code % dict
+ code_rc1_oe1 += computeCR0Code % dict
+
+ # Generate the classes
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntOp', code, inst_flags,
+ CheckRcOeDecode, BasicConstructor)
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'IntOp', code_rc1, inst_flags,
+ CheckRcOeDecode, IntRcConstructor)
+ (header_output_oe1, decoder_output_oe1, _, exec_output_oe1) = \
+ GenAluOp(name, Name + 'OeSet', 'IntOp', code_oe1, inst_flags,
+ CheckRcOeDecode, IntOeConstructor)
+ (header_output_rc1_oe1, decoder_output_rc1_oe1, _, exec_output_rc1_oe1) = \
+ GenAluOp(name, Name + 'RcSetOeSet', 'IntOp', code_rc1_oe1,
+ inst_flags, CheckRcOeDecode, IntRcOeConstructor)
+
+ # Finally, add to the other outputs
+ header_output += \
+ header_output_rc1 + header_output_oe1 + header_output_rc1_oe1
+ decoder_output += \
+ decoder_output_rc1 + decoder_output_oe1 + decoder_output_rc1_oe1
+ exec_output += \
+ exec_output_rc1 + exec_output_oe1 + exec_output_rc1_oe1
+
+}};
+
+
+// Instructions that use source registers Ra and Rb, with the result
+// placed into Rt. Basically multiply and divide instructions. The
+// carry bit is never set, but overflow can be calculated. Division
+// explicitly sets the overflow bit in certain situations and this is
+// dealt with using the 'divSetOV' boolean in decoder.isa. We generate
+// two versions of each instruction to deal with the Rc bit.
+def format IntArithOp(code, computeOV = 0, inst_flags = []) {{
+
+ # The result is always in Rt, but the source values vary
+ dict = {'result':'Rt', 'inputa':'src1', 'inputb':'src2'}
+
+ # Deal with setting the overflow flag
+ if computeOV:
+ code = 'bool divSetOV = false;\n' + code
+ code += computeDivOVCode % dict + setXERCode
+
+ # Setup the 2 code versions and add code to access XER if necessary
+ code_rc1 = readXERCode + code + computeCR0Code % dict
+ if computeOV:
+ code = readXERCode + code
+
+ # Generate the classes
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntOp', code, inst_flags,
+ CheckRcDecode, BasicConstructor)
+
+ # Generate the second class
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'IntOp', code_rc1, inst_flags,
+ CheckRcDecode, IntRcConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_rc1
+ decoder_output += decoder_output_rc1
+ exec_output += exec_output_rc1
+}};
+
+
+// A special format for rotate instructions which use certain fields
+// from the instruction's binary encoding. We need two versions for each
+// instruction to deal with the Rc bit.
+def format IntRotateOp(code, inst_flags = []) {{
+
+ # The result is always in Ra
+ dict = {'result':'Ra'}
+
+ # Setup the code for when Rc is set
+ code_rc1 = readXERCode + code + computeCR0Code % dict
+
+ # Generate the first class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenAluOp(name, Name, 'IntRotateOp', code, inst_flags,
+ CheckRcDecode, BasicConstructor)
+
+ # Generate the second class
+ (header_output_rc1, decoder_output_rc1, _, exec_output_rc1) = \
+ GenAluOp(name, Name + 'RcSet', 'IntRotateOp', code_rc1, inst_flags,
+ CheckRcDecode, IntRcConstructor)
+
+ # Finally, add to the other outputs
+ header_output += header_output_rc1
+ decoder_output += decoder_output_rc1
+ exec_output += exec_output_rc1
+}};
diff --git a/src/arch/powerpc/isa/formats/mem.isa b/src/arch/powerpc/isa/formats/mem.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/mem.isa
@@ -0,0 +1,348 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Memory-format instructions
+//
+
+def template LoadStoreDeclare {{
+ /**
+ * Static instruction class for "%(mnemonic)s".
+ */
+ class %(class_name)s : public %(base_class)s
+ {
+ public:
+
+ /// Constructor.
+ %(class_name)s(ExtMachInst machInst);
+
+ %(BasicExecDeclare)s
+
+ %(InitiateAccDeclare)s
+
+ %(CompleteAccDeclare)s
+ };
+}};
+
+
+def template InitiateAccDeclare {{
+ Fault initiateAcc(%(CPU_exec_context)s *, Trace::InstRecord *) const;
+}};
+
+
+def template CompleteAccDeclare {{
+ Fault completeAcc(PacketPtr, %(CPU_exec_context)s *, Trace::InstRecord *) const;
+}};
+
+
+def template LoadStoreConstructor {{
+ inline %(class_name)s::%(class_name)s(ExtMachInst machInst)
+ : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
+ {
+ %(constructor)s;
+ }
+}};
+
+
+def template LoadExecute {{
+ Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ Addr EA;
+ Fault fault = NoFault;
+
+ %(op_decl)s;
+ %(op_rd)s;
+ %(ea_code)s;
+
+ if (fault == NoFault) {
+ fault = xc->read(EA, (uint%(mem_acc_size)d_t&)Mem, memAccessFlags);
+ %(memacc_code)s;
+ }
+
+ if (fault == NoFault) {
+ %(op_wb)s;
+ }
+
+ return fault;
+ }
+}};
+
+
+def template LoadInitiateAcc {{
+ Fault %(class_name)s::initiateAcc(%(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ Addr EA;
+ Fault fault = NoFault;
+
+ %(op_src_decl)s;
+ %(op_rd)s;
+ %(ea_code)s;
+
+ if (fault == NoFault) {
+ fault = xc->read(EA, (uint%(mem_acc_size)d_t &)Mem, memAccessFlags);
+ }
+
+ return fault;
+ }
+}};
+
+
+def template LoadCompleteAcc {{
+ Fault %(class_name)s::completeAcc(PacketPtr pkt,
+ %(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ Addr EA;
+ Fault fault = NoFault;
+
+ %(op_decl)s;
+ %(op_rd)s;
+
+ EA = xc->getEA();
+
+ Mem = pkt->get<typeof(Mem)>();
+
+ if (fault == NoFault) {
+ %(memacc_code)s;
+ }
+
+ if (fault == NoFault) {
+ %(op_wb)s;
+ }
+
+ return fault;
+ }
+}};
+
+
+def template StoreExecute {{
+ Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ Addr EA;
+ Fault fault = NoFault;
+
+ %(op_decl)s;
+ %(op_rd)s;
+ %(ea_code)s;
+
+ if (fault == NoFault) {
+ %(memacc_code)s;
+ }
+
+ if (fault == NoFault) {
+ fault = xc->write((uint%(mem_acc_size)d_t&)Mem, EA,
+ memAccessFlags, NULL);
+ if (traceData) { traceData->setData(Mem); }
+ }
+
+ if (fault == NoFault) {
+ %(op_wb)s;
+ }
+
+ return fault;
+ }
+}};
+
+
+def template StoreInitiateAcc {{
+ Fault %(class_name)s::initiateAcc(%(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ Addr EA;
+ Fault fault = NoFault;
+
+ %(op_decl)s;
+ %(op_rd)s;
+ %(ea_code)s;
+
+ if (fault == NoFault) {
+ %(memacc_code)s;
+ }
+
+ if (fault == NoFault) {
+ fault = xc->write((uint%(mem_acc_size)d_t&)Mem, EA,
+ memAccessFlags, NULL);
+ if (traceData) { traceData->setData(Mem); }
+ }
+
+ // Need to write back any potential address register update
+ if (fault == NoFault) {
+ %(op_wb)s;
+ }
+
+ return fault;
+ }
+}};
+
+
+def template StoreCompleteAcc {{
+ Fault %(class_name)s::completeAcc(PacketPtr pkt,
+ %(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ Fault fault = NoFault;
+
+ %(op_dest_decl)s;
+
+ if (fault == NoFault) {
+ %(op_wb)s;
+ }
+
+ return fault;
+ }
+}};
+
+
+// The generic memory operation generator. This is called when two versions
+// of an instruction are needed - when Ra == 0 and otherwise. This is so
+// that instructions can use the value 0 when Ra == 0 but avoid having a
+// dependence on Ra.
+let {{
+
+def GenMemOp(name, Name, memacc_code, ea_code, ea_code_ra0, base,
+ load_or_store, mem_flags = [], inst_flags = []):
+
+ # First the version where Ra is non-zero
+ (header_output, decoder_output, decode_block, exec_output) = \
+ LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
+ base_class = base,
+ decode_template = CheckRaDecode,
+ exec_template_base = load_or_store)
+
+ # Now another version where Ra == 0
+ (header_output_ra0, decoder_output_ra0, _, exec_output_ra0) = \
+ LoadStoreBase(name, Name + 'RaZero', ea_code_ra0, memacc_code,
+ mem_flags, inst_flags,
+ base_class = base,
+ exec_template_base = load_or_store)
+
+ # Finally, add to the other outputs
+ header_output += header_output_ra0
+ decoder_output += decoder_output_ra0
+ exec_output += exec_output_ra0
+ return (header_output, decoder_output, decode_block, exec_output)
+
+}};
+
+
+def format LoadIndexOp(memacc_code, ea_code = {{ EA = Ra + Rb; }},
+ ea_code_ra0 = {{ EA = Rb; }},
+ mem_flags = [], inst_flags = []) {{
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenMemOp(name, Name, memacc_code, ea_code, ea_code_ra0,
+ 'MemOp', 'Load', mem_flags, inst_flags)
+}};
+
+
+def format StoreIndexOp(memacc_code, ea_code = {{ EA = Ra + Rb; }},
+ ea_code_ra0 = {{ EA = Rb; }},
+ mem_flags = [], inst_flags = []) {{
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenMemOp(name, Name, memacc_code, ea_code, ea_code_ra0,
+ 'MemOp', 'Store', mem_flags, inst_flags)
+}};
+
+
+def format LoadIndexUpdateOp(memacc_code, ea_code = {{ EA = Ra + Rb; }},
+ mem_flags = [], inst_flags = []) {{
+
+ # Add in the update code
+ memacc_code += 'Ra = EA;'
+
+ # Generate the class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
+ base_class = 'MemOp',
+ exec_template_base = 'Load')
+}};
+
+
+def format StoreIndexUpdateOp(memacc_code, ea_code = {{ EA = Ra + Rb; }},
+ mem_flags = [], inst_flags = []) {{
+
+ # Add in the update code
+ memacc_code += 'Ra = EA;'
+
+ # Generate the class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
+ base_class = 'MemOp',
+ exec_template_base = 'Store')
+}};
+
+
+def format LoadDispOp(memacc_code, ea_code = {{ EA = Ra + disp; }},
+ ea_code_ra0 = {{ EA = disp; }},
+ mem_flags = [], inst_flags = []) {{
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenMemOp(name, Name, memacc_code, ea_code, ea_code_ra0,
+ 'MemDispOp', 'Load', mem_flags, inst_flags)
+}};
+
+
+def format StoreDispOp(memacc_code, ea_code = {{ EA = Ra + disp; }},
+ ea_code_ra0 = {{ EA = disp; }},
+ mem_flags = [], inst_flags = []) {{
+ (header_output, decoder_output, decode_block, exec_output) = \
+ GenMemOp(name, Name, memacc_code, ea_code, ea_code_ra0,
+ 'MemDispOp', 'Store', mem_flags, inst_flags)
+}};
+
+
+def format LoadDispUpdateOp(memacc_code, ea_code = {{ EA = Ra + disp; }},
+ mem_flags = [], inst_flags = []) {{
+
+ # Add in the update code
+ memacc_code += 'Ra = EA;'
+
+ # Generate the class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
+ base_class = 'MemDispOp',
+ exec_template_base = 'Load')
+}};
+
+
+def format StoreDispUpdateOp(memacc_code, ea_code = {{ EA = Ra + disp; }},
+ mem_flags = [], inst_flags = []) {{
+
+ # Add in the update code
+ memacc_code += 'Ra = EA;'
+
+ # Generate the class
+ (header_output, decoder_output, decode_block, exec_output) = \
+ LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
+ base_class = 'MemDispOp',
+ exec_template_base = 'Store')
+}};
diff --git a/src/arch/powerpc/isa/formats/misc.isa b/src/arch/powerpc/isa/formats/misc.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/misc.isa
@@ -0,0 +1,61 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Misc instructions
+//
+
+def template MiscOpExecute {{
+ Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
+ {
+ Fault fault = NoFault;
+ %(op_decl)s;
+ %(op_rd)s;
+
+ %(code)s;
+ if (fault == NoFault)
+ {
+ %(op_wb)s;
+ }
+
+ return fault;
+ }
+}};
+
+def format MiscOp(code, *opt_flags) {{
+ iop = InstObjParams(name, Name, 'IntOp',
+ {"code": code},
+ opt_flags)
+ header_output = BasicDeclare.subst(iop)
+ decoder_output = BasicConstructor.subst(iop)
+ decode_block = BasicDecode.subst(iop)
+ exec_output = MiscOpExecute.subst(iop)
+}};
diff --git a/src/arch/powerpc/isa/formats/unimp.isa b/src/arch/powerpc/isa/formats/unimp.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/unimp.isa
@@ -0,0 +1,146 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2007-2008 The Florida State University
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Stephen Hines
+// Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Unimplemented instructions
+//
+
+output header {{
+ /**
+ * Static instruction class for unimplemented instructions that
+ * cause simulator termination. Note that these are recognized
+ * (legal) instructions that the simulator does not support; the
+ * 'Unknown' class is used for unrecognized/illegal instructions.
+ * This is a leaf class.
+ */
+ class FailUnimplemented : public PowerPCStaticInst
+ {
+ public:
+ /// Constructor
+ FailUnimplemented(const char *_mnemonic, MachInst _machInst)
+ : PowerPCStaticInst(_mnemonic, _machInst, No_OpClass)
+ {
+ // don't call execute() (which panics) if we're on a
+ // speculative path
+ flags[IsNonSpeculative] = true;
+ }
+
+ %(BasicExecDeclare)s
+
+ std::string
+ generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+ };
+
+ /**
+ * Base class for unimplemented instructions that cause a warning
+ * to be printed (but do not terminate simulation). This
+ * implementation is a little screwy in that it will print a
+ * warning for each instance of a particular unimplemented machine
+ * instruction, not just for each unimplemented opcode. Should
+ * probably make the 'warned' flag a static member of the derived
+ * class.
+ */
+ class WarnUnimplemented : public PowerPCStaticInst
+ {
+ private:
+ /// Have we warned on this instruction yet?
+ mutable bool warned;
+
+ public:
+ /// Constructor
+ WarnUnimplemented(const char *_mnemonic, MachInst _machInst)
+ : PowerPCStaticInst(_mnemonic, _machInst, No_OpClass), warned(false)
+ {
+ // don't call execute() (which panics) if we're on a
+ // speculative path
+ flags[IsNonSpeculative] = true;
+ }
+
+ %(BasicExecDeclare)s
+
+ std::string
+ generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+ };
+}};
+
+output decoder {{
+ std::string
+ FailUnimplemented::generateDisassembly(Addr pc,
+ const SymbolTable *symtab) const
+ {
+ return csprintf("%-10s (unimplemented)", mnemonic);
+ }
+
+ std::string
+ WarnUnimplemented::generateDisassembly(Addr pc,
+ const SymbolTable *symtab) const
+ {
+ return csprintf("%-10s (unimplemented)", mnemonic);
+ }
+}};
+
+output exec {{
+ Fault
+ FailUnimplemented::execute(%(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ panic("attempt to execute unimplemented instruction '%s' "
+ "(inst 0x%08x, opcode 0x%x, binary:%s)", mnemonic, machInst, OPCODE,
+ inst2string(machInst));
+ return new UnimplementedOpcodeFault;
+ }
+
+ Fault
+ WarnUnimplemented::execute(%(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ if (!warned) {
+ warn("\tinstruction '%s' unimplemented\n", mnemonic);
+ warned = true;
+ }
+
+ return NoFault;
+ }
+}};
+
+
+def format FailUnimpl() {{
+ iop = InstObjParams(name, 'FailUnimplemented')
+ decode_block = BasicDecodeWithMnemonic.subst(iop)
+}};
+
+def format WarnUnimpl() {{
+ iop = InstObjParams(name, 'WarnUnimplemented')
+ decode_block = BasicDecodeWithMnemonic.subst(iop)
+}};
+
diff --git a/src/arch/powerpc/isa/formats/unknown.isa b/src/arch/powerpc/isa/formats/unknown.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/unknown.isa
@@ -0,0 +1,87 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2007-2008 The Florida State University
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Stephen Hines
+// Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Unknown instructions
+//
+
+output header {{
+ /**
+ * Static instruction class for unknown (illegal) instructions.
+ * These cause simulator termination if they are executed in a
+ * non-speculative mode. This is a leaf class.
+ */
+ class Unknown : public PowerPCStaticInst
+ {
+ public:
+ /// Constructor
+ Unknown(ExtMachInst _machInst)
+ : PowerPCStaticInst("unknown", _machInst, No_OpClass)
+ {
+ // don't call execute() (which panics) if we're on a
+ // speculative path
+ flags[IsNonSpeculative] = true;
+ }
+
+ %(BasicExecDeclare)s
+
+ std::string
+ generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+ };
+}};
+
+output decoder {{
+ std::string
+ Unknown::generateDisassembly(Addr pc, const SymbolTable *symtab) const
+ {
+ return csprintf("%-10s (inst 0x%x, opcode 0x%x, binary:%s)",
+ "unknown", machInst, OPCODE, inst2string(machInst));
+ }
+}};
+
+output exec {{
+ Fault
+ Unknown::execute(%(CPU_exec_context)s *xc,
+ Trace::InstRecord *traceData) const
+ {
+ panic("attempt to execute unknown instruction at %#x"
+ "(inst 0x%08x, opcode 0x%x, binary: %s)",
+ xc->readPC(), machInst, OPCODE, inst2string(machInst));
+ return new UnimplementedOpcodeFault;
+ }
+}};
+
+def format Unknown() {{
+ decode_block = 'return new Unknown(machInst);\n'
+}};
+
diff --git a/src/arch/powerpc/isa/formats/util.isa b/src/arch/powerpc/isa/formats/util.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/formats/util.isa
@@ -0,0 +1,174 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2003-2005 The Regents of The University of Michigan
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Steve Reinhardt
+// Korey Sewell
+// Timothy M. Jones
+
+// Some instructions ignore the contents of Ra if Ra == 0,
+// so check for this.
+def template CheckRaDecode {{
+ {
+ if (RA == 0) {
+ return new %(class_name)sRaZero(machInst);
+ } else {
+ return new %(class_name)s(machInst);
+ }
+ }
+}};
+
+
+// Some instructions have extra behaviour if Rc is set.
+def template CheckRcDecode {{
+ {
+ if (RC31 == 0) {
+ return new %(class_name)s(machInst);
+ } else {
+ return new %(class_name)sRcSet(machInst);
+ }
+ }
+}};
+
+
+// Some instructions have extra behaviour if Rc and OE are set.
+def template CheckRcOeDecode {{
+ {
+ if (RC31 == 0) {
+ if (OE == 0) {
+ return new %(class_name)s(machInst);
+ } else {
+ return new %(class_name)sOeSet(machInst);
+ }
+ } else {
+ if (OE == 0) {
+ return new %(class_name)sRcSet(machInst);
+ } else {
+ return new %(class_name)sRcSetOeSet(machInst);
+ }
+ }
+ }
+}};
+
+// Branch instructions always have two versions, one which sets the link
+// register (LR).
+def template CheckLkDecode {{
+ {
+ if (LK == 0) {
+ return new %(class_name)s(machInst);
+ } else {
+ return new %(class_name)sUpdateLr(machInst);
+ }
+ }
+}};
+
+
+let {{
+
+def LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
+ base_class = 'MemOp',
+ decode_template = BasicDecode, exec_template_base = ''):
+ # Make sure flags are in lists (convert to lists if not).
+ mem_flags = makeList(mem_flags)
+ inst_flags = makeList(inst_flags)
+
+ # add hook to get effective addresses into execution trace output.
+ ea_code += '\nif (traceData) { traceData->setAddr(EA); }\n'
+
+ # Generate InstObjParams for the memory access.
+ iop = InstObjParams(name, Name, base_class,
+ {'ea_code': ea_code,
+ 'memacc_code': memacc_code},
+ inst_flags)
+
+ if mem_flags:
+ s = '\n\tmemAccessFlags = ' + string.join(mem_flags, '|') + ';'
+ iop.constructor += s
+
+ fullExecTemplate = eval(exec_template_base + 'Execute')
+ initiateAccTemplate = eval(exec_template_base + 'InitiateAcc')
+ completeAccTemplate = eval(exec_template_base + 'CompleteAcc')
+
+ # (header_output, decoder_output, decode_block, exec_output)
+ return (LoadStoreDeclare.subst(iop),
+ LoadStoreConstructor.subst(iop),
+ decode_template.subst(iop),
+ fullExecTemplate.subst(iop)
+ + initiateAccTemplate.subst(iop)
+ + completeAccTemplate.subst(iop))
+
+
+# The generic ALU instruction generator. Integer and fp formats calls this
+# to generate the different output sections.
+def GenAluOp(name, Name, base_class, code, inst_flags, decode_template,
+ constructor_template):
+ iop = InstObjParams(name, Name, base_class,
+ {"code": code},
+ inst_flags)
+ header_output = BasicDeclare.subst(iop)
+ exec_output = BasicExecute.subst(iop)
+
+ # We use constructors dependent on the Rc and OE bits being set
+ decoder_output = constructor_template.subst(iop)
+
+ # The decode block defines which version to use
+ decode_block = decode_template.subst(iop)
+ return (header_output, decoder_output, decode_block, exec_output)
+
+}};
+
+
+output header {{
+ std::string
+ inst2string(MachInst machInst);
+}};
+
+output decoder {{
+
+ std::string
+ inst2string(MachInst machInst)
+ {
+ std::string str = "";
+ uint32_t mask = 0x80000000;
+
+ for(int i=0; i < 32; i++) {
+ if ((machInst & mask) == 0) {
+ str += "0";
+ } else {
+ str += "1";
+ }
+
+ mask = mask >> 1;
+ }
+
+ return str;
+ }
+
+}};
+
+
diff --git a/src/arch/powerpc/isa/includes.isa b/src/arch/powerpc/isa/includes.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/includes.isa
@@ -0,0 +1,92 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// Output include file directives.
+//
+
+output header {{
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+
+#include "arch/powerpc/insts/branch.hh"
+#include "arch/powerpc/insts/mem.hh"
+#include "arch/powerpc/insts/integer.hh"
+#include "arch/powerpc/insts/floating.hh"
+#include "arch/powerpc/insts/condition.hh"
+#include "arch/powerpc/insts/misc.hh"
+#include "arch/powerpc/insts/static_inst.hh"
+#include "arch/powerpc/isa_traits.hh"
+#include "cpu/static_inst.hh"
+#include "mem/packet.hh"
+
+using namespace PowerpcISA;
+}};
+
+output decoder {{
+#include <cmath>
+#if defined(linux)
+#include <fenv.h>
+#endif
+
+#include "arch/powerpc/faults.hh"
+#include "arch/powerpc/isa_traits.hh"
+#include "arch/powerpc/utility.hh"
+#include "base/cprintf.hh"
+#include "base/loader/symtab.hh"
+#include "cpu/thread_context.hh"
+
+using namespace PowerpcISA;
+using std::isnan;
+}};
+
+output exec {{
+#include "arch/powerpc/faults.hh"
+#include "arch/powerpc/isa_traits.hh"
+#include "arch/powerpc/utility.hh"
+
+#include <cmath>
+#if defined(linux)
+#include <fenv.h>
+#endif
+
+#include "base/condcodes.hh"
+#include "cpu/base.hh"
+#include "cpu/exetrace.hh"
+#include "mem/packet.hh"
+#include "mem/packet_access.hh"
+#include "sim/sim_exit.hh"
+
+using namespace PowerpcISA;
+using std::isnan;
+}};
+
diff --git a/src/arch/powerpc/isa/main.isa b/src/arch/powerpc/isa/main.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/main.isa
@@ -0,0 +1,57 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+////////////////////////////////////////////////////////////////////
+//
+// PowerPC ISA description file.
+//
+////////////////////////////////////////////////////////////////////
+
+//Include the C++ include directives
+##include "includes.isa"
+
+////////////////////////////////////////////////////////////////////
+//
+// Namespace statement. Everything below this line will be in the
+// PowerpcISAInst namespace.
+//
+namespace PowerpcISA;
+
+//Include the bitfield definitions
+##include "bitfields.isa"
+
+//Include the operand_types and operand definitions
+##include "operands.isa"
+
+//Include the definitions for the instruction formats
+##include "formats/formats.isa"
+
+//Include the decoder definition
+##include "decoder.isa"
diff --git a/src/arch/powerpc/isa/operands.isa b/src/arch/powerpc/isa/operands.isa
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa/operands.isa
@@ -0,0 +1,79 @@
+// -*- mode:c++ -*-
+
+// Copyright (c) 2009 The University of Edinburgh
+// 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: Timothy M. Jones
+
+def operand_types {{
+ 'sb' : ('signed int', 8),
+ 'ub' : ('unsigned int', 8),
+ 'sh' : ('signed int', 16),
+ 'uh' : ('unsigned int', 16),
+ 'sw' : ('signed int', 32),
+ 'uw' : ('unsigned int', 32),
+ 'sq' : ('signed int', 64),
+ 'uq' : ('unsigned int', 64),
+ 'sf' : ('float', 32),
+ 'df' : ('float', 64)
+}};
+
+def operands {{
+ # General Purpose Integer Reg Operands
+ 'Ra': ('IntReg', 'uw', 'RA', 'IsInteger', 1),
+ 'Rb': ('IntReg', 'uw', 'RB', 'IsInteger', 2),
+ 'Rs': ('IntReg', 'uw', 'RS', 'IsInteger', 3),
+ 'Rt': ('IntReg', 'uw', 'RT', 'IsInteger', 4),
+
+ # General Purpose Floating Point Reg Operands
+ 'Fa': ('FloatReg', 'df', 'FRA', 'IsFloating', 1),
+ 'Fb': ('FloatReg', 'df', 'FRB', 'IsFloating', 2),
+ 'Fc': ('FloatReg', 'df', 'FRC', 'IsFloating', 3),
+ 'Fs': ('FloatReg', 'df', 'FRS', 'IsFloating', 4),
+ 'Ft': ('FloatReg', 'df', 'FRT', 'IsFloating', 5),
+
+ # Memory Operand
+ 'Mem': ('Mem', 'uw', None, ('IsMemRef', 'IsLoad', 'IsStore'), 8),
+
+ # Program counter and next
+ 'PC': ('PC', 'uw', None, (None, None, 'IsControl'), 9),
+ 'NPC': ('NPC', 'uw', None, (None, None, 'IsControl'), 9),
+
+ # Control registers
+ 'CR': ('ControlReg', 'uw', 0, 'IsInteger', 9),
+ 'LR': ('ControlReg', 'uw', 1, 'IsInteger', 9),
+ 'CTR': ('ControlReg', 'uw', 2, 'IsInteger', 9),
+ 'XER': ('ControlReg', 'uw', 3, 'IsInteger', 9),
+ 'FPSCR': ('ControlReg', 'uw', 4, 'IsFloating', 9),
+
+ # Registers for linked loads and stores
+ 'Rsv': ('ControlReg', 'uw', 5, 'IsInteger', 9),
+ 'RsvLen': ('ControlReg', 'uw', 6, 'IsInteger', 9),
+ 'RsvAddr': ('ControlReg', 'uw', 7, 'IsInteger', 9),
+
+ # Hack for non-full-system syscall emulation
+ 'R0': ('IntReg', 'uw', '0', None, 1),
+}};
diff --git a/src/arch/powerpc/isa_traits.hh b/src/arch/powerpc/isa_traits.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/isa_traits.hh
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ * Gabe Black
+ * Stephen Hines
+ */
+
+#ifndef __ARCH_POWERPC_ISA_TRAITS_HH__
+#define __ARCH_POWERPC_ISA_TRAITS_HH__
+
+#include "arch/powerpc/types.hh"
+#include "base/types.hh"
+
+namespace BigEndianGuest {};
+
+class StaticInstPtr;
+
+namespace PowerpcISA
+{
+
+using namespace BigEndianGuest;
+
+StaticInstPtr decodeInst(ExtMachInst);
+
+// POWERPC DOES NOT have a delay slot
+#define ISA_HAS_DELAY_SLOT 0
+
+const Addr PageShift = 12;
+const Addr PageBytes = ULL(1) << PageShift;
+const Addr Page_Mask = ~(PageBytes - 1);
+const Addr PageOffset = PageBytes - 1;
+
+const Addr PteShift = 3;
+const Addr NPtePageShift = PageShift - PteShift;
+const Addr NPtePage = ULL(1) << NPtePageShift;
+const Addr PteMask = NPtePage - 1;
+
+const int LogVMPageSize = 12; // 4K bytes
+const int VMPageSize = (1 << LogVMPageSize);
+
+const int MachineBytes = 4;
+
+// This is ori 0, 0, 0
+const ExtMachInst NoopMachInst = 0x60000000;
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_ISA_TRAITS_HH__
diff --git a/src/arch/powerpc/linux/linux.cc b/src/arch/powerpc/linux/linux.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/linux/linux.cc
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#include "arch/powerpc/linux/linux.hh"
+
+#include <fcntl.h>
+
+// open(2) flags translation table
+OpenFlagTransTable PowerPCLinux::openFlagTable[] = {
+#ifdef _MSC_VER
+ { PowerPCLinux::TGT_O_RDONLY, _O_RDONLY },
+ { PowerPCLinux::TGT_O_WRONLY, _O_WRONLY },
+ { PowerPCLinux::TGT_O_RDWR, _O_RDWR },
+ { PowerPCLinux::TGT_O_APPEND, _O_APPEND },
+ { PowerPCLinux::TGT_O_CREAT, _O_CREAT },
+ { PowerPCLinux::TGT_O_TRUNC, _O_TRUNC },
+ { PowerPCLinux::TGT_O_EXCL, _O_EXCL },
+#ifdef _O_NONBLOCK
+ { PowerPCLinux::TGT_O_NONBLOCK, _O_NONBLOCK },
+#endif
+#ifdef _O_NOCTTY
+ { PowerPCLinux::TGT_O_NOCTTY, _O_NOCTTY },
+#endif
+#ifdef _O_SYNC
+ { PowerPCLinux::TGT_O_SYNC, _O_SYNC },
+#endif
+#ifdef _O_LARGEFILE
+ { PowerPCLinux::TGT_O_LARGEFILE, _O_LARGEFILE },
+#endif
+#else /* !_MSC_VER */
+ { PowerPCLinux::TGT_O_RDONLY, O_RDONLY },
+ { PowerPCLinux::TGT_O_WRONLY, O_WRONLY },
+ { PowerPCLinux::TGT_O_RDWR, O_RDWR },
+ { PowerPCLinux::TGT_O_APPEND, O_APPEND },
+ { PowerPCLinux::TGT_O_CREAT, O_CREAT },
+ { PowerPCLinux::TGT_O_TRUNC, O_TRUNC },
+ { PowerPCLinux::TGT_O_EXCL, O_EXCL },
+ { PowerPCLinux::TGT_O_NONBLOCK, O_NONBLOCK },
+ { PowerPCLinux::TGT_O_NOCTTY, O_NOCTTY },
+#ifdef O_SYNC
+ { PowerPCLinux::TGT_O_SYNC, O_SYNC },
+#endif
+#ifdef O_LARGEFILE
+ { PowerPCLinux::TGT_O_LARGEFILE, O_LARGEFILE },
+#endif
+#endif /* _MSC_VER */
+};
+
+const int PowerPCLinux::NUM_OPEN_FLAGS =
+ (sizeof(PowerPCLinux::openFlagTable)/sizeof(PowerPCLinux::openFlagTable[0]));
+
diff --git a/src/arch/powerpc/linux/linux.hh b/src/arch/powerpc/linux/linux.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/linux/linux.hh
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_LINUX_LINUX_HH__
+#define __ARCH_POWERPC_LINUX_LINUX_HH__
+
+#include "kern/linux/linux.hh"
+
+/*
+ * This works for a 2.6.15 kernel.
+ */
+
+class PowerPCLinux : public Linux
+{
+ public:
+
+ typedef int32_t time_t;
+
+ typedef struct {
+ uint64_t st_dev;
+ uint32_t __pad1;
+ uint32_t st_ino;
+ uint32_t st_mode;
+ uint32_t st_nlink;
+ uint32_t st_uid;
+ uint32_t st_gid;
+ uint64_t st_rdev;
+ uint32_t __pad2;
+ uint32_t st_size;
+ uint32_t st_blksize;
+ uint32_t st_blocks;
+ uint32_t st_atimeX;
+ uint32_t st_atime_nsec;
+ uint32_t st_mtimeX;
+ uint32_t st_mtime_nsec;
+ uint32_t st_ctimeX;
+ uint32_t st_ctime_nsec;
+ uint32_t __unused4;
+ uint32_t __unused5;
+ } tgt_stat;
+
+ typedef struct {
+ uint64_t st_dev;
+ uint64_t st_ino;
+ uint32_t st_mode;
+ uint32_t st_nlink;
+ uint32_t st_uid;
+ uint32_t st_gid;
+ uint64_t st_rdev;
+ uint64_t __pad2;
+ uint64_t st_size;
+ uint32_t st_blksize;
+ uint32_t __blksize_pad;
+ uint64_t st_blocks;
+ uint32_t st_atimeX;
+ uint32_t st_atime_nsec;
+ uint32_t st_mtimeX;
+ uint32_t st_mtime_nsec;
+ uint32_t st_ctimeX;
+ uint32_t st_ctime_nsec;
+ uint32_t __unused4;
+ uint32_t __unused5;
+ } tgt_stat64;
+
+ /// For times().
+ struct tms {
+ int32_t tms_utime; //!< user time
+ int32_t tms_stime; //!< system time
+ int32_t tms_cutime; //!< user time of children
+ int32_t tms_cstime; //!< system time of children
+ };
+
+ /// This table maps the target open() flags to the corresponding
+ /// host open() flags.
+ static OpenFlagTransTable openFlagTable[];
+
+ /// Number of entries in openFlagTable[].
+ static const int NUM_OPEN_FLAGS;
+
+ //@{
+ /// open(2) flag values.
+ static const int TGT_O_RDONLY = 00000000; //!< O_RDONLY
+ static const int TGT_O_WRONLY = 00000001; //!< O_WRONLY
+ static const int TGT_O_RDWR = 00000002; //!< O_RDWR
+ static const int TGT_O_CREAT = 00000100; //!< O_CREAT
+ static const int TGT_O_EXCL = 00000200; //!< O_EXCL
+ static const int TGT_O_NOCTTY = 00000400; //!< O_NOCTTY
+ static const int TGT_O_TRUNC = 00001000; //!< O_TRUNC
+ static const int TGT_O_APPEND = 00002000; //!< O_APPEND
+ static const int TGT_O_NONBLOCK = 00004000; //!< O_NONBLOCK
+ static const int TGT_O_SYNC = 00010000; //!< O_SYNC
+ static const int TGT_FASYNC = 00020000; //!< FASYNC
+ static const int TGT_O_DIRECTORY = 00040000; //!< O_DIRECTORY
+ static const int TGT_O_NOFOLLOW = 00100000; //!< O_NOFOLLOW
+ static const int TGT_O_LARGEFILE = 00200000; //!< O_LARGEFILE
+ static const int TGT_O_DIRECT = 00400000; //!< O_DIRECT
+ static const int TGT_O_NOATIME = 01000000; //!< O_NOATIME
+ //@}
+
+ /// For mmap().
+ static const unsigned TGT_MAP_ANONYMOUS = 0x800;
+
+ //@{
+ /// ioctl() command codes.
+ static const unsigned TIOCGETP_ = 0x40067408;
+ static const unsigned TIOCSETP_ = 0x80067409;
+ static const unsigned TIOCSETN_ = 0x8006740a;
+ static const unsigned TIOCSETC_ = 0x80067411;
+ static const unsigned TIOCGETC_ = 0x40067412;
+ static const unsigned FIONREAD_ = 0x4004667f;
+ static const unsigned TIOCISATTY_ = 0x2000745e;
+ static const unsigned TIOCGETS_ = 0x402c7413;
+ static const unsigned TIOCGETA_ = 0x40147417;
+ //@}
+};
+
+#endif // __ARCH_POWERPC_LINUX_LINUX_HH__
diff --git a/src/arch/powerpc/linux/process.cc b/src/arch/powerpc/linux/process.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/linux/process.cc
@@ -0,0 +1,455 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Korey Sewell
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#include "arch/powerpc/linux/linux.hh"
+#include "arch/powerpc/linux/process.hh"
+#include "arch/powerpc/isa_traits.hh"
+
+#include "base/trace.hh"
+#include "cpu/thread_context.hh"
+#include "kern/linux/linux.hh"
+
+#include "sim/process.hh"
+#include "sim/syscall_emul.hh"
+#include "sim/system.hh"
+
+using namespace std;
+using namespace PowerpcISA;
+
+/// Target uname() handler.
+static SyscallReturn
+unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, 0));
+
+ strcpy(name->sysname, "Linux");
+ strcpy(name->nodename, "m5.eecs.umich.edu");
+ strcpy(name->release, "2.6.16.19");
+ strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
+ strcpy(name->machine, "powerpc");
+
+ name.copyOut(tc->getMemPort());
+ return 0;
+}
+
+SyscallDesc PowerPCLinuxProcess::syscallDescs[] = {
+ /* 0 */ SyscallDesc("syscall", unimplementedFunc),
+ /* 1 */ SyscallDesc("exit", exitFunc),
+ /* 2 */ SyscallDesc("fork", unimplementedFunc),
+ /* 3 */ SyscallDesc("read", readFunc),
+ /* 4 */ SyscallDesc("write", writeFunc),
+ /* 5 */ SyscallDesc("open", openFunc<PowerPCLinux>),
+ /* 6 */ SyscallDesc("close", closeFunc),
+ /* 7 */ SyscallDesc("waitpid", unimplementedFunc), //???
+ /* 8 */ SyscallDesc("creat", unimplementedFunc),
+ /* 9 */ SyscallDesc("link", unimplementedFunc),
+ /* 10 */ SyscallDesc("unlink", unlinkFunc),
+ /* 11 */ SyscallDesc("execve", unimplementedFunc),
+ /* 12 */ SyscallDesc("chdir", unimplementedFunc),
+ /* 13 */ SyscallDesc("time", unimplementedFunc),
+ /* 14 */ SyscallDesc("mknod", unimplementedFunc),
+ /* 15 */ SyscallDesc("chmod", chmodFunc<PowerPCLinux>),
+ /* 16 */ SyscallDesc("lchown", chownFunc),
+ /* 17 */ SyscallDesc("break", brkFunc), //???
+ /* 18 */ SyscallDesc("unused#18", unimplementedFunc), //???
+ /* 19 */ SyscallDesc("lseek", lseekFunc),
+ /* 20 */ SyscallDesc("getpid", getpidFunc),
+ /* 21 */ SyscallDesc("mount", unimplementedFunc),
+ /* 22 */ SyscallDesc("umount", unimplementedFunc),
+ /* 23 */ SyscallDesc("setuid", setuidFunc),
+ /* 24 */ SyscallDesc("getuid", getuidFunc),
+ /* 25 */ SyscallDesc("stime", unimplementedFunc),
+ /* 26 */ SyscallDesc("ptrace", unimplementedFunc),
+ /* 27 */ SyscallDesc("alarm", unimplementedFunc),
+ /* 28 */ SyscallDesc("unused#28", unimplementedFunc),
+ /* 29 */ SyscallDesc("pause", unimplementedFunc),
+ /* 30 */ SyscallDesc("utime", unimplementedFunc),
+ /* 31 */ SyscallDesc("stty", unimplementedFunc),
+ /* 32 */ SyscallDesc("gtty", unimplementedFunc),
+ /* 33 */ SyscallDesc("access", unimplementedFunc),
+ /* 34 */ SyscallDesc("nice", unimplementedFunc),
+ /* 35 */ SyscallDesc("ftime", unimplementedFunc),
+ /* 36 */ SyscallDesc("sync", unimplementedFunc),
+ /* 37 */ SyscallDesc("kill", ignoreFunc),
+ /* 38 */ SyscallDesc("rename", renameFunc),
+ /* 39 */ SyscallDesc("mkdir", unimplementedFunc),
+ /* 40 */ SyscallDesc("rmdir", unimplementedFunc),
+ /* 41 */ SyscallDesc("dup", dupFunc),
+ /* 42 */ SyscallDesc("pipe", unimplementedFunc),
+ /* 43 */ SyscallDesc("times", ignoreFunc),
+ /* 44 */ SyscallDesc("prof", unimplementedFunc),
+ /* 45 */ SyscallDesc("brk", brkFunc),
+ /* 46 */ SyscallDesc("setgid", unimplementedFunc),
+ /* 47 */ SyscallDesc("getgid", getgidFunc),
+ /* 48 */ SyscallDesc("signal", ignoreFunc),
+ /* 49 */ SyscallDesc("geteuid", geteuidFunc),
+ /* 50 */ SyscallDesc("getegid", getegidFunc),
+ /* 51 */ SyscallDesc("acct", unimplementedFunc),
+ /* 52 */ SyscallDesc("umount2", unimplementedFunc),
+ /* 53 */ SyscallDesc("lock", unimplementedFunc),
+ /* 54 */ SyscallDesc("ioctl", ioctlFunc<PowerPCLinux>),
+ /* 55 */ SyscallDesc("fcntl", fcntlFunc),
+ /* 56 */ SyscallDesc("mpx", unimplementedFunc),
+ /* 57 */ SyscallDesc("setpgid", unimplementedFunc),
+ /* 58 */ SyscallDesc("ulimit", unimplementedFunc),
+ /* 59 */ SyscallDesc("unused#59", unimplementedFunc),
+ /* 60 */ SyscallDesc("umask", umaskFunc),
+ /* 61 */ SyscallDesc("chroot", unimplementedFunc),
+ /* 62 */ SyscallDesc("ustat", unimplementedFunc),
+ /* 63 */ SyscallDesc("dup2", unimplementedFunc),
+ /* 64 */ SyscallDesc("getppid", getpagesizeFunc),
+ /* 65 */ SyscallDesc("getpgrp", unimplementedFunc),
+ /* 66 */ SyscallDesc("setsid", unimplementedFunc),
+ /* 67 */ SyscallDesc("sigaction",unimplementedFunc),
+ /* 68 */ SyscallDesc("sgetmask", unimplementedFunc),
+ /* 69 */ SyscallDesc("ssetmask", unimplementedFunc),
+ /* 70 */ SyscallDesc("setreuid", unimplementedFunc),
+ /* 71 */ SyscallDesc("setregid", unimplementedFunc),
+ /* 72 */ SyscallDesc("sigsuspend", unimplementedFunc),
+ /* 73 */ SyscallDesc("sigpending", unimplementedFunc),
+ /* 74 */ SyscallDesc("sethostname", ignoreFunc),
+ /* 75 */ SyscallDesc("setrlimit", ignoreFunc),
+ /* 76 */ SyscallDesc("getrlimit", unimplementedFunc),
+ /* 77 */ SyscallDesc("getrusage", ignoreFunc),
+ /* 78 */ SyscallDesc("gettimeofday", unimplementedFunc),
+ /* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
+ /* 80 */ SyscallDesc("getgroups", unimplementedFunc),
+ /* 81 */ SyscallDesc("setgroups", unimplementedFunc),
+ /* 82 */ SyscallDesc("reserved#82", unimplementedFunc),
+ /* 83 */ SyscallDesc("symlink", unimplementedFunc),
+ /* 84 */ SyscallDesc("unused#84", unimplementedFunc),
+ /* 85 */ SyscallDesc("readlink", unimplementedFunc),
+ /* 86 */ SyscallDesc("uselib", unimplementedFunc),
+ /* 87 */ SyscallDesc("swapon", gethostnameFunc),
+ /* 88 */ SyscallDesc("reboot", unimplementedFunc),
+ /* 89 */ SyscallDesc("readdir", unimplementedFunc),
+ /* 90 */ SyscallDesc("mmap", mmapFunc<PowerPCLinux>),
+ /* 91 */ SyscallDesc("munmap",munmapFunc),
+ /* 92 */ SyscallDesc("truncate", truncateFunc),
+ /* 93 */ SyscallDesc("ftruncate", ftruncateFunc),
+ /* 94 */ SyscallDesc("fchmod", unimplementedFunc),
+ /* 95 */ SyscallDesc("fchown", unimplementedFunc),
+ /* 96 */ SyscallDesc("getpriority", unimplementedFunc),
+ /* 97 */ SyscallDesc("setpriority", unimplementedFunc),
+ /* 98 */ SyscallDesc("profil", unimplementedFunc),
+ /* 99 */ SyscallDesc("statfs", unimplementedFunc),
+ /* 100 */ SyscallDesc("fstatfs", unimplementedFunc),
+ /* 101 */ SyscallDesc("ioperm", unimplementedFunc),
+ /* 102 */ SyscallDesc("socketcall", unimplementedFunc),
+ /* 103 */ SyscallDesc("syslog", unimplementedFunc),
+ /* 104 */ SyscallDesc("setitimer", unimplementedFunc),
+ /* 105 */ SyscallDesc("getitimer", unimplementedFunc),
+ /* 106 */ SyscallDesc("stat", statFunc<PowerPCLinux>),
+ /* 107 */ SyscallDesc("lstat", unimplementedFunc),
+ /* 108 */ SyscallDesc("fstat", fstatFunc<PowerPCLinux>),
+ /* 109 */ SyscallDesc("unused#109", unimplementedFunc),
+ /* 110 */ SyscallDesc("iopl", unimplementedFunc),
+ /* 111 */ SyscallDesc("vhangup", unimplementedFunc),
+ /* 112 */ SyscallDesc("idle", ignoreFunc),
+ /* 113 */ SyscallDesc("vm86", unimplementedFunc),
+ /* 114 */ SyscallDesc("wait4", unimplementedFunc),
+ /* 115 */ SyscallDesc("swapoff", unimplementedFunc),
+ /* 116 */ SyscallDesc("sysinfo", unimplementedFunc),
+ /* 117 */ SyscallDesc("ipc", unimplementedFunc),
+ /* 118 */ SyscallDesc("fsync", unimplementedFunc),
+ /* 119 */ SyscallDesc("sigreturn", unimplementedFunc),
+ /* 120 */ SyscallDesc("clone", unimplementedFunc),
+ /* 121 */ SyscallDesc("setdomainname", unimplementedFunc),
+ /* 122 */ SyscallDesc("uname", unameFunc),
+ /* 123 */ SyscallDesc("modify_ldt", unimplementedFunc),
+ /* 124 */ SyscallDesc("adjtimex", unimplementedFunc),
+ /* 125 */ SyscallDesc("mprotect", ignoreFunc),
+ /* 126 */ SyscallDesc("sigprocmask", unimplementedFunc),
+ /* 127 */ SyscallDesc("create_module", unimplementedFunc),
+ /* 128 */ SyscallDesc("init_module", unimplementedFunc),
+ /* 129 */ SyscallDesc("delete_module", unimplementedFunc),
+ /* 130 */ SyscallDesc("get_kernel_syms", unimplementedFunc),
+ /* 131 */ SyscallDesc("quotactl", unimplementedFunc),
+ /* 132 */ SyscallDesc("getpgid", unimplementedFunc),
+ /* 133 */ SyscallDesc("fchdir", unimplementedFunc),
+ /* 134 */ SyscallDesc("bdflush", unimplementedFunc),
+ /* 135 */ SyscallDesc("sysfs", unimplementedFunc),
+ /* 136 */ SyscallDesc("personality", unimplementedFunc),
+ /* 137 */ SyscallDesc("afs_syscall", unimplementedFunc),
+ /* 138 */ SyscallDesc("setfsuid", unimplementedFunc),
+ /* 139 */ SyscallDesc("setfsgid", unimplementedFunc),
+ /* 140 */ SyscallDesc("llseek", _llseekFunc),
+ /* 141 */ SyscallDesc("getdents", unimplementedFunc),
+ /* 142 */ SyscallDesc("newselect", unimplementedFunc),
+ /* 143 */ SyscallDesc("flock", unimplementedFunc),
+ /* 144 */ SyscallDesc("msync", unimplementedFunc),
+ /* 145 */ SyscallDesc("readv", unimplementedFunc),
+ /* 146 */ SyscallDesc("writev", writevFunc<PowerPCLinux>),
+ /* 147 */ SyscallDesc("getsid", unimplementedFunc),
+ /* 148 */ SyscallDesc("fdatasync", unimplementedFunc),
+ /* 149 */ SyscallDesc("sysctl", unimplementedFunc),
+ /* 150 */ SyscallDesc("mlock", unimplementedFunc),
+ /* 151 */ SyscallDesc("munlock", unimplementedFunc),
+ /* 152 */ SyscallDesc("mlockall", unimplementedFunc),
+ /* 153 */ SyscallDesc("munlockall", unimplementedFunc),
+ /* 154 */ SyscallDesc("sched_setparam", unimplementedFunc),
+ /* 155 */ SyscallDesc("sched_getparam", unimplementedFunc),
+ /* 156 */ SyscallDesc("sched_setscheduler", unimplementedFunc),
+ /* 157 */ SyscallDesc("sched_getscheduler", unimplementedFunc),
+ /* 158 */ SyscallDesc("sched_yield", unimplementedFunc),
+ /* 159 */ SyscallDesc("sched_get_priority_max", unimplementedFunc),
+ /* 160 */ SyscallDesc("sched_get_priority_min", unimplementedFunc),
+ /* 161 */ SyscallDesc("sched_rr_get_interval", unimplementedFunc),
+ /* 162 */ SyscallDesc("nanosleep", unimplementedFunc),
+ /* 163 */ SyscallDesc("mremap", unimplementedFunc),
+ /* 164 */ SyscallDesc("setresuid", unimplementedFunc),
+ /* 165 */ SyscallDesc("getresuid", unimplementedFunc),
+ /* 166 */ SyscallDesc("vm862", unimplementedFunc),
+ /* 167 */ SyscallDesc("query_module", unimplementedFunc),
+ /* 168 */ SyscallDesc("poll", unimplementedFunc),
+ /* 169 */ SyscallDesc("nfsservctl", unimplementedFunc),
+ /* 170 */ SyscallDesc("setresgid", unimplementedFunc),
+ /* 171 */ SyscallDesc("getresgid", unimplementedFunc),
+ /* 172 */ SyscallDesc("prctl", unimplementedFunc),
+ /* 173 */ SyscallDesc("rt_sigaction", ignoreFunc),
+ /* 174 */ SyscallDesc("rt_sigprocmask", unimplementedFunc),
+ /* 175 */ SyscallDesc("unknown#175", unimplementedFunc),
+ /* 176 */ SyscallDesc("rt_sigpending", unimplementedFunc),
+ /* 177 */ SyscallDesc("rt_sigtimedwait", unimplementedFunc),
+ /* 178 */ SyscallDesc("rt_sigqueueinfo", ignoreFunc),
+ /* 179 */ SyscallDesc("rt_sigsuspend", unimplementedFunc),
+ /* 180 */ SyscallDesc("pread64", unimplementedFunc),
+ /* 181 */ SyscallDesc("pwrite64", unimplementedFunc),
+ /* 182 */ SyscallDesc("chown", unimplementedFunc),
+ /* 183 */ SyscallDesc("getcwd", unimplementedFunc),
+ /* 184 */ SyscallDesc("capget", unimplementedFunc),
+ /* 185 */ SyscallDesc("capset", unimplementedFunc),
+ /* 186 */ SyscallDesc("sigaltstack", unimplementedFunc),
+ /* 187 */ SyscallDesc("sendfile", unimplementedFunc),
+ /* 188 */ SyscallDesc("getpmsg", unimplementedFunc),
+ /* 189 */ SyscallDesc("putpmsg", unimplementedFunc),
+ /* 190 */ SyscallDesc("ugetrlimit", ignoreFunc),
+ /* 191 */ SyscallDesc("getrlimit", unimplementedFunc),
+ /* 192 */ SyscallDesc("mmap2", mmapFunc<PowerPCLinux>),
+ /* 193 */ SyscallDesc("truncate64", unimplementedFunc),
+ /* 194 */ SyscallDesc("ftruncate64", unimplementedFunc),
+ /* 195 */ SyscallDesc("stat64", stat64Func<PowerPCLinux>),
+ /* 196 */ SyscallDesc("lstat64", lstat64Func<PowerPCLinux>),
+ /* 197 */ SyscallDesc("fstat64", fstat64Func<PowerPCLinux>),
+ /* 198 */ SyscallDesc("lchown", unimplementedFunc),
+ /* 199 */ SyscallDesc("getuid", getuidFunc),
+ /* 200 */ SyscallDesc("getgid", getgidFunc),
+ /* 201 */ SyscallDesc("geteuid", geteuidFunc),
+ /* 202 */ SyscallDesc("getegid", getegidFunc),
+ /* 203 */ SyscallDesc("setreuid", unimplementedFunc),
+ /* 204 */ SyscallDesc("fcntl64", fcntl64Func),
+ /* 205 */ SyscallDesc("getgroups", unimplementedFunc),
+ /* 206 */ SyscallDesc("setgroups", unimplementedFunc),
+ /* 207 */ SyscallDesc("fchown", unimplementedFunc),
+ /* 208 */ SyscallDesc("setresuid", unimplementedFunc),
+ /* 209 */ SyscallDesc("getresuid", unimplementedFunc),
+ /* 210 */ SyscallDesc("setresgid", unimplementedFunc),
+ /* 211 */ SyscallDesc("getresgid", unimplementedFunc),
+ /* 212 */ SyscallDesc("chown", unimplementedFunc),
+ /* 213 */ SyscallDesc("setuid", unimplementedFunc),
+ /* 214 */ SyscallDesc("setgid", unimplementedFunc),
+ /* 215 */ SyscallDesc("setfsuid", unimplementedFunc),
+ /* 216 */ SyscallDesc("setfsgid", unimplementedFunc),
+ /* 217 */ SyscallDesc("getdents64", unimplementedFunc),
+ /* 218 */ SyscallDesc("pivot_root", unimplementedFunc),
+ /* 219 */ SyscallDesc("mincore", unimplementedFunc),
+ /* 220 */ SyscallDesc("madvise", unimplementedFunc),
+ /* 221 */ SyscallDesc("unknown#221", unimplementedFunc),
+ /* 222 */ SyscallDesc("tux", unimplementedFunc),
+ /* 223 */ SyscallDesc("unknown#223", unimplementedFunc),
+ /* 224 */ SyscallDesc("gettid", unimplementedFunc),
+ /* 225 */ SyscallDesc("readahead", unimplementedFunc),
+ /* 226 */ SyscallDesc("setxattr", unimplementedFunc),
+ /* 227 */ SyscallDesc("lsetxattr", unimplementedFunc),
+ /* 228 */ SyscallDesc("fsetxattr", unimplementedFunc),
+ /* 229 */ SyscallDesc("getxattr", unimplementedFunc),
+ /* 230 */ SyscallDesc("lgetxattr", unimplementedFunc),
+ /* 231 */ SyscallDesc("fgetxattr", unimplementedFunc),
+ /* 232 */ SyscallDesc("listxattr", unimplementedFunc),
+ /* 233 */ SyscallDesc("llistxattr", unimplementedFunc),
+ /* 234 */ SyscallDesc("exit_group", exitGroupFunc),
+ /* 235 */ SyscallDesc("removexattr", unimplementedFunc),
+ /* 236 */ SyscallDesc("lremovexattr", unimplementedFunc),
+ /* 237 */ SyscallDesc("fremovexattr", unimplementedFunc),
+ /* 238 */ SyscallDesc("tkill", unimplementedFunc),
+ /* 239 */ SyscallDesc("sendfile64", unimplementedFunc),
+ /* 240 */ SyscallDesc("futex", unimplementedFunc),
+ /* 241 */ SyscallDesc("sched_setaffinity", unimplementedFunc),
+ /* 242 */ SyscallDesc("sched_getaffinity", unimplementedFunc),
+ /* 243 */ SyscallDesc("io_setup", unimplementedFunc),
+ /* 244 */ SyscallDesc("io_destory", unimplementedFunc),
+ /* 245 */ SyscallDesc("io_getevents", unimplementedFunc),
+ /* 246 */ SyscallDesc("io_submit", unimplementedFunc),
+ /* 247 */ SyscallDesc("io_cancel", unimplementedFunc),
+ /* 248 */ SyscallDesc("unknown#248", unimplementedFunc),
+ /* 249 */ SyscallDesc("lookup_dcookie", unimplementedFunc),
+ /* 250 */ SyscallDesc("epoll_create", unimplementedFunc),
+ /* 251 */ SyscallDesc("epoll_ctl", unimplementedFunc),
+ /* 252 */ SyscallDesc("epoll_wait", unimplementedFunc),
+ /* 253 */ SyscallDesc("remap_file_pages", unimplementedFunc),
+ /* 254 */ SyscallDesc("set_thread_area", unimplementedFunc),
+ /* 255 */ SyscallDesc("get_thread_area", unimplementedFunc),
+ /* 256 */ SyscallDesc("set_tid_address", unimplementedFunc),
+ /* 257 */ SyscallDesc("timer_create", unimplementedFunc),
+ /* 258 */ SyscallDesc("timer_settime", unimplementedFunc),
+ /* 259 */ SyscallDesc("timer_gettime", unimplementedFunc),
+ /* 260 */ SyscallDesc("timer_getoverrun", unimplementedFunc),
+ /* 261 */ SyscallDesc("timer_delete", unimplementedFunc),
+ /* 262 */ SyscallDesc("clock_settime", unimplementedFunc),
+ /* 263 */ SyscallDesc("clock_gettime", unimplementedFunc),
+ /* 264 */ SyscallDesc("clock_getres", unimplementedFunc),
+ /* 265 */ SyscallDesc("clock_nanosleep", unimplementedFunc),
+ /* 266 */ SyscallDesc("statfs64", unimplementedFunc),
+ /* 267 */ SyscallDesc("fstatfs64", unimplementedFunc),
+ /* 268 */ SyscallDesc("tgkill", unimplementedFunc),
+ /* 269 */ SyscallDesc("utimes", unimplementedFunc),
+ /* 270 */ SyscallDesc("arm_fadvise64_64", unimplementedFunc),
+ /* 271 */ SyscallDesc("pciconfig_iobase", unimplementedFunc),
+ /* 272 */ SyscallDesc("pciconfig_read", unimplementedFunc),
+ /* 273 */ SyscallDesc("pciconfig_write", unimplementedFunc),
+ /* 274 */ SyscallDesc("mq_open", unimplementedFunc),
+ /* 275 */ SyscallDesc("mq_unlink", unimplementedFunc),
+ /* 276 */ SyscallDesc("mq_timedsend", unimplementedFunc),
+ /* 277 */ SyscallDesc("mq_timedreceive", unimplementedFunc),
+ /* 278 */ SyscallDesc("mq_notify", unimplementedFunc),
+ /* 279 */ SyscallDesc("mq_getsetattr", unimplementedFunc),
+ /* 280 */ SyscallDesc("waitid", unimplementedFunc),
+ /* 281 */ SyscallDesc("socket", unimplementedFunc),
+ /* 282 */ SyscallDesc("bind", unimplementedFunc),
+ /* 283 */ SyscallDesc("connect", unimplementedFunc),
+ /* 284 */ SyscallDesc("listen", unimplementedFunc),
+ /* 285 */ SyscallDesc("accept", unimplementedFunc),
+ /* 286 */ SyscallDesc("getsockname", unimplementedFunc),
+ /* 287 */ SyscallDesc("getpeername", unimplementedFunc),
+ /* 288 */ SyscallDesc("socketpair", unimplementedFunc),
+ /* 289 */ SyscallDesc("send", unimplementedFunc),
+ /* 290 */ SyscallDesc("sendto", unimplementedFunc),
+ /* 291 */ SyscallDesc("recv", unimplementedFunc),
+ /* 292 */ SyscallDesc("recvfrom", unimplementedFunc),
+ /* 293 */ SyscallDesc("shutdown", unimplementedFunc),
+ /* 294 */ SyscallDesc("setsockopt", unimplementedFunc),
+ /* 295 */ SyscallDesc("getsockopt", unimplementedFunc),
+ /* 296 */ SyscallDesc("sendmsg", unimplementedFunc),
+ /* 297 */ SyscallDesc("rcvmsg", unimplementedFunc),
+ /* 298 */ SyscallDesc("semop", unimplementedFunc),
+ /* 299 */ SyscallDesc("semget", unimplementedFunc),
+ /* 300 */ SyscallDesc("semctl", unimplementedFunc),
+ /* 301 */ SyscallDesc("msgsend", unimplementedFunc),
+ /* 302 */ SyscallDesc("msgrcv", unimplementedFunc),
+ /* 303 */ SyscallDesc("msgget", unimplementedFunc),
+ /* 304 */ SyscallDesc("msgctl", unimplementedFunc),
+ /* 305 */ SyscallDesc("shmat", unimplementedFunc),
+ /* 306 */ SyscallDesc("shmdt", unimplementedFunc),
+ /* 307 */ SyscallDesc("shmget", unimplementedFunc),
+ /* 308 */ SyscallDesc("shmctl", unimplementedFunc),
+ /* 309 */ SyscallDesc("add_key", unimplementedFunc),
+ /* 310 */ SyscallDesc("request_key", unimplementedFunc),
+ /* 311 */ SyscallDesc("keyctl", unimplementedFunc),
+ /* 312 */ SyscallDesc("semtimedop", unimplementedFunc),
+ /* 313 */ SyscallDesc("vserver", unimplementedFunc),
+ /* 314 */ SyscallDesc("ioprio_set", unimplementedFunc),
+ /* 315 */ SyscallDesc("ioprio_get", unimplementedFunc),
+ /* 316 */ SyscallDesc("inotify_init", unimplementedFunc),
+ /* 317 */ SyscallDesc("inotify_add_watch", unimplementedFunc),
+ /* 318 */ SyscallDesc("inotify_rm_watch", unimplementedFunc),
+ /* 319 */ SyscallDesc("mbind", unimplementedFunc),
+ /* 320 */ SyscallDesc("get_mempolicy", unimplementedFunc),
+ /* 321 */ SyscallDesc("set_mempolicy", unimplementedFunc),
+ /* 322 */ SyscallDesc("openat", unimplementedFunc),
+ /* 323 */ SyscallDesc("mkdirat", unimplementedFunc),
+ /* 324 */ SyscallDesc("mknodat", unimplementedFunc),
+ /* 325 */ SyscallDesc("fchownat", unimplementedFunc),
+ /* 326 */ SyscallDesc("futimesat", unimplementedFunc),
+ /* 327 */ SyscallDesc("fstatat64", unimplementedFunc),
+ /* 328 */ SyscallDesc("unlinkat", unimplementedFunc),
+ /* 329 */ SyscallDesc("renameat", unimplementedFunc),
+ /* 330 */ SyscallDesc("linkat", unimplementedFunc),
+ /* 331 */ SyscallDesc("symlinkat", unimplementedFunc),
+ /* 332 */ SyscallDesc("readlinkat", unimplementedFunc),
+ /* 333 */ SyscallDesc("fchmodat", unimplementedFunc),
+ /* 334 */ SyscallDesc("faccessat", unimplementedFunc),
+ /* 335 */ SyscallDesc("pselect6", unimplementedFunc),
+ /* 336 */ SyscallDesc("ppoll", unimplementedFunc),
+ /* 337 */ SyscallDesc("unshare", unimplementedFunc),
+ /* 338 */ SyscallDesc("set_robust_list", unimplementedFunc),
+ /* 339 */ SyscallDesc("get_robust_list", unimplementedFunc),
+ /* 340 */ SyscallDesc("splice", unimplementedFunc),
+ /* 341 */ SyscallDesc("arm_sync_file_range", unimplementedFunc),
+ /* 342 */ SyscallDesc("tee", unimplementedFunc),
+ /* 343 */ SyscallDesc("vmsplice", unimplementedFunc),
+ /* 344 */ SyscallDesc("move_pages", unimplementedFunc),
+ /* 345 */ SyscallDesc("getcpu", unimplementedFunc),
+ /* 346 */ SyscallDesc("epoll_pwait", unimplementedFunc),
+};
+
+PowerPCLinuxProcess::PowerPCLinuxProcess(LiveProcessParams * params,
+ ObjectFile *objFile)
+ : PowerPCLiveProcess(params, objFile),
+ Num_Syscall_Descs(sizeof(syscallDescs) / sizeof(SyscallDesc))
+{
+}
+
+SyscallDesc*
+PowerPCLinuxProcess::getDesc(int callnum)
+{
+ if (callnum < 0 || callnum > Num_Syscall_Descs)
+ return NULL;
+
+ return &syscallDescs[callnum];
+}
+
+void
+PowerPCLinuxProcess::startup()
+{
+ PowerPCLiveProcess::startup();
+}
+
+PowerpcISA::IntReg
+PowerPCLinuxProcess::getSyscallArg(ThreadContext *tc, int i)
+{
+ // Linux apparently allows more parameter than the ABI says it should.
+ // This limit may need to be increased even further.
+ assert(i < 6);
+ return tc->readIntReg(ArgumentReg0 + i);
+}
+
+void
+PowerPCLinuxProcess::setSyscallArg(ThreadContext *tc, int i, PowerpcISA::IntReg val)
+{
+ // Linux apparently allows more parameter than the ABI says it should.
+ // This limit may need to be increased even further.
+ assert(i < 6);
+ tc->setIntReg(ArgumentReg0 + i, val);
+}
diff --git a/src/arch/powerpc/linux/process.hh b/src/arch/powerpc/linux/process.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/linux/process.hh
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __POWERPC_LINUX_PROCESS_HH__
+#define __POWERPC_LINUX_PROCESS_HH__
+
+#include "arch/powerpc/process.hh"
+
+
+/// A process with emulated PPC/Linux syscalls.
+class PowerPCLinuxProcess : public PowerPCLiveProcess
+{
+ public:
+ PowerPCLinuxProcess(LiveProcessParams * params, ObjectFile *objFile);
+
+ virtual SyscallDesc* getDesc(int callnum);
+
+ void startup();
+
+ PowerpcISA::IntReg getSyscallArg(ThreadContext *tc, int i);
+ void setSyscallArg(ThreadContext *tc, int i, PowerpcISA::IntReg val);
+
+ /// Array of syscall descriptors, indexed by call number.
+ static SyscallDesc syscallDescs[];
+
+ const int Num_Syscall_Descs;
+};
+
+#endif // __POWERPC_LINUX_PROCESS_HH__
diff --git a/src/arch/powerpc/locked_mem.hh b/src/arch/powerpc/locked_mem.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/locked_mem.hh
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Steve Reinhardt
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_LOCKED_MEM_HH__
+#define __ARCH_POWERPC_LOCKED_MEM_HH__
+
+/**
+ * @file
+ *
+ * ISA-specific helper functions for locked memory accesses.
+ */
+
+#include "mem/request.hh"
+
+namespace PowerpcISA
+{
+
+template <class XC>
+inline void
+handleLockedRead(XC *xc, Request *req)
+{
+}
+
+template <class XC>
+inline bool
+handleLockedWrite(XC *xc, Request *req)
+{
+ return true;
+}
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_LOCKED_MEM_HH__
diff --git a/src/arch/powerpc/microcode_rom.hh b/src/arch/powerpc/microcode_rom.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/microcode_rom.hh
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2008 The Regents of The University of Michigan
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_MICROCODE_ROM_HH__
+#define __ARCH_POWERPC_MICROCODE_ROM_HH__
+
+#include "sim/microcode_rom.hh"
+
+namespace PowerpcISA
+{
+
+using ::MicrocodeRom;
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_MICROCODE_ROM_HH__
diff --git a/src/arch/powerpc/miscregs.hh b/src/arch/powerpc/miscregs.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/miscregs.hh
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_MISCREGS_HH__
+#define __ARCH_POWERPC_MISCREGS_HH__
+
+#include "base/bitunion.hh"
+
+namespace PowerpcISA
+{
+
+enum MiscRegIndex {
+ MISCREG_CR = 0,
+ MISCREG_XER,
+ MISCREG_LR,
+ MISCREG_CTR,
+ MISCREG_RSV,
+ MISCREG_RSV_LEN,
+ MISCREG_RSV_ADDR,
+ MISCREG_FPSCR,
+ NUM_MISCREGS
+};
+
+const char * const miscRegName[NUM_MISCREGS] = {
+ "cr",
+ "xer",
+ "lr",
+ "ctr",
+ "rsv", "rsv-len", "rsv-addr",
+ "fpscr"
+};
+
+BitUnion32(Cr)
+ Bitfield<31,28> cr0;
+ Bitfield<27,24> cr1;
+EndBitUnion(Cr)
+
+BitUnion32(Xer)
+ Bitfield<31> so;
+ Bitfield<30> ov;
+ Bitfield<29> ca;
+EndBitUnion(Xer)
+
+BitUnion32(Fpscr)
+ Bitfield<31> fx;
+ Bitfield<30> fex;
+ Bitfield<29> vx;
+ Bitfield<28> ox;
+ Bitfield<27> ux;
+ Bitfield<26> zx;
+ Bitfield<25> xx;
+ Bitfield<24> vxsnan;
+ Bitfield<23> vxisi;
+ Bitfield<22> vxidi;
+ Bitfield<21> vxzdz;
+ Bitfield<20> vximz;
+ Bitfield<19> vxvc;
+ Bitfield<18> fr;
+ Bitfield<17> fi;
+ SubBitUnion(fprf, 16, 12)
+ Bitfield<16> c;
+ SubBitUnion(fpcc, 15, 12)
+ Bitfield<15> fl;
+ Bitfield<14> fg;
+ Bitfield<13> fe;
+ Bitfield<12> fu;
+ EndSubBitUnion(fpcc)
+ EndSubBitUnion(fprf)
+ Bitfield<10> vxsqrt;
+ Bitfield<9> vxcvi;
+ Bitfield<8> ve;
+ Bitfield<7> oe;
+ Bitfield<6> ue;
+ Bitfield<5> ze;
+ Bitfield<4> xe;
+ Bitfield<3> ni;
+ Bitfield<2,1> rn;
+EndBitUnion(Fpscr)
+
+}; // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_MISCREGS_HH__
diff --git a/src/arch/powerpc/mmaped_ipr.hh b/src/arch/powerpc/mmaped_ipr.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/mmaped_ipr.hh
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Ali Saidi
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_MMAPED_IPR_HH__
+#define __ARCH_POWERPC_MMAPED_IPR_HH__
+
+/**
+ * @file
+ *
+ * ISA-specific helper functions for memory mapped IPR accesses.
+ */
+
+#include "base/misc.hh"
+#include "mem/packet.hh"
+
+class ThreadContext;
+
+namespace PowerpcISA
+{
+
+inline Tick
+handleIprRead(ThreadContext *xc, Packet *pkt)
+{
+ panic("No implementation for handleIprRead in POWERPC\n");
+}
+
+inline Tick
+handleIprWrite(ThreadContext *xc, Packet *pkt)
+{
+ panic("No implementation for handleIprWrite in POWERPC\n");
+}
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_MMAPED_IPR_HH__
diff --git a/src/arch/powerpc/pagetable.cc b/src/arch/powerpc/pagetable.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/pagetable.cc
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007 MIPS Technologies, Inc.
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Nathan Binkert
+ * Steve Reinhardt
+ * Jaidev Patwardhan
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#include "arch/powerpc/pagetable.hh"
+#include "sim/serialize.hh"
+
+namespace PowerpcISA
+{
+
+void
+PTE::serialize(std::ostream &os)
+{
+ SERIALIZE_SCALAR(Mask);
+ SERIALIZE_SCALAR(VPN);
+ SERIALIZE_SCALAR(asid);
+ SERIALIZE_SCALAR(G);
+ SERIALIZE_SCALAR(PFN0);
+ SERIALIZE_SCALAR(D0);
+ SERIALIZE_SCALAR(V0);
+ SERIALIZE_SCALAR(C0);
+ SERIALIZE_SCALAR(PFN1);
+ SERIALIZE_SCALAR(D1);
+ SERIALIZE_SCALAR(V1);
+ SERIALIZE_SCALAR(C1);
+ SERIALIZE_SCALAR(AddrShiftAmount);
+ SERIALIZE_SCALAR(OffsetMask);
+}
+
+void
+PTE::unserialize(Checkpoint *cp, const std::string &section)
+{
+ UNSERIALIZE_SCALAR(Mask);
+ UNSERIALIZE_SCALAR(VPN);
+ UNSERIALIZE_SCALAR(asid);
+ UNSERIALIZE_SCALAR(G);
+ UNSERIALIZE_SCALAR(PFN0);
+ UNSERIALIZE_SCALAR(D0);
+ UNSERIALIZE_SCALAR(V0);
+ UNSERIALIZE_SCALAR(C0);
+ UNSERIALIZE_SCALAR(PFN1);
+ UNSERIALIZE_SCALAR(D1);
+ UNSERIALIZE_SCALAR(V1);
+ UNSERIALIZE_SCALAR(C1);
+ UNSERIALIZE_SCALAR(AddrShiftAmount);
+ UNSERIALIZE_SCALAR(OffsetMask);
+}
+
+} // PowerpcISA namespace
diff --git a/src/arch/powerpc/pagetable.hh b/src/arch/powerpc/pagetable.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/pagetable.hh
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007 MIPS Technologies, Inc.
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Nathan Binkert
+ * Steve Reinhardt
+ * Jaidev Patwardhan
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_PAGETABLE_H__
+#define __ARCH_POWERPC_PAGETABLE_H__
+
+#include "arch/powerpc/isa_traits.hh"
+#include "arch/powerpc/utility.hh"
+#include "arch/powerpc/vtophys.hh"
+#include "config/full_system.hh"
+
+namespace PowerpcISA {
+
+struct VAddr
+{
+ static const int ImplBits = 43;
+ static const Addr ImplMask = (ULL(1) << ImplBits) - 1;
+ static const Addr UnImplMask = ~ImplMask;
+
+ Addr addr;
+
+ VAddr(Addr a)
+ : addr(a)
+ {}
+
+ operator Addr() const
+ {
+ return addr;
+ }
+
+ const VAddr
+ &operator=(Addr a)
+ {
+ addr = a;
+ return *this;
+ }
+
+ Addr
+ vpn() const
+ {
+ return (addr & ImplMask) >> PageShift;
+ }
+
+ Addr
+ page() const
+ {
+ return addr & Page_Mask;
+ }
+
+ Addr
+ offset() const
+ {
+ return addr & PageOffset;
+ }
+
+ Addr
+ level3() const
+ {
+ return PowerpcISA::PteAddr(addr >> PageShift);
+ }
+
+ Addr
+ level2() const
+ {
+ return PowerpcISA::PteAddr(addr >> (NPtePageShift + PageShift));
+ }
+
+ Addr
+ level1() const
+ {
+ return PowerpcISA::PteAddr(addr >> (2 * NPtePageShift + PageShift));
+ }
+};
+
+// ITB/DTB page table entry
+struct PTE
+{
+ // What parts of the VAddr (from bits 28..11) should be used in
+ // translation (includes Mask and MaskX from PageMask)
+ Addr Mask;
+
+ // Virtual Page Number (/2) (Includes VPN2 + VPN2X .. bits 31..11
+ // from EntryHi)
+ Addr VPN;
+
+ // Address Space ID (8 bits) // Lower 8 bits of EntryHi
+ uint8_t asid;
+
+ // Global Bit - Obtained by an *AND* of EntryLo0 and EntryLo1 G bit
+ bool G;
+
+ /* Contents of Entry Lo0 */
+ Addr PFN0; // Physical Frame Number - Even
+ bool D0; // Even entry Dirty Bit
+ bool V0; // Even entry Valid Bit
+ uint8_t C0; // Cache Coherency Bits - Even
+
+ /* Contents of Entry Lo1 */
+ Addr PFN1; // Physical Frame Number - Odd
+ bool D1; // Odd entry Dirty Bit
+ bool V1; // Odd entry Valid Bit
+ uint8_t C1; // Cache Coherency Bits (3 bits)
+
+ // The next few variables are put in as optimizations to reduce TLB
+ // lookup overheads. For a given Mask, what is the address shift amount
+ // and what is the OffsetMask
+ int AddrShiftAmount;
+ int OffsetMask;
+
+ bool
+ Valid()
+ {
+ return (V0 | V1);
+ };
+
+ void serialize(std::ostream &os);
+
+ void unserialize(Checkpoint *cp, const std::string &section);
+};
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_PAGETABLE_H__
+
diff --git a/src/arch/powerpc/predecoder.hh b/src/arch/powerpc/predecoder.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/predecoder.hh
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_ARM_PREDECODER_HH__
+#define __ARCH_ARM_PREDECODER_HH__
+
+#include "arch/powerpc/types.hh"
+#include "base/misc.hh"
+#include "base/types.hh"
+
+class ThreadContext;
+
+namespace PowerpcISA
+{
+
+class Predecoder
+{
+ protected:
+ ThreadContext * tc;
+
+ // The extended machine instruction being generated
+ ExtMachInst emi;
+
+ public:
+ Predecoder(ThreadContext * _tc)
+ : tc(_tc)
+ {
+ }
+
+ ThreadContext *
+ getTC()
+ {
+ return tc;
+ }
+
+ void
+ setTC(ThreadContext * _tc)
+ {
+ tc = _tc;
+ }
+
+ void
+ process()
+ {
+ }
+
+ void
+ reset()
+ {
+ }
+
+ // Use this to give data to the predecoder. This should be used
+ // when there is control flow.
+ void
+ moreBytes(Addr pc, Addr fetchPC, MachInst inst)
+ {
+ emi = inst;
+ }
+
+ // Use this to give data to the predecoder. This should be used
+ // when instructions are executed in order.
+ void
+ moreBytes(MachInst machInst)
+ {
+ moreBytes(0, 0, machInst);
+ }
+
+ bool
+ needMoreBytes()
+ {
+ return true;
+ }
+
+ bool
+ extMachInstReady()
+ {
+ return true;
+ }
+
+ // This returns a constant reference to the ExtMachInst to avoid a copy
+ const ExtMachInst &
+ getExtMachInst()
+ {
+ return emi;
+ }
+};
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_PREDECODER_HH__
diff --git a/src/arch/powerpc/process.cc b/src/arch/powerpc/process.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/process.cc
@@ -0,0 +1,288 @@
+/*
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Stephen Hines
+ * Timothy M. Jones
+ */
+
+#include "arch/powerpc/isa_traits.hh"
+#include "arch/powerpc/process.hh"
+#include "arch/powerpc/types.hh"
+#include "base/loader/elf_object.hh"
+#include "base/loader/object_file.hh"
+#include "base/misc.hh"
+#include "cpu/thread_context.hh"
+#include "mem/page_table.hh"
+#include "mem/translating_port.hh"
+#include "sim/process_impl.hh"
+#include "sim/system.hh"
+
+using namespace std;
+using namespace PowerpcISA;
+
+PowerPCLiveProcess::PowerPCLiveProcess(LiveProcessParams *params,
+ ObjectFile *objFile)
+ : LiveProcess(params, objFile)
+{
+ stack_base = 0xbf000000L;
+
+ // Set pointer for next thread stack. Reserve 8M for main stack.
+ next_thread_stack_base = stack_base - (8 * 1024 * 1024);
+
+ // Set up break point (Top of Heap)
+ brk_point = objFile->dataBase() + objFile->dataSize() + objFile->bssSize();
+ brk_point = roundUp(brk_point, VMPageSize);
+
+ // Set up region for mmaps. For now, start at bottom of kuseg space.
+ mmap_start = mmap_end = 0x70000000L;
+}
+
+void
+PowerPCLiveProcess::startup()
+{
+ argsInit(MachineBytes, VMPageSize);
+}
+
+void
+PowerPCLiveProcess::argsInit(int intSize, int pageSize)
+{
+ typedef AuxVector<uint32_t> auxv_t;
+ std::vector<auxv_t> auxv;
+
+ string filename;
+ if (argv.size() < 1)
+ filename = "";
+ else
+ filename = argv[0];
+
+ //We want 16 byte alignment
+ uint64_t align = 16;
+
+ // Overloaded argsInit so that we can fine-tune for POWERPC architecture
+ Process::startup();
+
+ // load object file into target memory
+ objFile->loadSections(initVirtMem);
+
+ //Setup the auxilliary vectors. These will already have endian conversion.
+ //Auxilliary vectors are loaded only for elf formatted executables.
+ ElfObject * elfObject = dynamic_cast<ElfObject *>(objFile);
+ if (elfObject) {
+ uint32_t features = 0;
+
+ //Bits which describe the system hardware capabilities
+ //XXX Figure out what these should be
+ auxv.push_back(auxv_t(M5_AT_HWCAP, features));
+ //The system page size
+ auxv.push_back(auxv_t(M5_AT_PAGESZ, PowerpcISA::VMPageSize));
+ //Frequency at which times() increments
+ auxv.push_back(auxv_t(M5_AT_CLKTCK, 0x64));
+ // For statically linked executables, this is the virtual address of the
+ // program header tables if they appear in the executable image
+ auxv.push_back(auxv_t(M5_AT_PHDR, elfObject->programHeaderTable()));
+ // This is the size of a program header entry from the elf file.
+ auxv.push_back(auxv_t(M5_AT_PHENT, elfObject->programHeaderSize()));
+ // This is the number of program headers from the original elf file.
+ auxv.push_back(auxv_t(M5_AT_PHNUM, elfObject->programHeaderCount()));
+ //This is the address of the elf "interpreter", It should be set
+ //to 0 for regular executables. It should be something else
+ //(not sure what) for dynamic libraries.
+ auxv.push_back(auxv_t(M5_AT_BASE, 0));
+
+ //XXX Figure out what this should be.
+ auxv.push_back(auxv_t(M5_AT_FLAGS, 0));
+ //The entry point to the program
+ auxv.push_back(auxv_t(M5_AT_ENTRY, objFile->entryPoint()));
+ //Different user and group IDs
+ auxv.push_back(auxv_t(M5_AT_UID, uid()));
+ auxv.push_back(auxv_t(M5_AT_EUID, euid()));
+ auxv.push_back(auxv_t(M5_AT_GID, gid()));
+ auxv.push_back(auxv_t(M5_AT_EGID, egid()));
+ //Whether to enable "secure mode" in the executable
+ auxv.push_back(auxv_t(M5_AT_SECURE, 0));
+ //The filename of the program
+ auxv.push_back(auxv_t(M5_AT_EXECFN, 0));
+ //The string "v51" with unknown meaning
+ auxv.push_back(auxv_t(M5_AT_PLATFORM, 0));
+ }
+
+ //Figure out how big the initial stack nedes to be
+
+ // A sentry NULL void pointer at the top of the stack.
+ int sentry_size = intSize;
+
+ string platform = "v51";
+ int platform_size = platform.size() + 1;
+
+ // The aux vectors are put on the stack in two groups. The first group are
+ // the vectors that are generated as the elf is loaded. The second group
+ // are the ones that were computed ahead of time and include the platform
+ // string.
+ int aux_data_size = filename.size() + 1;
+
+ int env_data_size = 0;
+ for (int i = 0; i < envp.size(); ++i) {
+ env_data_size += envp[i].size() + 1;
+ }
+ int arg_data_size = 0;
+ for (int i = 0; i < argv.size(); ++i) {
+ arg_data_size += argv[i].size() + 1;
+ }
+
+ int info_block_size =
+ sentry_size + env_data_size + arg_data_size +
+ aux_data_size + platform_size;
+
+ //Each auxilliary vector is two 4 byte words
+ int aux_array_size = intSize * 2 * (auxv.size() + 1);
+
+ int envp_array_size = intSize * (envp.size() + 1);
+ int argv_array_size = intSize * (argv.size() + 1);
+
+ int argc_size = intSize;
+
+ //Figure out the size of the contents of the actual initial frame
+ int frame_size =
+ info_block_size +
+ aux_array_size +
+ envp_array_size +
+ argv_array_size +
+ argc_size;
+
+ //There needs to be padding after the auxiliary vector data so that the
+ //very bottom of the stack is aligned properly.
+ int partial_size = frame_size;
+ int aligned_partial_size = roundUp(partial_size, align);
+ int aux_padding = aligned_partial_size - partial_size;
+
+ int space_needed = frame_size + aux_padding;
+
+ stack_min = stack_base - space_needed;
+ stack_min = roundDown(stack_min, align);
+ stack_size = stack_base - stack_min;
+
+ // map memory
+ pTable->allocate(roundDown(stack_min, pageSize),
+ roundUp(stack_size, pageSize));
+
+ // map out initial stack contents
+ uint32_t sentry_base = stack_base - sentry_size;
+ uint32_t aux_data_base = sentry_base - aux_data_size;
+ uint32_t env_data_base = aux_data_base - env_data_size;
+ uint32_t arg_data_base = env_data_base - arg_data_size;
+ uint32_t platform_base = arg_data_base - platform_size;
+ uint32_t auxv_array_base = platform_base - aux_array_size - aux_padding;
+ uint32_t envp_array_base = auxv_array_base - envp_array_size;
+ uint32_t argv_array_base = envp_array_base - argv_array_size;
+ uint32_t argc_base = argv_array_base - argc_size;
+
+ DPRINTF(Stack, "The addresses of items on the initial stack:\n");
+ DPRINTF(Stack, "0x%x - aux data\n", aux_data_base);
+ DPRINTF(Stack, "0x%x - env data\n", env_data_base);
+ DPRINTF(Stack, "0x%x - arg data\n", arg_data_base);
+ DPRINTF(Stack, "0x%x - platform base\n", platform_base);
+ DPRINTF(Stack, "0x%x - auxv array\n", auxv_array_base);
+ DPRINTF(Stack, "0x%x - envp array\n", envp_array_base);
+ DPRINTF(Stack, "0x%x - argv array\n", argv_array_base);
+ DPRINTF(Stack, "0x%x - argc \n", argc_base);
+ DPRINTF(Stack, "0x%x - stack min\n", stack_min);
+
+ // write contents to stack
+
+ // figure out argc
+ uint32_t argc = argv.size();
+ uint32_t guestArgc = PowerpcISA::htog(argc);
+
+ //Write out the sentry void *
+ uint32_t sentry_NULL = 0;
+ initVirtMem->writeBlob(sentry_base,
+ (uint8_t*)&sentry_NULL, sentry_size);
+
+ //Fix up the aux vectors which point to other data
+ for (int i = auxv.size() - 1; i >= 0; i--) {
+ if (auxv[i].a_type == M5_AT_PLATFORM) {
+ auxv[i].a_val = platform_base;
+ initVirtMem->writeString(platform_base, platform.c_str());
+ } else if (auxv[i].a_type == M5_AT_EXECFN) {
+ auxv[i].a_val = aux_data_base;
+ initVirtMem->writeString(aux_data_base, filename.c_str());
+ }
+ }
+
+ //Copy the aux stuff
+ for (int x = 0; x < auxv.size(); x++)
+ {
+ initVirtMem->writeBlob(auxv_array_base + x * 2 * intSize,
+ (uint8_t*)&(auxv[x].a_type), intSize);
+ initVirtMem->writeBlob(auxv_array_base + (x * 2 + 1) * intSize,
+ (uint8_t*)&(auxv[x].a_val), intSize);
+ }
+ //Write out the terminating zeroed auxilliary vector
+ const uint64_t zero = 0;
+ initVirtMem->writeBlob(auxv_array_base + 2 * intSize * auxv.size(),
+ (uint8_t*)&zero, 2 * intSize);
+
+ copyStringArray(envp, envp_array_base, env_data_base, initVirtMem);
+ copyStringArray(argv, argv_array_base, arg_data_base, initVirtMem);
+
+ initVirtMem->writeBlob(argc_base, (uint8_t*)&guestArgc, intSize);
+
+ ThreadContext *tc = system->getThreadContext(contextIds[0]);
+
+ //Set the stack pointer register
+ tc->setIntReg(StackPointerReg, stack_min);
+
+ Addr prog_entry = objFile->entryPoint();
+ tc->setPC(prog_entry);
+ tc->setNextPC(prog_entry + sizeof(MachInst));
+
+ //Align the "stack_min" to a page boundary.
+ stack_min = roundDown(stack_min, pageSize);
+}
+
+PowerpcISA::IntReg
+PowerPCLiveProcess::getSyscallArg(ThreadContext *tc, int i)
+{
+ assert(i < 5);
+ return tc->readIntReg(ArgumentReg0 + i);
+}
+
+void
+PowerPCLiveProcess::setSyscallArg(ThreadContext *tc,
+ int i, PowerpcISA::IntReg val)
+{
+ assert(i < 5);
+ tc->setIntReg(ArgumentReg0 + i, val);
+}
+
+void
+PowerPCLiveProcess::setSyscallReturn(ThreadContext *tc,
+ SyscallReturn return_value)
+{
+ tc->setIntReg(ReturnValueReg, return_value.value());
+}
diff --git a/src/arch/powerpc/process.hh b/src/arch/powerpc/process.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/process.hh
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __POWERPC_PROCESS_HH__
+#define __POWERPC_PROCESS_HH__
+
+#include <string>
+#include <vector>
+#include "sim/process.hh"
+
+class LiveProcess;
+class ObjectFile;
+class System;
+
+class PowerPCLiveProcess : public LiveProcess
+{
+ protected:
+ PowerPCLiveProcess(LiveProcessParams * params, ObjectFile *objFile);
+
+ void startup();
+
+ public:
+ void argsInit(int intSize, int pageSize);
+ PowerpcISA::IntReg getSyscallArg(ThreadContext *tc, int i);
+ void setSyscallArg(ThreadContext *tc, int i, PowerpcISA::IntReg val);
+ void setSyscallReturn(ThreadContext *tc, SyscallReturn return_value);
+};
+
+#endif // __POWERPC_PROCESS_HH__
+
diff --git a/src/arch/powerpc/registers.hh b/src/arch/powerpc/registers.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/registers.hh
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_REGISTERS_HH__
+#define __ARCH_POWERPC_REGISTERS_HH__
+
+#include "arch/powerpc/max_inst_regs.hh"
+#include "arch/powerpc/miscregs.hh"
+
+namespace PowerpcISA {
+
+using PowerpcISAInst::MaxInstSrcRegs;
+using PowerpcISAInst::MaxInstDestRegs;
+
+typedef uint8_t RegIndex;
+
+typedef uint64_t IntReg;
+
+// Floating point register file entry type
+typedef uint64_t FloatRegBits;
+typedef double FloatReg;
+
+// FPSCR and other registers
+typedef uint64_t MiscReg;
+
+// Constants Related to the number of registers
+const int NumIntArchRegs = 32;
+const int NumIntSpecialRegs = 1; // The zero register
+const int NumFloatArchRegs = 32;
+const int NumFloatSpecialRegs = 0;
+const int NumInternalProcRegs = 0;
+
+const int NumIntRegs = NumIntArchRegs + NumIntSpecialRegs;
+const int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs;
+
+const int NumMiscRegs = NUM_MISCREGS;
+
+// Semantically meaningful register indices
+const int ReturnValueReg = 3;
+const int ArgumentReg0 = 3;
+const int ArgumentReg1 = 4;
+const int ArgumentReg2 = 5;
+const int ArgumentReg3 = 6;
+const int ArgumentReg4 = 7;
+const int FramePointerReg = 31;
+const int StackPointerReg = 1;
+
+// There isn't one in PowerPC, but we need to define one somewhere
+const int ZeroReg = NumIntArchRegs;
+
+const int SyscallNumReg = 0;
+const int SyscallPseudoReturnReg = 3;
+const int SyscallSuccessReg = 3;
+
+// These help enumerate all the registers for dependence tracking.
+const int FP_Base_DepTag = NumIntRegs;
+const int Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs;
+
+typedef union {
+ IntReg intreg;
+ FloatReg fpreg;
+ MiscReg ctrlreg;
+} AnyReg;
+
+enum MiscIntRegNums {
+ cr,
+ xer,
+ lr,
+ ctr,
+ rsv,
+ rsv_len,
+ rsv_addr
+};
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_REGISTERS_HH__
diff --git a/src/arch/powerpc/remote_gdb.hh b/src/arch/powerpc/remote_gdb.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/remote_gdb.hh
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Nathan Binkert
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_ARM_REMOTE_GDB_HH__
+#define __ARCH_ARM_REMOTE_GDB_HH__
+
+#include "base/remote_gdb.hh"
+
+namespace PowerpcISA
+{
+
+class RemoteGDB : public BaseRemoteGDB
+{
+ public:
+ RemoteGDB(System *system, ThreadContext *context)
+ : BaseRemoteGDB(system, context, 1)
+ {
+ }
+
+ bool
+ acc(Addr, size_t)
+ {
+ panic("acc not implemented for POWERPC!");
+ }
+
+ void
+ getregs()
+ {
+ panic("getregs not implemented for POWERPC!");
+ }
+
+ void
+ setregs()
+ {
+ panic("setregs not implemented for POWERPC!");
+ }
+
+ void
+ clearSingleStep()
+ {
+ panic("clearSingleStep not implemented for POWERPC!");
+ }
+
+ void
+ setSingleStep()
+ {
+ panic("setSingleStep not implemented for POWERPC!");
+ }
+};
+
+} // PowerpcISA namespace
+
+#endif /* __ARCH_POWERPC_REMOTE_GDB_H__ */
diff --git a/src/arch/powerpc/stacktrace.hh b/src/arch/powerpc/stacktrace.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/stacktrace.hh
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2005 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Ali Saidi
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_STACKTRACE_HH__
+#define __ARCH_POWERPC_STACKTRACE_HH__
+
+#include "base/trace.hh"
+#include "cpu/static_inst.hh"
+
+class ThreadContext;
+class StackTrace;
+
+namespace PowerpcISA
+{
+
+class ProcessInfo
+{
+ private:
+ ThreadContext *tc;
+
+ int thread_info_size;
+ int task_struct_size;
+ int task_off;
+ int pid_off;
+ int name_off;
+
+ public:
+ ProcessInfo(ThreadContext *_tc);
+
+ Addr task(Addr ksp) const;
+ int pid(Addr ksp) const;
+ std::string name(Addr ksp) const;
+};
+
+class StackTrace
+{
+ protected:
+ typedef TheISA::MachInst MachInst;
+ private:
+ ThreadContext *tc;
+ std::vector<Addr> stack;
+
+ private:
+ bool isEntry(Addr addr);
+ bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra);
+ bool decodeSave(MachInst inst, int &reg, int &disp);
+ bool decodeStack(MachInst inst, int &disp);
+
+ void trace(ThreadContext *tc, bool is_call);
+
+ public:
+ StackTrace();
+ StackTrace(ThreadContext *tc, StaticInstPtr inst);
+ ~StackTrace();
+
+ void
+ clear()
+ {
+ tc = 0;
+ stack.clear();
+ }
+
+ bool
+ valid() const
+ {
+ return tc != NULL;
+ }
+
+ bool trace(ThreadContext *tc, StaticInstPtr inst);
+
+ public:
+ const std::vector<Addr> &
+ getstack() const
+ {
+ return stack;
+ }
+
+ static const int user = 1;
+ static const int console = 2;
+ static const int unknown = 3;
+
+#if TRACING_ON
+ private:
+ void dump();
+
+ public:
+ void
+ dprintf()
+ {
+ if (DTRACE(Stack))
+ dump();
+ }
+#else
+ public:
+ void
+ dprintf()
+ {
+ }
+#endif
+};
+
+inline bool
+StackTrace::trace(ThreadContext *tc, StaticInstPtr inst)
+{
+ if (!inst->isCall() && !inst->isReturn())
+ return false;
+
+ if (valid())
+ clear();
+
+ trace(tc, !inst->isReturn());
+ return true;
+}
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_STACKTRACE_HH__
diff --git a/src/arch/powerpc/tlb.cc b/src/arch/powerpc/tlb.cc
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/tlb.cc
@@ -0,0 +1,322 @@
+/*
+ * Copyright (c) 2001-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007 MIPS Technologies, Inc.
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Nathan Binkert
+ * Steve Reinhardt
+ * Jaidev Patwardhan
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#include <string>
+#include <vector>
+
+#include "arch/powerpc/faults.hh"
+#include "arch/powerpc/pagetable.hh"
+#include "arch/powerpc/tlb.hh"
+#include "arch/powerpc/utility.hh"
+#include "base/inifile.hh"
+#include "base/str.hh"
+#include "base/trace.hh"
+#include "cpu/thread_context.hh"
+#include "mem/page_table.hh"
+#include "params/PowerPCTLB.hh"
+#include "sim/process.hh"
+
+
+using namespace std;
+using namespace PowerpcISA;
+
+///////////////////////////////////////////////////////////////////////
+//
+// POWERPC TLB
+//
+
+#define MODE2MASK(X) (1 << (X))
+
+TLB::TLB(const Params *p)
+ : BaseTLB(p), size(p->size), nlu(0)
+{
+ table = new PowerpcISA::PTE[size];
+ memset(table, 0, sizeof(PowerpcISA::PTE[size]));
+ smallPages = 0;
+}
+
+TLB::~TLB()
+{
+ if (table)
+ delete [] table;
+}
+
+// look up an entry in the TLB
+PowerpcISA::PTE *
+TLB::lookup(Addr vpn, uint8_t asn) const
+{
+ // assume not found...
+ PowerpcISA::PTE *retval = NULL;
+ PageTable::const_iterator i = lookupTable.find(vpn);
+ if (i != lookupTable.end()) {
+ while (i->first == vpn) {
+ int index = i->second;
+ PowerpcISA::PTE *pte = &table[index];
+ Addr Mask = pte->Mask;
+ Addr InvMask = ~Mask;
+ Addr VPN = pte->VPN;
+ if (((vpn & InvMask) == (VPN & InvMask))
+ && (pte->G || (asn == pte->asid))) {
+
+ // We have a VPN + ASID Match
+ retval = pte;
+ break;
+ }
+ ++i;
+ }
+ }
+
+ DPRINTF(TLB, "lookup %#x, asn %#x -> %s ppn %#x\n", vpn, (int)asn,
+ retval ? "hit" : "miss", retval ? retval->PFN1 : 0);
+ return retval;
+}
+
+PowerpcISA::PTE*
+TLB::getEntry(unsigned Index) const
+{
+ // Make sure that Index is valid
+ assert(Index<size);
+ return &table[Index];
+}
+
+int
+TLB::probeEntry(Addr vpn,uint8_t asn) const
+{
+ // assume not found...
+ PowerpcISA::PTE *retval = NULL;
+ int Ind = -1;
+ PageTable::const_iterator i = lookupTable.find(vpn);
+ if (i != lookupTable.end()) {
+ while (i->first == vpn) {
+ int index = i->second;
+ PowerpcISA::PTE *pte = &table[index];
+ Addr Mask = pte->Mask;
+ Addr InvMask = ~Mask;
+ Addr VPN = pte->VPN;
+ if (((vpn & InvMask) == (VPN & InvMask))
+ && (pte->G || (asn == pte->asid))) {
+
+ // We have a VPN + ASID Match
+ retval = pte;
+ Ind = index;
+ break;
+ }
+ ++i;
+ }
+ }
+
+ DPRINTF(PowerPC, "VPN: %x, asid: %d, Result of TLBP: %d\n", vpn, asn, Ind);
+ return Ind;
+}
+
+inline Fault
+TLB::checkCacheability(RequestPtr &req)
+{
+ Addr VAddrUncacheable = 0xA0000000;
+ if ((req->getVaddr() & VAddrUncacheable) == VAddrUncacheable) {
+
+ // mark request as uncacheable
+ req->setFlags(Request::UNCACHEABLE);
+ }
+ return NoFault;
+}
+
+void
+TLB::insertAt(PowerpcISA::PTE &pte, unsigned Index, int _smallPages)
+{
+ smallPages=_smallPages;
+ if (Index > size){
+ warn("Attempted to write at index (%d) beyond TLB size (%d)",
+ Index, size);
+ } else {
+
+ // Update TLB
+ if (table[Index].V0 == true || table[Index].V1 == true) {
+
+ // Previous entry is valid
+ PageTable::iterator i = lookupTable.find(table[Index].VPN);
+ lookupTable.erase(i);
+ }
+ table[Index]=pte;
+
+ // Update fast lookup table
+ lookupTable.insert(make_pair(table[Index].VPN, Index));
+ }
+}
+
+// insert a new TLB entry
+void
+TLB::insert(Addr addr, PowerpcISA::PTE &pte)
+{
+ fatal("TLB Insert not yet implemented\n");
+}
+
+void
+TLB::flushAll()
+{
+ DPRINTF(TLB, "flushAll\n");
+ memset(table, 0, sizeof(PowerpcISA::PTE[size]));
+ lookupTable.clear();
+ nlu = 0;
+}
+
+void
+TLB::serialize(ostream &os)
+{
+ SERIALIZE_SCALAR(size);
+ SERIALIZE_SCALAR(nlu);
+
+ for (int i = 0; i < size; i++) {
+ nameOut(os, csprintf("%s.PTE%d", name(), i));
+ table[i].serialize(os);
+ }
+}
+
+void
+TLB::unserialize(Checkpoint *cp, const string &section)
+{
+ UNSERIALIZE_SCALAR(size);
+ UNSERIALIZE_SCALAR(nlu);
+
+ for (int i = 0; i < size; i++) {
+ table[i].unserialize(cp, csprintf("%s.PTE%d", section, i));
+ if (table[i].V0 || table[i].V1) {
+ lookupTable.insert(make_pair(table[i].VPN, i));
+ }
+ }
+}
+
+void
+TLB::regStats()
+{
+ read_hits
+ .name(name() + ".read_hits")
+ .desc("DTB read hits")
+ ;
+
+ read_misses
+ .name(name() + ".read_misses")
+ .desc("DTB read misses")
+ ;
+
+
+ read_accesses
+ .name(name() + ".read_accesses")
+ .desc("DTB read accesses")
+ ;
+
+ write_hits
+ .name(name() + ".write_hits")
+ .desc("DTB write hits")
+ ;
+
+ write_misses
+ .name(name() + ".write_misses")
+ .desc("DTB write misses")
+ ;
+
+
+ write_accesses
+ .name(name() + ".write_accesses")
+ .desc("DTB write accesses")
+ ;
+
+ hits
+ .name(name() + ".hits")
+ .desc("DTB hits")
+ ;
+
+ misses
+ .name(name() + ".misses")
+ .desc("DTB misses")
+ ;
+
+ invalids
+ .name(name() + ".invalids")
+ .desc("DTB access violations")
+ ;
+
+ accesses
+ .name(name() + ".accesses")
+ .desc("DTB accesses")
+ ;
+
+ hits = read_hits + write_hits;
+ misses = read_misses + write_misses;
+ accesses = read_accesses + write_accesses;
+}
+
+Fault
+TLB::translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode)
+{
+#if !FULL_SYSTEM
+ Process * p = tc->getProcessPtr();
+
+ Fault fault = p->pTable->translate(req);
+ if (fault != NoFault)
+ return fault;
+
+ return NoFault;
+#else
+ fatal("translate atomic not yet implemented\n");
+#endif
+}
+
+void
+TLB::translateTiming(RequestPtr req, ThreadContext *tc,
+ Translation *translation, Mode mode)
+{
+ assert(translation);
+ translation->finish(translateAtomic(req, tc, mode), req, tc, mode);
+}
+
+PowerpcISA::PTE &
+TLB::index(bool advance)
+{
+ PowerpcISA::PTE *pte = &table[nlu];
+
+ if (advance)
+ nextnlu();
+
+ return *pte;
+}
+
+PowerpcISA::TLB *
+PowerPCTLBParams::create()
+{
+ return new PowerpcISA::TLB(this);
+}
diff --git a/src/arch/powerpc/tlb.hh b/src/arch/powerpc/tlb.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/tlb.hh
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2001-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007 MIPS Technologies, Inc.
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Nathan Binkert
+ * Steve Reinhardt
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_TLB_HH__
+#define __ARCH_POWERPC_TLB_HH__
+
+#include <map>
+
+#include "arch/powerpc/isa_traits.hh"
+#include "arch/powerpc/utility.hh"
+#include "arch/powerpc/vtophys.hh"
+#include "arch/powerpc/pagetable.hh"
+#include "base/statistics.hh"
+#include "mem/request.hh"
+#include "params/PowerPCTLB.hh"
+#include "sim/faults.hh"
+#include "sim/tlb.hh"
+
+class ThreadContext;
+
+namespace PowerpcISA {
+
+// This is copied from the ARM ISA and has not been checked against the
+// PowerPC at all.
+struct TlbEntry
+{
+ Addr _pageStart;
+
+ TlbEntry()
+ {
+ }
+
+ TlbEntry(Addr asn, Addr vaddr, Addr paddr)
+ : _pageStart(paddr)
+ {
+ }
+
+ void
+ updateVaddr(Addr new_vaddr)
+ {
+ panic("unimplemented");
+ }
+
+ Addr
+ pageStart()
+ {
+ return _pageStart;
+ }
+
+ void
+ serialize(std::ostream &os)
+ {
+ SERIALIZE_SCALAR(_pageStart);
+ }
+
+ void
+ unserialize(Checkpoint *cp, const std::string &section)
+ {
+ UNSERIALIZE_SCALAR(_pageStart);
+ }
+};
+
+class TLB : public BaseTLB
+{
+ protected:
+ typedef std::multimap<Addr, int> PageTable;
+ PageTable lookupTable; // Quick lookup into page table
+
+ PowerpcISA::PTE *table; // the Page Table
+ int size; // TLB Size
+ int nlu; // not last used entry (for replacement)
+
+ void
+ nextnlu()
+ {
+ if (++nlu >= size) {
+ nlu = 0;
+ }
+ }
+
+ PowerpcISA::PTE *lookup(Addr vpn, uint8_t asn) const;
+
+ mutable Stats::Scalar read_hits;
+ mutable Stats::Scalar read_misses;
+ mutable Stats::Scalar read_acv;
+ mutable Stats::Scalar read_accesses;
+ mutable Stats::Scalar write_hits;
+ mutable Stats::Scalar write_misses;
+ mutable Stats::Scalar write_acv;
+ mutable Stats::Scalar write_accesses;
+ Stats::Formula hits;
+ Stats::Formula misses;
+ Stats::Formula invalids;
+ Stats::Formula accesses;
+
+ public:
+ typedef PowerPCTLBParams Params;
+ TLB(const Params *p);
+ virtual ~TLB();
+
+ int probeEntry(Addr vpn,uint8_t) const;
+ PowerpcISA::PTE *getEntry(unsigned) const;
+
+ int smallPages;
+
+ int
+ getsize() const
+ {
+ return size;
+ }
+
+ PowerpcISA::PTE &index(bool advance = true);
+ void insert(Addr vaddr, PowerpcISA::PTE &pte);
+ void insertAt(PowerpcISA::PTE &pte, unsigned Index, int _smallPages);
+ void flushAll();
+
+ void
+ demapPage(Addr vaddr, uint64_t asn)
+ {
+ panic("demapPage unimplemented.\n");
+ }
+
+ // static helper functions... really
+ static bool validVirtualAddress(Addr vaddr);
+ static Fault checkCacheability(RequestPtr &req);
+ Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode);
+ void translateTiming(RequestPtr req, ThreadContext *tc,
+ Translation *translation, Mode mode);
+
+ // Checkpointing
+ void serialize(std::ostream &os);
+ void unserialize(Checkpoint *cp, const std::string &section);
+ void regStats();
+};
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_TLB_HH__
diff --git a/src/arch/powerpc/types.hh b/src/arch/powerpc/types.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/types.hh
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_TYPES_HH__
+#define __ARCH_POWERPC_TYPES_HH__
+
+#include "base/bitunion.hh"
+#include "base/types.hh"
+
+namespace PowerpcISA
+{
+
+typedef uint32_t MachInst;
+
+BitUnion32(ExtMachInst)
+
+ // Registers
+ Bitfield<25, 21> rs;
+ Bitfield<20, 16> ra;
+
+ // Shifts and masks
+ Bitfield<15, 11> sh;
+ Bitfield<10, 6> mb;
+ Bitfield< 5, 1> me;
+
+ // Immediate fields
+ Bitfield<15, 0> si;
+ Bitfield<15, 0> d;
+
+ // Special purpose register identifier
+ Bitfield<20, 11> spr;
+ Bitfield<25, 2> li;
+ Bitfield<1> aa;
+ Bitfield<25, 23> bf;
+ Bitfield<15, 2> bd;
+ Bitfield<25, 21> bo;
+ Bitfield<20, 16> bi;
+ Bitfield<20, 18> bfa;
+
+ // Record bits
+ Bitfield<0> rc31;
+ Bitfield<10> oe;
+
+ // Condition register fields
+ Bitfield<25, 21> bt;
+ Bitfield<20, 16> ba;
+ Bitfield<15, 11> bb;
+
+ // FXM field for mtcrf instruction
+ Bitfield<19, 12> fxm;
+EndBitUnion(ExtMachInst)
+
+// typedef uint64_t LargestRead;
+// // Need to use 64 bits to make sure that read requests get handled properly
+
+// typedef int RegContextParam;
+// typedef int RegContextVal;
+
+struct CoreSpecific {
+};
+
+} // PowerpcISA namspace
+
+#endif // __ARCH_POWERPC_TYPES_HH__
diff --git a/src/arch/powerpc/utility.hh b/src/arch/powerpc/utility.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/utility.hh
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Korey Sewell
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_UTILITY_HH__
+#define __ARCH_POWERPC_UTILITY_HH__
+
+#include "arch/powerpc/miscregs.hh"
+#include "arch/powerpc/types.hh"
+#include "base/hashmap.hh"
+#include "base/types.hh"
+#include "cpu/thread_context.hh"
+
+namespace __hash_namespace {
+
+template<>
+struct hash<PowerpcISA::ExtMachInst> : public hash<uint32_t> {
+ size_t operator()(const PowerpcISA::ExtMachInst &emi) const {
+ return hash<uint32_t>::operator()((uint32_t)emi);
+ };
+};
+
+} // __hash_namespace namespace
+
+namespace PowerpcISA {
+
+/**
+ * Function to ensure ISA semantics about 0 registers.
+ * @param tc The thread context.
+ */
+template <class TC>
+void zeroRegisters(TC *tc);
+
+// Instruction address compression hooks
+static inline Addr
+realPCToFetchPC(const Addr &addr)
+{
+ return addr;
+}
+
+static inline Addr
+fetchPCToRealPC(const Addr &addr)
+{
+ return addr;
+}
+
+// the size of "fetched" instructions
+static inline size_t
+fetchInstSize()
+{
+ return sizeof(MachInst);
+}
+
+static inline MachInst
+makeRegisterCopy(int dest, int src)
+{
+ panic("makeRegisterCopy not implemented");
+ return 0;
+}
+
+inline void
+startupCPU(ThreadContext *tc, int cpuId)
+{
+ tc->activate(0);
+}
+
+template <class XC>
+Fault
+checkFpEnableFault(XC *xc)
+{
+ return NoFault;
+}
+
+static inline void
+copyRegs(ThreadContext *src, ThreadContext *dest)
+{
+ panic("Copy Regs Not Implemented Yet\n");
+}
+
+static inline void
+copyMiscRegs(ThreadContext *src, ThreadContext *dest)
+{
+ panic("Copy Misc. Regs Not Implemented Yet\n");
+}
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_UTILITY_HH__
diff --git a/src/arch/powerpc/vtophys.hh b/src/arch/powerpc/vtophys.hh
new file mode 100644
--- /dev/null
+++ b/src/arch/powerpc/vtophys.hh
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * Copyright (c) 2007-2008 The Florida State University
+ * Copyright (c) 2009 The University of Edinburgh
+ * 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: Ali Saidi
+ * Nathan Binkert
+ * Stephen Hines
+ * Timothy M. Jones
+ */
+
+#ifndef __ARCH_POWERPC_VTOPHYS_HH__
+#define __ARCH_POWERPC_VTOPHYS_HH__
+
+#include "arch/powerpc/isa_traits.hh"
+#include "arch/powerpc/utility.hh"
+
+
+class ThreadContext;
+class FunctionalPort;
+
+namespace PowerpcISA {
+
+inline Addr
+PteAddr(Addr a)
+{
+ return (a & PteMask) << PteShift;
+}
+
+} // PowerpcISA namespace
+
+#endif // __ARCH_POWERPC_VTOPHYS_HH__
+
diff --git a/src/base/loader/elf_object.cc b/src/base/loader/elf_object.cc
--- a/src/base/loader/elf_object.cc
+++ b/src/base/loader/elf_object.cc
@@ -97,6 +97,19 @@
arch = ObjectFile::Alpha;
} else if (ehdr.e_machine == EM_ARM) {
arch = ObjectFile::Arm;
+ } else if (ehdr.e_machine == EM_PPC &&
+ ehdr.e_ident[EI_CLASS] == ELFCLASS32) {
+ if (ehdr.e_ident[EI_DATA] == ELFDATA2MSB) {
+ arch = ObjectFile::PowerPC;
+ } else {
+ fatal("The binary you're trying to load is compiled for "
+ "little endian PowerPC.\nM5 only supports big "
+ "endian PowerPC. Please recompile your binary.\n");
+ }
+ } else if (ehdr.e_machine == EM_PPC64) {
+ fatal("The binary you're trying to load is compiled for 64-bit "
+ "PowerPC. M5\n only supports 32-bit PowerPC. Please "
+ "recompile your binary.\n");
} else {
warn("Unknown architecture: %d\n", ehdr.e_machine);
arch = ObjectFile::UnknownArch;
diff --git a/src/base/loader/object_file.hh b/src/base/loader/object_file.hh
--- a/src/base/loader/object_file.hh
+++ b/src/base/loader/object_file.hh
@@ -52,7 +52,8 @@
Mips,
X86_64,
I386,
- Arm
+ Arm,
+ PowerPC
};

enum OpSys {
diff --git a/src/cpu/BaseCPU.py b/src/cpu/BaseCPU.py
--- a/src/cpu/BaseCPU.py
+++ b/src/cpu/BaseCPU.py
@@ -59,6 +59,10 @@
from ArmTLB import ArmTLB
if buildEnv['FULL_SYSTEM']:
from ArmInterrupts import ArmInterrupts
+elif buildEnv['TARGET_ISA'] == 'powerpc':
+ from PowerPCTLB import PowerPCTLB
+ if buildEnv['FULL_SYSTEM']:
+ from PowerPCInterrupts import PowerPCInterrupts

class BaseCPU(MemObject):
type = 'BaseCPU'
@@ -116,6 +120,13 @@
if buildEnv['FULL_SYSTEM']:
interrupts = Param.ArmInterrupts(
ArmInterrupts(), "Interrupt Controller")
+ elif buildEnv['TARGET_ISA'] == 'powerpc':
+ UnifiedTLB = Param.Bool(True, "Is this a Unified TLB?")
+ dtb = Param.PowerPCTLB(PowerPCTLB(), "Data TLB")
+ itb = Param.PowerPCTLB(PowerPCTLB(), "Instruction TLB")
+ if buildEnv['FULL_SYSTEM']:
+ interrupts = Param.PowerPCInterrupts(
+ PowerPCInterrupts(), "Interrupt Controller")
else:
print "Don't know what TLB to use for ISA %s" % \
buildEnv['TARGET_ISA']
diff --git a/src/sim/process.cc b/src/sim/process.cc
--- a/src/sim/process.cc
+++ b/src/sim/process.cc
@@ -66,6 +66,8 @@
#include "arch/arm/linux/process.hh"
#elif THE_ISA == X86_ISA
#include "arch/x86/linux/process.hh"
+#elif THE_ISA == POWERPC_ISA
+#include "arch/powerpc/linux/process.hh"
#else
#error "THE_ISA not set"
#endif
@@ -626,7 +628,7 @@
tc->setPC(prog_entry);
tc->setNextPC(prog_entry + sizeof(MachInst));

-#if THE_ISA != ALPHA_ISA //e.g. MIPS or Sparc
+#if THE_ISA != ALPHA_ISA && THE_ISA != POWERPC_ISA //e.g. MIPS or Sparc
tc->setNextNPC(prog_entry + (2 * sizeof(MachInst)));
#endif

@@ -754,6 +756,20 @@
default:
fatal("Unknown/unsupported operating system.");
}
+#elif THE_ISA == POWERPC_ISA
+ if (objFile->getArch() != ObjectFile::PowerPC)
+ fatal("Object file architecture does not match compiled ISA (PowerPC).");
+ switch (objFile->getOpSys()) {
+ case ObjectFile::UnknownOpSys:
+ warn("Unknown operating system; assuming Linux.");
+ // fall through
+ case ObjectFile::Linux:
+ process = new PowerPCLinuxProcess(params, objFile);
+ break;
+
+ default:
+ fatal("Unknown/unsupported operating system.");
+ }
#else
#error "THE_ISA not set"
#endif
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:48 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004953 -3600
# Node ID 7435b8dcb32f7952491c8aa531051ab2c664979c
# Parent 4b6b39589edfceea071214a718bc2492bbc23b5a
Implementation of the times system call.

diff --git a/src/kern/linux/linux.hh b/src/kern/linux/linux.hh
--- a/src/kern/linux/linux.hh
+++ b/src/kern/linux/linux.hh
@@ -136,6 +136,14 @@
int64_t tv_usec; //!< microseconds
};

+ /// For times().
+ struct tms {
+ int64_t tms_utime; //!< user time
+ int64_t tms_stime; //!< system time
+ int64_t tms_cutime; //!< user time of children
+ int64_t tms_cstime; //!< system time of children
+ };
+
// For writev/readv
struct tgt_iovec {
uint64_t iov_base; // void *
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -1131,6 +1131,29 @@
return 0;
}

+/// Target times() function.
+template <class OS>
+SyscallReturn
+timesFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ TypedBufferArg<typename OS::tms> bufp(process->getSyscallArg(tc, 0));
+
+ // Fill in the time structure (in clock ticks)
+ bufp->tms_utime = curTick;
+ bufp->tms_stime = 0;
+ bufp->tms_cutime = 0;
+ bufp->tms_cstime = 0;
+
+ // Convert to host endianness
+ bufp->tms_utime = htog(bufp->tms_utime);
+
+ // Write back
+ bufp.copyOut(tc->getMemPort());
+
+ // Return clock ticks since system boot
+ return curTick;
+}
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:49 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004953 -3600
# Node ID 3f8045e58321a3d55381ecbe2f5ce4cc3e9b0570
# Parent 7435b8dcb32f7952491c8aa531051ab2c664979c
Implementation of the time system call.

diff --git a/src/kern/linux/linux.hh b/src/kern/linux/linux.hh
--- a/src/kern/linux/linux.hh
+++ b/src/kern/linux/linux.hh
@@ -62,6 +62,7 @@
typedef uint64_t size_t;
typedef uint64_t off_t;
typedef int64_t time_t;
+ typedef int64_t clock_t;
typedef uint32_t uid_t;
typedef uint32_t gid_t;
//@}
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -1155,6 +1155,25 @@
return curTick;
}

+/// Target time() function.
+template <class OS>
+SyscallReturn
+timeFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ typename OS::time_t sec, usec;
+ getElapsedTime(sec, usec);
+ sec += seconds_since_epoch;
+
+ Addr taddr = (Addr)process->getSyscallArg(tc, 0);
+ if(taddr != 0) {
+ typename OS::time_t t = sec;
+ t = htog(t);
+ TranslatingPort *p = tc->getMemPort();
+ p->writeBlob(taddr, (uint8_t*)&t, (int)sizeof(typename OS::time_t));
+ }
+ return sec;
+}


#endif // __SIM_SYSCALL_EMUL_HH__
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:51 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004953 -3600
# Node ID 0c3f1856877bc570e3c853ff6a79fab71bcd6f95
# Parent affca5319e825ac819c83a5faf8c980745d4472f
Fix conversion of the stat64 buffer during system calls.

diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -469,7 +469,7 @@
{
typedef TypedBufferArg<typename OS::tgt_stat64> tgt_stat_buf;
tgt_stat_buf tgt(addr);
- convertStatBuf<tgt_stat_buf, hst_stat64>(tgt, host, fakeTTY);
+ convertStat64Buf<tgt_stat_buf, hst_stat64>(tgt, host, fakeTTY);
tgt.copyOut(mem);
}
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:53 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004954 -3600
# Node ID a0fe8c2c47ef58011f073221835c27cd73ddf82e
# Parent 0569f32a43a12eaa170b8d9a804e78ad9bef6de4
Addition of an ioctl command code for PowerPC.

diff --git a/src/arch/powerpc/linux/linux.hh b/src/arch/powerpc/linux/linux.hh
--- a/src/arch/powerpc/linux/linux.hh
+++ b/src/arch/powerpc/linux/linux.hh
@@ -130,6 +130,8 @@

//@{
/// ioctl() command codes.
+ /// These are for the 2.6.15 kernel. Some have changed for
+ /// later versions.
static const unsigned TIOCGETP_ = 0x40067408;
static const unsigned TIOCSETP_ = 0x80067409;
static const unsigned TIOCSETN_ = 0x8006740a;
@@ -139,6 +141,7 @@
static const unsigned TIOCISATTY_ = 0x2000745e;
static const unsigned TIOCGETS_ = 0x402c7413;
static const unsigned TIOCGETA_ = 0x40147417;
+ static const unsigned TCSETAW_ = 0x80147419;
//@}
};

diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -500,6 +500,7 @@
case OS::TIOCGETC_:
case OS::TIOCGETS_:
case OS::TIOCGETA_:
+ case OS::TCSETAW_:
return -ENOTTY;

default:
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-15 23:01:10 UTC
Permalink
I'm trying to compile absolutely everything right now (all
combinations of ISA and emulation).
I've listed below everything that should be on your scons command
line. (You should at least do this once) It's not strictly necessary
that you do all of debug, opt, and fast, but you at least need to

This patch breaks all but ppc because you only added TCSETAW_ to
powerpc and not the other ISAs, but you use it in the generic
sim/syscall_emul.hh. Can you figure out what the correct ioctl values
are for the other ISAs? Otherwise, we have to jump through more hoops
to get ioctl stuff to work.

Also, can you please try to compile with gcc 4.3? There are a lot of
errors that it finds that earlier compilers don't (some are real
errors in your code). Some of the warnings that are turned on are a
bit pedanitic, but I've found real bugs with them, so I think it's
worth it. (I found some real bugs in your code too).

Nate

build/ALPHA_FS/m5.debug
build/ALPHA_SE/m5.debug
build/ARM_SE/m5.debug
build/MIPS_SE/m5.debug
build/POWERPC_SE/m5.debug
build/SPARC_FS/m5.debug
build/SPARC_SE/m5.debug
build/X86_FS/m5.debug
build/X86_SE/m5.debug
build/ALPHA_FS/m5.opt
build/ALPHA_SE/m5.opt
build/ARM_SE/m5.opt
build/MIPS_SE/m5.opt
build/POWERPC_SE/m5.opt
build/SPARC_FS/m5.opt
build/SPARC_SE/m5.opt
build/X86_FS/m5.opt
build/X86_SE/m5.opt
build/ALPHA_FS/m5.fast
build/ALPHA_SE/m5.fast
build/ARM_SE/m5.fast
build/MIPS_SE/m5.fast
build/POWERPC_SE/m5.fast
build/SPARC_FS/m5.fast
build/SPARC_SE/m5.fast
build/X86_FS/m5.fast
build/X86_SE/m5.fast
Post by Timothy M. Jones
# HG changeset patch
# Date 1255004954 -3600
# Node ID a0fe8c2c47ef58011f073221835c27cd73ddf82e
# Parent  0569f32a43a12eaa170b8d9a804e78ad9bef6de4
Addition of an ioctl command code for PowerPC.
diff --git a/src/arch/powerpc/linux/linux.hh b/src/arch/powerpc/linux/linux.hh
--- a/src/arch/powerpc/linux/linux.hh
+++ b/src/arch/powerpc/linux/linux.hh
@@ -130,6 +130,8 @@
    /// ioctl() command codes.
+    /// These are for the 2.6.15 kernel. Some have changed for
+    /// later versions.
    static const unsigned TIOCGETP_   = 0x40067408;
    static const unsigned TIOCSETP_   = 0x80067409;
    static const unsigned TIOCSETN_   = 0x8006740a;
@@ -139,6 +141,7 @@
    static const unsigned TIOCISATTY_ = 0x2000745e;
    static const unsigned TIOCGETS_   = 0x402c7413;
    static const unsigned TIOCGETA_   = 0x40147417;
+    static const unsigned TCSETAW_    = 0x80147419;
 };
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -500,6 +500,7 @@
        return -ENOTTY;
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
Steve Reinhardt
2009-10-15 23:06:11 UTC
Permalink
Note that running 'util/regress --variants=debug,opt,fast' should
capture all these (except POWERPC_SE) in a much shorter command line.
Once POWERPC_SE is ready to go it should be added to that script too.

Steve
Post by nathan binkert
I'm trying to compile absolutely everything right now (all
combinations of ISA and emulation).
I've listed below everything that should be on your scons command
line.  (You should at least do this once)  It's not strictly necessary
that you do all of debug, opt, and fast, but you at least need to
This patch breaks all but ppc because you only added TCSETAW_ to
powerpc and not the other ISAs, but you use it in the generic
sim/syscall_emul.hh.  Can you figure out what the correct ioctl values
are for the other ISAs?  Otherwise, we have to jump through more hoops
to get ioctl stuff to work.
Also, can you please try to compile with gcc 4.3?  There are a lot of
errors that it finds that earlier compilers don't (some are real
errors in your code).  Some of the warnings that are turned on are a
bit pedanitic, but I've found real bugs with them, so I think it's
worth it.  (I found some real bugs in your code too).
 Nate
build/ALPHA_FS/m5.debug
build/ALPHA_SE/m5.debug
build/ARM_SE/m5.debug
build/MIPS_SE/m5.debug
build/POWERPC_SE/m5.debug
build/SPARC_FS/m5.debug
build/SPARC_SE/m5.debug
build/X86_FS/m5.debug
build/X86_SE/m5.debug
build/ALPHA_FS/m5.opt
build/ALPHA_SE/m5.opt
build/ARM_SE/m5.opt
build/MIPS_SE/m5.opt
build/POWERPC_SE/m5.opt
build/SPARC_FS/m5.opt
build/SPARC_SE/m5.opt
build/X86_FS/m5.opt
build/X86_SE/m5.opt
build/ALPHA_FS/m5.fast
build/ALPHA_SE/m5.fast
build/ARM_SE/m5.fast
build/MIPS_SE/m5.fast
build/POWERPC_SE/m5.fast
build/SPARC_FS/m5.fast
build/SPARC_SE/m5.fast
build/X86_FS/m5.fast
build/X86_SE/m5.fast
Post by Timothy M. Jones
# HG changeset patch
# Date 1255004954 -3600
# Node ID a0fe8c2c47ef58011f073221835c27cd73ddf82e
# Parent  0569f32a43a12eaa170b8d9a804e78ad9bef6de4
Addition of an ioctl command code for PowerPC.
diff --git a/src/arch/powerpc/linux/linux.hh b/src/arch/powerpc/linux/linux.hh
--- a/src/arch/powerpc/linux/linux.hh
+++ b/src/arch/powerpc/linux/linux.hh
@@ -130,6 +130,8 @@
    /// ioctl() command codes.
+    /// These are for the 2.6.15 kernel. Some have changed for
+    /// later versions.
    static const unsigned TIOCGETP_   = 0x40067408;
    static const unsigned TIOCSETP_   = 0x80067409;
    static const unsigned TIOCSETN_   = 0x8006740a;
@@ -139,6 +141,7 @@
    static const unsigned TIOCISATTY_ = 0x2000745e;
    static const unsigned TIOCGETS_   = 0x402c7413;
    static const unsigned TIOCGETA_   = 0x40147417;
+    static const unsigned TCSETAW_    = 0x80147419;
 };
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -500,6 +500,7 @@
        return -ENOTTY;
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
Timothy M Jones
2009-10-16 08:25:38 UTC
Permalink
Post by Steve Reinhardt
Note that running 'util/regress --variants=debug,opt,fast' should
capture all these (except POWERPC_SE) in a much shorter command line.
Once POWERPC_SE is ready to go it should be added to that script too.
Great! That looks much easier, thanks.

Tim
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M Jones
2009-10-16 08:24:54 UTC
Permalink
Post by nathan binkert
I'm trying to compile absolutely everything right now (all
combinations of ISA and emulation).
I've listed below everything that should be on your scons command
line. (You should at least do this once) It's not strictly necessary
that you do all of debug, opt, and fast, but you at least need to
Ah, ok. Sorry, I didn't think about that. I'll make sure that they are all
compiling without problems.
Post by nathan binkert
This patch breaks all but ppc because you only added TCSETAW_ to
powerpc and not the other ISAs, but you use it in the generic
sim/syscall_emul.hh. Can you figure out what the correct ioctl values
are for the other ISAs? Otherwise, we have to jump through more hoops
to get ioctl stuff to work.
Will do.
Post by nathan binkert
Also, can you please try to compile with gcc 4.3? There are a lot of
errors that it finds that earlier compilers don't (some are real
errors in your code). Some of the warnings that are turned on are a
bit pedanitic, but I've found real bugs with them, so I think it's
worth it. (I found some real bugs in your code too).
Right. We don't have gcc 4.3. installed here, so I'm downloading and
building it now. I'll make sure I use that in future too.

Sorry that these things aren't fixed already - I don't want to waste your
time dealing with these issues.

Tim
Post by nathan binkert
Nate
build/ALPHA_FS/m5.debug
build/ALPHA_SE/m5.debug
build/ARM_SE/m5.debug
build/MIPS_SE/m5.debug
build/POWERPC_SE/m5.debug
build/SPARC_FS/m5.debug
build/SPARC_SE/m5.debug
build/X86_FS/m5.debug
build/X86_SE/m5.debug
build/ALPHA_FS/m5.opt
build/ALPHA_SE/m5.opt
build/ARM_SE/m5.opt
build/MIPS_SE/m5.opt
build/POWERPC_SE/m5.opt
build/SPARC_FS/m5.opt
build/SPARC_SE/m5.opt
build/X86_FS/m5.opt
build/X86_SE/m5.opt
build/ALPHA_FS/m5.fast
build/ALPHA_SE/m5.fast
build/ARM_SE/m5.fast
build/MIPS_SE/m5.fast
build/POWERPC_SE/m5.fast
build/SPARC_FS/m5.fast
build/SPARC_SE/m5.fast
build/X86_FS/m5.fast
build/X86_SE/m5.fast
Post by Timothy M. Jones
# HG changeset patch
# Date 1255004954 -3600
# Node ID a0fe8c2c47ef58011f073221835c27cd73ddf82e
# Parent 0569f32a43a12eaa170b8d9a804e78ad9bef6de4
Addition of an ioctl command code for PowerPC.
diff --git a/src/arch/powerpc/linux/linux.hh
b/src/arch/powerpc/linux/linux.hh
--- a/src/arch/powerpc/linux/linux.hh
+++ b/src/arch/powerpc/linux/linux.hh
@@ -130,6 +130,8 @@
/// ioctl() command codes.
+ /// These are for the 2.6.15 kernel. Some have changed for
+ /// later versions.
static const unsigned TIOCGETP_ = 0x40067408;
static const unsigned TIOCSETP_ = 0x80067409;
static const unsigned TIOCSETN_ = 0x8006740a;
@@ -139,6 +141,7 @@
static const unsigned TIOCISATTY_ = 0x2000745e;
static const unsigned TIOCGETS_ = 0x402c7413;
static const unsigned TIOCGETA_ = 0x40147417;
+ static const unsigned TCSETAW_ = 0x80147419;
};
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -500,6 +500,7 @@
return -ENOTTY;
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M Jones
2009-10-16 14:02:46 UTC
Permalink
Hi Nate,

As you can see, I've just sent out 3 new patches. These should fix the
problems that were occurring below. I've compiled with gcc 4.3 and fixed
the errors it was throwing up, added the correct ioctl code to the ISAs
that needed it and recompiled all binaries you've listed below. I also
reran the Hello World regression test for PowerPC. All should be working
now but please tell me if not.

Thanks
Tim
Post by nathan binkert
I'm trying to compile absolutely everything right now (all
combinations of ISA and emulation).
I've listed below everything that should be on your scons command
line. (You should at least do this once) It's not strictly necessary
that you do all of debug, opt, and fast, but you at least need to
This patch breaks all but ppc because you only added TCSETAW_ to
powerpc and not the other ISAs, but you use it in the generic
sim/syscall_emul.hh. Can you figure out what the correct ioctl values
are for the other ISAs? Otherwise, we have to jump through more hoops
to get ioctl stuff to work.
Also, can you please try to compile with gcc 4.3? There are a lot of
errors that it finds that earlier compilers don't (some are real
errors in your code). Some of the warnings that are turned on are a
bit pedanitic, but I've found real bugs with them, so I think it's
worth it. (I found some real bugs in your code too).
Nate
build/ALPHA_FS/m5.debug
build/ALPHA_SE/m5.debug
build/ARM_SE/m5.debug
build/MIPS_SE/m5.debug
build/POWERPC_SE/m5.debug
build/SPARC_FS/m5.debug
build/SPARC_SE/m5.debug
build/X86_FS/m5.debug
build/X86_SE/m5.debug
build/ALPHA_FS/m5.opt
build/ALPHA_SE/m5.opt
build/ARM_SE/m5.opt
build/MIPS_SE/m5.opt
build/POWERPC_SE/m5.opt
build/SPARC_FS/m5.opt
build/SPARC_SE/m5.opt
build/X86_FS/m5.opt
build/X86_SE/m5.opt
build/ALPHA_FS/m5.fast
build/ALPHA_SE/m5.fast
build/ARM_SE/m5.fast
build/MIPS_SE/m5.fast
build/POWERPC_SE/m5.fast
build/SPARC_FS/m5.fast
build/SPARC_SE/m5.fast
build/X86_FS/m5.fast
build/X86_SE/m5.fast
Post by Timothy M. Jones
# HG changeset patch
# Date 1255004954 -3600
# Node ID a0fe8c2c47ef58011f073221835c27cd73ddf82e
# Parent 0569f32a43a12eaa170b8d9a804e78ad9bef6de4
Addition of an ioctl command code for PowerPC.
diff --git a/src/arch/powerpc/linux/linux.hh
b/src/arch/powerpc/linux/linux.hh
--- a/src/arch/powerpc/linux/linux.hh
+++ b/src/arch/powerpc/linux/linux.hh
@@ -130,6 +130,8 @@
/// ioctl() command codes.
+ /// These are for the 2.6.15 kernel. Some have changed for
+ /// later versions.
static const unsigned TIOCGETP_ = 0x40067408;
static const unsigned TIOCSETP_ = 0x80067409;
static const unsigned TIOCSETN_ = 0x8006740a;
@@ -139,6 +141,7 @@
static const unsigned TIOCISATTY_ = 0x2000745e;
static const unsigned TIOCGETS_ = 0x402c7413;
static const unsigned TIOCGETA_ = 0x40147417;
+ static const unsigned TCSETAW_ = 0x80147419;
};
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -500,6 +500,7 @@
return -ENOTTY;
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:50 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004953 -3600
# Node ID affca5319e825ac819c83a5faf8c980745d4472f
# Parent 3f8045e58321a3d55381ecbe2f5ce4cc3e9b0570
Implementation of the ftruncate64 system call.

diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc
--- a/src/sim/syscall_emul.cc
+++ b/src/sim/syscall_emul.cc
@@ -405,6 +405,22 @@
}

SyscallReturn
+ftruncate64Func(SyscallDesc *desc, int num,
+ LiveProcess *process, ThreadContext *tc)
+{
+ int fd = process->sim_fd(process->getSyscallArg(tc, 0));
+
+ if (fd < 0)
+ return -EBADF;
+
+ // I'm not sure why, but the length argument is in arg reg 3
+ loff_t length = process->getSyscallArg(tc, 3);
+
+ int result = ftruncate64(fd, length);
+ return (result == -1) ? -errno : result;
+}
+
+SyscallReturn
umaskFunc(SyscallDesc *desc, int num, LiveProcess *process, ThreadContext *tc)
{
// Letting the simulated program change the simulator's umask seems like
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -260,6 +260,11 @@
LiveProcess *p, ThreadContext *tc);


+/// Target ftruncate64() handler.
+SyscallReturn ftruncate64Func(SyscallDesc *desc, int num,
+ LiveProcess *p, ThreadContext *tc);
+
+
/// Target umask() handler.
SyscallReturn umaskFunc(SyscallDesc *desc, int num,
LiveProcess *p, ThreadContext *tc);
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:54 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004954 -3600
# Node ID 55d4f4e53c46d2cf76528a4458400bbb799fa274
# Parent a0fe8c2c47ef58011f073221835c27cd73ddf82e
Addition of time, times and ftruncate64 system calls to PowerPC.

Adding these system calls allows the correct execution of all SPEC CPU 2000
benchmarks using the PowerPC ISA and AtomicSimpleCPU.

diff --git a/src/arch/powerpc/linux/process.cc b/src/arch/powerpc/linux/process.cc
--- a/src/arch/powerpc/linux/process.cc
+++ b/src/arch/powerpc/linux/process.cc
@@ -78,7 +78,7 @@
/* 10 */ SyscallDesc("unlink", unlinkFunc),
/* 11 */ SyscallDesc("execve", unimplementedFunc),
/* 12 */ SyscallDesc("chdir", unimplementedFunc),
- /* 13 */ SyscallDesc("time", unimplementedFunc),
+ /* 13 */ SyscallDesc("time", timeFunc<PowerPCLinux>),
/* 14 */ SyscallDesc("mknod", unimplementedFunc),
/* 15 */ SyscallDesc("chmod", chmodFunc<PowerPCLinux>),
/* 16 */ SyscallDesc("lchown", chownFunc),
@@ -108,7 +108,7 @@
/* 40 */ SyscallDesc("rmdir", unimplementedFunc),
/* 41 */ SyscallDesc("dup", dupFunc),
/* 42 */ SyscallDesc("pipe", unimplementedFunc),
- /* 43 */ SyscallDesc("times", ignoreFunc),
+ /* 43 */ SyscallDesc("times", timesFunc<PowerPCLinux>),
/* 44 */ SyscallDesc("prof", unimplementedFunc),
/* 45 */ SyscallDesc("brk", brkFunc),
/* 46 */ SyscallDesc("setgid", unimplementedFunc),
@@ -259,7 +259,7 @@
/* 191 */ SyscallDesc("getrlimit", unimplementedFunc),
/* 192 */ SyscallDesc("mmap2", mmapFunc<PowerPCLinux>),
/* 193 */ SyscallDesc("truncate64", unimplementedFunc),
- /* 194 */ SyscallDesc("ftruncate64", unimplementedFunc),
+ /* 194 */ SyscallDesc("ftruncate64", ftruncate64Func),
/* 195 */ SyscallDesc("stat64", stat64Func<PowerPCLinux>),
/* 196 */ SyscallDesc("lstat64", lstat64Func<PowerPCLinux>),
/* 197 */ SyscallDesc("fstat64", fstat64Func<PowerPCLinux>),
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:52 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004954 -3600
# Node ID 0569f32a43a12eaa170b8d9a804e78ad9bef6de4
# Parent 0c3f1856877bc570e3c853ff6a79fab71bcd6f95
Zero out memory that already exists during the brk system call.

Glibc often assumes that memory it receives from the kernel after a brk
system call will contain only zeros. This is important during a calloc,
because it won't clear the new memory itself. In the simulator, if the
new page exists, it will be cleared using this patch, to mimic the kernel's
functionality.

diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc
--- a/src/sim/syscall_emul.cc
+++ b/src/sim/syscall_emul.cc
@@ -144,6 +144,25 @@
if (!p->pTable->translate(gen.addr()))
p->pTable->allocate(roundDown(gen.addr(), VMPageSize),
VMPageSize);
+
+ // if the address is already there, zero it out
+ else {
+ uint8_t zero[VMPageSize];
+ memset(zero, 0, VMPageSize);
+ TranslatingPort *tp = tc->getMemPort();
+
+ // split non-page aligned accesses
+ Addr next_page = roundUp(gen.addr(), VMPageSize);
+ uint32_t size_needed = next_page - gen.addr();
+ tp->writeBlob(gen.addr(), zero, size_needed);
+ if (gen.addr() + VMPageSize > next_page &&
+ next_page < new_brk &&
+ p->pTable->translate(next_page))
+ {
+ size_needed = VMPageSize - size_needed;
+ tp->writeBlob(next_page, zero, size_needed);
+ }
+ }
}
}
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-09 15:09:27 UTC
Permalink
We have a memsetBlob function. Can you use that instead of allocating
a page, zeroing it and then doing a write?

Do you actually see unaligned pages? Shouldn't we just align the
increment value to the next page boundary.

It seems to me that you need to use the chunk generator or some
looping construct to loop over all of the pages that may have been
allocated and check each individual page to make sure that they are
all zeroed (because the brk can be incremented by many pages.)

Nate
Post by Timothy M. Jones
# HG changeset patch
# Date 1255004954 -3600
# Node ID 0569f32a43a12eaa170b8d9a804e78ad9bef6de4
# Parent  0c3f1856877bc570e3c853ff6a79fab71bcd6f95
Zero out memory that already exists during the brk system call.
Glibc often assumes that memory it receives from the kernel after a brk
system call will contain only zeros. This is important during a calloc,
because it won't clear the new memory itself. In the simulator, if the
new page exists, it will be cleared using this patch, to mimic the kernel's
functionality.
diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc
--- a/src/sim/syscall_emul.cc
+++ b/src/sim/syscall_emul.cc
@@ -144,6 +144,25 @@
            if (!p->pTable->translate(gen.addr()))
                p->pTable->allocate(roundDown(gen.addr(), VMPageSize),
                                    VMPageSize);
+
+            // if the address is already there, zero it out
+            else {
+                uint8_t zero[VMPageSize];
+                memset(zero, 0, VMPageSize);
+                TranslatingPort *tp = tc->getMemPort();
+
+                // split non-page aligned accesses
+                Addr next_page = roundUp(gen.addr(), VMPageSize);
+                uint32_t size_needed = next_page - gen.addr();
+                tp->writeBlob(gen.addr(), zero, size_needed);
+                if (gen.addr() + VMPageSize > next_page &&
+                    next_page < new_brk &&
+                    p->pTable->translate(next_page))
+                {
+                    size_needed = VMPageSize - size_needed;
+                    tp->writeBlob(next_page, zero, size_needed);
+                }
+            }
        }
    }
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
_______________________________________________
m5-dev mailing list
http://m5sim.org/mailman/listinfo/m5-dev
Timothy M Jones
2009-10-10 14:34:26 UTC
Permalink
Post by nathan binkert
We have a memsetBlob function. Can you use that instead of allocating
a page, zeroing it and then doing a write?
Yes, sorry, I wasn't aware of that, but I'll fix it.
Post by nathan binkert
Do you actually see unaligned pages? Shouldn't we just align the
increment value to the next page boundary.
Yes, unfortunately I was seeing these in the test Hello World program that
I included. The brk point is changed through this sequence:

a) 0x10099000 (initial value)
b) 0x10099CBC
c) 0x100BACBC
d) 0x100BB000

So sometimes it ends up in the middle of the page.
Post by nathan binkert
It seems to me that you need to use the chunk generator or some
looping construct to loop over all of the pages that may have been
allocated and check each individual page to make sure that they are
all zeroed (because the brk can be incremented by many pages.)
That's what I was trying to achieve with the patch. If the simulator
allocates the page then it is full of zeros anyway. If the page already
exists then I need to fill it. Going from b) to c) above I need to zero
out the top of page 0x10099000, but not the whole page or I could
obviously wipe out some of the application's data. However, I can't cross
a page boundary because I might then try to write to an unallocated page.
I can split this into two loops if you'd prefer - the original that
allocates pages and a second that zeros them out?

Cheers
Tim
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-13 03:40:58 UTC
Permalink
Post by Timothy M Jones
Post by nathan binkert
It seems to me that you need to use the chunk generator or some
looping construct to loop over all of the pages that may have been
allocated and check each individual page to make sure that they are
all zeroed (because the brk can be incremented by many pages.)
That's what I was trying to achieve with the patch. If the simulator
allocates the page then it is full of zeros anyway. If the page already
exists then I need to fill it. Going from b) to c) above I need to zero
out the top of page 0x10099000, but not the whole page or I could
obviously wipe out some of the application's data. However, I can't cross
a page boundary because I might then try to write to an unallocated page.
I can split this into two loops if you'd prefer - the original that
allocates pages and a second that zeros them out?
No, that was my bad. I read the patch wrong. I thought that your new
code was separate from the loop. I think it is fine the way it is.

Nate
Timothy M Jones
2009-10-13 12:02:40 UTC
Permalink
Post by nathan binkert
Post by Timothy M Jones
Post by nathan binkert
It seems to me that you need to use the chunk generator or some
looping construct to loop over all of the pages that may have been
allocated and check each individual page to make sure that they are
all zeroed (because the brk can be incremented by many pages.)
That's what I was trying to achieve with the patch. If the simulator
allocates the page then it is full of zeros anyway. If the page already
exists then I need to fill it. Going from b) to c) above I need to zero
out the top of page 0x10099000, but not the whole page or I could
obviously wipe out some of the application's data. However, I can't cross
a page boundary because I might then try to write to an unallocated page.
I can split this into two loops if you'd prefer - the original that
allocates pages and a second that zeros them out?
No, that was my bad. I read the patch wrong. I thought that your new
code was separate from the loop. I think it is fine the way it is.
Ok, no problem. I'll leave this part of the patch alone and resubmit using
the memsetBlob function for the first part a bit later.

Cheers
Tim
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
Timothy M. Jones
2009-10-08 12:37:55 UTC
Permalink
# HG changeset patch
# User Timothy M. Jones <tjones1-9iOJEv++***@public.gmane.org>
# Date 1255004954 -3600
# Node ID 9af7a44ef796052857d842823fac251734a46f09
# Parent 55d4f4e53c46d2cf76528a4458400bbb799fa274
Hello world test program for PowerPC.

diff --git a/tests/test-progs/hello/bin/powerpc/linux/hello b/tests/test-progs/hello/bin/powerpc/linux/hello
new file mode 100755
index 0000000000000000000000000000000000000000..6619ae37f23220b26a5def757049f9d6ba67a516
GIT binary patch
literal 625955
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
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-09 15:11:59 UTC
Permalink
Post by Timothy M. Jones
# HG changeset patch
# User Timothy M. Jones
# Date 1255004954 -3600
# Node ID 9af7a44ef796052857d842823fac251734a46f09
# Parent 55d4f4e53c46d2cf76528a4458400bbb799fa274
Hi Tim,

Can you extend this patch to be a regression test? Having at least one
PowerPC regression will help quite a lot. Be even better if you could
create a few tests.

Nate
Timothy M Jones
2009-10-10 14:23:44 UTC
Permalink
Post by nathan binkert
Post by Timothy M. Jones
# HG changeset patch
# User Timothy M. Jones
# Date 1255004954 -3600
# Node ID 9af7a44ef796052857d842823fac251734a46f09
# Parent 55d4f4e53c46d2cf76528a4458400bbb799fa274
Hi Tim,
Can you extend this patch to be a regression test? Having at least one
PowerPC regression will help quite a lot. Be even better if you could
create a few tests.
Sure, no problem. I assume that it's just a case of putting a new
directory under tests/quick/00.hello/ref with the output files in, like
the others that are there?

Also, I can create some other tests like in the tests/long directory. For
these programs, is it just the SPEC CPU 2000 sources that were used?

Cheers
Tim
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-13 03:42:04 UTC
Permalink
Post by Timothy M Jones
Sure, no problem. I assume that it's just a case of putting a new
directory under tests/quick/00.hello/ref with the output files in, like
the others that are there?
More or less.
Post by Timothy M Jones
Also, I can create some other tests like in the tests/long directory. For
these programs, is it just the SPEC CPU 2000 sources that were used?
currently, yes. Unfortunately, we don't really have any open source
test programs at this point (a real shame).

Nate
Timothy M Jones
2009-10-13 11:46:24 UTC
Permalink
Post by nathan binkert
Post by Timothy M Jones
Sure, no problem. I assume that it's just a case of putting a new
directory under tests/quick/00.hello/ref with the output files in, like
the others that are there?
More or less.
Post by Timothy M Jones
Also, I can create some other tests like in the tests/long directory. For
these programs, is it just the SPEC CPU 2000 sources that were used?
currently, yes. Unfortunately, we don't really have any open source
test programs at this point (a real shame).
Great, I'll add in a couple more programs and the outputs too.

Cheers
Tim
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-09 14:47:38 UTC
Permalink
Hi Tim,

I've only skimmed this diff, but I have one comment and one question:
1) We don't want you doing a "using namespace std;" in a header file,
but we're OK with it in a .cc file, so you can save yourself all of
the std:: that you have. I'm not saying that you need to fix that,
but in the future, you can do that if you want.

2) In a bunch of the generate disassembly stuff, you use both ccprintf
and operator<< on a stringstream. Why did you use operator<<? Did
ccprintf not work? I'm just curious.

Nate
Post by Timothy M. Jones
# HG changeset patch
# User Timothy Jones
# Date 1255004888 -3600
# Node ID 4b6b39589edfceea071214a718bc2492bbc23b5a
# Parent b5bcd4a7b0bc76251fad360f959a3b2d42c805e3
Add support for the PowerPC ISA.
This adds support for the 32-bit, big endian PowerPC ISA. This supports both
integer and floating point instructions based on the Power ISA Book I v2.06.
Timothy M Jones
2009-10-10 11:46:01 UTC
Permalink
Hi Nate,
Post by nathan binkert
Hi Tim,
1) We don't want you doing a "using namespace std;" in a header file,
but we're OK with it in a .cc file, so you can save yourself all of
the std:: that you have. I'm not saying that you need to fix that,
but in the future, you can do that if you want.
No problem. I will alter that, since I've got a bunch of other minor
changes to make that get this all working with O3CPU. What's the best
thing for me to do - add everything into this patch and repost or create
separate patches for the new stuff that can be applied after this one?
Post by nathan binkert
2) In a bunch of the generate disassembly stuff, you use both ccprintf
and operator<< on a stringstream. Why did you use operator<<? Did
ccprintf not work? I'm just curious.
Ah, right. The disassembly code is one area that could do with some
improvement. To tell you the truth, I put this together in dribs and drabs
so the choice of << or ccprintf was just whatever was quick to get it
working, then I didn't fix it up properly. Again, I can fix this so it's
consistent, but at the same time I'd like to also change the disassembly
output so that it is fairly similar to what gdb or objdump prints out.
This means fixing some of the mnemonics under certain constraints and is
kinda off my critical path at the moment. But it would be useful to do.

Cheers
Tim
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-13 03:38:44 UTC
Permalink
Post by Timothy M Jones
No problem. I will alter that, since I've got a bunch of other minor
changes to make that get this all working with O3CPU. What's the best
thing for me to do - add everything into this patch and repost or create
separate patches for the new stuff that can be applied after this one?
Sorry I didn't get back sooner. In general, I think it is better to
fix patches that have code that you want fixed, but I do prefer
keeping separate changes in separate patches. Reposting works. An
alternative is to add a patch to your queue on top of the one that you
want to fix, fix the problems in the new patch, e-mail that patch out,
then you can qfold it back in later before it is committed. Whichever
is easier for you.
Post by Timothy M Jones
Ah, right. The disassembly code is one area that could do with some
improvement. To tell you the truth, I put this together in dribs and drabs
so the choice of << or ccprintf was just whatever was quick to get it
working, then I didn't fix it up properly. Again, I can fix this so it's
consistent, but at the same time I'd like to also change the disassembly
output so that it is fairly similar to what gdb or objdump prints out.
This means fixing some of the mnemonics under certain constraints and is
kinda off my critical path at the moment. But it would be useful to do.
No problem. I just really wanted to know if something was broken with cprintf.

It seems that things are pretty close to done, so I don't think we
need to spend forever perfecting this set of patches. You could fix
future issues in the tree.

Thanks,

Nate
Timothy M Jones
2009-10-13 12:04:46 UTC
Permalink
Post by nathan binkert
Post by Timothy M Jones
No problem. I will alter that, since I've got a bunch of other minor
changes to make that get this all working with O3CPU. What's the best
thing for me to do - add everything into this patch and repost or create
separate patches for the new stuff that can be applied after this one?
Sorry I didn't get back sooner. In general, I think it is better to
fix patches that have code that you want fixed, but I do prefer
keeping separate changes in separate patches. Reposting works. An
alternative is to add a patch to your queue on top of the one that you
want to fix, fix the problems in the new patch, e-mail that patch out,
then you can qfold it back in later before it is committed. Whichever
is easier for you.
Ok, cool. I've already created separate patches for the fixes. I'll send
them out later.
Post by nathan binkert
Post by Timothy M Jones
Ah, right. The disassembly code is one area that could do with some
improvement. To tell you the truth, I put this together in dribs and drabs
so the choice of << or ccprintf was just whatever was quick to get it
working, then I didn't fix it up properly. Again, I can fix this so it's
consistent, but at the same time I'd like to also change the disassembly
output so that it is fairly similar to what gdb or objdump prints out.
This means fixing some of the mnemonics under certain constraints and is
kinda off my critical path at the moment. But it would be useful to do.
No problem. I just really wanted to know if something was broken with cprintf.
It seems that things are pretty close to done, so I don't think we
need to spend forever perfecting this set of patches. You could fix
future issues in the tree.
Excellent! So, what's the next step - do I have to do any more to get
these committed or will someone else take them over to get them
incorporated properly.

Cheers
Tim
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.
nathan binkert
2009-10-13 15:10:46 UTC
Permalink
Post by Timothy M Jones
Excellent! So, what's the next step - do I have to do any more to get
these committed or will someone else take them over to get them
incorporated properly.
I'd like to make sure that we have at least one regression test in the
tree for PowerPC, so when you've fixed the few problems we've
mentioned and have added a regression, please resubmit them and I will
then make sure everything compiles and that all regressions pass. If
everything looks good, I will commit the diffs. (I'd appreciate it if
you tried the full compile and at least all quick regressions yourself
before resubmitting.)

Thanks for all your hard work!

Nate
Continue reading on narkive:
Loading...