basic.isa revision 5268
17404SAli.Saidi@ARM.com// -*- mode:c++ -*- 210717Sandreas.hansson@arm.com 37404SAli.Saidi@ARM.com// -*- mode:c++ -*- 47404SAli.Saidi@ARM.com 57404SAli.Saidi@ARM.com// Copyright (c) 2003-2005 The Regents of The University of Michigan 67404SAli.Saidi@ARM.com// All rights reserved. 77404SAli.Saidi@ARM.com// 87404SAli.Saidi@ARM.com// Redistribution and use in source and binary forms, with or without 97404SAli.Saidi@ARM.com// modification, are permitted provided that the following conditions are 107404SAli.Saidi@ARM.com// met: redistributions of source code must retain the above copyright 117404SAli.Saidi@ARM.com// notice, this list of conditions and the following disclaimer; 127404SAli.Saidi@ARM.com// redistributions in binary form must reproduce the above copyright 137404SAli.Saidi@ARM.com// notice, this list of conditions and the following disclaimer in the 147404SAli.Saidi@ARM.com// documentation and/or other materials provided with the distribution; 157404SAli.Saidi@ARM.com// neither the name of the copyright holders nor the names of its 167404SAli.Saidi@ARM.com// contributors may be used to endorse or promote products derived from 177404SAli.Saidi@ARM.com// this software without specific prior written permission. 187404SAli.Saidi@ARM.com// 197404SAli.Saidi@ARM.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 207404SAli.Saidi@ARM.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 217404SAli.Saidi@ARM.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 227404SAli.Saidi@ARM.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 237404SAli.Saidi@ARM.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 247404SAli.Saidi@ARM.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 257404SAli.Saidi@ARM.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 267404SAli.Saidi@ARM.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 277404SAli.Saidi@ARM.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 287404SAli.Saidi@ARM.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 297404SAli.Saidi@ARM.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 307404SAli.Saidi@ARM.com// 317404SAli.Saidi@ARM.com// Authors: Steve Reinhardt 327404SAli.Saidi@ARM.com// Korey Sewell 337404SAli.Saidi@ARM.com 347404SAli.Saidi@ARM.com// Declarations for execute() methods. 357404SAli.Saidi@ARM.comdef template BasicExecDeclare {{ 367404SAli.Saidi@ARM.com Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const; 377404SAli.Saidi@ARM.com}}; 3810037SARM gem5 Developers 397404SAli.Saidi@ARM.com// Basic instruction class declaration template. 4010873Sandreas.sandberg@arm.comdef template BasicDeclare {{ 417404SAli.Saidi@ARM.com /** 4210474Sandreas.hansson@arm.com * Static instruction class for "%(mnemonic)s". 4310474Sandreas.hansson@arm.com */ 447404SAli.Saidi@ARM.com class %(class_name)s : public %(base_class)s 4510037SARM gem5 Developers { 4610037SARM gem5 Developers public: 477404SAli.Saidi@ARM.com /// Constructor. 487728SAli.Saidi@ARM.com %(class_name)s(MachInst machInst); 497404SAli.Saidi@ARM.com %(BasicExecDeclare)s 508245Snate@binkert.org }; 519152Satgutier@umich.edu}}; 528245Snate@binkert.org 538245Snate@binkert.org// Basic instruction class constructor template. 5410873Sandreas.sandberg@arm.comdef template BasicConstructor {{ 557748SAli.Saidi@ARM.com inline %(class_name)s::%(class_name)s(MachInst machInst) : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s) 567404SAli.Saidi@ARM.com { 577404SAli.Saidi@ARM.com %(constructor)s; 587404SAli.Saidi@ARM.com } 597404SAli.Saidi@ARM.com}}; 6010913Sandreas.sandberg@arm.com 6110717Sandreas.hansson@arm.com 6210717Sandreas.hansson@arm.com// Basic instruction class execute method template. 6310717Sandreas.hansson@arm.comdef template BasicExecute {{ 649258SAli.Saidi@ARM.com Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 6510621SCurtis.Dunham@arm.com { 6610621SCurtis.Dunham@arm.com Fault fault = NoFault; 6710037SARM gem5 Developers 6810037SARM gem5 Developers %(fp_enable_check)s; 6910037SARM gem5 Developers %(op_decl)s; 7010037SARM gem5 Developers %(op_rd)s; 717439Sdam.sunwoo@arm.com if(fault == NoFault) 727576SAli.Saidi@ARM.com { 7310037SARM gem5 Developers %(code)s; 7410037SARM gem5 Developers if(fault == NoFault){ 7510037SARM gem5 Developers %(op_wb)s; 7610717Sandreas.hansson@arm.com } 7710037SARM gem5 Developers } 7810037SARM gem5 Developers return fault; 7910037SARM gem5 Developers } 8010037SARM gem5 Developers}}; 8110037SARM gem5 Developers 8210037SARM gem5 Developers// Basic decode template. 8310037SARM gem5 Developersdef template BasicDecode {{ 8410037SARM gem5 Developers return new %(class_name)s(machInst); 8510037SARM gem5 Developers}}; 8610037SARM gem5 Developers 8710037SARM gem5 Developers// Basic decode template, passing mnemonic in as string arg to constructor. 8810037SARM gem5 Developersdef template BasicDecodeWithMnemonic {{ 897439Sdam.sunwoo@arm.com return new %(class_name)s("%(mnemonic)s", machInst); 907404SAli.Saidi@ARM.com}}; 917404SAli.Saidi@ARM.com 927404SAli.Saidi@ARM.com// The most basic instruction format... 937404SAli.Saidi@ARM.comdef format BasicOp(code, *flags) {{ 947404SAli.Saidi@ARM.com iop = InstObjParams(name, Name, 'MipsStaticInst', code, flags) 957404SAli.Saidi@ARM.com header_output = BasicDeclare.subst(iop) 9610717Sandreas.hansson@arm.com decoder_output = BasicConstructor.subst(iop) 9710717Sandreas.hansson@arm.com decode_block = BasicDecode.subst(iop) 9810717Sandreas.hansson@arm.com exec_output = BasicExecute.subst(iop) 9910717Sandreas.hansson@arm.com}}; 10010717Sandreas.hansson@arm.com