main.isa revision 3953:300d526414e6
112853Sgabeblack@google.com// -*- mode:c++ -*- 212853Sgabeblack@google.com 312853Sgabeblack@google.com// Copyright (c) 2003-2005 The Regents of The University of Michigan 412853Sgabeblack@google.com// All rights reserved. 512853Sgabeblack@google.com// 612853Sgabeblack@google.com// Redistribution and use in source and binary forms, with or without 712853Sgabeblack@google.com// modification, are permitted provided that the following conditions are 812853Sgabeblack@google.com// met: redistributions of source code must retain the above copyright 912853Sgabeblack@google.com// notice, this list of conditions and the following disclaimer; 1012853Sgabeblack@google.com// redistributions in binary form must reproduce the above copyright 1112853Sgabeblack@google.com// notice, this list of conditions and the following disclaimer in the 1212853Sgabeblack@google.com// documentation and/or other materials provided with the distribution; 1312853Sgabeblack@google.com// neither the name of the copyright holders nor the names of its 1412853Sgabeblack@google.com// contributors may be used to endorse or promote products derived from 1512853Sgabeblack@google.com// this software without specific prior written permission. 1612853Sgabeblack@google.com// 1712853Sgabeblack@google.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1812853Sgabeblack@google.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1912853Sgabeblack@google.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2012853Sgabeblack@google.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2112853Sgabeblack@google.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2212853Sgabeblack@google.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2312853Sgabeblack@google.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2412853Sgabeblack@google.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2512853Sgabeblack@google.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2612853Sgabeblack@google.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2712853Sgabeblack@google.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2812853Sgabeblack@google.com// 2912853Sgabeblack@google.com// Authors: Steve Reinhardt 3012853Sgabeblack@google.com 3112853Sgabeblack@google.com//////////////////////////////////////////////////////////////////// 3212853Sgabeblack@google.com// 3312853Sgabeblack@google.com// Alpha ISA description file. 3412853Sgabeblack@google.com// 3512853Sgabeblack@google.com//////////////////////////////////////////////////////////////////// 3612853Sgabeblack@google.com 3712853Sgabeblack@google.com 3812853Sgabeblack@google.com//////////////////////////////////////////////////////////////////// 3912853Sgabeblack@google.com// 4012853Sgabeblack@google.com// Output include file directives. 4112853Sgabeblack@google.com// 4212853Sgabeblack@google.com 4312853Sgabeblack@google.comoutput header {{ 4412853Sgabeblack@google.com#include <sstream> 4512853Sgabeblack@google.com#include <iostream> 4612853Sgabeblack@google.com#include <iomanip> 4712853Sgabeblack@google.com 4812853Sgabeblack@google.com#include "arch/alpha/faults.hh" 4912853Sgabeblack@google.com#include "config/ss_compatible_fp.hh" 5012853Sgabeblack@google.com#include "cpu/static_inst.hh" 5112853Sgabeblack@google.com#include "mem/request.hh" // some constructors use MemReq flags 5212853Sgabeblack@google.com#include "mem/packet.hh" 5312853Sgabeblack@google.com}}; 5412853Sgabeblack@google.com 5512853Sgabeblack@google.comoutput decoder {{ 5612853Sgabeblack@google.com#include <cmath> 5713325Sgabeblack@google.com 5812853Sgabeblack@google.com#include "base/cprintf.hh" 5912853Sgabeblack@google.com#include "base/fenv.hh" 6012853Sgabeblack@google.com#include "base/loader/symtab.hh" 6112853Sgabeblack@google.com#include "config/ss_compatible_fp.hh" 6212853Sgabeblack@google.com#include "cpu/thread_context.hh" // for Jump::branchTarget() 6312853Sgabeblack@google.com#include "mem/packet.hh" 6412853Sgabeblack@google.com 6512853Sgabeblack@google.comusing namespace AlphaISA; 6612853Sgabeblack@google.com}}; 6712853Sgabeblack@google.com 6812853Sgabeblack@google.comoutput exec {{ 6912853Sgabeblack@google.com#include <math.h> 7012853Sgabeblack@google.com 7112853Sgabeblack@google.com#if FULL_SYSTEM 7212853Sgabeblack@google.com#include "sim/pseudo_inst.hh" 7312853Sgabeblack@google.com#endif 7412853Sgabeblack@google.com#include "arch/alpha/ipr.hh" 7512853Sgabeblack@google.com#include "base/fenv.hh" 7612853Sgabeblack@google.com#include "config/ss_compatible_fp.hh" 7712853Sgabeblack@google.com#include "cpu/base.hh" 7812853Sgabeblack@google.com#include "cpu/exetrace.hh" 7912853Sgabeblack@google.com#include "mem/packet.hh" 8012853Sgabeblack@google.com#include "mem/packet_access.hh" 8112853Sgabeblack@google.com#include "sim/sim_exit.hh" 8212853Sgabeblack@google.com 8312853Sgabeblack@google.comusing namespace AlphaISA; 8412853Sgabeblack@google.com}}; 8512853Sgabeblack@google.com 8612853Sgabeblack@google.com//////////////////////////////////////////////////////////////////// 8712853Sgabeblack@google.com// 8812853Sgabeblack@google.com// Namespace statement. Everything below this line will be in the 8912853Sgabeblack@google.com// AlphaISAInst namespace. 9012853Sgabeblack@google.com// 9112853Sgabeblack@google.com 9212853Sgabeblack@google.com 9312853Sgabeblack@google.comnamespace AlphaISA; 9412853Sgabeblack@google.com 9512853Sgabeblack@google.com//////////////////////////////////////////////////////////////////// 9612853Sgabeblack@google.com// 9712853Sgabeblack@google.com// Bitfield definitions. 9812853Sgabeblack@google.com// 9912853Sgabeblack@google.com 10012853Sgabeblack@google.com// Universal (format-independent) fields 10112853Sgabeblack@google.comdef bitfield PALMODE <32:32>; 10212853Sgabeblack@google.comdef bitfield OPCODE <31:26>; 10312853Sgabeblack@google.comdef bitfield RA <25:21>; 10412853Sgabeblack@google.comdef bitfield RB <20:16>; 10512853Sgabeblack@google.com 10612853Sgabeblack@google.com// Memory format 10712853Sgabeblack@google.comdef signed bitfield MEMDISP <15: 0>; // displacement 10812853Sgabeblack@google.comdef bitfield MEMFUNC <15: 0>; // function code (same field, unsigned) 10912853Sgabeblack@google.com 11012853Sgabeblack@google.com// Memory-format jumps 11112853Sgabeblack@google.comdef bitfield JMPFUNC <15:14>; // function code (disp<15:14>) 11212853Sgabeblack@google.comdef bitfield JMPHINT <13: 0>; // tgt Icache idx hint (disp<13:0>) 11312853Sgabeblack@google.com 11412853Sgabeblack@google.com// Branch format 11512853Sgabeblack@google.comdef signed bitfield BRDISP <20: 0>; // displacement 11612853Sgabeblack@google.com 11712853Sgabeblack@google.com// Integer operate format(s>; 11812853Sgabeblack@google.comdef bitfield INTIMM <20:13>; // integer immediate (literal) 11912853Sgabeblack@google.comdef bitfield IMM <12:12>; // immediate flag 12012853Sgabeblack@google.comdef bitfield INTFUNC <11: 5>; // function code 12112853Sgabeblack@google.comdef bitfield RC < 4: 0>; // dest reg 12212853Sgabeblack@google.com 12312853Sgabeblack@google.com// Floating-point operate format 12412853Sgabeblack@google.comdef bitfield FA <25:21>; 12512853Sgabeblack@google.comdef bitfield FB <20:16>; 12612853Sgabeblack@google.comdef bitfield FP_FULLFUNC <15: 5>; // complete function code 12712853Sgabeblack@google.com def bitfield FP_TRAPMODE <15:13>; // trapping mode 12812853Sgabeblack@google.com def bitfield FP_ROUNDMODE <12:11>; // rounding mode 12912853Sgabeblack@google.com def bitfield FP_TYPEFUNC <10: 5>; // type+func: handiest for decoding 13012853Sgabeblack@google.com def bitfield FP_SRCTYPE <10: 9>; // source reg type 13112853Sgabeblack@google.com def bitfield FP_SHORTFUNC < 8: 5>; // short function code 13212853Sgabeblack@google.com def bitfield FP_SHORTFUNC_TOP2 <8:7>; // top 2 bits of short func code 13312853Sgabeblack@google.comdef bitfield FC < 4: 0>; // dest reg 13412853Sgabeblack@google.com 13512853Sgabeblack@google.com// PALcode format 13612853Sgabeblack@google.comdef bitfield PALFUNC <25: 0>; // function code 13712853Sgabeblack@google.com 13812853Sgabeblack@google.com// EV5 PAL instructions: 13912853Sgabeblack@google.com// HW_LD/HW_ST 14012853Sgabeblack@google.comdef bitfield HW_LDST_PHYS <15>; // address is physical 14112853Sgabeblack@google.comdef bitfield HW_LDST_ALT <14>; // use ALT_MODE IPR 14212853Sgabeblack@google.comdef bitfield HW_LDST_WRTCK <13>; // HW_LD only: fault if no write acc 14312853Sgabeblack@google.comdef bitfield HW_LDST_QUAD <12>; // size: 0=32b, 1=64b 14412853Sgabeblack@google.comdef bitfield HW_LDST_VPTE <11>; // HW_LD only: is PTE fetch 14512853Sgabeblack@google.comdef bitfield HW_LDST_LOCK <10>; // HW_LD only: is load locked 14612853Sgabeblack@google.comdef bitfield HW_LDST_COND <10>; // HW_ST only: is store conditional 14712853Sgabeblack@google.comdef signed bitfield HW_LDST_DISP <9:0>; // signed displacement 14812853Sgabeblack@google.com 14912853Sgabeblack@google.com// HW_REI 15012853Sgabeblack@google.comdef bitfield HW_REI_TYP <15:14>; // type: stalling vs. non-stallingk 15112853Sgabeblack@google.comdef bitfield HW_REI_MBZ <13: 0>; // must be zero 15212853Sgabeblack@google.com 15312853Sgabeblack@google.com// HW_MTPR/MW_MFPR 15412853Sgabeblack@google.comdef bitfield HW_IPR_IDX <15:0>; // IPR index 15512853Sgabeblack@google.com 15612853Sgabeblack@google.com// M5 instructions 15712853Sgabeblack@google.comdef bitfield M5FUNC <7:0>; 15812853Sgabeblack@google.com 15912853Sgabeblack@google.comdef operand_types {{ 16012853Sgabeblack@google.com 'sb' : ('signed int', 8), 16112853Sgabeblack@google.com 'ub' : ('unsigned int', 8), 16212853Sgabeblack@google.com 'sw' : ('signed int', 16), 16312853Sgabeblack@google.com 'uw' : ('unsigned int', 16), 16412853Sgabeblack@google.com 'sl' : ('signed int', 32), 16512853Sgabeblack@google.com 'ul' : ('unsigned int', 32), 16612853Sgabeblack@google.com 'sq' : ('signed int', 64), 16712853Sgabeblack@google.com 'uq' : ('unsigned int', 64), 16812853Sgabeblack@google.com 'sf' : ('float', 32), 16912853Sgabeblack@google.com 'df' : ('float', 64) 17012853Sgabeblack@google.com}}; 17112853Sgabeblack@google.com 17212853Sgabeblack@google.comdef operands {{ 17312853Sgabeblack@google.com # Int regs default to unsigned, but code should not count on this. 17412853Sgabeblack@google.com # For clarity, descriptions that depend on unsigned behavior should 17512853Sgabeblack@google.com # explicitly specify '.uq'. 17612853Sgabeblack@google.com 'Ra': ('IntReg', 'uq', 'PALMODE ? AlphaISA::reg_redir[RA] : RA', 17712853Sgabeblack@google.com 'IsInteger', 1), 17812853Sgabeblack@google.com 'Rb': ('IntReg', 'uq', 'PALMODE ? AlphaISA::reg_redir[RB] : RB', 17912853Sgabeblack@google.com 'IsInteger', 2), 18012853Sgabeblack@google.com 'Rc': ('IntReg', 'uq', 'PALMODE ? AlphaISA::reg_redir[RC] : RC', 18112853Sgabeblack@google.com 'IsInteger', 3), 18212853Sgabeblack@google.com 'Fa': ('FloatReg', 'df', 'FA', 'IsFloating', 1), 18312853Sgabeblack@google.com 'Fb': ('FloatReg', 'df', 'FB', 'IsFloating', 2), 18412853Sgabeblack@google.com 'Fc': ('FloatReg', 'df', 'FC', 'IsFloating', 3), 18512853Sgabeblack@google.com 'Mem': ('Mem', 'uq', None, ('IsMemRef', 'IsLoad', 'IsStore'), 4), 18612853Sgabeblack@google.com 'NPC': ('NPC', 'uq', None, ( None, None, 'IsControl' ), 4), 18712853Sgabeblack@google.com 'Runiq': ('ControlReg', 'uq', 'MISCREG_UNIQ', None, 1), 18812853Sgabeblack@google.com 'FPCR': ('ControlReg', 'uq', 'MISCREG_FPCR', None, 1), 18912853Sgabeblack@google.com 'IntrFlag': ('ControlReg', 'uq', 'MISCREG_INTR', None, 1), 19012853Sgabeblack@google.com # The next two are hacks for non-full-system call-pal emulation 19112853Sgabeblack@google.com 'R0': ('IntReg', 'uq', '0', None, 1), 19212853Sgabeblack@google.com 'R16': ('IntReg', 'uq', '16', None, 1), 19312853Sgabeblack@google.com 'R17': ('IntReg', 'uq', '17', None, 1), 19412853Sgabeblack@google.com 'R18': ('IntReg', 'uq', '18', None, 1) 19512853Sgabeblack@google.com}}; 19612853Sgabeblack@google.com 19712853Sgabeblack@google.com//////////////////////////////////////////////////////////////////// 19812853Sgabeblack@google.com// 19912853Sgabeblack@google.com// Basic instruction classes/templates/formats etc. 20012853Sgabeblack@google.com// 20112853Sgabeblack@google.com 20212853Sgabeblack@google.comoutput header {{ 20312853Sgabeblack@google.com// uncomment the following to get SimpleScalar-compatible disassembly 20412853Sgabeblack@google.com// (useful for diffing output traces). 20512853Sgabeblack@google.com// #define SS_COMPATIBLE_DISASSEMBLY 20612853Sgabeblack@google.com 20712853Sgabeblack@google.com /** 20812853Sgabeblack@google.com * Base class for all Alpha static instructions. 20912853Sgabeblack@google.com */ 21012853Sgabeblack@google.com class AlphaStaticInst : public StaticInst 21112853Sgabeblack@google.com { 21212853Sgabeblack@google.com protected: 21312853Sgabeblack@google.com 21412853Sgabeblack@google.com /// Make AlphaISA register dependence tags directly visible in 21512853Sgabeblack@google.com /// this class and derived classes. Maybe these should really 21612853Sgabeblack@google.com /// live here and not in the AlphaISA namespace. 21712853Sgabeblack@google.com enum DependenceTags { 21812853Sgabeblack@google.com FP_Base_DepTag = AlphaISA::FP_Base_DepTag, 21912853Sgabeblack@google.com }; 22012853Sgabeblack@google.com 22112853Sgabeblack@google.com /// Constructor. 22212853Sgabeblack@google.com AlphaStaticInst(const char *mnem, ExtMachInst _machInst, 22312853Sgabeblack@google.com OpClass __opClass) 22412853Sgabeblack@google.com : StaticInst(mnem, _machInst, __opClass) 22512853Sgabeblack@google.com { 22612853Sgabeblack@google.com } 22712853Sgabeblack@google.com 22812853Sgabeblack@google.com /// Print a register name for disassembly given the unique 22912853Sgabeblack@google.com /// dependence tag number (FP or int). 23012853Sgabeblack@google.com void printReg(std::ostream &os, int reg) const; 23112853Sgabeblack@google.com 23212853Sgabeblack@google.com std::string 23312853Sgabeblack@google.com generateDisassembly(Addr pc, const SymbolTable *symtab) const; 23412853Sgabeblack@google.com }; 23512853Sgabeblack@google.com}}; 23612853Sgabeblack@google.com 23712853Sgabeblack@google.comoutput decoder {{ 23812853Sgabeblack@google.com void 23912853Sgabeblack@google.com AlphaStaticInst::printReg(std::ostream &os, int reg) const 24012853Sgabeblack@google.com { 24112853Sgabeblack@google.com if (reg < FP_Base_DepTag) { 24212853Sgabeblack@google.com ccprintf(os, "r%d", reg); 24312853Sgabeblack@google.com } 24412853Sgabeblack@google.com else { 24512853Sgabeblack@google.com ccprintf(os, "f%d", reg - FP_Base_DepTag); 24612853Sgabeblack@google.com } 24712853Sgabeblack@google.com } 24812853Sgabeblack@google.com 24912853Sgabeblack@google.com std::string 25012853Sgabeblack@google.com AlphaStaticInst::generateDisassembly(Addr pc, 25112853Sgabeblack@google.com const SymbolTable *symtab) const 25212853Sgabeblack@google.com { 25312853Sgabeblack@google.com std::stringstream ss; 25412853Sgabeblack@google.com 25512853Sgabeblack@google.com ccprintf(ss, "%-10s ", mnemonic); 25612853Sgabeblack@google.com 25712853Sgabeblack@google.com // just print the first two source regs... if there's 25812853Sgabeblack@google.com // a third one, it's a read-modify-write dest (Rc), 25912853Sgabeblack@google.com // e.g. for CMOVxx 26012853Sgabeblack@google.com if (_numSrcRegs > 0) { 26112853Sgabeblack@google.com printReg(ss, _srcRegIdx[0]); 26212853Sgabeblack@google.com } 26312853Sgabeblack@google.com if (_numSrcRegs > 1) { 26412853Sgabeblack@google.com ss << ","; 26512853Sgabeblack@google.com printReg(ss, _srcRegIdx[1]); 26612853Sgabeblack@google.com } 26712853Sgabeblack@google.com 26813325Sgabeblack@google.com // just print the first dest... if there's a second one, 26912853Sgabeblack@google.com // it's generally implicit 27012853Sgabeblack@google.com if (_numDestRegs > 0) { 27112853Sgabeblack@google.com if (_numSrcRegs > 0) 27212853Sgabeblack@google.com ss << ","; 27312853Sgabeblack@google.com printReg(ss, _destRegIdx[0]); 27412853Sgabeblack@google.com } 27512853Sgabeblack@google.com 27612853Sgabeblack@google.com return ss.str(); 27712853Sgabeblack@google.com } 27812853Sgabeblack@google.com}}; 27912853Sgabeblack@google.com 28012853Sgabeblack@google.com// Declarations for execute() methods. 28112853Sgabeblack@google.comdef template BasicExecDeclare {{ 28212853Sgabeblack@google.com Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const; 28312853Sgabeblack@google.com}}; 284 285// Basic instruction class declaration template. 286def template BasicDeclare {{ 287 /** 288 * Static instruction class for "%(mnemonic)s". 289 */ 290 class %(class_name)s : public %(base_class)s 291 { 292 public: 293 /// Constructor. 294 %(class_name)s(ExtMachInst machInst); 295 296 %(BasicExecDeclare)s 297 }; 298}}; 299 300// Basic instruction class constructor template. 301def template BasicConstructor {{ 302 inline %(class_name)s::%(class_name)s(ExtMachInst machInst) 303 : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s) 304 { 305 %(constructor)s; 306 } 307}}; 308 309// Basic instruction class execute method template. 310def template BasicExecute {{ 311 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, 312 Trace::InstRecord *traceData) const 313 { 314 Fault fault = NoFault; 315 316 %(fp_enable_check)s; 317 %(op_decl)s; 318 %(op_rd)s; 319 %(code)s; 320 321 if (fault == NoFault) { 322 %(op_wb)s; 323 } 324 325 return fault; 326 } 327}}; 328 329// Basic decode template. 330def template BasicDecode {{ 331 return new %(class_name)s(machInst); 332}}; 333 334// Basic decode template, passing mnemonic in as string arg to constructor. 335def template BasicDecodeWithMnemonic {{ 336 return new %(class_name)s("%(mnemonic)s", machInst); 337}}; 338 339// The most basic instruction format... used only for a few misc. insts 340def format BasicOperate(code, *flags) {{ 341 iop = InstObjParams(name, Name, 'AlphaStaticInst', code, flags) 342 header_output = BasicDeclare.subst(iop) 343 decoder_output = BasicConstructor.subst(iop) 344 decode_block = BasicDecode.subst(iop) 345 exec_output = BasicExecute.subst(iop) 346}}; 347 348 349 350//////////////////////////////////////////////////////////////////// 351// 352// Nop 353// 354 355output header {{ 356 /** 357 * Static instruction class for no-ops. This is a leaf class. 358 */ 359 class Nop : public AlphaStaticInst 360 { 361 /// Disassembly of original instruction. 362 const std::string originalDisassembly; 363 364 public: 365 /// Constructor 366 Nop(const std::string _originalDisassembly, ExtMachInst _machInst) 367 : AlphaStaticInst("nop", _machInst, No_OpClass), 368 originalDisassembly(_originalDisassembly) 369 { 370 flags[IsNop] = true; 371 } 372 373 ~Nop() { } 374 375 std::string 376 generateDisassembly(Addr pc, const SymbolTable *symtab) const; 377 378 %(BasicExecDeclare)s 379 }; 380 381 /// Helper function for decoding nops. Substitute Nop object 382 /// for original inst passed in as arg (and delete latter). 383 static inline 384 AlphaStaticInst * 385 makeNop(AlphaStaticInst *inst) 386 { 387 AlphaStaticInst *nop = new Nop(inst->disassemble(0), inst->machInst); 388 delete inst; 389 return nop; 390 } 391}}; 392 393output decoder {{ 394 std::string Nop::generateDisassembly(Addr pc, 395 const SymbolTable *symtab) const 396 { 397#ifdef SS_COMPATIBLE_DISASSEMBLY 398 return originalDisassembly; 399#else 400 return csprintf("%-10s (%s)", "nop", originalDisassembly); 401#endif 402 } 403}}; 404 405output exec {{ 406 Fault 407 Nop::execute(%(CPU_exec_context)s *, Trace::InstRecord *) const 408 { 409 return NoFault; 410 } 411}}; 412 413// integer & FP operate instructions use Rc as dest, so check for 414// Rc == 31 to detect nops 415def template OperateNopCheckDecode {{ 416 { 417 AlphaStaticInst *i = new %(class_name)s(machInst); 418 if (RC == 31) { 419 i = makeNop(i); 420 } 421 return i; 422 } 423}}; 424 425// Like BasicOperate format, but generates NOP if RC/FC == 31 426def format BasicOperateWithNopCheck(code, *opt_args) {{ 427 iop = InstObjParams(name, Name, 'AlphaStaticInst', code, opt_args) 428 header_output = BasicDeclare.subst(iop) 429 decoder_output = BasicConstructor.subst(iop) 430 decode_block = OperateNopCheckDecode.subst(iop) 431 exec_output = BasicExecute.subst(iop) 432}}; 433 434// Integer instruction templates, formats, etc. 435##include "int.isa" 436 437// Floating-point instruction templates, formats, etc. 438##include "fp.isa" 439 440// Memory instruction templates, formats, etc. 441##include "mem.isa" 442 443// Branch/jump instruction templates, formats, etc. 444##include "branch.isa" 445 446// PAL instruction templates, formats, etc. 447##include "pal.isa" 448 449// Opcdec fault instruction templates, formats, etc. 450##include "opcdec.isa" 451 452// Unimplemented instruction templates, formats, etc. 453##include "unimp.isa" 454 455// Unknown instruction templates, formats, etc. 456##include "unknown.isa" 457 458// Execution utility functions 459##include "util.isa" 460 461// The actual decoder 462##include "decoder.isa" 463