From 544eba88b94b693319eca6a2569f38449465b678 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 24 Aug 2017 17:05:20 -0700 Subject: x86: Add a "CondInst" format for conditionally decoded instructions. A condition can be specified which will tell the decoder whether to return the instruction being requested, or, if the condition fails, UD2. Change-Id: I0f1c075deb10754ce1dd88be1726a196294e41fd Reviewed-on: https://gem5-review.googlesource.com/4580 Reviewed-by: Michael LeBeane Maintainer: Gabe Black --- src/arch/x86/isa/formats/cond.isa | 51 ++++++++++++++++++++++++++++++++++++ src/arch/x86/isa/formats/formats.isa | 4 +++ 2 files changed, 55 insertions(+) create mode 100644 src/arch/x86/isa/formats/cond.isa (limited to 'src/arch') diff --git a/src/arch/x86/isa/formats/cond.isa b/src/arch/x86/isa/formats/cond.isa new file mode 100644 index 000000000..ab9232b20 --- /dev/null +++ b/src/arch/x86/isa/formats/cond.isa @@ -0,0 +1,51 @@ +// -*- mode:c++ -*- + +// Copyright 2017 Google, Inc. +// +// The license below extends only to copyright in the software and shall +// not be construed as granting a license to any other intellectual +// property including but not limited to intellectual property relating +// to a hardware implementation of the functionality of the software +// licensed hereunder. You may use the software subject to the license +// terms below provided that you ensure that this notice is replicated +// unmodified and in its entirety in all distributions of the software, +// modified or unmodified, in source code or in binary form. +// +// 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 + +def format CondInst(cond, *opTypeSet) {{ + blocks = OutputBlocks() + + if_blocks = specializeInst(Name, list(opTypeSet), EmulEnv()) + blocks.append(if_blocks) + else_blocks = specializeInst('UD2', [], EmulEnv()) + blocks.append(else_blocks) + + (header_output, decoder_output, + decode_block, exec_output) = blocks.makeList() + decode_block = '\tif (%s) {\n%s\n\t} else {\n%s\n}\n' % \ + (cond, if_blocks.decode_block, else_blocks.decode_block) +}}; diff --git a/src/arch/x86/isa/formats/formats.isa b/src/arch/x86/isa/formats/formats.isa index b5ffd4d59..6aed37faf 100644 --- a/src/arch/x86/isa/formats/formats.isa +++ b/src/arch/x86/isa/formats/formats.isa @@ -72,3 +72,7 @@ //Include a format which makes instructions who's sole purpose is to generate //a syscall. ##include "syscall.isa" + +//Include a format which is like Inst, except it conditionally decodes to the +//specified instruction, or if the condition fails decodes to UD2. +##include "cond.isa" -- cgit v1.2.3