[gem5-dev] Change in public/gem5[master]: sparc: Pull the unimplemented formats out of the ISA description.

2017-11-21 Thread Gabe Black (Gerrit)
Gabe Black has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/5464 )


Change subject: sparc: Pull the unimplemented formats out of the ISA  
description.

..

sparc: Pull the unimplemented formats out of the ISA description.

These are simple classes which don't need to be in the ISA description.

Change-Id: Ia0bb45f50c4da2536855efcb3c17c7780b431332
Reviewed-on: https://gem5-review.googlesource.com/5464
Reviewed-by: Gabe Black 
Maintainer: Gabe Black 
---
A src/arch/sparc/insts/unimp.hh
M src/arch/sparc/isa/formats/unimp.isa
M src/arch/sparc/isa/includes.isa
3 files changed, 123 insertions(+), 98 deletions(-)

Approvals:
  Gabe Black: Looks good to me, approved; Looks good to me, approved



diff --git a/src/arch/sparc/insts/unimp.hh b/src/arch/sparc/insts/unimp.hh
new file mode 100644
index 000..c0d9785
--- /dev/null
+++ b/src/arch/sparc/insts/unimp.hh
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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
+ */
+
+#ifndef __ARCH_SPARC_INSTS_UNIMP_HH__
+#define __ARCH_SPARC_INSTS_UNIMP_HH__
+
+#include "arch/sparc/insts/static_inst.hh"
+#include "base/cprintf.hh"
+
+namespace SparcISA
+{
+
+
+//
+// Unimplemented instructions
+//
+
+/**
+ * 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 SparcStaticInst
+{
+  public:
+/// Constructor
+FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst) :
+SparcStaticInst(_mnemonic, _machInst, No_OpClass)
+{
+// don't call execute() (which panics) if we're on a
+// speculative path
+flags[IsNonSpeculative] = true;
+}
+
+Fault
+execute(ExecContext *xc, Trace::InstRecord *traceData) const override
+{
+panic("attempt to execute unimplemented instruction '%s' "
+  "(inst 0x%08x)", mnemonic, machInst);
+}
+
+std::string
+generateDisassembly(Addr pc, const SymbolTable *symtab) const override
+{
+return csprintf("%-10s (unimplemented)", mnemonic);
+}
+};
+
+/**
+ * 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 SparcStaticInst
+{
+  private:
+/// Have we warned on this instruction yet?
+mutable bool warned;
+
+  public:
+/// Constructor
+WarnUnimplemented(const char *_mnemonic, ExtMachInst _machInst) :
+SparcStaticInst(_mnemonic, _machInst, No_OpClass),  
warned(false)

+{
+// don't call execute() (which panics) if we're on a
+// speculative path
+flags[IsNonSpeculative] = true;
+}
+
+Fault
+execute(ExecContext *xc, Trace::InstRecord *traceData) const 

[gem5-dev] Change in public/gem5[master]: sparc: Pull the unimplemented formats out of the ISA description.

2017-11-06 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/5464



Change subject: sparc: Pull the unimplemented formats out of the ISA  
description.

..

sparc: Pull the unimplemented formats out of the ISA description.

These are simple classes which don't need to be in the ISA description.

Change-Id: Ia0bb45f50c4da2536855efcb3c17c7780b431332
---
A src/arch/sparc/insts/unimp.hh
M src/arch/sparc/isa/formats/unimp.isa
M src/arch/sparc/isa/includes.isa
3 files changed, 123 insertions(+), 98 deletions(-)



diff --git a/src/arch/sparc/insts/unimp.hh b/src/arch/sparc/insts/unimp.hh
new file mode 100644
index 000..c0d9785
--- /dev/null
+++ b/src/arch/sparc/insts/unimp.hh
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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
+ */
+
+#ifndef __ARCH_SPARC_INSTS_UNIMP_HH__
+#define __ARCH_SPARC_INSTS_UNIMP_HH__
+
+#include "arch/sparc/insts/static_inst.hh"
+#include "base/cprintf.hh"
+
+namespace SparcISA
+{
+
+
+//
+// Unimplemented instructions
+//
+
+/**
+ * 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 SparcStaticInst
+{
+  public:
+/// Constructor
+FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst) :
+SparcStaticInst(_mnemonic, _machInst, No_OpClass)
+{
+// don't call execute() (which panics) if we're on a
+// speculative path
+flags[IsNonSpeculative] = true;
+}
+
+Fault
+execute(ExecContext *xc, Trace::InstRecord *traceData) const override
+{
+panic("attempt to execute unimplemented instruction '%s' "
+  "(inst 0x%08x)", mnemonic, machInst);
+}
+
+std::string
+generateDisassembly(Addr pc, const SymbolTable *symtab) const override
+{
+return csprintf("%-10s (unimplemented)", mnemonic);
+}
+};
+
+/**
+ * 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 SparcStaticInst
+{
+  private:
+/// Have we warned on this instruction yet?
+mutable bool warned;
+
+  public:
+/// Constructor
+WarnUnimplemented(const char *_mnemonic, ExtMachInst _machInst) :
+SparcStaticInst(_mnemonic, _machInst, No_OpClass),  
warned(false)

+{
+// don't call execute() (which panics) if we're on a
+// speculative path
+flags[IsNonSpeculative] = true;
+}
+
+Fault
+execute(ExecContext *xc, Trace::InstRecord *traceData) const override
+{
+if (!warned) {
+warn("instruction '%s' unimplemented\n", mnemonic);
+warned = true;
+}
+return NoFault;
+}
+
+std::string
+generateDisassembly(Addr pc, const