basic.isa revision 6019
16019Shines@cs.fsu.edu// -*- mode:c++ -*- 26019Shines@cs.fsu.edu 36019Shines@cs.fsu.edu// Copyright (c) 2007-2008 The Florida State University 46019Shines@cs.fsu.edu// All rights reserved. 56019Shines@cs.fsu.edu// 66019Shines@cs.fsu.edu// Redistribution and use in source and binary forms, with or without 76019Shines@cs.fsu.edu// modification, are permitted provided that the following conditions are 86019Shines@cs.fsu.edu// met: redistributions of source code must retain the above copyright 96019Shines@cs.fsu.edu// notice, this list of conditions and the following disclaimer; 106019Shines@cs.fsu.edu// redistributions in binary form must reproduce the above copyright 116019Shines@cs.fsu.edu// notice, this list of conditions and the following disclaimer in the 126019Shines@cs.fsu.edu// documentation and/or other materials provided with the distribution; 136019Shines@cs.fsu.edu// neither the name of the copyright holders nor the names of its 146019Shines@cs.fsu.edu// contributors may be used to endorse or promote products derived from 156019Shines@cs.fsu.edu// this software without specific prior written permission. 166019Shines@cs.fsu.edu// 176019Shines@cs.fsu.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 186019Shines@cs.fsu.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 196019Shines@cs.fsu.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 206019Shines@cs.fsu.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 216019Shines@cs.fsu.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 226019Shines@cs.fsu.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 236019Shines@cs.fsu.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 246019Shines@cs.fsu.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 256019Shines@cs.fsu.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 266019Shines@cs.fsu.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 276019Shines@cs.fsu.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 286019Shines@cs.fsu.edu// 296019Shines@cs.fsu.edu// Authors: Stephen Hines 306019Shines@cs.fsu.edu 316019Shines@cs.fsu.edu// Declarations for execute() methods. 326019Shines@cs.fsu.edudef template BasicExecDeclare {{ 336019Shines@cs.fsu.edu Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const; 346019Shines@cs.fsu.edu}}; 356019Shines@cs.fsu.edu 366019Shines@cs.fsu.edu// Basic instruction class declaration template. 376019Shines@cs.fsu.edudef template BasicDeclare {{ 386019Shines@cs.fsu.edu /** 396019Shines@cs.fsu.edu * Static instruction class for "%(mnemonic)s". 406019Shines@cs.fsu.edu */ 416019Shines@cs.fsu.edu class %(class_name)s : public %(base_class)s 426019Shines@cs.fsu.edu { 436019Shines@cs.fsu.edu public: 446019Shines@cs.fsu.edu /// Constructor. 456019Shines@cs.fsu.edu %(class_name)s(MachInst machInst); 466019Shines@cs.fsu.edu %(BasicExecDeclare)s 476019Shines@cs.fsu.edu }; 486019Shines@cs.fsu.edu}}; 496019Shines@cs.fsu.edu 506019Shines@cs.fsu.edu// Basic instruction class constructor template. 516019Shines@cs.fsu.edudef template BasicConstructor {{ 526019Shines@cs.fsu.edu inline %(class_name)s::%(class_name)s(MachInst machInst) : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s) 536019Shines@cs.fsu.edu { 546019Shines@cs.fsu.edu %(constructor)s; 556019Shines@cs.fsu.edu } 566019Shines@cs.fsu.edu}}; 576019Shines@cs.fsu.edu 586019Shines@cs.fsu.edu 596019Shines@cs.fsu.edu// Basic instruction class execute method template. 606019Shines@cs.fsu.edudef template BasicExecute {{ 616019Shines@cs.fsu.edu Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 626019Shines@cs.fsu.edu { 636019Shines@cs.fsu.edu Fault fault = NoFault; 646019Shines@cs.fsu.edu 656019Shines@cs.fsu.edu %(fp_enable_check)s; 666019Shines@cs.fsu.edu %(op_decl)s; 676019Shines@cs.fsu.edu %(op_rd)s; 686019Shines@cs.fsu.edu %(code)s; 696019Shines@cs.fsu.edu 706019Shines@cs.fsu.edu if (fault == NoFault) 716019Shines@cs.fsu.edu { 726019Shines@cs.fsu.edu %(op_wb)s; 736019Shines@cs.fsu.edu } 746019Shines@cs.fsu.edu return fault; 756019Shines@cs.fsu.edu } 766019Shines@cs.fsu.edu}}; 776019Shines@cs.fsu.edu 786019Shines@cs.fsu.edu// Basic decode template. 796019Shines@cs.fsu.edudef template BasicDecode {{ 806019Shines@cs.fsu.edu return new %(class_name)s(machInst); 816019Shines@cs.fsu.edu}}; 826019Shines@cs.fsu.edu 836019Shines@cs.fsu.edu// Basic decode template, passing mnemonic in as string arg to constructor. 846019Shines@cs.fsu.edudef template BasicDecodeWithMnemonic {{ 856019Shines@cs.fsu.edu return new %(class_name)s("%(mnemonic)s", machInst); 866019Shines@cs.fsu.edu}}; 876019Shines@cs.fsu.edu 886019Shines@cs.fsu.edu// Definitions of execute methods that panic. 896019Shines@cs.fsu.edudef template BasicExecPanic {{ 906019Shines@cs.fsu.eduFault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const 916019Shines@cs.fsu.edu{ 926019Shines@cs.fsu.edu panic("Execute method called when it shouldn't!"); 936019Shines@cs.fsu.edu} 946019Shines@cs.fsu.edu}}; 956019Shines@cs.fsu.edu 966019Shines@cs.fsu.edu// The most basic instruction format... 976019Shines@cs.fsu.edudef format BasicOp(code, *flags) {{ 986019Shines@cs.fsu.edu iop = InstObjParams(name, Name, 'ArmStaticInst', code, flags) 996019Shines@cs.fsu.edu header_output = BasicDeclare.subst(iop) 1006019Shines@cs.fsu.edu decoder_output = BasicConstructor.subst(iop) 1016019Shines@cs.fsu.edu decode_block = BasicDecode.subst(iop) 1026019Shines@cs.fsu.edu exec_output = BasicExecute.subst(iop) 1036019Shines@cs.fsu.edu}}; 104