xref: /netbsd-src/external/gpl3/binutils/dist/cpu/mt.cpu (revision be12b8bcaf6171e22ce54bb82a70fb1a78be9ab5)
12a6b7db3Sskrll; Morpho Technologies MT Arch description.  -*- Scheme -*-
2*be12b8bcSchristos; Copyright 2001, 2007, 2009 Free Software Foundation, Inc.
32a6b7db3Sskrll;
42a6b7db3Sskrll; Contributed by Red Hat Inc; developed under contract from
52a6b7db3Sskrll; Morpho Technologies.
62a6b7db3Sskrll;
72a6b7db3Sskrll; This file is part of the GNU Binutils.
82a6b7db3Sskrll;
92a6b7db3Sskrll; This program is free software; you can redistribute it and/or modify
102a6b7db3Sskrll; it under the terms of the GNU General Public License as published by
112a6b7db3Sskrll; the Free Software Foundation; either version 3 of the License, or
122a6b7db3Sskrll; (at your option) any later version.
132a6b7db3Sskrll;
142a6b7db3Sskrll; This program is distributed in the hope that it will be useful,
152a6b7db3Sskrll; but WITHOUT ANY WARRANTY; without even the implied warranty of
162a6b7db3Sskrll; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
172a6b7db3Sskrll; GNU General Public License for more details.
182a6b7db3Sskrll;
192a6b7db3Sskrll; You should have received a copy of the GNU General Public License
202a6b7db3Sskrll; along with this program; if not, write to the Free Software
212a6b7db3Sskrll; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
222a6b7db3Sskrll; MA 02110-1301, USA.
232a6b7db3Sskrll
242a6b7db3Sskrll(include "simplify.inc")
252a6b7db3Sskrll
262a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
272a6b7db3Sskrll;; Define The Architecture, Attributes, ISA, CPU, Machine, And Model. ;;
282a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
292a6b7db3Sskrll
302a6b7db3Sskrll; define-arch must appear first
312a6b7db3Sskrll(define-arch
322a6b7db3Sskrll  (name mt) ; name of cpu family
332a6b7db3Sskrll  (comment "Morpho Technologies mRISC family")
342a6b7db3Sskrll  (default-alignment aligned)
352a6b7db3Sskrll  (insn-lsb0? #t)
362a6b7db3Sskrll  (machs ms1 ms1-003 ms2)
372a6b7db3Sskrll  (isas mt)
382a6b7db3Sskrll)
392a6b7db3Sskrll
402a6b7db3Sskrll; Instruction set parameters.
412a6b7db3Sskrll
422a6b7db3Sskrll(define-isa
432a6b7db3Sskrll  (name mt)
442a6b7db3Sskrll  (comment "Morpho Technologies MT ISA")
452a6b7db3Sskrll  (default-insn-word-bitsize 32)
462a6b7db3Sskrll  (default-insn-bitsize 32)
472a6b7db3Sskrll  (base-insn-bitsize 32)
482a6b7db3Sskrll  (parallel-insns 2)
492a6b7db3Sskrll)
502a6b7db3Sskrll
512a6b7db3Sskrll; Cpu family definitions.
522a6b7db3Sskrll
532a6b7db3Sskrll
542a6b7db3Sskrll(define-cpu
552a6b7db3Sskrll  ; cpu names must be distinct from the architecture name and machine names.
562a6b7db3Sskrll  (name ms1bf)
572a6b7db3Sskrll  (comment "Morpho Technologies mRISC family")
582a6b7db3Sskrll  (endian big)
592a6b7db3Sskrll  (word-bitsize 32)
602a6b7db3Sskrll)
612a6b7db3Sskrll
622a6b7db3Sskrll(define-cpu
632a6b7db3Sskrll  ; cpu names must be distinct from the architecture name and machine names.
642a6b7db3Sskrll  (name ms1-003bf)
652a6b7db3Sskrll  (comment "Morpho Technologies mRISC family")
662a6b7db3Sskrll  (endian big)
672a6b7db3Sskrll  (word-bitsize 32)
682a6b7db3Sskrll)
692a6b7db3Sskrll
702a6b7db3Sskrll(define-cpu
712a6b7db3Sskrll  ; cpu names must be distinct from the architecture name and machine names.
722a6b7db3Sskrll  (name ms2bf)
732a6b7db3Sskrll  (comment "Morpho Technologies mRISC family")
742a6b7db3Sskrll  (endian big)
752a6b7db3Sskrll  (word-bitsize 32)
762a6b7db3Sskrll)
772a6b7db3Sskrll
782a6b7db3Sskrll(define-mach
792a6b7db3Sskrll  (name ms1)
802a6b7db3Sskrll  (comment "Morpho Technologies mrisc")
812a6b7db3Sskrll  (cpu ms1bf)
822a6b7db3Sskrll  (isas mt)
832a6b7db3Sskrll)
842a6b7db3Sskrll
852a6b7db3Sskrll(define-mach
862a6b7db3Sskrll  (name ms1-003)
872a6b7db3Sskrll  (comment "Morpho Technologies mrisc")
882a6b7db3Sskrll  (cpu ms1-003bf)
892a6b7db3Sskrll  (isas mt)
902a6b7db3Sskrll)
912a6b7db3Sskrll
922a6b7db3Sskrll(define-mach
932a6b7db3Sskrll  (name ms2)
942a6b7db3Sskrll  (comment "Morpho Technologies ms2")
952a6b7db3Sskrll  (cpu ms2bf)
962a6b7db3Sskrll  (isas mt)
972a6b7db3Sskrll)
982a6b7db3Sskrll
992a6b7db3Sskrll
1002a6b7db3Sskrll; Model descriptions.
1012a6b7db3Sskrll; Can probably take the u-exec out.  We'll see.
1022a6b7db3Sskrll(define-model
1032a6b7db3Sskrll  (name ms1)
1042a6b7db3Sskrll  (comment "Morpho Technologies mrisc")
1052a6b7db3Sskrll  (mach ms1)
1062a6b7db3Sskrll  (unit u-exec "Execution Unit" ()
1072a6b7db3Sskrll	1 1 ; issue done
1082a6b7db3Sskrll	() ; state
1092a6b7db3Sskrll	() ; inputs
1102a6b7db3Sskrll	() ; outputs
1112a6b7db3Sskrll	() ; profile action (default)
1122a6b7db3Sskrll	)
1132a6b7db3Sskrll)
1142a6b7db3Sskrll
1152a6b7db3Sskrll(define-model
1162a6b7db3Sskrll  (name ms1-003)
1172a6b7db3Sskrll  (comment "Morpho Technologies mrisc")
1182a6b7db3Sskrll  (mach ms1-003)
1192a6b7db3Sskrll  (unit u-exec "Execution Unit" ()
1202a6b7db3Sskrll	1 1 ; issue done
1212a6b7db3Sskrll	() ; state
1222a6b7db3Sskrll	() ; inputs
1232a6b7db3Sskrll	() ; outputs
1242a6b7db3Sskrll	() ; profile action (default)
1252a6b7db3Sskrll	)
1262a6b7db3Sskrll)
1272a6b7db3Sskrll
1282a6b7db3Sskrll(define-model
1292a6b7db3Sskrll  (name ms2)
1302a6b7db3Sskrll  (comment "Morpho Technologies ms2")
1312a6b7db3Sskrll  (mach ms2)
1322a6b7db3Sskrll  (unit u-exec "Execution Unit" ()
1332a6b7db3Sskrll	1 1 ; issue done
1342a6b7db3Sskrll	() ; state
1352a6b7db3Sskrll	() ; inputs
1362a6b7db3Sskrll	() ; outputs
1372a6b7db3Sskrll	() ; profile action (default)
1382a6b7db3Sskrll	)
1392a6b7db3Sskrll)
1402a6b7db3Sskrll
1412a6b7db3Sskrll; FIXME: It might simplify things to separate the execute process from the
1422a6b7db3Sskrll; one that updates the PC.
1432a6b7db3Sskrll
1442a6b7db3Sskrll
1452a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;
1462a6b7db3Sskrll;; Instruction Fields ;;
1472a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;
1482a6b7db3Sskrll
1492a6b7db3Sskrll; Attributes:
1502a6b7db3Sskrll; PCREL-ADDR: pc relative value (for reloc and disassembly purposes)
1512a6b7db3Sskrll; ABS-ADDR: absolute address (for reloc and disassembly purposes?)
1522a6b7db3Sskrll; RESERVED: bits are not used to decode insn, must be all 0
1532a6b7db3Sskrll; RELOC: there is a relocation associated with this field (experiment)
1542a6b7db3Sskrll;
1552a6b7db3Sskrll; f-msys: Identify a a morphosys insns.  1 if msys, 0 if not.
1562a6b7db3Sskrll; f-opc: 6 bit opcode for non-morphosys instructions.
1572a6b7db3Sskrll; f-msopc: 6 bit opcode for morphosys instructions.
1582a6b7db3Sskrll; f-imm: flag to indicate use of an immediate operand.  1 if yes, 0 if no.
1592a6b7db3Sskrll; f-sr1: source resgister 1. (also used for MSYS insns)
1602a6b7db3Sskrll; f-sr2: source register 2. (also used for MSYS insns)
1612a6b7db3Sskrll; f-dr: destination register when located in bits 19:16.
1622a6b7db3Sskrll; f-drrr: destination register when located in bits 15:12. (also for MSYS insns)
1632a6b7db3Sskrll; f-imm16: 16 bit immediate value when not an offset.
1642a6b7db3Sskrll; f-imm16a: 16 bit immediate value when it's a pc-rel offset.
1652a6b7db3Sskrll; f-uu4a: unused 4 bit field.
1662a6b7db3Sskrll; f-uu4b: second unsed 4 bit field.
1672a6b7db3Sskrll; f-uu1: unused 1 bit field
1682a6b7db3Sskrll; f-uu12: unused 12 bit field.
1692a6b7db3Sskrll; f-uu16: unused 16 bit field.
1702a6b7db3Sskrll; f-uu24: unused 24 bit field.
1712a6b7db3Sskrll
1722a6b7db3Sskrll(dnf f-msys      "morphosys insn flag"  	() 31 1)
1732a6b7db3Sskrll(dnf f-opc       "opcode field"			() 30 6)
1742a6b7db3Sskrll(dnf f-imm       "immedate flag"		() 24 1)
1752a6b7db3Sskrll(dnf f-uu24      "unused 24 bits"               () 23 24)
1762a6b7db3Sskrll(dnf f-sr1       "sr1 register field"	(ABS-ADDR) 23 4)
1772a6b7db3Sskrll(dnf f-sr2       "sr2 register field"	(ABS-ADDR) 19 4)
1782a6b7db3Sskrll(dnf f-dr        "dr register field"	(ABS-ADDR) 19 4)
1792a6b7db3Sskrll(dnf f-drrr      "drrr register field"	(ABS-ADDR) 15 4)
1802a6b7db3Sskrll(dnf f-imm16u    "unsigned 16 bit immediate"    () 15 16)
1812a6b7db3Sskrll(df  f-imm16s    "signed 16 bit immediate"      () 15 16 INT ((value pc) (add HI value 0)) ((value pc) (add HI value 0)))
1822a6b7db3Sskrll(dnf f-imm16a	 "pc-rel offset"      (PCREL-ADDR) 15 16)
1832a6b7db3Sskrll(dnf f-uu4a      "unused 4 bit field"		() 19 4)
1842a6b7db3Sskrll(dnf f-uu4b      "unused 4 bit field"		() 23 4)
1852a6b7db3Sskrll(dnf f-uu12      "unused 12 bit field"	        () 11 12)
1862a6b7db3Sskrll(dnf f-uu8       "unused 8 bit field"           () 15 8)
1872a6b7db3Sskrll(dnf f-uu16      "unused 16 bit field" 	        () 15 16)
1882a6b7db3Sskrll(dnf f-uu1       "unused 1 bit field" 	        ()  7 1)
1892a6b7db3Sskrll
1902a6b7db3Sskrll; The following ifields are used exclusively for the MorphoSys instructions.
1912a6b7db3Sskrll; In a few cases, a bit field is used for something in addition to what its
1922a6b7db3Sskrll; name suggests.  For the most part, the names are meaningful though.
1932a6b7db3Sskrll
1942a6b7db3Sskrll(dnf f-msopc     "opcode field"			() 30 5)
1952a6b7db3Sskrll(dnf f-uu-26-25  "unused 26 bits"               () 25 26)
1962a6b7db3Sskrll(dnf f-mask      "mask"	                        () 25 16)
1972a6b7db3Sskrll(dnf f-bankaddr  "bank address"	                () 25 13)
1982a6b7db3Sskrll(dnf f-rda       "rda"	                        () 25 1)
1992a6b7db3Sskrll(dnf f-uu-2-25   "unused bits  25 & 24"		() 25 2)
2002a6b7db3Sskrll(dnf f-rbbc      "Omega network configuration"	() 25 2)
2012a6b7db3Sskrll(dnf f-perm	 "perm"				() 25 2)
2022a6b7db3Sskrll(dnf f-mode      "mode"                         () 25 2)
2032a6b7db3Sskrll(dnf f-uu-1-24   "testing" 			() 24 1)
2042a6b7db3Sskrll(dnf f-wr        "wr"	                        () 24 1)
2052a6b7db3Sskrll(dnf f-fbincr    "fb incr"                      () 23 4)
2062a6b7db3Sskrll(dnf f-uu-2-23   "unused bits 23 and 22"	() 23 2)
2072a6b7db3Sskrll(dnf f-xmode     "xmode"	                () 23 1)
2082a6b7db3Sskrll(dnf f-a23	 "a23"				() 23 1)
2092a6b7db3Sskrll(dnf f-mask1     "mask1"	                () 22 3)
2102a6b7db3Sskrll(dnf f-cr 	 "cr"				() 22 3)
2112a6b7db3Sskrll(dnf f-type      "type"	                        () 21 2)
2122a6b7db3Sskrll(dnf f-incamt    "increment amount"             () 19 8)
2132a6b7db3Sskrll(dnf f-cbs	 "cbs"				() 19 2)
2142a6b7db3Sskrll(dnf f-uu-1-19   "unused bit 19"		() 19 1)
2152a6b7db3Sskrll(dnf f-ball      "b_all"	                () 19 1)
2162a6b7db3Sskrll(dnf f-colnum    "column number"		() 18 3)
2172a6b7db3Sskrll(dnf f-brc       "b_r_c"	                () 18 3)
2182a6b7db3Sskrll(dnf f-incr	 "incr"				() 17 6)
2192a6b7db3Sskrll(dnf f-fbdisp    "frame buffer displacement"	() 15 6)
2202a6b7db3Sskrll(dnf f-uu-4-15   "unused bits 15,14,13,12"	() 15 4)
2212a6b7db3Sskrll(dnf f-length	 "length"			() 15 3)
2222a6b7db3Sskrll(dnf f-uu-1-15   "unused bit 15"         	() 15 1)
2232a6b7db3Sskrll(dnf f-rc        "row/column context"		() 15 1)
2242a6b7db3Sskrll(dnf f-rcnum     "starting cell of cntxt mem."	() 14 3)
2252a6b7db3Sskrll(dnf f-rownum    "row number"		        () 14 3)
2262a6b7db3Sskrll(dnf f-cbx	 "cbx"				() 14 3)
2272a6b7db3Sskrll(dnf f-id        "id"                           () 14 1)
2282a6b7db3Sskrll(dnf f-size      "size"                         () 13 14)
2292a6b7db3Sskrll(dnf f-rownum1   "row number"		        () 12 3)
2302a6b7db3Sskrll(dnf f-uu-3-11   "unused 3 bits (11-9)"         () 11 3)
2312a6b7db3Sskrll(dnf f-rc1       "row/column context"		() 11 1)
2322a6b7db3Sskrll(dnf f-ccb	 "ccb"				() 11 1)
2332a6b7db3Sskrll(dnf f-cbrb      "data-bus orientation"		() 10 1)
2342a6b7db3Sskrll(dnf f-cdb	 "cdb"				() 10 1)
2352a6b7db3Sskrll(dnf f-rownum2   "row number"		        ()  9 3)
2362a6b7db3Sskrll(dnf f-cell      "cell"         		()  9 3)
2372a6b7db3Sskrll(dnf f-uu-3-9    "unused 3 bits (9-7)"          ()  9 3)
2382a6b7db3Sskrll(dnf f-contnum   "context number"		()  8 9)
2392a6b7db3Sskrll(dnf f-uu-1-6    "unused bit 6"                 ()  6 1)
2402a6b7db3Sskrll(dnf f-dup       "dup"           		()  6 1)
2412a6b7db3Sskrll(dnf f-rc2       "rc2"           		()  6 1)
2422a6b7db3Sskrll(dnf f-ctxdisp   "context displacement"		()  5 6)
2432a6b7db3Sskrll
2442a6b7db3Sskrll; additional fields in ms2
2452a6b7db3Sskrll(dnf f-imm16l    "loop count"                   () 23 16)
2462a6b7db3Sskrll(df  f-loopo	 "loop offset"			() 7 8 UINT
2472a6b7db3Sskrll    ((value pc) (srl SI value 2))
2482a6b7db3Sskrll    ((value pc) (add SI (sll value 2) 8))
2492a6b7db3Sskrll )
2502a6b7db3Sskrll(dnf f-cb1sel    "cb1 select"                   () 25 3)
2512a6b7db3Sskrll(dnf f-cb2sel    "cb2 select"                   () 22 3)
2522a6b7db3Sskrll(dnf f-cb1incr   "cb1 increment"                (SIGNED) 19 6)
2532a6b7db3Sskrll(dnf f-cb2incr   "cb2 increment"                (SIGNED) 13 6)
2542a6b7db3Sskrll(dnf f-rc3       "row/colum context"            ()  7 1)
2552a6b7db3Sskrll
2562a6b7db3Sskrll; The following is just for a test
2572a6b7db3Sskrll(dnf f-msysfrsr2 "sr2 for msys"			() 19 4)
2582a6b7db3Sskrll(dnf f-brc2      "b_r_c2"                       () 14 3)
2592a6b7db3Sskrll(dnf f-ball2     "b_all2"                       () 15 1)
2602a6b7db3Sskrll
2612a6b7db3Sskrll
2622a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2632a6b7db3Sskrll;; Enumerations Of Instruction Fields ;;
2642a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2652a6b7db3Sskrll
2662a6b7db3Sskrll; insn-msys: bit 31.  1 for Morphosys Insns, 0 if not.
2672a6b7db3Sskrll(define-normal-insn-enum insn-msys "msys enums" () MSYS_ f-msys
2682a6b7db3Sskrll  (NO YES)
2692a6b7db3Sskrll)
2702a6b7db3Sskrll
2712a6b7db3Sskrll; insn-opc: bits 30 through 25 .  Non-MorphoSys Instructions
2722a6b7db3Sskrll; Note - the documentation is wrong for the encoding of the DBNZ
2732a6b7db3Sskrll; instruction.  It is actually 011110.  See Issue 67699.
2742a6b7db3Sskrll(define-normal-insn-enum insn-opc "opc enums" () OPC_ f-opc
2752a6b7db3Sskrll  (ADD  ADDU SUB  SUBU MUL   -      -    -
2762a6b7db3Sskrll   AND  OR   XOR  NAND NOR   XNOR   LDUI -
2772a6b7db3Sskrll   LSL  LSR  ASR  -    -     -      -    -
2782a6b7db3Sskrll   BRLT BRLE BREQ JMP  JAL   BRNEQ  DBNZ LOOP
2792a6b7db3Sskrll   LDW  STW  -    -    -     -      -    -
2802a6b7db3Sskrll   -    -    -    -    -     -      -    -
2812a6b7db3Sskrll   EI   DI   SI   RETI BREAK IFLUSH -    -
2822a6b7db3Sskrll  )
2832a6b7db3Sskrll)
2842a6b7db3Sskrll
2852a6b7db3Sskrll; insn-msopc: bits 30 through 26 .  MorphoSys Instructions
2862a6b7db3Sskrll(define-normal-insn-enum insn-msopc "msopc enums" () MSOPC_ f-msopc
2872a6b7db3Sskrll  (LDCTXT LDFB      STFB    FBCB     MFBCB    FBCCI     FBRCI     FBCRI
2882a6b7db3Sskrll   FBRRI  MFBCCI    MFBRCI  MFBCRI   MFBRRI   FBCBDR    RCFBCB    MRCFBCB
2892a6b7db3Sskrll   CBCAST DUPCBCAST WFBI    WFB      RCRISC   FBCBINC   RCXMODE   INTLVR
2902a6b7db3Sskrll   WFBINC MWFBINC   WFBINCR MWFBINCR FBCBINCS MFBCBINCS FBCBINCRS MFBCBINCRS
2912a6b7db3Sskrll   -      -         -       -        -        -         -         -
2922a6b7db3Sskrll  )
2932a6b7db3Sskrll)
2942a6b7db3Sskrll
2952a6b7db3Sskrll; insn-imm: bit 24.  Immediate operand indicator.
2962a6b7db3Sskrll(define-normal-insn-enum insn-imm "imm enums" () IMM_ f-imm
2972a6b7db3Sskrll  ; This bit specifies whether and immediate operand will be present.
2982a6b7db3Sskrll  ; It's 1 if there is, 0 if there is not.
2992a6b7db3Sskrll  (NO YES)
3002a6b7db3Sskrll)
3012a6b7db3Sskrll;;;;;;;;;;;;;;;;
3022a6b7db3Sskrll;; Attributes ;;
3032a6b7db3Sskrll;;;;;;;;;;;;;;;;
3042a6b7db3Sskrll
3052a6b7db3Sskrll; Might not need this.  Keep if for the sim just in case.
3062a6b7db3Sskrll;(define-attr
3072a6b7db3Sskrll;  (for insn)
3082a6b7db3Sskrll;  (type boolean)
3092a6b7db3Sskrll;  (name EXT-SKIP-INSN)
3102a6b7db3Sskrll;  (comment "instruction is a PAGE, LOADL or LOADH instruction")
3112a6b7db3Sskrll;)
3122a6b7db3Sskrll
3132a6b7db3Sskrll(define-attr
3142a6b7db3Sskrll  (for insn)
3152a6b7db3Sskrll  (type boolean)
3162a6b7db3Sskrll  (name LOAD-DELAY)
3172a6b7db3Sskrll  (comment "insn has a load delay")
3182a6b7db3Sskrll)
3192a6b7db3Sskrll
3202a6b7db3Sskrll(define-attr
3212a6b7db3Sskrll  (for insn)
3222a6b7db3Sskrll  (type boolean)
3232a6b7db3Sskrll  (name MEMORY-ACCESS)
3242a6b7db3Sskrll  (comment "insn performs a memory access")
3252a6b7db3Sskrll)
3262a6b7db3Sskrll
3272a6b7db3Sskrll(define-attr
3282a6b7db3Sskrll  (for insn)
3292a6b7db3Sskrll  (type boolean)
3302a6b7db3Sskrll  (name AL-INSN)
3312a6b7db3Sskrll  (comment "insn is an arithmetic or logic insn.")
3322a6b7db3Sskrll)
3332a6b7db3Sskrll
3342a6b7db3Sskrll(define-attr
3352a6b7db3Sskrll  (for insn)
3362a6b7db3Sskrll  (type boolean)
3372a6b7db3Sskrll  (name IO-INSN)
3382a6b7db3Sskrll  (comment "insn performs an I/O operation")
3392a6b7db3Sskrll)
3402a6b7db3Sskrll
3412a6b7db3Sskrll(define-attr
3422a6b7db3Sskrll  (for insn)
3432a6b7db3Sskrll  (type boolean)
3442a6b7db3Sskrll  (name BR-INSN)
3452a6b7db3Sskrll  (comment "insn performs an I/O operation")
3462a6b7db3Sskrll)
3472a6b7db3Sskrll
3482a6b7db3Sskrll(define-attr
3492a6b7db3Sskrll  (for insn)
3502a6b7db3Sskrll  (type boolean)
3512a6b7db3Sskrll  (name JAL-HAZARD)
3522a6b7db3Sskrll  (comment "insn has jal-like hazard")
3532a6b7db3Sskrll)
3542a6b7db3Sskrll
3552a6b7db3Sskrll(define-pmacro (define-reg-use-attr regfield)
3562a6b7db3Sskrll  (define-attr
3572a6b7db3Sskrll    (for insn)
3582a6b7db3Sskrll    (type boolean)
3592a6b7db3Sskrll    (name (.sym "USES-" (.upcase regfield)))
3602a6b7db3Sskrll    (comment ("insn accesses register operand " regfield))))
3612a6b7db3Sskrll
3622a6b7db3Sskrll(define-reg-use-attr "frdr")
3632a6b7db3Sskrll(define-reg-use-attr "frdrrr")
3642a6b7db3Sskrll(define-reg-use-attr "frsr1")
3652a6b7db3Sskrll(define-reg-use-attr "frsr2")
3662a6b7db3Sskrll
3672a6b7db3Sskrll
3682a6b7db3Sskrll; Might not need this.  Keep it for the sim just in case.
3692a6b7db3Sskrll(define-attr
3702a6b7db3Sskrll  (for insn)
3712a6b7db3Sskrll  (type boolean)
3722a6b7db3Sskrll  (name SKIPA)
3732a6b7db3Sskrll  (comment "instruction is a SKIP instruction")
3742a6b7db3Sskrll)
3752a6b7db3Sskrll
3762a6b7db3Sskrll
3772a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;
3782a6b7db3Sskrll;; Hardware Pieces ;;
3792a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;
3802a6b7db3Sskrll
3812a6b7db3Sskrll;(define-pmacro (build-reg-name n) (.splice (.str "$" n) n))
3822a6b7db3Sskrll
3832a6b7db3Sskrll; These are the 16 registers that the chip has.  In later versions
3842a6b7db3Sskrll; where there will be more registers, this will need to be expanded.
3852a6b7db3Sskrll; Note that there are two entries for the registers with two names.
3862a6b7db3Sskrll(define-hardware
3872a6b7db3Sskrll  (name h-spr)
3882a6b7db3Sskrll  (comment "special-purpose registers")
3892a6b7db3Sskrll  (type register SI (16))
3902a6b7db3Sskrll  (indices keyword "" (("R0" 0) ("R1" 1) ("R2" 2) ("R3" 3) ("R4" 4) ("R5" 5)
3912a6b7db3Sskrll  ("R6" 6) ("R7" 7) ("R8" 8) ("R9" 9) ("R10" 10) ("R11" 11) ("R12" 12) ("fp" 12)
3922a6b7db3Sskrll  ("R13" 13) ("sp" 13) ("R14" 14) ("ra" 14) ("R15" 15) ("ira" 15)))
3932a6b7db3Sskrll;  (get (index) (and (raw-reg h-spr) #xffffffff))
3942a6b7db3Sskrll;  (set (index value) (set (raw-reg h-spr) (and value #xffffffff)))
3952a6b7db3Sskrll)
3962a6b7db3Sskrll
3972a6b7db3Sskrll; This is the  program counter.
3982a6b7db3Sskrll(dnh h-pc "program counter" (PC PROFILE) (pc) () () ())
3992a6b7db3Sskrll
4002a6b7db3Sskrll(define-keyword
4012a6b7db3Sskrll   (name msys-syms)
4022a6b7db3Sskrll   (print-name h-nil)
4032a6b7db3Sskrll   (prefix "")
4042a6b7db3Sskrll   (values (DUP 1) (XX 0))
4052a6b7db3Sskrll)
4062a6b7db3Sskrll
4072a6b7db3Sskrll;;;;;;;;;;;;;;
4082a6b7db3Sskrll;; Operands ;;
4092a6b7db3Sskrll;;;;;;;;;;;;;;
4102a6b7db3Sskrll
4112a6b7db3Sskrll(define-operand (name frsr1) (comment "register") (attrs)
4122a6b7db3Sskrll  (type h-spr) (index f-sr1) )
4132a6b7db3Sskrll(define-operand (name frsr2) (comment "register") (attrs)
4142a6b7db3Sskrll  (type h-spr) (index f-sr2) )
4152a6b7db3Sskrll(define-operand (name frdr) (comment "register") (attrs)
4162a6b7db3Sskrll  (type h-spr) (index f-dr) )
4172a6b7db3Sskrll(define-operand (name frdrrr) (comment "register") (attrs)
4182a6b7db3Sskrll  (type h-spr) (index f-drrr) )
4192a6b7db3Sskrll(define-operand (name imm16) (comment "immediate value - sign extd") (attrs)
4202a6b7db3Sskrll  (type h-sint) (index f-imm16s) (handlers (parse "imm16") (print "dollarhex")))
4212a6b7db3Sskrll(define-operand (name imm16z) (comment "immediate value - zero extd") (attrs)
4222a6b7db3Sskrll  (type h-uint) (index f-imm16u) (handlers (parse "imm16") (print "dollarhex")))
4232a6b7db3Sskrll(define-operand (name imm16o) (comment "immediate value") (attrs PCREL-ADDR)
4242a6b7db3Sskrll  (type h-uint) (index f-imm16s) (handlers (parse "imm16") (print "pcrel")))
4252a6b7db3Sskrll
4262a6b7db3Sskrll; Operands for MorphoSys Instructions
4272a6b7db3Sskrll
4282a6b7db3Sskrll(define-operand (name rc) (comment "rc") (attrs)
4292a6b7db3Sskrll  (type h-uint) (index f-rc) (handlers (parse "rc") (print "dollarhex")))
4302a6b7db3Sskrll
4312a6b7db3Sskrll(define-operand (name rcnum) (comment "rcnum") (attrs)
4322a6b7db3Sskrll  (type h-uint) (index f-rcnum) (handlers (print "dollarhex")))
4332a6b7db3Sskrll
4342a6b7db3Sskrll(define-operand (name contnum) (comment "context number") (attrs)
4352a6b7db3Sskrll  (type h-uint) (index f-contnum) (handlers (print "dollarhex")))
4362a6b7db3Sskrll
4372a6b7db3Sskrll(define-operand (name rbbc) (comment "omega network configuration") (attrs)
4382a6b7db3Sskrll  (type h-uint) (index f-rbbc) (handlers (parse "rbbc") (print "dollarhex")))
4392a6b7db3Sskrll
4402a6b7db3Sskrll(define-operand (name colnum) (comment "column number") (attrs)
4412a6b7db3Sskrll  (type h-uint) (index f-colnum) (handlers (print "dollarhex")))
4422a6b7db3Sskrll
4432a6b7db3Sskrll(define-operand (name rownum) (comment "row number") (attrs)
4442a6b7db3Sskrll  (type h-uint) (index f-rownum) (handlers (print "dollarhex")))
4452a6b7db3Sskrll
4462a6b7db3Sskrll(define-operand (name rownum1) (comment "row number") (attrs)
4472a6b7db3Sskrll  (type h-uint) (index f-rownum1) (handlers (print "dollarhex")))
4482a6b7db3Sskrll
4492a6b7db3Sskrll(define-operand (name rownum2) (comment "row number") (attrs)
4502a6b7db3Sskrll  (type h-uint) (index f-rownum2) (handlers (print "dollarhex")))
4512a6b7db3Sskrll
4522a6b7db3Sskrll(define-operand (name rc1) (comment "rc1") (attrs)
4532a6b7db3Sskrll  (type h-uint) (index f-rc1) (handlers (parse "rc") (print "dollarhex")))
4542a6b7db3Sskrll
4552a6b7db3Sskrll(define-operand (name rc2) (comment "rc2") (attrs)
4562a6b7db3Sskrll  (type h-uint) (index f-rc2) (handlers (parse "rc") (print "dollarhex")))
4572a6b7db3Sskrll
4582a6b7db3Sskrll(define-operand (name cbrb) (comment "data-bus orientation") (attrs)
4592a6b7db3Sskrll  (type h-uint) (index f-cbrb) (handlers (parse "cbrb") (print "dollarhex")))
4602a6b7db3Sskrll
4612a6b7db3Sskrll(define-operand (name cell) (comment "cell") (attrs)
4622a6b7db3Sskrll  (type h-uint) (index f-cell) (handlers (print "dollarhex")))
4632a6b7db3Sskrll
4642a6b7db3Sskrll(define-operand (name dup) (comment "dup") (attrs)
4652a6b7db3Sskrll  (type h-uint) (index f-dup) (handlers (parse "dup") (print "dollarhex")))
4662a6b7db3Sskrll
4672a6b7db3Sskrll(define-operand (name ctxdisp) (comment "context displacement") (attrs)
4682a6b7db3Sskrll  (type h-uint) (index f-ctxdisp) (handlers (print "dollarhex")))
4692a6b7db3Sskrll
4702a6b7db3Sskrll(define-operand (name fbdisp) (comment "frame buffer displacement") (attrs)
4712a6b7db3Sskrll  (type h-uint) (index f-fbdisp) (handlers (print "dollarhex")))
4722a6b7db3Sskrll
4732a6b7db3Sskrll(define-operand (name type) (comment "type") (attrs)
4742a6b7db3Sskrll  (type h-uint) (index f-type) (handlers (parse "type") (print "dollarhex")))
4752a6b7db3Sskrll
4762a6b7db3Sskrll(define-operand (name mask) (comment "mask") (attrs)
4772a6b7db3Sskrll  (type h-uint) (index f-mask) (handlers (print "dollarhex")))
4782a6b7db3Sskrll
4792a6b7db3Sskrll(define-operand (name bankaddr) (comment "bank address") (attrs)
4802a6b7db3Sskrll  (type h-uint) (index f-bankaddr) (handlers (print "dollarhex")))
4812a6b7db3Sskrll
4822a6b7db3Sskrll(define-operand (name incamt) (comment "increment amount") (attrs)
4832a6b7db3Sskrll  (type h-uint) (index f-incamt) (handlers (print "dollarhex")))
4842a6b7db3Sskrll
4852a6b7db3Sskrll(define-operand (name xmode) (comment "xmode") (attrs)
4862a6b7db3Sskrll  (type h-uint) (index f-xmode) (handlers (parse "xmode") (print "dollarhex")))
4872a6b7db3Sskrll
4882a6b7db3Sskrll(define-operand (name mask1) (comment "mask1") (attrs)
4892a6b7db3Sskrll  (type h-uint) (index f-mask1) (handlers (print "dollarhex")))
4902a6b7db3Sskrll
4912a6b7db3Sskrll(define-operand (name ball) (comment "b_all") (attrs)
4922a6b7db3Sskrll  (type h-uint) (index f-ball) (handlers (parse "ball") (print "dollarhex")))
4932a6b7db3Sskrll
4942a6b7db3Sskrll(define-operand (name brc) (comment "b_r_c") (attrs)
4952a6b7db3Sskrll  (type h-uint) (index f-brc) (handlers (print "dollarhex")))
4962a6b7db3Sskrll
4972a6b7db3Sskrll(define-operand (name rda) (comment "rd") (attrs)
4982a6b7db3Sskrll  (type h-uint) (index f-rda) (handlers (print "dollarhex")))
4992a6b7db3Sskrll
5002a6b7db3Sskrll(define-operand (name wr) (comment "wr") (attrs)
5012a6b7db3Sskrll  (type h-uint) (index f-wr) (handlers (print "dollarhex")))
5022a6b7db3Sskrll
5032a6b7db3Sskrll(define-operand (name ball2) (comment "b_all2") (attrs)
5042a6b7db3Sskrll  (type h-uint) (index f-ball2) (handlers (parse "ball") (print "dollarhex")))
5052a6b7db3Sskrll
5062a6b7db3Sskrll(define-operand (name brc2) (comment "b_r_c2") (attrs)
5072a6b7db3Sskrll  (type h-uint) (index f-brc2) (handlers (print "dollarhex")))
5082a6b7db3Sskrll(define-operand (name perm) (comment "perm") (attrs)
5092a6b7db3Sskrll  (type h-uint) (index f-perm) (handlers (print "dollarhex")))
5102a6b7db3Sskrll(define-operand (name a23)   (comment "a23") (attrs)
5112a6b7db3Sskrll  (type h-uint) (index f-a23) (handlers (print "dollarhex")))
5122a6b7db3Sskrll(define-operand (name cr)   (comment "c-r") (attrs)
5132a6b7db3Sskrll  (type h-uint) (index f-cr) (handlers (print "dollarhex")))
5142a6b7db3Sskrll(define-operand (name cbs)	(comment "cbs") (attrs)
5152a6b7db3Sskrll  (type h-uint) (index f-cbs) (handlers (print "dollarhex")))
5162a6b7db3Sskrll(define-operand (name incr)	(comment "incr") (attrs)
5172a6b7db3Sskrll  (type h-uint) (index f-incr) (handlers (print "dollarhex")))
5182a6b7db3Sskrll(define-operand (name length)	(comment "length") (attrs)
5192a6b7db3Sskrll  (type h-uint) (index f-length) (handlers (print "dollarhex")))
5202a6b7db3Sskrll(define-operand (name cbx)	(comment "cbx") (attrs)
5212a6b7db3Sskrll  (type h-uint) (index f-cbx) (handlers (print "dollarhex")))
5222a6b7db3Sskrll(define-operand (name ccb)	(comment "ccb") (attrs)
5232a6b7db3Sskrll  (type h-uint) (index f-ccb) (handlers (print "dollarhex")))
5242a6b7db3Sskrll(define-operand (name cdb)	(comment "cdb") (attrs)
5252a6b7db3Sskrll  (type h-uint) (index f-cdb) (handlers (print "dollarhex")))
5262a6b7db3Sskrll
5272a6b7db3Sskrll; For the INTLVR insn
5282a6b7db3Sskrll(define-operand (name mode) (comment "mode") (attrs)
5292a6b7db3Sskrll  (type h-uint) (index f-mode) (handlers (print "dollarhex")))
5302a6b7db3Sskrll(define-operand (name id) (comment "i/d") (attrs)
5312a6b7db3Sskrll  (type h-uint) (index f-id) (handlers (print "dollarhex")))
5322a6b7db3Sskrll(define-operand (name size) (comment "size") (attrs)
5332a6b7db3Sskrll  (type h-uint) (index f-size) (handlers (print "dollarhex")))
5342a6b7db3Sskrll
5352a6b7db3Sskrll(define-operand (name fbincr)	(comment "fb incr") (attrs)
5362a6b7db3Sskrll  (type h-uint) (index f-fbincr) (handlers (print "dollarhex")))
5372a6b7db3Sskrll
5382a6b7db3Sskrll; For the ms2 insns
5392a6b7db3Sskrll(define-operand (name loopsize) (comment "immediate value")
5402a6b7db3Sskrll  (attrs (MACH ms2) PCREL-ADDR)
5412a6b7db3Sskrll  (type h-uint) (index f-loopo) (handlers (parse "loopsize") (print "pcrel")))
5422a6b7db3Sskrll(define-operand (name imm16l) (comment "immediate value")
5432a6b7db3Sskrll  (attrs (MACH ms2))
5442a6b7db3Sskrll  (type h-uint) (index f-imm16l) (handlers (print "dollarhex")))
5452a6b7db3Sskrll(define-operand (name rc3) (comment "rc3") (attrs (MACH ms2))
5462a6b7db3Sskrll  (type h-uint) (index f-rc3) (handlers (parse "rc") (print "dollarhex")))
5472a6b7db3Sskrll(define-operand (name cb1sel) (comment "cb1sel") (attrs (MACH ms2))
5482a6b7db3Sskrll  (type h-uint) (index f-cb1sel) (handlers (print "dollarhex")))
5492a6b7db3Sskrll(define-operand (name cb2sel) (comment "cb2sel") (attrs (MACH ms2))
5502a6b7db3Sskrll  (type h-uint) (index f-cb2sel) (handlers (print "dollarhex")))
5512a6b7db3Sskrll(define-operand (name cb1incr) (comment "cb1incr") (attrs (MACH ms2))
5522a6b7db3Sskrll  (type h-sint) (index f-cb1incr) (handlers (print "dollarhex")))
5532a6b7db3Sskrll(define-operand (name cb2incr) (comment "cb2incr") (attrs (MACH ms2))
5542a6b7db3Sskrll  (type h-sint) (index f-cb2incr) (handlers (print "dollarhex")))
5552a6b7db3Sskrll
5562a6b7db3Sskrll; Probaby won't need most of these.
5572a6b7db3Sskrll(define-pmacro r0    (reg h-spr #x0))
5582a6b7db3Sskrll(define-pmacro r1    (reg h-spr #x01))
5592a6b7db3Sskrll(define-pmacro r2    (reg h-spr #x02))
5602a6b7db3Sskrll(define-pmacro r3    (reg h-spr #x03))
5612a6b7db3Sskrll(define-pmacro r4    (reg h-spr #x04))
5622a6b7db3Sskrll(define-pmacro r5    (reg h-spr #x05))
5632a6b7db3Sskrll(define-pmacro r6    (reg h-spr #x06))
5642a6b7db3Sskrll(define-pmacro r7    (reg h-spr #x07))
5652a6b7db3Sskrll(define-pmacro r8    (reg h-spr #x08))
5662a6b7db3Sskrll(define-pmacro r9    (reg h-spr #x09))
5672a6b7db3Sskrll(define-pmacro r10   (reg h-spr #xA))
5682a6b7db3Sskrll(define-pmacro r11   (reg h-spr #xB))
5692a6b7db3Sskrll(define-pmacro r12   (reg h-spr #xC))
5702a6b7db3Sskrll(define-pmacro fp    (reg h-spr #xC))
5712a6b7db3Sskrll(define-pmacro r13   (reg h-spr #xD))
5722a6b7db3Sskrll(define-pmacro sp    (reg h-spr #xD))
5732a6b7db3Sskrll(define-pmacro r14   (reg h-spr #xE))
5742a6b7db3Sskrll(define-pmacro ra    (reg h-spr #xE))
5752a6b7db3Sskrll(define-pmacro r15   (reg h-spr #xF))
5762a6b7db3Sskrll(define-pmacro ira   (reg h-spr #xF))
5772a6b7db3Sskrll
5782a6b7db3Sskrll; delayed set
5792a6b7db3Sskrll(define-pmacro (dset dest src) (set (delay 1 dest) src))
5802a6b7db3Sskrll
5812a6b7db3Sskrll
5822a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5832a6b7db3Sskrll;; Instructions As Defined In the MorphoRisc ISA Document ;;
5842a6b7db3Sskrll;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5852a6b7db3Sskrll
5862a6b7db3Sskrll; Arithmetic Instructions
5872a6b7db3Sskrll
5882a6b7db3Sskrll(dni add "ADD DstReg, SrcReg1, SrcReg2"
5892a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
5902a6b7db3Sskrll     "add $frdrrr,$frsr1,$frsr2"
5912a6b7db3Sskrll     (+ MSYS_NO OPC_ADD IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
5922a6b7db3Sskrll     (set frdrrr (add SI frsr1 frsr2))
5932a6b7db3Sskrll     ()
5942a6b7db3Sskrll)
5952a6b7db3Sskrll
5962a6b7db3Sskrll(dni addu "ADDU DstReg, SrcReg1, SrcReg2"
5972a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
5982a6b7db3Sskrll     "addu $frdrrr,$frsr1,$frsr2"
5992a6b7db3Sskrll     (+ MSYS_NO OPC_ADDU IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
6002a6b7db3Sskrll     (set frdrrr (add USI frsr1 frsr2))
6012a6b7db3Sskrll     ()
6022a6b7db3Sskrll)
6032a6b7db3Sskrll
6042a6b7db3Sskrll(dni addi "ADDI DstReg, SrcReg1 UnsImm"
6052a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
6062a6b7db3Sskrll     "addi $frdr,$frsr1,#$imm16"
6072a6b7db3Sskrll     (+ MSYS_NO OPC_ADD IMM_YES frsr1 frdr imm16)
6082a6b7db3Sskrll     (sequence((HI tmp))
6092a6b7db3Sskrll        (set HI tmp (and imm16 #xffff))
6102a6b7db3Sskrll	(set frdr (add SI frsr1 (ext SI tmp)))
6112a6b7db3Sskrll     )
6122a6b7db3Sskrll     ()
6132a6b7db3Sskrll)
6142a6b7db3Sskrll
6152a6b7db3Sskrll(dni addui "ADDUI DstReg, SrcReg1, UnsImm"
6162a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
6172a6b7db3Sskrll     "addui $frdr,$frsr1,#$imm16z"
6182a6b7db3Sskrll     (+ MSYS_NO OPC_ADDU IMM_YES frsr1 frdr imm16z)
6192a6b7db3Sskrll     (set frdr (add USI frsr1 (ext USI imm16z)))
6202a6b7db3Sskrll     ()
6212a6b7db3Sskrll)
6222a6b7db3Sskrll
6232a6b7db3Sskrll(dni sub "SUB DstReg, SrcReg1, SrcReg2"
6242a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
6252a6b7db3Sskrll     "sub $frdrrr,$frsr1,$frsr2"
6262a6b7db3Sskrll     (+ MSYS_NO OPC_SUB IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
6272a6b7db3Sskrll     (set frdrrr (sub SI frsr1 frsr2))
6282a6b7db3Sskrll     ()
6292a6b7db3Sskrll)
6302a6b7db3Sskrll
6312a6b7db3Sskrll(dni subu "SUBU DstReg, SrcReg1, SrcReg2"
6322a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
6332a6b7db3Sskrll     "subu $frdrrr,$frsr1,$frsr2"
6342a6b7db3Sskrll     (+ MSYS_NO OPC_SUBU IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
6352a6b7db3Sskrll     (set frdrrr (sub USI frsr1 frsr2))
6362a6b7db3Sskrll     ()
6372a6b7db3Sskrll)
6382a6b7db3Sskrll
6392a6b7db3Sskrll(dni subi "SUBI DstReg, SrcReg1, UnsImm"
6402a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
6412a6b7db3Sskrll     "subi $frdr,$frsr1,#$imm16"
6422a6b7db3Sskrll     (+ MSYS_NO OPC_SUB IMM_YES frsr1 frdr imm16)
6432a6b7db3Sskrll     (sequence((HI tmp))
6442a6b7db3Sskrll        (set HI tmp (and imm16 #xffff))
6452a6b7db3Sskrll	(set frdr (sub SI frsr1 (ext SI tmp)))
6462a6b7db3Sskrll     )
6472a6b7db3Sskrll     ;(set frdr (sub SI frsr1 (ext SI imm16)))
6482a6b7db3Sskrll     ()
6492a6b7db3Sskrll)
6502a6b7db3Sskrll
6512a6b7db3Sskrll(dni subui "SUBUI DstReg, SrcReg1, UnsImm"
6522a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
6532a6b7db3Sskrll     "subui $frdr,$frsr1,#$imm16z"
6542a6b7db3Sskrll     (+ MSYS_NO OPC_SUBU IMM_YES frsr1 frdr imm16z)
6552a6b7db3Sskrll     (set frdr (sub USI frsr1 (ext USI imm16z)))
6562a6b7db3Sskrll     ()
6572a6b7db3Sskrll)
6582a6b7db3Sskrll
6592a6b7db3Sskrll(dni mul "MUL DstReg, SrcReg1, SrcReg2"
6602a6b7db3Sskrll     ((MACH ms1-003,ms2) AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
6612a6b7db3Sskrll     "mul $frdrrr,$frsr1,$frsr2"
6622a6b7db3Sskrll     (+ MSYS_NO OPC_MUL IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
6632a6b7db3Sskrll     (sequence((HI op1) (HI op2))
6642a6b7db3Sskrll	 (set op1 (and frsr1 #xffff))
6652a6b7db3Sskrll         (if (or (lt op1 (const -32768)) (gt op1 (const 32767)))
6662a6b7db3Sskrll            (error "operand out of range")
6672a6b7db3Sskrll         )
6682a6b7db3Sskrll	 (set op2 (and frsr2 #xffff))
6692a6b7db3Sskrll         (if (or (lt op2 (const -32768)) (gt op2 (const 32767)))
6702a6b7db3Sskrll            (error "operand out of range")
6712a6b7db3Sskrll         )
6722a6b7db3Sskrll	 (set frdrrr (mul SI (ext SI op1) (ext SI op2)))
6732a6b7db3Sskrll     )
6742a6b7db3Sskrll     ()
6752a6b7db3Sskrll)
6762a6b7db3Sskrll
6772a6b7db3Sskrll(dni muli "MULI DstReg, SrcReg1, UnsImm"
6782a6b7db3Sskrll     ((MACH ms1-003,ms2) AL-INSN USES-FRDR USES-FRSR1)
6792a6b7db3Sskrll     "muli $frdr,$frsr1,#$imm16"
6802a6b7db3Sskrll     (+ MSYS_NO OPC_MUL IMM_YES frsr1 frdr imm16)
6812a6b7db3Sskrll     (sequence((HI op1) (HI op2))
6822a6b7db3Sskrll	 (set op1 (and frsr1 #xffff))
6832a6b7db3Sskrll         (if (or (lt op1 (const -32768)) (gt op1 (const 32767)))
6842a6b7db3Sskrll            (error "operand out of range")
6852a6b7db3Sskrll         )
6862a6b7db3Sskrll         (set op2 (and imm16 #xffff))
6872a6b7db3Sskrll         (if (eq op1 (const 0))
6882a6b7db3Sskrll          (error "op1 is 0")
6892a6b7db3Sskrll         )
6902a6b7db3Sskrll         (if (eq op2 (const 0))
6912a6b7db3Sskrll          (error "op2 is 0")
6922a6b7db3Sskrll         )
6932a6b7db3Sskrll	 (set frdr (mul SI (ext SI op1) (ext SI op2)))
6942a6b7db3Sskrll     )
6952a6b7db3Sskrll     ()
6962a6b7db3Sskrll)
6972a6b7db3Sskrll
6982a6b7db3Sskrll; Logical Instructions
6992a6b7db3Sskrll
7002a6b7db3Sskrll(dni and "AND DstReg, SrcReg1, SrcReg2"
7012a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
7022a6b7db3Sskrll     "and $frdrrr,$frsr1,$frsr2"
7032a6b7db3Sskrll     (+ MSYS_NO OPC_AND IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
7042a6b7db3Sskrll     (set frdrrr (and frsr1 frsr2))
7052a6b7db3Sskrll     ()
7062a6b7db3Sskrll)
7072a6b7db3Sskrll
7082a6b7db3Sskrll(dni andi "ANDI DstReg, SrcReg1, UnsImm"
7092a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
7102a6b7db3Sskrll     "andi $frdr,$frsr1,#$imm16z"
7112a6b7db3Sskrll     (+ MSYS_NO OPC_AND IMM_YES frsr1 frdr imm16z)
7122a6b7db3Sskrll     (set frdr (and frsr1 (ext USI imm16z)))
7132a6b7db3Sskrll     ()
7142a6b7db3Sskrll)
7152a6b7db3Sskrll
7162a6b7db3Sskrll(dni or "OR DstReg, SrcReg1, SrcReg2"
7172a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
7182a6b7db3Sskrll     "or $frdrrr,$frsr1,$frsr2"
7192a6b7db3Sskrll     (+ MSYS_NO OPC_OR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
7202a6b7db3Sskrll     (set frdrrr (or frsr1 frsr2))
7212a6b7db3Sskrll     ()
7222a6b7db3Sskrll)
7232a6b7db3Sskrll
7242a6b7db3Sskrll(dni nop "nop"
7252a6b7db3Sskrll     ()
7262a6b7db3Sskrll     "nop"
7272a6b7db3Sskrll     (+ MSYS_NO OPC_OR IMM_NO (f-uu24 0))
7282a6b7db3Sskrll     (nop)
7292a6b7db3Sskrll     ()
7302a6b7db3Sskrll)
7312a6b7db3Sskrll
7322a6b7db3Sskrll(dni ori "ORI DstReg, SrcReg1, UnsImm"
7332a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
7342a6b7db3Sskrll     "ori $frdr,$frsr1,#$imm16z"
7352a6b7db3Sskrll     (+ MSYS_NO OPC_OR IMM_YES frsr1 frdr imm16z)
7362a6b7db3Sskrll     (set frdr (or frsr1 (ext USI imm16z)))
7372a6b7db3Sskrll     ()
7382a6b7db3Sskrll)
7392a6b7db3Sskrll
7402a6b7db3Sskrll(dni xor "XOR DstReg, SrcReg1, SrcReg2"
7412a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
7422a6b7db3Sskrll     "xor $frdrrr,$frsr1,$frsr2"
7432a6b7db3Sskrll     (+ MSYS_NO OPC_XOR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
7442a6b7db3Sskrll     (set frdrrr (xor frsr1 frsr2))
7452a6b7db3Sskrll     ()
7462a6b7db3Sskrll)
7472a6b7db3Sskrll
7482a6b7db3Sskrll(dni xori "XORI DstReg, SrcReg1, UnsImm"
7492a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
7502a6b7db3Sskrll     "xori $frdr,$frsr1,#$imm16z"
7512a6b7db3Sskrll     (+ MSYS_NO OPC_XOR IMM_YES frsr1 frdr imm16z)
7522a6b7db3Sskrll     (set frdr (xor frsr1 (ext USI imm16z)))
7532a6b7db3Sskrll     ()
7542a6b7db3Sskrll)
7552a6b7db3Sskrll
7562a6b7db3Sskrll(dni nand "NAND DstReg, SrcReg1, SrcReg2"
7572a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
7582a6b7db3Sskrll     "nand $frdrrr,$frsr1,$frsr2"
7592a6b7db3Sskrll     (+ MSYS_NO OPC_NAND IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
7602a6b7db3Sskrll     (set frdrrr (inv (and frsr1 frsr2)))
7612a6b7db3Sskrll     ()
7622a6b7db3Sskrll)
7632a6b7db3Sskrll
7642a6b7db3Sskrll(dni nandi "NANDI DstReg, SrcReg1, UnsImm"
7652a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
7662a6b7db3Sskrll     "nandi $frdr,$frsr1,#$imm16z"
7672a6b7db3Sskrll     (+ MSYS_NO OPC_NAND IMM_YES frsr1 frdr imm16z)
7682a6b7db3Sskrll     (set frdr (inv (and frsr1 (ext USI imm16z))))
7692a6b7db3Sskrll     ()
7702a6b7db3Sskrll)
7712a6b7db3Sskrll
7722a6b7db3Sskrll(dni nor "NOR DstReg, SrcReg1, SrcReg2"
7732a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
7742a6b7db3Sskrll     "nor $frdrrr,$frsr1,$frsr2"
7752a6b7db3Sskrll     (+ MSYS_NO OPC_NOR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
7762a6b7db3Sskrll     (set frdrrr (inv (or frsr1 frsr2)))
7772a6b7db3Sskrll     ()
7782a6b7db3Sskrll)
7792a6b7db3Sskrll
7802a6b7db3Sskrll(dni nori "NORI DstReg, SrcReg1, UnsImm"
7812a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
7822a6b7db3Sskrll     "nori $frdr,$frsr1,#$imm16z"
7832a6b7db3Sskrll     (+ MSYS_NO OPC_NOR IMM_YES frsr1 frdr imm16z)
7842a6b7db3Sskrll     (set frdr (inv (or frsr1 (ext USI imm16z))))
7852a6b7db3Sskrll     ()
7862a6b7db3Sskrll)
7872a6b7db3Sskrll
7882a6b7db3Sskrll(dni xnor "XNOR DstReg, SrcReg1, SrcReg2"
7892a6b7db3Sskrll     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
7902a6b7db3Sskrll     "xnor $frdrrr,$frsr1,$frsr2"
7912a6b7db3Sskrll     (+ MSYS_NO OPC_XNOR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
7922a6b7db3Sskrll     (set frdrrr (inv (xor frsr1 frsr2)))
7932a6b7db3Sskrll     ()
7942a6b7db3Sskrll)
7952a6b7db3Sskrll
7962a6b7db3Sskrll(dni xnori "XNORI DstReg, SrcReg1, UnsImm"
7972a6b7db3Sskrll     (AL-INSN USES-FRDR USES-FRSR1)
7982a6b7db3Sskrll     "xnori $frdr,$frsr1,#$imm16z"
7992a6b7db3Sskrll     (+ MSYS_NO OPC_XNOR IMM_YES frsr1 frdr imm16z)
8002a6b7db3Sskrll     (set frdr (inv (xor frsr1 (ext USI imm16z))))
8012a6b7db3Sskrll     ()
8022a6b7db3Sskrll)
8032a6b7db3Sskrll
8042a6b7db3Sskrll(dni ldui "LDUI DstReg, UnsImm"
8052a6b7db3Sskrll     (AL-INSN USES-FRDR)
8062a6b7db3Sskrll     "ldui $frdr,#$imm16z"
8072a6b7db3Sskrll     (+ MSYS_NO OPC_LDUI IMM_YES (f-uu4b 0) frdr imm16z)
8082a6b7db3Sskrll     (set frdr (and (sll imm16z 16) #xffff0000))
8092a6b7db3Sskrll     ()
8102a6b7db3Sskrll)
8112a6b7db3Sskrll
8122a6b7db3Sskrll; Shift Instructions
8132a6b7db3Sskrll
8142a6b7db3Sskrll(dni lsl "LSL DstReg, SrcReg1, SrcReg2"
8152a6b7db3Sskrll     (USES-FRDRRR USES-FRSR1 USES-FRSR2)
8162a6b7db3Sskrll     "lsl $frdrrr,$frsr1,$frsr2"
8172a6b7db3Sskrll     (+ MSYS_NO OPC_LSL IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
8182a6b7db3Sskrll     (set frdrrr (sll frsr1 frsr2))
8192a6b7db3Sskrll     ()
8202a6b7db3Sskrll)
8212a6b7db3Sskrll
8222a6b7db3Sskrll(dni lsli "LSLI DstReg, SrcReg1, UnsImm"
8232a6b7db3Sskrll     (USES-FRDR USES-FRSR1)
8242a6b7db3Sskrll     "lsli $frdr,$frsr1,#$imm16"
8252a6b7db3Sskrll     (+ MSYS_NO OPC_LSL IMM_YES frsr1 frdr imm16)
8262a6b7db3Sskrll     (set frdr (sll frsr1 imm16))
8272a6b7db3Sskrll     ()
8282a6b7db3Sskrll)
8292a6b7db3Sskrll
8302a6b7db3Sskrll(dni lsr "LSR DstReg, SrcReg1, SrcReg2"
8312a6b7db3Sskrll     (USES-FRDRRR USES-FRSR1 USES-FRSR2)
8322a6b7db3Sskrll     "lsr $frdrrr,$frsr1,$frsr2"
8332a6b7db3Sskrll     (+ MSYS_NO OPC_LSR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
8342a6b7db3Sskrll     (set frdrrr (srl frsr1 frsr2))
8352a6b7db3Sskrll     ()
8362a6b7db3Sskrll)
8372a6b7db3Sskrll
8382a6b7db3Sskrll(dni lsri "LSRI DstReg, SrcReg1, UnsImm"
8392a6b7db3Sskrll     (USES-FRDR USES-FRSR1)
8402a6b7db3Sskrll     "lsri $frdr,$frsr1,#$imm16"
8412a6b7db3Sskrll     (+ MSYS_NO OPC_LSR IMM_YES frsr1 frdr imm16)
8422a6b7db3Sskrll     (set frdr (srl frsr1 imm16))
8432a6b7db3Sskrll     ()
8442a6b7db3Sskrll)
8452a6b7db3Sskrll
8462a6b7db3Sskrll(dni asr "ASR DstReg, SrcReg1, SrcReg2"
8472a6b7db3Sskrll     (USES-FRDRRR USES-FRSR1 USES-FRSR2)
8482a6b7db3Sskrll     "asr $frdrrr,$frsr1,$frsr2"
8492a6b7db3Sskrll     (+ MSYS_NO OPC_ASR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
8502a6b7db3Sskrll     (set frdrrr (sra frsr1 frsr2))
8512a6b7db3Sskrll     ()
8522a6b7db3Sskrll)
8532a6b7db3Sskrll
8542a6b7db3Sskrll(dni asri "ASRI DstReg, SrcReg1, UnsImm"
8552a6b7db3Sskrll     (USES-FRDR USES-FRSR1)
8562a6b7db3Sskrll     "asri $frdr,$frsr1,#$imm16"
8572a6b7db3Sskrll     (+ MSYS_NO OPC_ASR IMM_YES frsr1 frdr imm16)
8582a6b7db3Sskrll     (set frdr (sra frsr1 imm16))
8592a6b7db3Sskrll     ()
8602a6b7db3Sskrll)
8612a6b7db3Sskrll
8622a6b7db3Sskrll; Control Transfer Instructions
8632a6b7db3Sskrll
8642a6b7db3Sskrll(dni brlt "BRLT SrcReg1, SrcReg2, label"
8652a6b7db3Sskrll     (BR-INSN DELAY-SLOT USES-FRDRRR USES-FRSR1 USES-FRSR2)
8662a6b7db3Sskrll     "brlt $frsr1,$frsr2,$imm16o"
8672a6b7db3Sskrll     (+ MSYS_NO OPC_BRLT IMM_YES frsr1 frsr2 imm16o)
8682a6b7db3Sskrll     (sequence()
8692a6b7db3Sskrll        (if (lt USI frsr1 frsr2)
8702a6b7db3Sskrll            (dset pc (add pc (ext SI imm16o))))
8712a6b7db3Sskrll     )
8722a6b7db3Sskrll     ()
8732a6b7db3Sskrll)
8742a6b7db3Sskrll
8752a6b7db3Sskrll(dni brle "BRLE SrcReg1, SrcReg2, label"
8762a6b7db3Sskrll     (BR-INSN DELAY-SLOT USES-FRSR1 USES-FRSR2)
8772a6b7db3Sskrll     "brle $frsr1,$frsr2,$imm16o"
8782a6b7db3Sskrll     (+ MSYS_NO OPC_BRLE IMM_YES frsr1 frsr2 imm16o)
8792a6b7db3Sskrll     (sequence()
8802a6b7db3Sskrll        (if (le USI frsr1 frsr2)
8812a6b7db3Sskrll            (dset pc (add pc (ext SI imm16o))))
8822a6b7db3Sskrll     )
8832a6b7db3Sskrll     ()
8842a6b7db3Sskrll)
8852a6b7db3Sskrll
8862a6b7db3Sskrll(dni breq "BREQ SrcReg1, SrcReg2, label"
8872a6b7db3Sskrll     (BR-INSN DELAY-SLOT USES-FRSR1 USES-FRSR2)
8882a6b7db3Sskrll     "breq $frsr1,$frsr2,$imm16o"
8892a6b7db3Sskrll     (+ MSYS_NO OPC_BREQ IMM_YES frsr1 frsr2 imm16o)
8902a6b7db3Sskrll     (sequence()
8912a6b7db3Sskrll        (if (eq USI frsr1 frsr2)
8922a6b7db3Sskrll            (dset pc (add pc (ext SI imm16o))))
8932a6b7db3Sskrll     )
8942a6b7db3Sskrll     ()
8952a6b7db3Sskrll)
8962a6b7db3Sskrll
8972a6b7db3Sskrll(dni brne "BRNE SrcReg1, SrcReg2, label"
8982a6b7db3Sskrll     (BR-INSN DELAY-SLOT USES-FRSR1 USES-FRSR2)
8992a6b7db3Sskrll     "brne $frsr1,$frsr2,$imm16o"
9002a6b7db3Sskrll     (+ MSYS_NO OPC_BRNEQ IMM_YES frsr1 frsr2 imm16o)
9012a6b7db3Sskrll     (sequence()
9022a6b7db3Sskrll        (if (not (eq USI frsr1 frsr2))
9032a6b7db3Sskrll            (dset pc (add pc (ext SI imm16o))))
9042a6b7db3Sskrll     )
9052a6b7db3Sskrll     ()
9062a6b7db3Sskrll)
9072a6b7db3Sskrll
9082a6b7db3Sskrll(dni jmp "JMP, label"
9092a6b7db3Sskrll     (DELAY-SLOT BR-INSN)
9102a6b7db3Sskrll     "jmp $imm16o"
9112a6b7db3Sskrll     (+ MSYS_NO OPC_JMP IMM_YES (f-uu4b 0) (f-uu4a 0) imm16o)
9122a6b7db3Sskrll     (dset pc (add pc (ext SI imm16o)))
9132a6b7db3Sskrll     ()
9142a6b7db3Sskrll)
9152a6b7db3Sskrll
9162a6b7db3Sskrll(dni jal "JAL DstReg, SrcReg1"
9172a6b7db3Sskrll     (BR-INSN DELAY-SLOT BR-INSN USES-FRDR USES-FRSR1 JAL-HAZARD)
9182a6b7db3Sskrll     "jal $frdrrr,$frsr1"
9192a6b7db3Sskrll     (+ MSYS_NO OPC_JAL IMM_NO frsr1 (f-uu4a 0) frdrrr (f-uu12 0))
9202a6b7db3Sskrll     (sequence()
9212a6b7db3Sskrll         (if (eq frsr1 #x0)
9222a6b7db3Sskrll	    (c-call VOID "do_syscall" pc)
9232a6b7db3Sskrll	    (sequence()   ; else part.  Do non-syscall stuff here.
9242a6b7db3Sskrll		(dset frdrrr (add pc #x8))
9252a6b7db3Sskrll		(dset pc frsr1)
9262a6b7db3Sskrll            )
9272a6b7db3Sskrll         )
9282a6b7db3Sskrll     )
9292a6b7db3Sskrll     ()
9302a6b7db3Sskrll)
9312a6b7db3Sskrll
9322a6b7db3Sskrll(dni dbnz "DBNZ SrcReg1, label"
9332a6b7db3Sskrll     ((MACH ms1-003,ms2) BR-INSN DELAY-SLOT USES-FRSR1)
9342a6b7db3Sskrll     "dbnz $frsr1,$imm16o"
9352a6b7db3Sskrll     (+ MSYS_NO OPC_DBNZ IMM_YES frsr1 (f-uu4a 0) imm16o)
9362a6b7db3Sskrll     (sequence()
9372a6b7db3Sskrll	 (if (not (eq USI frsr1 0))
9382a6b7db3Sskrll            (dset pc (add pc (ext SI imm16o))))
9392a6b7db3Sskrll     )
9402a6b7db3Sskrll     ()
9412a6b7db3Sskrll)
9422a6b7db3Sskrll
9432a6b7db3Sskrll; Interrupt Control Instructions
9442a6b7db3Sskrll
9452a6b7db3Sskrll(dni ei "EI - Enable Interrupt Processing"
9462a6b7db3Sskrll     ()
9472a6b7db3Sskrll     "ei"
9482a6b7db3Sskrll     (+ MSYS_NO OPC_EI IMM_NO (f-uu4b 0) (f-uu4a 0) (f-uu16 0))
9492a6b7db3Sskrll     (c-call VOID "enable_interrupts")
9502a6b7db3Sskrll     ()
9512a6b7db3Sskrll)
9522a6b7db3Sskrll
9532a6b7db3Sskrll(dni di "DI - Disable Interrupt Processing"
9542a6b7db3Sskrll     ()
9552a6b7db3Sskrll     "di"
9562a6b7db3Sskrll     (+ MSYS_NO OPC_DI IMM_NO (f-uu4b 0) (f-uu4a 0) (f-uu16 0))
9572a6b7db3Sskrll     (c-call VOID "disable_interrupts")
9582a6b7db3Sskrll     ()
9592a6b7db3Sskrll)
9602a6b7db3Sskrll
9612a6b7db3Sskrll(dni si "SI - Send software Interrupt"
9622a6b7db3Sskrll     (DELAY-SLOT BR-INSN USES-FRDR)
9632a6b7db3Sskrll     "si $frdrrr"
9642a6b7db3Sskrll     (+ MSYS_NO OPC_SI IMM_NO (f-uu4b 0) (f-uu4a 0) frdrrr (f-uu12 0))
9652a6b7db3Sskrll     ;(sequence()
9662a6b7db3Sskrll     ;   (dset frdr (add pc #x4))
9672a6b7db3Sskrll     ;   (c-call VOID "do_syscall1" pc)
9682a6b7db3Sskrll     ;   ; (dset pc frsr1) Do this later when we have the address.
9692a6b7db3Sskrll     ;)
9702a6b7db3Sskrll     (sequence()
9712a6b7db3Sskrll        (set frdrrr (add pc #x4))
9722a6b7db3Sskrll        (c-call VOID "do_syscall" pc)
9732a6b7db3Sskrll        ; (set pc frsr1) Do this later when we have the address.
9742a6b7db3Sskrll     )
9752a6b7db3Sskrll     ()
9762a6b7db3Sskrll)
9772a6b7db3Sskrll
9782a6b7db3Sskrll(dni reti "RETI SrcReg1"
9792a6b7db3Sskrll     (DELAY-SLOT BR-INSN USES-FRSR1 JAL-HAZARD)
9802a6b7db3Sskrll     "reti $frsr1"
9812a6b7db3Sskrll     (+ MSYS_NO OPC_RETI IMM_NO frsr1 (f-uu4a 0) (f-uu16 0))
9822a6b7db3Sskrll     (sequence()
9832a6b7db3Sskrll       (c-call VOID "enable_interrupts")
9842a6b7db3Sskrll       (dset pc frsr1)
9852a6b7db3Sskrll     )
9862a6b7db3Sskrll     ()
9872a6b7db3Sskrll)
9882a6b7db3Sskrll
9892a6b7db3Sskrll; Memory Access Instructions
9902a6b7db3Sskrll
9912a6b7db3Sskrll(dni ldw "LDW DstReg, SrcReg1, Imm"
9922a6b7db3Sskrll     (LOAD-DELAY MEMORY-ACCESS USES-FRDR USES-FRSR1)
9932a6b7db3Sskrll     "ldw $frdr,$frsr1,#$imm16"
9942a6b7db3Sskrll     (+ MSYS_NO OPC_LDW IMM_YES frsr1 frdr imm16)
9952a6b7db3Sskrll     (sequence((USI ea) (HI tmp))
9962a6b7db3Sskrll      (set HI tmp (and imm16 #xffff))
9972a6b7db3Sskrll      (set ea (and (add SI frsr1 (ext SI tmp)) #xfffffffc))
9982a6b7db3Sskrll      (set frdr (mem SI ea))
9992a6b7db3Sskrll     )
10002a6b7db3Sskrll     ()
10012a6b7db3Sskrll)
10022a6b7db3Sskrll
10032a6b7db3Sskrll(dni stw "STW SrcReg2, SrcReg1, Imm"
10042a6b7db3Sskrll     (MEMORY-ACCESS USES-FRSR1 USES-FRSR2)
10052a6b7db3Sskrll     "stw $frsr2,$frsr1,#$imm16"
10062a6b7db3Sskrll     (+ MSYS_NO OPC_STW IMM_YES frsr1 frsr2 imm16)
10072a6b7db3Sskrll     (sequence((USI ea) (HI tmp))
10082a6b7db3Sskrll      (set HI tmp (and imm16 #xffff))
10092a6b7db3Sskrll      (set ea (and (add SI frsr1 (ext SI tmp)) #xfffffffc))
10102a6b7db3Sskrll      (set (mem SI ea) frsr2)
10112a6b7db3Sskrll     )
10122a6b7db3Sskrll     ()
10132a6b7db3Sskrll)
10142a6b7db3Sskrll
10152a6b7db3Sskrll; Break Instruction
10162a6b7db3Sskrll
10172a6b7db3Sskrll(dni break "BREAK"
10182a6b7db3Sskrll     ()
10192a6b7db3Sskrll     "break"
10202a6b7db3Sskrll     (+ MSYS_NO OPC_BREAK (f-imm 0) (f-uu24 0))
10212a6b7db3Sskrll     (c-call VOID "do_break" pc)
10222a6b7db3Sskrll     ()
10232a6b7db3Sskrll)
10242a6b7db3Sskrll
10252a6b7db3Sskrll; Cache Flush Instruction
10262a6b7db3Sskrll
10272a6b7db3Sskrll(dni iflush "IFLUSH"
10282a6b7db3Sskrll     ((MACH ms1-003,ms2))
10292a6b7db3Sskrll     "iflush"
10302a6b7db3Sskrll     (+ MSYS_NO OPC_IFLUSH (f-imm 0) (f-uu24 0))
10312a6b7db3Sskrll     (nop)
10322a6b7db3Sskrll     ()
10332a6b7db3Sskrll)
10342a6b7db3Sskrll
10352a6b7db3Sskrll; MorphoSys Instructions
10362a6b7db3Sskrll
10372a6b7db3Sskrll(dni ldctxt "LDCTXT SRC1, SRC2, r/c, r/c#, context#"
10382a6b7db3Sskrll     ((MACH ms1))
10392a6b7db3Sskrll     "ldctxt $frsr1,$frsr2,#$rc,#$rcnum,#$contnum"
10402a6b7db3Sskrll     (+ MSYS_YES MSOPC_LDCTXT (f-uu-2-25 0) frsr1 frsr2 rc rcnum (f-uu-3-11 0)
10412a6b7db3Sskrll	contnum )
10422a6b7db3Sskrll     (nop)
10432a6b7db3Sskrll     ()
10442a6b7db3Sskrll)
10452a6b7db3Sskrll
10462a6b7db3Sskrll(dni ldfb "LDFB SRC1, byte#"
10472a6b7db3Sskrll     ((MACH ms1))
10482a6b7db3Sskrll     "ldfb $frsr1,$frsr2,#$imm16z"
10492a6b7db3Sskrll     (+ MSYS_YES MSOPC_LDFB (f-uu-2-25 0) frsr1 frsr2 imm16z)
10502a6b7db3Sskrll     (nop)
10512a6b7db3Sskrll     ()
10522a6b7db3Sskrll)
10532a6b7db3Sskrll
10542a6b7db3Sskrll(dni stfb "STFB SRC1, SRC2, byte "
10552a6b7db3Sskrll     ((MACH ms1))
10562a6b7db3Sskrll     "stfb $frsr1,$frsr2,#$imm16z"
10572a6b7db3Sskrll     (+ MSYS_YES MSOPC_STFB (f-uu-2-25 0) frsr1 frsr2 imm16z)
10582a6b7db3Sskrll     (nop)
10592a6b7db3Sskrll     ()
10602a6b7db3Sskrll)
10612a6b7db3Sskrll
10622a6b7db3Sskrll(dni fbcb "FBCB SRC1, RT/BR1/BR2/CS, B_all, B_r_c, r/c, CB/RB, cell, dup, ctx_disp"
10632a6b7db3Sskrll     ((MACH ms1,ms1-003))
10642a6b7db3Sskrll     "fbcb $frsr1,#$rbbc,#$ball,#$brc,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
10652a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCB rbbc frsr1 ball brc (f-uu-4-15 0) rc cbrb cell dup ctxdisp)
10662a6b7db3Sskrll     (nop)
10672a6b7db3Sskrll     ()
10682a6b7db3Sskrll)
10692a6b7db3Sskrll
10702a6b7db3Sskrll(dni mfbcb "MFBCB SRC1, RT/BR1/BR2/CS, SRC2, r/c, CB/RB, cell, dup, ctx_disp"
10712a6b7db3Sskrll     ()
10722a6b7db3Sskrll     "mfbcb $frsr1,#$rbbc,$frsr2,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
10732a6b7db3Sskrll     (+ MSYS_YES MSOPC_MFBCB rbbc frsr1 frsr2 (f-uu-4-15 0) rc1 cbrb cell dup ctxdisp)
10742a6b7db3Sskrll     (nop)
10752a6b7db3Sskrll     ()
10762a6b7db3Sskrll)
10772a6b7db3Sskrll
10782a6b7db3Sskrll(dni fbcci "FBCCI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
10792a6b7db3Sskrll     ()
10802a6b7db3Sskrll     "fbcci $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
10812a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCCI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
10822a6b7db3Sskrll     (nop)
10832a6b7db3Sskrll     ()
10842a6b7db3Sskrll)
10852a6b7db3Sskrll
10862a6b7db3Sskrll(dni fbrci "FBRCI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
10872a6b7db3Sskrll     ()
10882a6b7db3Sskrll     "fbrci $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
10892a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBRCI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
10902a6b7db3Sskrll     (nop)
10912a6b7db3Sskrll     ()
10922a6b7db3Sskrll)
10932a6b7db3Sskrll
10942a6b7db3Sskrll(dni fbcri "FBCRI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
10952a6b7db3Sskrll     ()
10962a6b7db3Sskrll     "fbcri $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
10972a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCRI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
10982a6b7db3Sskrll     (nop)
10992a6b7db3Sskrll     ()
11002a6b7db3Sskrll)
11012a6b7db3Sskrll
11022a6b7db3Sskrll(dni fbrri "FBRRI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
11032a6b7db3Sskrll     ()
11042a6b7db3Sskrll     "fbrri $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
11052a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBRRI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
11062a6b7db3Sskrll     (nop)
11072a6b7db3Sskrll     ()
11082a6b7db3Sskrll)
11092a6b7db3Sskrll
11102a6b7db3Sskrll(dni mfbcci "MFBCCI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
11112a6b7db3Sskrll     ()
11122a6b7db3Sskrll     "mfbcci $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
11132a6b7db3Sskrll     (+ MSYS_YES MSOPC_MFBCCI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
11142a6b7db3Sskrll     (nop)
11152a6b7db3Sskrll     ()
11162a6b7db3Sskrll)
11172a6b7db3Sskrll
11182a6b7db3Sskrll(dni mfbrci "MFBRCI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
11192a6b7db3Sskrll     ()
11202a6b7db3Sskrll     "mfbrci $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
11212a6b7db3Sskrll     (+ MSYS_YES MSOPC_MFBRCI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
11222a6b7db3Sskrll     (nop)
11232a6b7db3Sskrll     ()
11242a6b7db3Sskrll)
11252a6b7db3Sskrll
11262a6b7db3Sskrll(dni mfbcri "MFBCRI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
11272a6b7db3Sskrll     ()
11282a6b7db3Sskrll     "mfbcri $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
11292a6b7db3Sskrll     (+ MSYS_YES MSOPC_MFBCRI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
11302a6b7db3Sskrll     (nop)
11312a6b7db3Sskrll     ()
11322a6b7db3Sskrll)
11332a6b7db3Sskrll
11342a6b7db3Sskrll(dni mfbrri "MFBRRI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
11352a6b7db3Sskrll     ()
11362a6b7db3Sskrll     "mfbrri $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
11372a6b7db3Sskrll     (+ MSYS_YES MSOPC_MFBRRI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
11382a6b7db3Sskrll     (nop)
11392a6b7db3Sskrll     ()
11402a6b7db3Sskrll)
11412a6b7db3Sskrll
11422a6b7db3Sskrll(dni fbcbdr "FBCBDR SRC1, RT/BR1/BR2/CS, SRC2, B_all, B_r_c, r/c, CB/RB, cell, dup, ctx_disp"
11432a6b7db3Sskrll     ()
11442a6b7db3Sskrll     "fbcbdr $frsr1,#$rbbc,$frsr2,#$ball2,#$brc2,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
11452a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCBDR rbbc frsr1 frsr2 ball2 brc2 rc1 cbrb cell dup ctxdisp)
11462a6b7db3Sskrll     (nop)
11472a6b7db3Sskrll     ()
11482a6b7db3Sskrll)
11492a6b7db3Sskrll
11502a6b7db3Sskrll(dni rcfbcb "RCFBCB RT/BR1/BR2/CS, type, B_all, B_r_c, row#, r/c, CB/RB, cell, dup, ctx_disp"
11512a6b7db3Sskrll     ()
11522a6b7db3Sskrll     "rcfbcb #$rbbc,#$type,#$ball,#$brc,#$rownum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
11532a6b7db3Sskrll     (+ MSYS_YES MSOPC_RCFBCB rbbc (f-uu-2-23 0) type ball brc (f-uu-1-15 0) rownum rc1 cbrb cell dup ctxdisp)
11542a6b7db3Sskrll     (nop)
11552a6b7db3Sskrll     ()
11562a6b7db3Sskrll)
11572a6b7db3Sskrll
11582a6b7db3Sskrll(dni mrcfbcb "MRCFBCB SRC2, RT/BR1/BR2/CS, type, row#, r/c, CB/RB, cell, dup, ctx_disp"
11592a6b7db3Sskrll     ()
11602a6b7db3Sskrll     "mrcfbcb $frsr2,#$rbbc,#$type,#$rownum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
11612a6b7db3Sskrll     (+ MSYS_YES MSOPC_MRCFBCB rbbc (f-uu-2-23 0) type frsr2 (f-uu-1-15 0) rownum rc1 cbrb cell dup ctxdisp)
11622a6b7db3Sskrll     (nop)
11632a6b7db3Sskrll     ()
11642a6b7db3Sskrll)
11652a6b7db3Sskrll
11662a6b7db3Sskrll(dni cbcast "CBCAST mask, r/c, ctx_disp "
11672a6b7db3Sskrll     ()
11682a6b7db3Sskrll     "cbcast #$mask,#$rc2,#$ctxdisp"
11692a6b7db3Sskrll     (+ MSYS_YES MSOPC_CBCAST mask (f-uu-3-9 0) rc2 ctxdisp)
11702a6b7db3Sskrll     (nop)
11712a6b7db3Sskrll     ()
11722a6b7db3Sskrll)
11732a6b7db3Sskrll
11742a6b7db3Sskrll(dni dupcbcast "DUPCBCAST mask, cell, r/c, ctx_disp "
11752a6b7db3Sskrll     ()
11762a6b7db3Sskrll     "dupcbcast #$mask,#$cell,#$rc2,#$ctxdisp"
11772a6b7db3Sskrll     (+ MSYS_YES MSOPC_DUPCBCAST mask cell rc2 ctxdisp)
11782a6b7db3Sskrll     (nop)
11792a6b7db3Sskrll     ()
11802a6b7db3Sskrll)
11812a6b7db3Sskrll
11822a6b7db3Sskrll(dni wfbi "WFBI Bank_address, row#, cell, dup, ctx_disp "
11832a6b7db3Sskrll     ()
11842a6b7db3Sskrll    "wfbi #$bankaddr,#$rownum1,#$cell,#$dup,#$ctxdisp"
11852a6b7db3Sskrll     (+ MSYS_YES MSOPC_WFBI bankaddr rownum1 cell dup ctxdisp)
11862a6b7db3Sskrll     (nop)
11872a6b7db3Sskrll     ()
11882a6b7db3Sskrll)
11892a6b7db3Sskrll
11902a6b7db3Sskrll;(dni wfb "WFB SRC1, SRC2, FB_disp, row#, ctx_disp"
11912a6b7db3Sskrll;     ()
11922a6b7db3Sskrll;     "wfb $frsr1,$frsr2,#$fbdisp,#$rownum,#$ctxdisp"
11932a6b7db3Sskrll;     (+ MSYS_YES MSOPC_WFB (f-uu-2-25 0) frsr1 frsr2 fbdisp rownum (f-uu-1-6 0) ctxdisp)
11942a6b7db3Sskrll;     (nop)
11952a6b7db3Sskrll;     ()
11962a6b7db3Sskrll;)
11972a6b7db3Sskrll
11982a6b7db3Sskrll(dni wfb "WFB, DRC1,SRC2,FB_disp,row#,ctx_disp"
11992a6b7db3Sskrll      ()
12002a6b7db3Sskrll      "wfb $frsr1,$frsr2,#$fbdisp,#$rownum2,#$ctxdisp"
12012a6b7db3Sskrll      (+ MSYS_YES MSOPC_WFB (f-uu-2-25 0) frsr1 frsr2 fbdisp rownum2 (f-uu-1-6 0) ctxdisp)
12022a6b7db3Sskrll      (nop)
12032a6b7db3Sskrll      ()
12042a6b7db3Sskrll)
12052a6b7db3Sskrll
12062a6b7db3Sskrll
12072a6b7db3Sskrll(dni rcrisc "RCRISC DEST, RT/BR1/BR2/CS, SRC1, column#, r/c, CB/RB, cell, dup, ctx_disp"
12082a6b7db3Sskrll     ()
12092a6b7db3Sskrll     "rcrisc $frdrrr,#$rbbc,$frsr1,#$colnum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
12102a6b7db3Sskrll     (+ MSYS_YES MSOPC_RCRISC rbbc frsr1 (f-uu-1-19 0) colnum frdrrr rc1 cbrb cell dup ctxdisp)
12112a6b7db3Sskrll     (nop)
12122a6b7db3Sskrll     ()
12132a6b7db3Sskrll)
12142a6b7db3Sskrll
12152a6b7db3Sskrll(dni fbcbinc "FBCBINC SRC1, RT/BR1/BR2/CS, Incr_amount, r/c, CB/RB, cell, dup, ctx_disp "
12162a6b7db3Sskrll     ()
12172a6b7db3Sskrll     "fbcbinc $frsr1,#$rbbc,#$incamt,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
12182a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCBINC rbbc frsr1 incamt rc1 cbrb cell dup ctxdisp)
12192a6b7db3Sskrll     (nop)
12202a6b7db3Sskrll     ()
12212a6b7db3Sskrll)
12222a6b7db3Sskrll
12232a6b7db3Sskrll(dni rcxmode "RCXMODE SRC2, rd, wr, xmode, mask, FB_disp, row#, r/c, ctx_disp"
12242a6b7db3Sskrll     ()
12252a6b7db3Sskrll     "rcxmode $frsr2,#$rda,#$wr,#$xmode,#$mask1,#$fbdisp,#$rownum2,#$rc2,#$ctxdisp"
12262a6b7db3Sskrll     (+ MSYS_YES MSOPC_RCXMODE rda wr xmode mask1 frsr2 fbdisp rownum2 rc2 ctxdisp)
12272a6b7db3Sskrll     (nop)
12282a6b7db3Sskrll     ()
12292a6b7db3Sskrll)
12302a6b7db3Sskrll
12312a6b7db3Sskrll(dni interleaver "INTLVR ireg, mode, ireg, i/d, size"
12322a6b7db3Sskrll     ()
12332a6b7db3Sskrll     "intlvr $frsr1,#$mode,$frsr2,#$id,#$size"
12342a6b7db3Sskrll     (+ MSYS_YES MSOPC_INTLVR mode frsr1 frsr2 (f-uu-1-15 0) id size)
12352a6b7db3Sskrll     (nop)
12362a6b7db3Sskrll     ()
12372a6b7db3Sskrll)
12382a6b7db3Sskrll
12392a6b7db3Sskrll;; Issue 66262: The documenatation gives the wrong order for
12402a6b7db3Sskrll;;               the arguments to the WFBINC instruction.
12412a6b7db3Sskrll(dni wfbinc "WFBINC type, ccb/rcb, incr, all, c/r, length, rca_row, word, dup, ctxt_disp"
12422a6b7db3Sskrll     ((MACH ms1-003,ms2))
12432a6b7db3Sskrll     "wfbinc #$rda,#$wr,#$fbincr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
12442a6b7db3Sskrll     (+ MSYS_YES MSOPC_WFBINC rda wr fbincr ball colnum length rownum1 rownum2 dup ctxdisp)
12452a6b7db3Sskrll     (nop)
12462a6b7db3Sskrll     ()
12472a6b7db3Sskrll)
12482a6b7db3Sskrll
12492a6b7db3Sskrll(dni mwfbinc "MWFBINC mreg, type, ccb/rcb, incr, length, rca_row, word, dup, ctxt_disp"
12502a6b7db3Sskrll     ((MACH ms1-003,ms2))
12512a6b7db3Sskrll     "mwfbinc $frsr2,#$rda,#$wr,#$fbincr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
12522a6b7db3Sskrll     (+ MSYS_YES MSOPC_MWFBINC rda wr fbincr frsr2 length rownum1 rownum2 dup ctxdisp)
12532a6b7db3Sskrll     (nop)
12542a6b7db3Sskrll     ()
12552a6b7db3Sskrll)
12562a6b7db3Sskrll
12572a6b7db3Sskrll(dni wfbincr "WFBINCR ireg, type, ccb/rcb, all, c/r, length, rca_row, word, dup, ctxt_disp"
12582a6b7db3Sskrll     ((MACH ms1-003,ms2))
12592a6b7db3Sskrll     "wfbincr $frsr1,#$rda,#$wr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
12602a6b7db3Sskrll     (+ MSYS_YES MSOPC_WFBINCR rda wr frsr1 ball colnum length rownum1 rownum2 dup ctxdisp)
12612a6b7db3Sskrll     (nop)
12622a6b7db3Sskrll     ()
12632a6b7db3Sskrll)
12642a6b7db3Sskrll
12652a6b7db3Sskrll(dni mwfbincr "MWFBINCR ireg, mreg, type, ccb/rcb, length, rca_row, word, dup, ctxt_disp"
12662a6b7db3Sskrll     ((MACH ms1-003,ms2))
12672a6b7db3Sskrll     "mwfbincr $frsr1,$frsr2,#$rda,#$wr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
12682a6b7db3Sskrll     (+ MSYS_YES MSOPC_MWFBINCR rda wr frsr1 frsr2 length rownum1 rownum2 dup ctxdisp)
12692a6b7db3Sskrll     (nop)
12702a6b7db3Sskrll     ()
12712a6b7db3Sskrll)
12722a6b7db3Sskrll
12732a6b7db3Sskrll(dni fbcbincs "FBCBINCS	     perm, all, c/r, cbs, incr, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
12742a6b7db3Sskrll     ((MACH ms1-003,ms2))
12752a6b7db3Sskrll     "fbcbincs #$perm,#$a23,#$cr,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
12762a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCBINCS perm a23 cr cbs incr ccb cdb rownum2 dup ctxdisp)
12772a6b7db3Sskrll     (nop)
12782a6b7db3Sskrll     ()
12792a6b7db3Sskrll)
12802a6b7db3Sskrll
12812a6b7db3Sskrll(dni mfbcbincs "MFBCBINCS		ireg, perm, cbs, incr, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
12822a6b7db3Sskrll     ((MACH ms1-003,ms2))
12832a6b7db3Sskrll     "mfbcbincs $frsr1,#$perm,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
12842a6b7db3Sskrll     (+ MSYS_YES MSOPC_MFBCBINCS perm frsr1 cbs incr ccb cdb rownum2 dup ctxdisp)
12852a6b7db3Sskrll     (nop)
12862a6b7db3Sskrll     ()
12872a6b7db3Sskrll)
12882a6b7db3Sskrll
12892a6b7db3Sskrll(dni fbcbincrs "FBCBINCRS	     ireg, perm, all, c/r, cbs, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
12902a6b7db3Sskrll     ((MACH ms1-003,ms2))
12912a6b7db3Sskrll     "fbcbincrs $frsr1,#$perm,#$ball,#$colnum,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
12922a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCBINCRS perm frsr1 ball colnum (f-uu-1-15 0) cbx ccb cdb rownum2 dup ctxdisp)
12932a6b7db3Sskrll     (nop)
12942a6b7db3Sskrll     ()
12952a6b7db3Sskrll)
12962a6b7db3Sskrll
12972a6b7db3Sskrll(dni mfbcbincrs "MFBCBINCRS ireg, mreg, perm, cbs, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
12982a6b7db3Sskrll     ((MACH ms1-003,ms2))
12992a6b7db3Sskrll     "mfbcbincrs $frsr1,$frsr2,#$perm,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
13002a6b7db3Sskrll     (+ MSYS_YES MSOPC_MFBCBINCRS perm frsr1 frsr2 (f-uu-1-15 0) cbx ccb cdb rownum2 dup ctxdisp)
13012a6b7db3Sskrll     (nop)
13022a6b7db3Sskrll     ()
13032a6b7db3Sskrll)
13042a6b7db3Sskrll
13052a6b7db3Sskrll; MS2 instructions
13062a6b7db3Sskrll(dni loop "LOOP SrcReg1, label"
13072a6b7db3Sskrll     ((MACH ms2) DELAY-SLOT USES-FRSR1)
13082a6b7db3Sskrll     "loop $frsr1,$loopsize"
13092a6b7db3Sskrll     (+ MSYS_NO OPC_LOOP IMM_NO frsr1 (f-uu4a 0) (f-uu8 0) loopsize)
13102a6b7db3Sskrll     (nop)      ;; to be filled in
13112a6b7db3Sskrll     ()
13122a6b7db3Sskrll)
13132a6b7db3Sskrll
13142a6b7db3Sskrll(dni loopi "LOOPI niter, label"
13152a6b7db3Sskrll     ((MACH ms2) DELAY-SLOT)
13162a6b7db3Sskrll     "loopi #$imm16l,$loopsize"
13172a6b7db3Sskrll     (+ MSYS_NO OPC_LOOP IMM_YES imm16l loopsize)
13182a6b7db3Sskrll     (nop)      ;; to be filled in
13192a6b7db3Sskrll     ()
13202a6b7db3Sskrll)
13212a6b7db3Sskrll
13222a6b7db3Sskrll(dni dfbc "dfbc cb1sel,cb2sel,cb1inc,cb2inc,dr/c,cr/c,ctxdisp"
13232a6b7db3Sskrll     ((MACH ms2))
13242a6b7db3Sskrll     "dfbc #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp"
13252a6b7db3Sskrll     (+ MSYS_YES MSOPC_LDCTXT cb1sel cb2sel cb1incr cb2incr rc3 rc2 ctxdisp)
13262a6b7db3Sskrll     (nop)
13272a6b7db3Sskrll     ()
13282a6b7db3Sskrll)
13292a6b7db3Sskrll
13302a6b7db3Sskrll(dni dwfb "dwfb cb1sel,cb2sel,cb1inc,cb2inc,cr/c,ctxdisp"
13312a6b7db3Sskrll     ((MACH ms2))
13322a6b7db3Sskrll     "dwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc2,#$ctxdisp"
13332a6b7db3Sskrll     (+ MSYS_YES MSOPC_LDFB cb1sel cb2sel cb1incr cb2incr (f-uu1 0) rc2 ctxdisp)
13342a6b7db3Sskrll     (nop)
13352a6b7db3Sskrll     ()
13362a6b7db3Sskrll)
13372a6b7db3Sskrll
13382a6b7db3Sskrll(dni fbwfb "fbwfb cb1sel,cb2sel,cb1inc,cb2inc,r0/1,cr/c,ctxdisp"
13392a6b7db3Sskrll     ((MACH ms2))
13402a6b7db3Sskrll     "fbwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp"
13412a6b7db3Sskrll     (+ MSYS_YES MSOPC_STFB cb1sel cb2sel cb1incr cb2incr rc3 rc2 ctxdisp)
13422a6b7db3Sskrll     (nop)
13432a6b7db3Sskrll     ()
13442a6b7db3Sskrll)
13452a6b7db3Sskrll
13462a6b7db3Sskrll(dni dfbr "dfbr cb1sel,cb2sel,reg,W/O1,W/O2,mode,cr/c,ctxdisp"
13472a6b7db3Sskrll     ((MACH ms2) USES-FRSR2)
13482a6b7db3Sskrll     "dfbr #$cb1sel,#$cb2sel,$frsr2,#$length,#$rownum1,#$rownum2,#$rc2,#$ctxdisp"
13492a6b7db3Sskrll     (+ MSYS_YES MSOPC_FBCB cb1sel cb2sel frsr2 length rownum1 rownum2 rc2 ctxdisp)
13502a6b7db3Sskrll     (nop)
13512a6b7db3Sskrll     ()
13522a6b7db3Sskrll)
1353