xref: /openbsd-src/gnu/usr.bin/binutils-2.17/cpu/mt.cpu (revision 3d8817e467ea46cf4772788d6804dd293abfb01a)
1*3d8817e4Smiod; Morpho Technologies MT Arch description.  -*- Scheme -*-
2*3d8817e4Smiod; Copyright 2001 Free Software Foundation, Inc.
3*3d8817e4Smiod;
4*3d8817e4Smiod; Contributed by Red Hat Inc; developed under contract from
5*3d8817e4Smiod; Morpho Technologies.
6*3d8817e4Smiod;
7*3d8817e4Smiod; This file is part of the GNU Binutils.
8*3d8817e4Smiod;
9*3d8817e4Smiod; This program is free software; you can redistribute it and/or modify
10*3d8817e4Smiod; it under the terms of the GNU General Public License as published by
11*3d8817e4Smiod; the Free Software Foundation; either version 2 of the License, or
12*3d8817e4Smiod; (at your option) any later version.
13*3d8817e4Smiod;
14*3d8817e4Smiod; This program is distributed in the hope that it will be useful,
15*3d8817e4Smiod; but WITHOUT ANY WARRANTY; without even the implied warranty of
16*3d8817e4Smiod; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17*3d8817e4Smiod; GNU General Public License for more details.
18*3d8817e4Smiod;
19*3d8817e4Smiod; You should have received a copy of the GNU General Public License
20*3d8817e4Smiod; along with this program; if not, write to the Free Software
21*3d8817e4Smiod; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22*3d8817e4Smiod
23*3d8817e4Smiod(include "simplify.inc")
24*3d8817e4Smiod
25*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
26*3d8817e4Smiod;; Define The Architecture, Attributes, ISA, CPU, Machine, And Model. ;;
27*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28*3d8817e4Smiod
29*3d8817e4Smiod; define-arch must appear first
30*3d8817e4Smiod(define-arch
31*3d8817e4Smiod  (name mt) ; name of cpu family
32*3d8817e4Smiod  (comment "Morpho Technologies mRISC family")
33*3d8817e4Smiod  (default-alignment aligned)
34*3d8817e4Smiod  (insn-lsb0? #t)
35*3d8817e4Smiod  (machs ms1 ms1-003 ms2)
36*3d8817e4Smiod  (isas mt)
37*3d8817e4Smiod)
38*3d8817e4Smiod
39*3d8817e4Smiod; Instruction set parameters.
40*3d8817e4Smiod
41*3d8817e4Smiod(define-isa
42*3d8817e4Smiod  (name mt)
43*3d8817e4Smiod  (comment "Morpho Technologies MT ISA")
44*3d8817e4Smiod  (default-insn-word-bitsize 32)
45*3d8817e4Smiod  (default-insn-bitsize 32)
46*3d8817e4Smiod  (base-insn-bitsize 32)
47*3d8817e4Smiod  (parallel-insns 2)
48*3d8817e4Smiod)
49*3d8817e4Smiod
50*3d8817e4Smiod; Cpu family definitions.
51*3d8817e4Smiod
52*3d8817e4Smiod
53*3d8817e4Smiod(define-cpu
54*3d8817e4Smiod  ; cpu names must be distinct from the architecture name and machine names.
55*3d8817e4Smiod  (name ms1bf)
56*3d8817e4Smiod  (comment "Morpho Technologies mRISC family")
57*3d8817e4Smiod  (endian big)
58*3d8817e4Smiod  (word-bitsize 32)
59*3d8817e4Smiod)
60*3d8817e4Smiod
61*3d8817e4Smiod(define-cpu
62*3d8817e4Smiod  ; cpu names must be distinct from the architecture name and machine names.
63*3d8817e4Smiod  (name ms1-003bf)
64*3d8817e4Smiod  (comment "Morpho Technologies mRISC family")
65*3d8817e4Smiod  (endian big)
66*3d8817e4Smiod  (word-bitsize 32)
67*3d8817e4Smiod)
68*3d8817e4Smiod
69*3d8817e4Smiod(define-cpu
70*3d8817e4Smiod  ; cpu names must be distinct from the architecture name and machine names.
71*3d8817e4Smiod  (name ms2bf)
72*3d8817e4Smiod  (comment "Morpho Technologies mRISC family")
73*3d8817e4Smiod  (endian big)
74*3d8817e4Smiod  (word-bitsize 32)
75*3d8817e4Smiod)
76*3d8817e4Smiod
77*3d8817e4Smiod(define-mach
78*3d8817e4Smiod  (name ms1)
79*3d8817e4Smiod  (comment "Morpho Technologies mrisc")
80*3d8817e4Smiod  (cpu ms1bf)
81*3d8817e4Smiod  (isas mt)
82*3d8817e4Smiod)
83*3d8817e4Smiod
84*3d8817e4Smiod(define-mach
85*3d8817e4Smiod  (name ms1-003)
86*3d8817e4Smiod  (comment "Morpho Technologies mrisc")
87*3d8817e4Smiod  (cpu ms1-003bf)
88*3d8817e4Smiod  (isas mt)
89*3d8817e4Smiod)
90*3d8817e4Smiod
91*3d8817e4Smiod(define-mach
92*3d8817e4Smiod  (name ms2)
93*3d8817e4Smiod  (comment "Morpho Technologies ms2")
94*3d8817e4Smiod  (cpu ms2bf)
95*3d8817e4Smiod  (isas mt)
96*3d8817e4Smiod)
97*3d8817e4Smiod
98*3d8817e4Smiod
99*3d8817e4Smiod; Model descriptions.
100*3d8817e4Smiod; Can probably take the u-exec out.  We'll see.
101*3d8817e4Smiod(define-model
102*3d8817e4Smiod  (name ms1)
103*3d8817e4Smiod  (comment "Morpho Technologies mrisc")
104*3d8817e4Smiod  (mach ms1)
105*3d8817e4Smiod  (unit u-exec "Execution Unit" ()
106*3d8817e4Smiod	1 1 ; issue done
107*3d8817e4Smiod	() ; state
108*3d8817e4Smiod	() ; inputs
109*3d8817e4Smiod	() ; outputs
110*3d8817e4Smiod	() ; profile action (default)
111*3d8817e4Smiod	)
112*3d8817e4Smiod)
113*3d8817e4Smiod
114*3d8817e4Smiod(define-model
115*3d8817e4Smiod  (name ms1-003)
116*3d8817e4Smiod  (comment "Morpho Technologies mrisc")
117*3d8817e4Smiod  (mach ms1-003)
118*3d8817e4Smiod  (unit u-exec "Execution Unit" ()
119*3d8817e4Smiod	1 1 ; issue done
120*3d8817e4Smiod	() ; state
121*3d8817e4Smiod	() ; inputs
122*3d8817e4Smiod	() ; outputs
123*3d8817e4Smiod	() ; profile action (default)
124*3d8817e4Smiod	)
125*3d8817e4Smiod)
126*3d8817e4Smiod
127*3d8817e4Smiod(define-model
128*3d8817e4Smiod  (name ms2)
129*3d8817e4Smiod  (comment "Morpho Technologies ms2")
130*3d8817e4Smiod  (mach ms2)
131*3d8817e4Smiod  (unit u-exec "Execution Unit" ()
132*3d8817e4Smiod	1 1 ; issue done
133*3d8817e4Smiod	() ; state
134*3d8817e4Smiod	() ; inputs
135*3d8817e4Smiod	() ; outputs
136*3d8817e4Smiod	() ; profile action (default)
137*3d8817e4Smiod	)
138*3d8817e4Smiod)
139*3d8817e4Smiod
140*3d8817e4Smiod; FIXME: It might simplify things to separate the execute process from the
141*3d8817e4Smiod; one that updates the PC.
142*3d8817e4Smiod
143*3d8817e4Smiod
144*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;
145*3d8817e4Smiod;; Instruction Fields ;;
146*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;
147*3d8817e4Smiod
148*3d8817e4Smiod; Attributes:
149*3d8817e4Smiod; PCREL-ADDR: pc relative value (for reloc and disassembly purposes)
150*3d8817e4Smiod; ABS-ADDR: absolute address (for reloc and disassembly purposes?)
151*3d8817e4Smiod; RESERVED: bits are not used to decode insn, must be all 0
152*3d8817e4Smiod; RELOC: there is a relocation associated with this field (experiment)
153*3d8817e4Smiod;
154*3d8817e4Smiod; f-msys: Identify a a morphosys insns.  1 if msys, 0 if not.
155*3d8817e4Smiod; f-opc: 6 bit opcode for non-morphosys instructions.
156*3d8817e4Smiod; f-msopc: 6 bit opcode for morphosys instructions.
157*3d8817e4Smiod; f-imm: flag to indicate use of an immediate operand.  1 if yes, 0 if no.
158*3d8817e4Smiod; f-sr1: source resgister 1. (also used for MSYS insns)
159*3d8817e4Smiod; f-sr2: source register 2. (also used for MSYS insns)
160*3d8817e4Smiod; f-dr: destination register when located in bits 19:16.
161*3d8817e4Smiod; f-drrr: destination register when located in bits 15:12. (also for MSYS insns)
162*3d8817e4Smiod; f-imm16: 16 bit immediate value when not an offset.
163*3d8817e4Smiod; f-imm16a: 16 bit immediate value when it's a pc-rel offset.
164*3d8817e4Smiod; f-uu4a: unused 4 bit field.
165*3d8817e4Smiod; f-uu4b: second unsed 4 bit field.
166*3d8817e4Smiod; f-uu1: unused 1 bit field
167*3d8817e4Smiod; f-uu12: unused 12 bit field.
168*3d8817e4Smiod; f-uu16: unused 16 bit field.
169*3d8817e4Smiod; f-uu24: unused 24 bit field.
170*3d8817e4Smiod
171*3d8817e4Smiod(dnf f-msys      "morphosys insn flag"  	() 31 1)
172*3d8817e4Smiod(dnf f-opc       "opcode field"			() 30 6)
173*3d8817e4Smiod(dnf f-imm       "immedate flag"		() 24 1)
174*3d8817e4Smiod(dnf f-uu24      "unused 24 bits"               () 23 24)
175*3d8817e4Smiod(dnf f-sr1       "sr1 register field"	(ABS-ADDR) 23 4)
176*3d8817e4Smiod(dnf f-sr2       "sr2 register field"	(ABS-ADDR) 19 4)
177*3d8817e4Smiod(dnf f-dr        "dr register field"	(ABS-ADDR) 19 4)
178*3d8817e4Smiod(dnf f-drrr      "drrr register field"	(ABS-ADDR) 15 4)
179*3d8817e4Smiod(dnf f-imm16u    "unsigned 16 bit immediate"    () 15 16)
180*3d8817e4Smiod(df  f-imm16s    "signed 16 bit immediate"      () 15 16 INT ((value pc) (add HI value 0)) ((value pc) (add HI value 0)))
181*3d8817e4Smiod(dnf f-imm16a	 "pc-rel offset"      (PCREL-ADDR) 15 16)
182*3d8817e4Smiod(dnf f-uu4a      "unused 4 bit field"		() 19 4)
183*3d8817e4Smiod(dnf f-uu4b      "unused 4 bit field"		() 23 4)
184*3d8817e4Smiod(dnf f-uu12      "unused 12 bit field"	        () 11 12)
185*3d8817e4Smiod(dnf f-uu8       "unused 8 bit field"           () 15 8)
186*3d8817e4Smiod(dnf f-uu16      "unused 16 bit field" 	        () 15 16)
187*3d8817e4Smiod(dnf f-uu1       "unused 1 bit field" 	        ()  7 1)
188*3d8817e4Smiod
189*3d8817e4Smiod; The following ifields are used exclusively for the MorphoSys instructions.
190*3d8817e4Smiod; In a few cases, a bit field is used for something in addition to what its
191*3d8817e4Smiod; name suggests.  For the most part, the names are meaningful though.
192*3d8817e4Smiod
193*3d8817e4Smiod(dnf f-msopc     "opcode field"			() 30 5)
194*3d8817e4Smiod(dnf f-uu-26-25  "unused 26 bits"               () 25 26)
195*3d8817e4Smiod(dnf f-mask      "mask"	                        () 25 16)
196*3d8817e4Smiod(dnf f-bankaddr  "bank address"	                () 25 13)
197*3d8817e4Smiod(dnf f-rda       "rda"	                        () 25 1)
198*3d8817e4Smiod(dnf f-uu-2-25   "unused bits  25 & 24"		() 25 2)
199*3d8817e4Smiod(dnf f-rbbc      "Omega network configuration"	() 25 2)
200*3d8817e4Smiod(dnf f-perm	 "perm"				() 25 2)
201*3d8817e4Smiod(dnf f-mode      "mode"                         () 25 2)
202*3d8817e4Smiod(dnf f-uu-1-24   "testing" 			() 24 1)
203*3d8817e4Smiod(dnf f-wr        "wr"	                        () 24 1)
204*3d8817e4Smiod(dnf f-fbincr    "fb incr"                      () 23 4)
205*3d8817e4Smiod(dnf f-uu-2-23   "unused bits 23 and 22"	() 23 2)
206*3d8817e4Smiod(dnf f-xmode     "xmode"	                () 23 1)
207*3d8817e4Smiod(dnf f-a23	 "a23"				() 23 1)
208*3d8817e4Smiod(dnf f-mask1     "mask1"	                () 22 3)
209*3d8817e4Smiod(dnf f-cr 	 "cr"				() 22 3)
210*3d8817e4Smiod(dnf f-type      "type"	                        () 21 2)
211*3d8817e4Smiod(dnf f-incamt    "increment amount"             () 19 8)
212*3d8817e4Smiod(dnf f-cbs	 "cbs"				() 19 2)
213*3d8817e4Smiod(dnf f-uu-1-19   "unused bit 19"		() 19 1)
214*3d8817e4Smiod(dnf f-ball      "b_all"	                () 19 1)
215*3d8817e4Smiod(dnf f-colnum    "column number"		() 18 3)
216*3d8817e4Smiod(dnf f-brc       "b_r_c"	                () 18 3)
217*3d8817e4Smiod(dnf f-incr	 "incr"				() 17 6)
218*3d8817e4Smiod(dnf f-fbdisp    "frame buffer displacement"	() 15 6)
219*3d8817e4Smiod(dnf f-uu-4-15   "unused bits 15,14,13,12"	() 15 4)
220*3d8817e4Smiod(dnf f-length	 "length"			() 15 3)
221*3d8817e4Smiod(dnf f-uu-1-15   "unused bit 15"         	() 15 1)
222*3d8817e4Smiod(dnf f-rc        "row/column context"		() 15 1)
223*3d8817e4Smiod(dnf f-rcnum     "starting cell of cntxt mem."	() 14 3)
224*3d8817e4Smiod(dnf f-rownum    "row number"		        () 14 3)
225*3d8817e4Smiod(dnf f-cbx	 "cbx"				() 14 3)
226*3d8817e4Smiod(dnf f-id        "id"                           () 14 1)
227*3d8817e4Smiod(dnf f-size      "size"                         () 13 14)
228*3d8817e4Smiod(dnf f-rownum1   "row number"		        () 12 3)
229*3d8817e4Smiod(dnf f-uu-3-11   "unused 3 bits (11-9)"         () 11 3)
230*3d8817e4Smiod(dnf f-rc1       "row/column context"		() 11 1)
231*3d8817e4Smiod(dnf f-ccb	 "ccb"				() 11 1)
232*3d8817e4Smiod(dnf f-cbrb      "data-bus orientation"		() 10 1)
233*3d8817e4Smiod(dnf f-cdb	 "cdb"				() 10 1)
234*3d8817e4Smiod(dnf f-rownum2   "row number"		        ()  9 3)
235*3d8817e4Smiod(dnf f-cell      "cell"         		()  9 3)
236*3d8817e4Smiod(dnf f-uu-3-9    "unused 3 bits (9-7)"          ()  9 3)
237*3d8817e4Smiod(dnf f-contnum   "context number"		()  8 9)
238*3d8817e4Smiod(dnf f-uu-1-6    "unused bit 6"                 ()  6 1)
239*3d8817e4Smiod(dnf f-dup       "dup"           		()  6 1)
240*3d8817e4Smiod(dnf f-rc2       "rc2"           		()  6 1)
241*3d8817e4Smiod(dnf f-ctxdisp   "context displacement"		()  5 6)
242*3d8817e4Smiod
243*3d8817e4Smiod; additional fields in ms2
244*3d8817e4Smiod(dnf f-imm16l    "loop count"                   () 23 16)
245*3d8817e4Smiod(df  f-loopo	 "loop offset"			() 7 8 UINT
246*3d8817e4Smiod    ((value pc) (srl SI value 2))
247*3d8817e4Smiod    ((value pc) (add SI (sll value 2) 8))
248*3d8817e4Smiod )
249*3d8817e4Smiod(dnf f-cb1sel    "cb1 select"                   () 25 3)
250*3d8817e4Smiod(dnf f-cb2sel    "cb2 select"                   () 22 3)
251*3d8817e4Smiod(dnf f-cb1incr   "cb1 increment"                (SIGNED) 19 6)
252*3d8817e4Smiod(dnf f-cb2incr   "cb2 increment"                (SIGNED) 13 6)
253*3d8817e4Smiod(dnf f-rc3       "row/colum context"            ()  7 1)
254*3d8817e4Smiod
255*3d8817e4Smiod; The following is just for a test
256*3d8817e4Smiod(dnf f-msysfrsr2 "sr2 for msys"			() 19 4)
257*3d8817e4Smiod(dnf f-brc2      "b_r_c2"                       () 14 3)
258*3d8817e4Smiod(dnf f-ball2     "b_all2"                       () 15 1)
259*3d8817e4Smiod
260*3d8817e4Smiod
261*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
262*3d8817e4Smiod;; Enumerations Of Instruction Fields ;;
263*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
264*3d8817e4Smiod
265*3d8817e4Smiod; insn-msys: bit 31.  1 for Morphosys Insns, 0 if not.
266*3d8817e4Smiod(define-normal-insn-enum insn-msys "msys enums" () MSYS_ f-msys
267*3d8817e4Smiod  (NO YES)
268*3d8817e4Smiod)
269*3d8817e4Smiod
270*3d8817e4Smiod; insn-opc: bits 30 through 25 .  Non-MorphoSys Instructions
271*3d8817e4Smiod; Note - the documentation is wrong for the encoding of the DBNZ
272*3d8817e4Smiod; instruction.  It is actually 011110.  See Issue 67699.
273*3d8817e4Smiod(define-normal-insn-enum insn-opc "opc enums" () OPC_ f-opc
274*3d8817e4Smiod  (ADD  ADDU SUB  SUBU MUL   -      -    -
275*3d8817e4Smiod   AND  OR   XOR  NAND NOR   XNOR   LDUI -
276*3d8817e4Smiod   LSL  LSR  ASR  -    -     -      -    -
277*3d8817e4Smiod   BRLT BRLE BREQ JMP  JAL   BRNEQ  DBNZ LOOP
278*3d8817e4Smiod   LDW  STW  -    -    -     -      -    -
279*3d8817e4Smiod   -    -    -    -    -     -      -    -
280*3d8817e4Smiod   EI   DI   SI   RETI BREAK IFLUSH -    -
281*3d8817e4Smiod  )
282*3d8817e4Smiod)
283*3d8817e4Smiod
284*3d8817e4Smiod; insn-msopc: bits 30 through 26 .  MorphoSys Instructions
285*3d8817e4Smiod(define-normal-insn-enum insn-msopc "msopc enums" () MSOPC_ f-msopc
286*3d8817e4Smiod  (LDCTXT LDFB      STFB    FBCB     MFBCB    FBCCI     FBRCI     FBCRI
287*3d8817e4Smiod   FBRRI  MFBCCI    MFBRCI  MFBCRI   MFBRRI   FBCBDR    RCFBCB    MRCFBCB
288*3d8817e4Smiod   CBCAST DUPCBCAST WFBI    WFB      RCRISC   FBCBINC   RCXMODE   INTLVR
289*3d8817e4Smiod   WFBINC MWFBINC   WFBINCR MWFBINCR FBCBINCS MFBCBINCS FBCBINCRS MFBCBINCRS
290*3d8817e4Smiod   -      -         -       -        -        -         -         -
291*3d8817e4Smiod  )
292*3d8817e4Smiod)
293*3d8817e4Smiod
294*3d8817e4Smiod; insn-imm: bit 24.  Immediate operand indicator.
295*3d8817e4Smiod(define-normal-insn-enum insn-imm "imm enums" () IMM_ f-imm
296*3d8817e4Smiod  ; This bit specifies whether and immediate operand will be present.
297*3d8817e4Smiod  ; It's 1 if there is, 0 if there is not.
298*3d8817e4Smiod  (NO YES)
299*3d8817e4Smiod)
300*3d8817e4Smiod;;;;;;;;;;;;;;;;
301*3d8817e4Smiod;; Attributes ;;
302*3d8817e4Smiod;;;;;;;;;;;;;;;;
303*3d8817e4Smiod
304*3d8817e4Smiod; Might not need this.  Keep if for the sim just in case.
305*3d8817e4Smiod;(define-attr
306*3d8817e4Smiod;  (for insn)
307*3d8817e4Smiod;  (type boolean)
308*3d8817e4Smiod;  (name EXT-SKIP-INSN)
309*3d8817e4Smiod;  (comment "instruction is a PAGE, LOADL or LOADH instruction")
310*3d8817e4Smiod;)
311*3d8817e4Smiod
312*3d8817e4Smiod(define-attr
313*3d8817e4Smiod  (for insn)
314*3d8817e4Smiod  (type boolean)
315*3d8817e4Smiod  (name LOAD-DELAY)
316*3d8817e4Smiod  (comment "insn has a load delay")
317*3d8817e4Smiod)
318*3d8817e4Smiod
319*3d8817e4Smiod(define-attr
320*3d8817e4Smiod  (for insn)
321*3d8817e4Smiod  (type boolean)
322*3d8817e4Smiod  (name MEMORY-ACCESS)
323*3d8817e4Smiod  (comment "insn performs a memory access")
324*3d8817e4Smiod)
325*3d8817e4Smiod
326*3d8817e4Smiod(define-attr
327*3d8817e4Smiod  (for insn)
328*3d8817e4Smiod  (type boolean)
329*3d8817e4Smiod  (name AL-INSN)
330*3d8817e4Smiod  (comment "insn is an arithmetic or logic insn.")
331*3d8817e4Smiod)
332*3d8817e4Smiod
333*3d8817e4Smiod(define-attr
334*3d8817e4Smiod  (for insn)
335*3d8817e4Smiod  (type boolean)
336*3d8817e4Smiod  (name IO-INSN)
337*3d8817e4Smiod  (comment "insn performs an I/O operation")
338*3d8817e4Smiod)
339*3d8817e4Smiod
340*3d8817e4Smiod(define-attr
341*3d8817e4Smiod  (for insn)
342*3d8817e4Smiod  (type boolean)
343*3d8817e4Smiod  (name BR-INSN)
344*3d8817e4Smiod  (comment "insn performs an I/O operation")
345*3d8817e4Smiod)
346*3d8817e4Smiod
347*3d8817e4Smiod(define-attr
348*3d8817e4Smiod  (for insn)
349*3d8817e4Smiod  (type boolean)
350*3d8817e4Smiod  (name JAL-HAZARD)
351*3d8817e4Smiod  (comment "insn has jal-like hazard")
352*3d8817e4Smiod)
353*3d8817e4Smiod
354*3d8817e4Smiod(define-pmacro (define-reg-use-attr regfield)
355*3d8817e4Smiod  (define-attr
356*3d8817e4Smiod    (for insn)
357*3d8817e4Smiod    (type boolean)
358*3d8817e4Smiod    (name (.sym "USES-" (.upcase regfield)))
359*3d8817e4Smiod    (comment ("insn accesses register operand " regfield))))
360*3d8817e4Smiod
361*3d8817e4Smiod(define-reg-use-attr "frdr")
362*3d8817e4Smiod(define-reg-use-attr "frdrrr")
363*3d8817e4Smiod(define-reg-use-attr "frsr1")
364*3d8817e4Smiod(define-reg-use-attr "frsr2")
365*3d8817e4Smiod
366*3d8817e4Smiod
367*3d8817e4Smiod; Might not need this.  Keep it for the sim just in case.
368*3d8817e4Smiod(define-attr
369*3d8817e4Smiod  (for insn)
370*3d8817e4Smiod  (type boolean)
371*3d8817e4Smiod  (name SKIPA)
372*3d8817e4Smiod  (comment "instruction is a SKIP instruction")
373*3d8817e4Smiod)
374*3d8817e4Smiod
375*3d8817e4Smiod
376*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;
377*3d8817e4Smiod;; Hardware Pieces ;;
378*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;
379*3d8817e4Smiod
380*3d8817e4Smiod;(define-pmacro (build-reg-name n) (.splice (.str "$" n) n))
381*3d8817e4Smiod
382*3d8817e4Smiod; These are the 16 registers that the chip has.  In later versions
383*3d8817e4Smiod; where there will be more registers, this will need to be expanded.
384*3d8817e4Smiod; Note that there are two entries for the registers with two names.
385*3d8817e4Smiod(define-hardware
386*3d8817e4Smiod  (name h-spr)
387*3d8817e4Smiod  (comment "special-purpose registers")
388*3d8817e4Smiod  (type register SI (16))
389*3d8817e4Smiod  (indices keyword "" (("R0" 0) ("R1" 1) ("R2" 2) ("R3" 3) ("R4" 4) ("R5" 5)
390*3d8817e4Smiod  ("R6" 6) ("R7" 7) ("R8" 8) ("R9" 9) ("R10" 10) ("R11" 11) ("R12" 12) ("fp" 12)
391*3d8817e4Smiod  ("R13" 13) ("sp" 13) ("R14" 14) ("ra" 14) ("R15" 15) ("ira" 15)))
392*3d8817e4Smiod;  (get (index) (and (raw-reg h-spr) #xffffffff))
393*3d8817e4Smiod;  (set (index value) (set (raw-reg h-spr) (and value #xffffffff)))
394*3d8817e4Smiod)
395*3d8817e4Smiod
396*3d8817e4Smiod; This is the  program counter.
397*3d8817e4Smiod(dnh h-pc "program counter" (PC PROFILE) (pc) () () ())
398*3d8817e4Smiod
399*3d8817e4Smiod(define-keyword
400*3d8817e4Smiod   (name msys-syms)
401*3d8817e4Smiod   (print-name h-nil)
402*3d8817e4Smiod   (prefix "")
403*3d8817e4Smiod   (values (DUP 1) (XX 0))
404*3d8817e4Smiod)
405*3d8817e4Smiod
406*3d8817e4Smiod;;;;;;;;;;;;;;
407*3d8817e4Smiod;; Operands ;;
408*3d8817e4Smiod;;;;;;;;;;;;;;
409*3d8817e4Smiod
410*3d8817e4Smiod(define-operand (name frsr1) (comment "register") (attrs)
411*3d8817e4Smiod  (type h-spr) (index f-sr1) )
412*3d8817e4Smiod(define-operand (name frsr2) (comment "register") (attrs)
413*3d8817e4Smiod  (type h-spr) (index f-sr2) )
414*3d8817e4Smiod(define-operand (name frdr) (comment "register") (attrs)
415*3d8817e4Smiod  (type h-spr) (index f-dr) )
416*3d8817e4Smiod(define-operand (name frdrrr) (comment "register") (attrs)
417*3d8817e4Smiod  (type h-spr) (index f-drrr) )
418*3d8817e4Smiod(define-operand (name imm16) (comment "immediate value - sign extd") (attrs)
419*3d8817e4Smiod  (type h-sint) (index f-imm16s) (handlers (parse "imm16") (print "dollarhex")))
420*3d8817e4Smiod(define-operand (name imm16z) (comment "immediate value - zero extd") (attrs)
421*3d8817e4Smiod  (type h-uint) (index f-imm16u) (handlers (parse "imm16") (print "dollarhex")))
422*3d8817e4Smiod(define-operand (name imm16o) (comment "immediate value") (attrs PCREL-ADDR)
423*3d8817e4Smiod  (type h-uint) (index f-imm16s) (handlers (parse "imm16") (print "pcrel")))
424*3d8817e4Smiod
425*3d8817e4Smiod; Operands for MorphoSys Instructions
426*3d8817e4Smiod
427*3d8817e4Smiod(define-operand (name rc) (comment "rc") (attrs)
428*3d8817e4Smiod  (type h-uint) (index f-rc) (handlers (parse "rc") (print "dollarhex")))
429*3d8817e4Smiod
430*3d8817e4Smiod(define-operand (name rcnum) (comment "rcnum") (attrs)
431*3d8817e4Smiod  (type h-uint) (index f-rcnum) (handlers (print "dollarhex")))
432*3d8817e4Smiod
433*3d8817e4Smiod(define-operand (name contnum) (comment "context number") (attrs)
434*3d8817e4Smiod  (type h-uint) (index f-contnum) (handlers (print "dollarhex")))
435*3d8817e4Smiod
436*3d8817e4Smiod(define-operand (name rbbc) (comment "omega network configuration") (attrs)
437*3d8817e4Smiod  (type h-uint) (index f-rbbc) (handlers (parse "rbbc") (print "dollarhex")))
438*3d8817e4Smiod
439*3d8817e4Smiod(define-operand (name colnum) (comment "column number") (attrs)
440*3d8817e4Smiod  (type h-uint) (index f-colnum) (handlers (print "dollarhex")))
441*3d8817e4Smiod
442*3d8817e4Smiod(define-operand (name rownum) (comment "row number") (attrs)
443*3d8817e4Smiod  (type h-uint) (index f-rownum) (handlers (print "dollarhex")))
444*3d8817e4Smiod
445*3d8817e4Smiod(define-operand (name rownum1) (comment "row number") (attrs)
446*3d8817e4Smiod  (type h-uint) (index f-rownum1) (handlers (print "dollarhex")))
447*3d8817e4Smiod
448*3d8817e4Smiod(define-operand (name rownum2) (comment "row number") (attrs)
449*3d8817e4Smiod  (type h-uint) (index f-rownum2) (handlers (print "dollarhex")))
450*3d8817e4Smiod
451*3d8817e4Smiod(define-operand (name rc1) (comment "rc1") (attrs)
452*3d8817e4Smiod  (type h-uint) (index f-rc1) (handlers (parse "rc") (print "dollarhex")))
453*3d8817e4Smiod
454*3d8817e4Smiod(define-operand (name rc2) (comment "rc2") (attrs)
455*3d8817e4Smiod  (type h-uint) (index f-rc2) (handlers (parse "rc") (print "dollarhex")))
456*3d8817e4Smiod
457*3d8817e4Smiod(define-operand (name cbrb) (comment "data-bus orientation") (attrs)
458*3d8817e4Smiod  (type h-uint) (index f-cbrb) (handlers (parse "cbrb") (print "dollarhex")))
459*3d8817e4Smiod
460*3d8817e4Smiod(define-operand (name cell) (comment "cell") (attrs)
461*3d8817e4Smiod  (type h-uint) (index f-cell) (handlers (print "dollarhex")))
462*3d8817e4Smiod
463*3d8817e4Smiod(define-operand (name dup) (comment "dup") (attrs)
464*3d8817e4Smiod  (type h-uint) (index f-dup) (handlers (parse "dup") (print "dollarhex")))
465*3d8817e4Smiod
466*3d8817e4Smiod(define-operand (name ctxdisp) (comment "context displacement") (attrs)
467*3d8817e4Smiod  (type h-uint) (index f-ctxdisp) (handlers (print "dollarhex")))
468*3d8817e4Smiod
469*3d8817e4Smiod(define-operand (name fbdisp) (comment "frame buffer displacement") (attrs)
470*3d8817e4Smiod  (type h-uint) (index f-fbdisp) (handlers (print "dollarhex")))
471*3d8817e4Smiod
472*3d8817e4Smiod(define-operand (name type) (comment "type") (attrs)
473*3d8817e4Smiod  (type h-uint) (index f-type) (handlers (parse "type") (print "dollarhex")))
474*3d8817e4Smiod
475*3d8817e4Smiod(define-operand (name mask) (comment "mask") (attrs)
476*3d8817e4Smiod  (type h-uint) (index f-mask) (handlers (print "dollarhex")))
477*3d8817e4Smiod
478*3d8817e4Smiod(define-operand (name bankaddr) (comment "bank address") (attrs)
479*3d8817e4Smiod  (type h-uint) (index f-bankaddr) (handlers (print "dollarhex")))
480*3d8817e4Smiod
481*3d8817e4Smiod(define-operand (name incamt) (comment "increment amount") (attrs)
482*3d8817e4Smiod  (type h-uint) (index f-incamt) (handlers (print "dollarhex")))
483*3d8817e4Smiod
484*3d8817e4Smiod(define-operand (name xmode) (comment "xmode") (attrs)
485*3d8817e4Smiod  (type h-uint) (index f-xmode) (handlers (parse "xmode") (print "dollarhex")))
486*3d8817e4Smiod
487*3d8817e4Smiod(define-operand (name mask1) (comment "mask1") (attrs)
488*3d8817e4Smiod  (type h-uint) (index f-mask1) (handlers (print "dollarhex")))
489*3d8817e4Smiod
490*3d8817e4Smiod(define-operand (name ball) (comment "b_all") (attrs)
491*3d8817e4Smiod  (type h-uint) (index f-ball) (handlers (parse "ball") (print "dollarhex")))
492*3d8817e4Smiod
493*3d8817e4Smiod(define-operand (name brc) (comment "b_r_c") (attrs)
494*3d8817e4Smiod  (type h-uint) (index f-brc) (handlers (print "dollarhex")))
495*3d8817e4Smiod
496*3d8817e4Smiod(define-operand (name rda) (comment "rd") (attrs)
497*3d8817e4Smiod  (type h-uint) (index f-rda) (handlers (print "dollarhex")))
498*3d8817e4Smiod
499*3d8817e4Smiod(define-operand (name wr) (comment "wr") (attrs)
500*3d8817e4Smiod  (type h-uint) (index f-wr) (handlers (print "dollarhex")))
501*3d8817e4Smiod
502*3d8817e4Smiod(define-operand (name ball2) (comment "b_all2") (attrs)
503*3d8817e4Smiod  (type h-uint) (index f-ball2) (handlers (parse "ball") (print "dollarhex")))
504*3d8817e4Smiod
505*3d8817e4Smiod(define-operand (name brc2) (comment "b_r_c2") (attrs)
506*3d8817e4Smiod  (type h-uint) (index f-brc2) (handlers (print "dollarhex")))
507*3d8817e4Smiod(define-operand (name perm) (comment "perm") (attrs)
508*3d8817e4Smiod  (type h-uint) (index f-perm) (handlers (print "dollarhex")))
509*3d8817e4Smiod(define-operand (name a23)   (comment "a23") (attrs)
510*3d8817e4Smiod  (type h-uint) (index f-a23) (handlers (print "dollarhex")))
511*3d8817e4Smiod(define-operand (name cr)   (comment "c-r") (attrs)
512*3d8817e4Smiod  (type h-uint) (index f-cr) (handlers (print "dollarhex")))
513*3d8817e4Smiod(define-operand (name cbs)	(comment "cbs") (attrs)
514*3d8817e4Smiod  (type h-uint) (index f-cbs) (handlers (print "dollarhex")))
515*3d8817e4Smiod(define-operand (name incr)	(comment "incr") (attrs)
516*3d8817e4Smiod  (type h-uint) (index f-incr) (handlers (print "dollarhex")))
517*3d8817e4Smiod(define-operand (name length)	(comment "length") (attrs)
518*3d8817e4Smiod  (type h-uint) (index f-length) (handlers (print "dollarhex")))
519*3d8817e4Smiod(define-operand (name cbx)	(comment "cbx") (attrs)
520*3d8817e4Smiod  (type h-uint) (index f-cbx) (handlers (print "dollarhex")))
521*3d8817e4Smiod(define-operand (name ccb)	(comment "ccb") (attrs)
522*3d8817e4Smiod  (type h-uint) (index f-ccb) (handlers (print "dollarhex")))
523*3d8817e4Smiod(define-operand (name cdb)	(comment "cdb") (attrs)
524*3d8817e4Smiod  (type h-uint) (index f-cdb) (handlers (print "dollarhex")))
525*3d8817e4Smiod
526*3d8817e4Smiod; For the INTLVR insn
527*3d8817e4Smiod(define-operand (name mode) (comment "mode") (attrs)
528*3d8817e4Smiod  (type h-uint) (index f-mode) (handlers (print "dollarhex")))
529*3d8817e4Smiod(define-operand (name id) (comment "i/d") (attrs)
530*3d8817e4Smiod  (type h-uint) (index f-id) (handlers (print "dollarhex")))
531*3d8817e4Smiod(define-operand (name size) (comment "size") (attrs)
532*3d8817e4Smiod  (type h-uint) (index f-size) (handlers (print "dollarhex")))
533*3d8817e4Smiod
534*3d8817e4Smiod(define-operand (name fbincr)	(comment "fb incr") (attrs)
535*3d8817e4Smiod  (type h-uint) (index f-fbincr) (handlers (print "dollarhex")))
536*3d8817e4Smiod
537*3d8817e4Smiod; For the ms2 insns
538*3d8817e4Smiod(define-operand (name loopsize) (comment "immediate value")
539*3d8817e4Smiod  (attrs (MACH ms2) PCREL-ADDR)
540*3d8817e4Smiod  (type h-uint) (index f-loopo) (handlers (parse "loopsize") (print "pcrel")))
541*3d8817e4Smiod(define-operand (name imm16l) (comment "immediate value")
542*3d8817e4Smiod  (attrs (MACH ms2))
543*3d8817e4Smiod  (type h-uint) (index f-imm16l) (handlers (print "dollarhex")))
544*3d8817e4Smiod(define-operand (name rc3) (comment "rc3") (attrs (MACH ms2))
545*3d8817e4Smiod  (type h-uint) (index f-rc3) (handlers (parse "rc") (print "dollarhex")))
546*3d8817e4Smiod(define-operand (name cb1sel) (comment "cb1sel") (attrs (MACH ms2))
547*3d8817e4Smiod  (type h-uint) (index f-cb1sel) (handlers (print "dollarhex")))
548*3d8817e4Smiod(define-operand (name cb2sel) (comment "cb2sel") (attrs (MACH ms2))
549*3d8817e4Smiod  (type h-uint) (index f-cb2sel) (handlers (print "dollarhex")))
550*3d8817e4Smiod(define-operand (name cb1incr) (comment "cb1incr") (attrs (MACH ms2))
551*3d8817e4Smiod  (type h-sint) (index f-cb1incr) (handlers (print "dollarhex")))
552*3d8817e4Smiod(define-operand (name cb2incr) (comment "cb2incr") (attrs (MACH ms2))
553*3d8817e4Smiod  (type h-sint) (index f-cb2incr) (handlers (print "dollarhex")))
554*3d8817e4Smiod
555*3d8817e4Smiod; Probaby won't need most of these.
556*3d8817e4Smiod(define-pmacro r0    (reg h-spr #x0))
557*3d8817e4Smiod(define-pmacro r1    (reg h-spr #x01))
558*3d8817e4Smiod(define-pmacro r2    (reg h-spr #x02))
559*3d8817e4Smiod(define-pmacro r3    (reg h-spr #x03))
560*3d8817e4Smiod(define-pmacro r4    (reg h-spr #x04))
561*3d8817e4Smiod(define-pmacro r5    (reg h-spr #x05))
562*3d8817e4Smiod(define-pmacro r6    (reg h-spr #x06))
563*3d8817e4Smiod(define-pmacro r7    (reg h-spr #x07))
564*3d8817e4Smiod(define-pmacro r8    (reg h-spr #x08))
565*3d8817e4Smiod(define-pmacro r9    (reg h-spr #x09))
566*3d8817e4Smiod(define-pmacro r10   (reg h-spr #xA))
567*3d8817e4Smiod(define-pmacro r11   (reg h-spr #xB))
568*3d8817e4Smiod(define-pmacro r12   (reg h-spr #xC))
569*3d8817e4Smiod(define-pmacro fp    (reg h-spr #xC))
570*3d8817e4Smiod(define-pmacro r13   (reg h-spr #xD))
571*3d8817e4Smiod(define-pmacro sp    (reg h-spr #xD))
572*3d8817e4Smiod(define-pmacro r14   (reg h-spr #xE))
573*3d8817e4Smiod(define-pmacro ra    (reg h-spr #xE))
574*3d8817e4Smiod(define-pmacro r15   (reg h-spr #xF))
575*3d8817e4Smiod(define-pmacro ira   (reg h-spr #xF))
576*3d8817e4Smiod
577*3d8817e4Smiod; delayed set
578*3d8817e4Smiod(define-pmacro (dset dest src) (set (delay 1 dest) src))
579*3d8817e4Smiod
580*3d8817e4Smiod
581*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
582*3d8817e4Smiod;; Instructions As Defined In the MorphoRisc ISA Document ;;
583*3d8817e4Smiod;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
584*3d8817e4Smiod
585*3d8817e4Smiod; Arithmetic Instructions
586*3d8817e4Smiod
587*3d8817e4Smiod(dni add "ADD DstReg, SrcReg1, SrcReg2"
588*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
589*3d8817e4Smiod     "add $frdrrr,$frsr1,$frsr2"
590*3d8817e4Smiod     (+ MSYS_NO OPC_ADD IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
591*3d8817e4Smiod     (set frdrrr (add SI frsr1 frsr2))
592*3d8817e4Smiod     ()
593*3d8817e4Smiod)
594*3d8817e4Smiod
595*3d8817e4Smiod(dni addu "ADDU DstReg, SrcReg1, SrcReg2"
596*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
597*3d8817e4Smiod     "addu $frdrrr,$frsr1,$frsr2"
598*3d8817e4Smiod     (+ MSYS_NO OPC_ADDU IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
599*3d8817e4Smiod     (set frdrrr (add USI frsr1 frsr2))
600*3d8817e4Smiod     ()
601*3d8817e4Smiod)
602*3d8817e4Smiod
603*3d8817e4Smiod(dni addi "ADDI DstReg, SrcReg1 UnsImm"
604*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
605*3d8817e4Smiod     "addi $frdr,$frsr1,#$imm16"
606*3d8817e4Smiod     (+ MSYS_NO OPC_ADD IMM_YES frsr1 frdr imm16)
607*3d8817e4Smiod     (sequence((HI tmp))
608*3d8817e4Smiod        (set HI tmp (and imm16 #xffff))
609*3d8817e4Smiod	(set frdr (add SI frsr1 (ext SI tmp)))
610*3d8817e4Smiod     )
611*3d8817e4Smiod     ()
612*3d8817e4Smiod)
613*3d8817e4Smiod
614*3d8817e4Smiod(dni addui "ADDUI DstReg, SrcReg1, UnsImm"
615*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
616*3d8817e4Smiod     "addui $frdr,$frsr1,#$imm16z"
617*3d8817e4Smiod     (+ MSYS_NO OPC_ADDU IMM_YES frsr1 frdr imm16z)
618*3d8817e4Smiod     (set frdr (add USI frsr1 (ext USI imm16z)))
619*3d8817e4Smiod     ()
620*3d8817e4Smiod)
621*3d8817e4Smiod
622*3d8817e4Smiod(dni sub "SUB DstReg, SrcReg1, SrcReg2"
623*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
624*3d8817e4Smiod     "sub $frdrrr,$frsr1,$frsr2"
625*3d8817e4Smiod     (+ MSYS_NO OPC_SUB IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
626*3d8817e4Smiod     (set frdrrr (sub SI frsr1 frsr2))
627*3d8817e4Smiod     ()
628*3d8817e4Smiod)
629*3d8817e4Smiod
630*3d8817e4Smiod(dni subu "SUBU DstReg, SrcReg1, SrcReg2"
631*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
632*3d8817e4Smiod     "subu $frdrrr,$frsr1,$frsr2"
633*3d8817e4Smiod     (+ MSYS_NO OPC_SUBU IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
634*3d8817e4Smiod     (set frdrrr (sub USI frsr1 frsr2))
635*3d8817e4Smiod     ()
636*3d8817e4Smiod)
637*3d8817e4Smiod
638*3d8817e4Smiod(dni subi "SUBI DstReg, SrcReg1, UnsImm"
639*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
640*3d8817e4Smiod     "subi $frdr,$frsr1,#$imm16"
641*3d8817e4Smiod     (+ MSYS_NO OPC_SUB IMM_YES frsr1 frdr imm16)
642*3d8817e4Smiod     (sequence((HI tmp))
643*3d8817e4Smiod        (set HI tmp (and imm16 #xffff))
644*3d8817e4Smiod	(set frdr (sub SI frsr1 (ext SI tmp)))
645*3d8817e4Smiod     )
646*3d8817e4Smiod     ;(set frdr (sub SI frsr1 (ext SI imm16)))
647*3d8817e4Smiod     ()
648*3d8817e4Smiod)
649*3d8817e4Smiod
650*3d8817e4Smiod(dni subui "SUBUI DstReg, SrcReg1, UnsImm"
651*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
652*3d8817e4Smiod     "subui $frdr,$frsr1,#$imm16z"
653*3d8817e4Smiod     (+ MSYS_NO OPC_SUBU IMM_YES frsr1 frdr imm16z)
654*3d8817e4Smiod     (set frdr (sub USI frsr1 (ext USI imm16z)))
655*3d8817e4Smiod     ()
656*3d8817e4Smiod)
657*3d8817e4Smiod
658*3d8817e4Smiod(dni mul "MUL DstReg, SrcReg1, SrcReg2"
659*3d8817e4Smiod     ((MACH ms1-003,ms2) AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
660*3d8817e4Smiod     "mul $frdrrr,$frsr1,$frsr2"
661*3d8817e4Smiod     (+ MSYS_NO OPC_MUL IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
662*3d8817e4Smiod     (sequence((HI op1) (HI op2))
663*3d8817e4Smiod	 (set op1 (and frsr1 #xffff))
664*3d8817e4Smiod         (if (or (lt op1 (const -32768)) (gt op1 (const 32767)))
665*3d8817e4Smiod            (error "operand out of range")
666*3d8817e4Smiod         )
667*3d8817e4Smiod	 (set op2 (and frsr2 #xffff))
668*3d8817e4Smiod         (if (or (lt op2 (const -32768)) (gt op2 (const 32767)))
669*3d8817e4Smiod            (error "operand out of range")
670*3d8817e4Smiod         )
671*3d8817e4Smiod	 (set frdrrr (mul SI (ext SI op1) (ext SI op2)))
672*3d8817e4Smiod     )
673*3d8817e4Smiod     ()
674*3d8817e4Smiod)
675*3d8817e4Smiod
676*3d8817e4Smiod(dni muli "MULI DstReg, SrcReg1, UnsImm"
677*3d8817e4Smiod     ((MACH ms1-003,ms2) AL-INSN USES-FRDR USES-FRSR1)
678*3d8817e4Smiod     "muli $frdr,$frsr1,#$imm16"
679*3d8817e4Smiod     (+ MSYS_NO OPC_MUL IMM_YES frsr1 frdr imm16)
680*3d8817e4Smiod     (sequence((HI op1) (HI op2))
681*3d8817e4Smiod	 (set op1 (and frsr1 #xffff))
682*3d8817e4Smiod         (if (or (lt op1 (const -32768)) (gt op1 (const 32767)))
683*3d8817e4Smiod            (error "operand out of range")
684*3d8817e4Smiod         )
685*3d8817e4Smiod         (set op2 (and imm16 #xffff))
686*3d8817e4Smiod         (if (eq op1 (const 0))
687*3d8817e4Smiod          (error "op1 is 0")
688*3d8817e4Smiod         )
689*3d8817e4Smiod         (if (eq op2 (const 0))
690*3d8817e4Smiod          (error "op2 is 0")
691*3d8817e4Smiod         )
692*3d8817e4Smiod	 (set frdr (mul SI (ext SI op1) (ext SI op2)))
693*3d8817e4Smiod     )
694*3d8817e4Smiod     ()
695*3d8817e4Smiod)
696*3d8817e4Smiod
697*3d8817e4Smiod; Logical Instructions
698*3d8817e4Smiod
699*3d8817e4Smiod(dni and "AND DstReg, SrcReg1, SrcReg2"
700*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
701*3d8817e4Smiod     "and $frdrrr,$frsr1,$frsr2"
702*3d8817e4Smiod     (+ MSYS_NO OPC_AND IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
703*3d8817e4Smiod     (set frdrrr (and frsr1 frsr2))
704*3d8817e4Smiod     ()
705*3d8817e4Smiod)
706*3d8817e4Smiod
707*3d8817e4Smiod(dni andi "ANDI DstReg, SrcReg1, UnsImm"
708*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
709*3d8817e4Smiod     "andi $frdr,$frsr1,#$imm16z"
710*3d8817e4Smiod     (+ MSYS_NO OPC_AND IMM_YES frsr1 frdr imm16z)
711*3d8817e4Smiod     (set frdr (and frsr1 (ext USI imm16z)))
712*3d8817e4Smiod     ()
713*3d8817e4Smiod)
714*3d8817e4Smiod
715*3d8817e4Smiod(dni or "OR DstReg, SrcReg1, SrcReg2"
716*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
717*3d8817e4Smiod     "or $frdrrr,$frsr1,$frsr2"
718*3d8817e4Smiod     (+ MSYS_NO OPC_OR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
719*3d8817e4Smiod     (set frdrrr (or frsr1 frsr2))
720*3d8817e4Smiod     ()
721*3d8817e4Smiod)
722*3d8817e4Smiod
723*3d8817e4Smiod(dni nop "nop"
724*3d8817e4Smiod     ()
725*3d8817e4Smiod     "nop"
726*3d8817e4Smiod     (+ MSYS_NO OPC_OR IMM_NO (f-uu24 0))
727*3d8817e4Smiod     (nop)
728*3d8817e4Smiod     ()
729*3d8817e4Smiod)
730*3d8817e4Smiod
731*3d8817e4Smiod(dni ori "ORI DstReg, SrcReg1, UnsImm"
732*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
733*3d8817e4Smiod     "ori $frdr,$frsr1,#$imm16z"
734*3d8817e4Smiod     (+ MSYS_NO OPC_OR IMM_YES frsr1 frdr imm16z)
735*3d8817e4Smiod     (set frdr (or frsr1 (ext USI imm16z)))
736*3d8817e4Smiod     ()
737*3d8817e4Smiod)
738*3d8817e4Smiod
739*3d8817e4Smiod(dni xor "XOR DstReg, SrcReg1, SrcReg2"
740*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
741*3d8817e4Smiod     "xor $frdrrr,$frsr1,$frsr2"
742*3d8817e4Smiod     (+ MSYS_NO OPC_XOR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
743*3d8817e4Smiod     (set frdrrr (xor frsr1 frsr2))
744*3d8817e4Smiod     ()
745*3d8817e4Smiod)
746*3d8817e4Smiod
747*3d8817e4Smiod(dni xori "XORI DstReg, SrcReg1, UnsImm"
748*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
749*3d8817e4Smiod     "xori $frdr,$frsr1,#$imm16z"
750*3d8817e4Smiod     (+ MSYS_NO OPC_XOR IMM_YES frsr1 frdr imm16z)
751*3d8817e4Smiod     (set frdr (xor frsr1 (ext USI imm16z)))
752*3d8817e4Smiod     ()
753*3d8817e4Smiod)
754*3d8817e4Smiod
755*3d8817e4Smiod(dni nand "NAND DstReg, SrcReg1, SrcReg2"
756*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
757*3d8817e4Smiod     "nand $frdrrr,$frsr1,$frsr2"
758*3d8817e4Smiod     (+ MSYS_NO OPC_NAND IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
759*3d8817e4Smiod     (set frdrrr (inv (and frsr1 frsr2)))
760*3d8817e4Smiod     ()
761*3d8817e4Smiod)
762*3d8817e4Smiod
763*3d8817e4Smiod(dni nandi "NANDI DstReg, SrcReg1, UnsImm"
764*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
765*3d8817e4Smiod     "nandi $frdr,$frsr1,#$imm16z"
766*3d8817e4Smiod     (+ MSYS_NO OPC_NAND IMM_YES frsr1 frdr imm16z)
767*3d8817e4Smiod     (set frdr (inv (and frsr1 (ext USI imm16z))))
768*3d8817e4Smiod     ()
769*3d8817e4Smiod)
770*3d8817e4Smiod
771*3d8817e4Smiod(dni nor "NOR DstReg, SrcReg1, SrcReg2"
772*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
773*3d8817e4Smiod     "nor $frdrrr,$frsr1,$frsr2"
774*3d8817e4Smiod     (+ MSYS_NO OPC_NOR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
775*3d8817e4Smiod     (set frdrrr (inv (or frsr1 frsr2)))
776*3d8817e4Smiod     ()
777*3d8817e4Smiod)
778*3d8817e4Smiod
779*3d8817e4Smiod(dni nori "NORI DstReg, SrcReg1, UnsImm"
780*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
781*3d8817e4Smiod     "nori $frdr,$frsr1,#$imm16z"
782*3d8817e4Smiod     (+ MSYS_NO OPC_NOR IMM_YES frsr1 frdr imm16z)
783*3d8817e4Smiod     (set frdr (inv (or frsr1 (ext USI imm16z))))
784*3d8817e4Smiod     ()
785*3d8817e4Smiod)
786*3d8817e4Smiod
787*3d8817e4Smiod(dni xnor "XNOR DstReg, SrcReg1, SrcReg2"
788*3d8817e4Smiod     (AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2)
789*3d8817e4Smiod     "xnor $frdrrr,$frsr1,$frsr2"
790*3d8817e4Smiod     (+ MSYS_NO OPC_XNOR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
791*3d8817e4Smiod     (set frdrrr (inv (xor frsr1 frsr2)))
792*3d8817e4Smiod     ()
793*3d8817e4Smiod)
794*3d8817e4Smiod
795*3d8817e4Smiod(dni xnori "XNORI DstReg, SrcReg1, UnsImm"
796*3d8817e4Smiod     (AL-INSN USES-FRDR USES-FRSR1)
797*3d8817e4Smiod     "xnori $frdr,$frsr1,#$imm16z"
798*3d8817e4Smiod     (+ MSYS_NO OPC_XNOR IMM_YES frsr1 frdr imm16z)
799*3d8817e4Smiod     (set frdr (inv (xor frsr1 (ext USI imm16z))))
800*3d8817e4Smiod     ()
801*3d8817e4Smiod)
802*3d8817e4Smiod
803*3d8817e4Smiod(dni ldui "LDUI DstReg, UnsImm"
804*3d8817e4Smiod     (AL-INSN USES-FRDR)
805*3d8817e4Smiod     "ldui $frdr,#$imm16z"
806*3d8817e4Smiod     (+ MSYS_NO OPC_LDUI IMM_YES (f-uu4b 0) frdr imm16z)
807*3d8817e4Smiod     (set frdr (and (sll imm16z 16) #xffff0000))
808*3d8817e4Smiod     ()
809*3d8817e4Smiod)
810*3d8817e4Smiod
811*3d8817e4Smiod; Shift Instructions
812*3d8817e4Smiod
813*3d8817e4Smiod(dni lsl "LSL DstReg, SrcReg1, SrcReg2"
814*3d8817e4Smiod     (USES-FRDRRR USES-FRSR1 USES-FRSR2)
815*3d8817e4Smiod     "lsl $frdrrr,$frsr1,$frsr2"
816*3d8817e4Smiod     (+ MSYS_NO OPC_LSL IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
817*3d8817e4Smiod     (set frdrrr (sll frsr1 frsr2))
818*3d8817e4Smiod     ()
819*3d8817e4Smiod)
820*3d8817e4Smiod
821*3d8817e4Smiod(dni lsli "LSLI DstReg, SrcReg1, UnsImm"
822*3d8817e4Smiod     (USES-FRDR USES-FRSR1)
823*3d8817e4Smiod     "lsli $frdr,$frsr1,#$imm16"
824*3d8817e4Smiod     (+ MSYS_NO OPC_LSL IMM_YES frsr1 frdr imm16)
825*3d8817e4Smiod     (set frdr (sll frsr1 imm16))
826*3d8817e4Smiod     ()
827*3d8817e4Smiod)
828*3d8817e4Smiod
829*3d8817e4Smiod(dni lsr "LSR DstReg, SrcReg1, SrcReg2"
830*3d8817e4Smiod     (USES-FRDRRR USES-FRSR1 USES-FRSR2)
831*3d8817e4Smiod     "lsr $frdrrr,$frsr1,$frsr2"
832*3d8817e4Smiod     (+ MSYS_NO OPC_LSR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
833*3d8817e4Smiod     (set frdrrr (srl frsr1 frsr2))
834*3d8817e4Smiod     ()
835*3d8817e4Smiod)
836*3d8817e4Smiod
837*3d8817e4Smiod(dni lsri "LSRI DstReg, SrcReg1, UnsImm"
838*3d8817e4Smiod     (USES-FRDR USES-FRSR1)
839*3d8817e4Smiod     "lsri $frdr,$frsr1,#$imm16"
840*3d8817e4Smiod     (+ MSYS_NO OPC_LSR IMM_YES frsr1 frdr imm16)
841*3d8817e4Smiod     (set frdr (srl frsr1 imm16))
842*3d8817e4Smiod     ()
843*3d8817e4Smiod)
844*3d8817e4Smiod
845*3d8817e4Smiod(dni asr "ASR DstReg, SrcReg1, SrcReg2"
846*3d8817e4Smiod     (USES-FRDRRR USES-FRSR1 USES-FRSR2)
847*3d8817e4Smiod     "asr $frdrrr,$frsr1,$frsr2"
848*3d8817e4Smiod     (+ MSYS_NO OPC_ASR IMM_NO frsr1 frsr2 frdrrr (f-uu12 0))
849*3d8817e4Smiod     (set frdrrr (sra frsr1 frsr2))
850*3d8817e4Smiod     ()
851*3d8817e4Smiod)
852*3d8817e4Smiod
853*3d8817e4Smiod(dni asri "ASRI DstReg, SrcReg1, UnsImm"
854*3d8817e4Smiod     (USES-FRDR USES-FRSR1)
855*3d8817e4Smiod     "asri $frdr,$frsr1,#$imm16"
856*3d8817e4Smiod     (+ MSYS_NO OPC_ASR IMM_YES frsr1 frdr imm16)
857*3d8817e4Smiod     (set frdr (sra frsr1 imm16))
858*3d8817e4Smiod     ()
859*3d8817e4Smiod)
860*3d8817e4Smiod
861*3d8817e4Smiod; Control Transfer Instructions
862*3d8817e4Smiod
863*3d8817e4Smiod(dni brlt "BRLT SrcReg1, SrcReg2, label"
864*3d8817e4Smiod     (BR-INSN DELAY-SLOT USES-FRDRRR USES-FRSR1 USES-FRSR2)
865*3d8817e4Smiod     "brlt $frsr1,$frsr2,$imm16o"
866*3d8817e4Smiod     (+ MSYS_NO OPC_BRLT IMM_YES frsr1 frsr2 imm16o)
867*3d8817e4Smiod     (sequence()
868*3d8817e4Smiod        (if (lt USI frsr1 frsr2)
869*3d8817e4Smiod            (dset pc (add pc (ext SI imm16o))))
870*3d8817e4Smiod     )
871*3d8817e4Smiod     ()
872*3d8817e4Smiod)
873*3d8817e4Smiod
874*3d8817e4Smiod(dni brle "BRLE SrcReg1, SrcReg2, label"
875*3d8817e4Smiod     (BR-INSN DELAY-SLOT USES-FRSR1 USES-FRSR2)
876*3d8817e4Smiod     "brle $frsr1,$frsr2,$imm16o"
877*3d8817e4Smiod     (+ MSYS_NO OPC_BRLE IMM_YES frsr1 frsr2 imm16o)
878*3d8817e4Smiod     (sequence()
879*3d8817e4Smiod        (if (le USI frsr1 frsr2)
880*3d8817e4Smiod            (dset pc (add pc (ext SI imm16o))))
881*3d8817e4Smiod     )
882*3d8817e4Smiod     ()
883*3d8817e4Smiod)
884*3d8817e4Smiod
885*3d8817e4Smiod(dni breq "BREQ SrcReg1, SrcReg2, label"
886*3d8817e4Smiod     (BR-INSN DELAY-SLOT USES-FRSR1 USES-FRSR2)
887*3d8817e4Smiod     "breq $frsr1,$frsr2,$imm16o"
888*3d8817e4Smiod     (+ MSYS_NO OPC_BREQ IMM_YES frsr1 frsr2 imm16o)
889*3d8817e4Smiod     (sequence()
890*3d8817e4Smiod        (if (eq USI frsr1 frsr2)
891*3d8817e4Smiod            (dset pc (add pc (ext SI imm16o))))
892*3d8817e4Smiod     )
893*3d8817e4Smiod     ()
894*3d8817e4Smiod)
895*3d8817e4Smiod
896*3d8817e4Smiod(dni brne "BRNE SrcReg1, SrcReg2, label"
897*3d8817e4Smiod     (BR-INSN DELAY-SLOT USES-FRSR1 USES-FRSR2)
898*3d8817e4Smiod     "brne $frsr1,$frsr2,$imm16o"
899*3d8817e4Smiod     (+ MSYS_NO OPC_BRNEQ IMM_YES frsr1 frsr2 imm16o)
900*3d8817e4Smiod     (sequence()
901*3d8817e4Smiod        (if (not (eq USI frsr1 frsr2))
902*3d8817e4Smiod            (dset pc (add pc (ext SI imm16o))))
903*3d8817e4Smiod     )
904*3d8817e4Smiod     ()
905*3d8817e4Smiod)
906*3d8817e4Smiod
907*3d8817e4Smiod(dni jmp "JMP, label"
908*3d8817e4Smiod     (DELAY-SLOT BR-INSN)
909*3d8817e4Smiod     "jmp $imm16o"
910*3d8817e4Smiod     (+ MSYS_NO OPC_JMP IMM_YES (f-uu4b 0) (f-uu4a 0) imm16o)
911*3d8817e4Smiod     (dset pc (add pc (ext SI imm16o)))
912*3d8817e4Smiod     ()
913*3d8817e4Smiod)
914*3d8817e4Smiod
915*3d8817e4Smiod(dni jal "JAL DstReg, SrcReg1"
916*3d8817e4Smiod     (BR-INSN DELAY-SLOT BR-INSN USES-FRDR USES-FRSR1 JAL-HAZARD)
917*3d8817e4Smiod     "jal $frdrrr,$frsr1"
918*3d8817e4Smiod     (+ MSYS_NO OPC_JAL IMM_NO frsr1 (f-uu4a 0) frdrrr (f-uu12 0))
919*3d8817e4Smiod     (sequence()
920*3d8817e4Smiod         (if (eq frsr1 #x0)
921*3d8817e4Smiod	    (c-call VOID "do_syscall" pc)
922*3d8817e4Smiod	    (sequence()   ; else part.  Do non-syscall stuff here.
923*3d8817e4Smiod		(dset frdrrr (add pc #x8))
924*3d8817e4Smiod		(dset pc frsr1)
925*3d8817e4Smiod            )
926*3d8817e4Smiod         )
927*3d8817e4Smiod     )
928*3d8817e4Smiod     ()
929*3d8817e4Smiod)
930*3d8817e4Smiod
931*3d8817e4Smiod(dni dbnz "DBNZ SrcReg1, label"
932*3d8817e4Smiod     ((MACH ms1-003,ms2) BR-INSN DELAY-SLOT USES-FRSR1)
933*3d8817e4Smiod     "dbnz $frsr1,$imm16o"
934*3d8817e4Smiod     (+ MSYS_NO OPC_DBNZ IMM_YES frsr1 (f-uu4a 0) imm16o)
935*3d8817e4Smiod     (sequence()
936*3d8817e4Smiod	 (if (not (eq USI frsr1 0))
937*3d8817e4Smiod            (dset pc (add pc (ext SI imm16o))))
938*3d8817e4Smiod     )
939*3d8817e4Smiod     ()
940*3d8817e4Smiod)
941*3d8817e4Smiod
942*3d8817e4Smiod; Interrupt Control Instructions
943*3d8817e4Smiod
944*3d8817e4Smiod(dni ei "EI - Enable Interrupt Processing"
945*3d8817e4Smiod     ()
946*3d8817e4Smiod     "ei"
947*3d8817e4Smiod     (+ MSYS_NO OPC_EI IMM_NO (f-uu4b 0) (f-uu4a 0) (f-uu16 0))
948*3d8817e4Smiod     (c-call VOID "enable_interrupts")
949*3d8817e4Smiod     ()
950*3d8817e4Smiod)
951*3d8817e4Smiod
952*3d8817e4Smiod(dni di "DI - Disable Interrupt Processing"
953*3d8817e4Smiod     ()
954*3d8817e4Smiod     "di"
955*3d8817e4Smiod     (+ MSYS_NO OPC_DI IMM_NO (f-uu4b 0) (f-uu4a 0) (f-uu16 0))
956*3d8817e4Smiod     (c-call VOID "disable_interrupts")
957*3d8817e4Smiod     ()
958*3d8817e4Smiod)
959*3d8817e4Smiod
960*3d8817e4Smiod(dni si "SI - Send software Interrupt"
961*3d8817e4Smiod     (DELAY-SLOT BR-INSN USES-FRDR)
962*3d8817e4Smiod     "si $frdrrr"
963*3d8817e4Smiod     (+ MSYS_NO OPC_SI IMM_NO (f-uu4b 0) (f-uu4a 0) frdrrr (f-uu12 0))
964*3d8817e4Smiod     ;(sequence()
965*3d8817e4Smiod     ;   (dset frdr (add pc #x4))
966*3d8817e4Smiod     ;   (c-call VOID "do_syscall1" pc)
967*3d8817e4Smiod     ;   ; (dset pc frsr1) Do this later when we have the address.
968*3d8817e4Smiod     ;)
969*3d8817e4Smiod     (sequence()
970*3d8817e4Smiod        (set frdrrr (add pc #x4))
971*3d8817e4Smiod        (c-call VOID "do_syscall" pc)
972*3d8817e4Smiod        ; (set pc frsr1) Do this later when we have the address.
973*3d8817e4Smiod     )
974*3d8817e4Smiod     ()
975*3d8817e4Smiod)
976*3d8817e4Smiod
977*3d8817e4Smiod(dni reti "RETI SrcReg1"
978*3d8817e4Smiod     (DELAY-SLOT BR-INSN USES-FRSR1 JAL-HAZARD)
979*3d8817e4Smiod     "reti $frsr1"
980*3d8817e4Smiod     (+ MSYS_NO OPC_RETI IMM_NO frsr1 (f-uu4a 0) (f-uu16 0))
981*3d8817e4Smiod     (sequence()
982*3d8817e4Smiod       (c-call VOID "enable_interrupts")
983*3d8817e4Smiod       (dset pc frsr1)
984*3d8817e4Smiod     )
985*3d8817e4Smiod     ()
986*3d8817e4Smiod)
987*3d8817e4Smiod
988*3d8817e4Smiod; Memory Access Instructions
989*3d8817e4Smiod
990*3d8817e4Smiod(dni ldw "LDW DstReg, SrcReg1, Imm"
991*3d8817e4Smiod     (LOAD-DELAY MEMORY-ACCESS USES-FRDR USES-FRSR1)
992*3d8817e4Smiod     "ldw $frdr,$frsr1,#$imm16"
993*3d8817e4Smiod     (+ MSYS_NO OPC_LDW IMM_YES frsr1 frdr imm16)
994*3d8817e4Smiod     (sequence((USI ea) (HI tmp))
995*3d8817e4Smiod      (set HI tmp (and imm16 #xffff))
996*3d8817e4Smiod      (set ea (and (add SI frsr1 (ext SI tmp)) #xfffffffc))
997*3d8817e4Smiod      (set frdr (mem SI ea))
998*3d8817e4Smiod     )
999*3d8817e4Smiod     ()
1000*3d8817e4Smiod)
1001*3d8817e4Smiod
1002*3d8817e4Smiod(dni stw "STW SrcReg2, SrcReg1, Imm"
1003*3d8817e4Smiod     (MEMORY-ACCESS USES-FRSR1 USES-FRSR2)
1004*3d8817e4Smiod     "stw $frsr2,$frsr1,#$imm16"
1005*3d8817e4Smiod     (+ MSYS_NO OPC_STW IMM_YES frsr1 frsr2 imm16)
1006*3d8817e4Smiod     (sequence((USI ea) (HI tmp))
1007*3d8817e4Smiod      (set HI tmp (and imm16 #xffff))
1008*3d8817e4Smiod      (set ea (and (add SI frsr1 (ext SI tmp)) #xfffffffc))
1009*3d8817e4Smiod      (set (mem SI ea) frsr2)
1010*3d8817e4Smiod     )
1011*3d8817e4Smiod     ()
1012*3d8817e4Smiod)
1013*3d8817e4Smiod
1014*3d8817e4Smiod; Break Instruction
1015*3d8817e4Smiod
1016*3d8817e4Smiod(dni break "BREAK"
1017*3d8817e4Smiod     ()
1018*3d8817e4Smiod     "break"
1019*3d8817e4Smiod     (+ MSYS_NO OPC_BREAK (f-imm 0) (f-uu24 0))
1020*3d8817e4Smiod     (c-call VOID "do_break" pc)
1021*3d8817e4Smiod     ()
1022*3d8817e4Smiod)
1023*3d8817e4Smiod
1024*3d8817e4Smiod; Cache Flush Instruction
1025*3d8817e4Smiod
1026*3d8817e4Smiod(dni iflush "IFLUSH"
1027*3d8817e4Smiod     ((MACH ms1-003,ms2))
1028*3d8817e4Smiod     "iflush"
1029*3d8817e4Smiod     (+ MSYS_NO OPC_IFLUSH (f-imm 0) (f-uu24 0))
1030*3d8817e4Smiod     (nop)
1031*3d8817e4Smiod     ()
1032*3d8817e4Smiod)
1033*3d8817e4Smiod
1034*3d8817e4Smiod; MorphoSys Instructions
1035*3d8817e4Smiod
1036*3d8817e4Smiod(dni ldctxt "LDCTXT SRC1, SRC2, r/c, r/c#, context#"
1037*3d8817e4Smiod     ((MACH ms1))
1038*3d8817e4Smiod     "ldctxt $frsr1,$frsr2,#$rc,#$rcnum,#$contnum"
1039*3d8817e4Smiod     (+ MSYS_YES MSOPC_LDCTXT (f-uu-2-25 0) frsr1 frsr2 rc rcnum (f-uu-3-11 0)
1040*3d8817e4Smiod	contnum )
1041*3d8817e4Smiod     (nop)
1042*3d8817e4Smiod     ()
1043*3d8817e4Smiod)
1044*3d8817e4Smiod
1045*3d8817e4Smiod(dni ldfb "LDFB SRC1, byte#"
1046*3d8817e4Smiod     ((MACH ms1))
1047*3d8817e4Smiod     "ldfb $frsr1,$frsr2,#$imm16z"
1048*3d8817e4Smiod     (+ MSYS_YES MSOPC_LDFB (f-uu-2-25 0) frsr1 frsr2 imm16z)
1049*3d8817e4Smiod     (nop)
1050*3d8817e4Smiod     ()
1051*3d8817e4Smiod)
1052*3d8817e4Smiod
1053*3d8817e4Smiod(dni stfb "STFB SRC1, SRC2, byte "
1054*3d8817e4Smiod     ((MACH ms1))
1055*3d8817e4Smiod     "stfb $frsr1,$frsr2,#$imm16z"
1056*3d8817e4Smiod     (+ MSYS_YES MSOPC_STFB (f-uu-2-25 0) frsr1 frsr2 imm16z)
1057*3d8817e4Smiod     (nop)
1058*3d8817e4Smiod     ()
1059*3d8817e4Smiod)
1060*3d8817e4Smiod
1061*3d8817e4Smiod(dni fbcb "FBCB SRC1, RT/BR1/BR2/CS, B_all, B_r_c, r/c, CB/RB, cell, dup, ctx_disp"
1062*3d8817e4Smiod     ((MACH ms1,ms1-003))
1063*3d8817e4Smiod     "fbcb $frsr1,#$rbbc,#$ball,#$brc,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
1064*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCB rbbc frsr1 ball brc (f-uu-4-15 0) rc cbrb cell dup ctxdisp)
1065*3d8817e4Smiod     (nop)
1066*3d8817e4Smiod     ()
1067*3d8817e4Smiod)
1068*3d8817e4Smiod
1069*3d8817e4Smiod(dni mfbcb "MFBCB SRC1, RT/BR1/BR2/CS, SRC2, r/c, CB/RB, cell, dup, ctx_disp"
1070*3d8817e4Smiod     ()
1071*3d8817e4Smiod     "mfbcb $frsr1,#$rbbc,$frsr2,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
1072*3d8817e4Smiod     (+ MSYS_YES MSOPC_MFBCB rbbc frsr1 frsr2 (f-uu-4-15 0) rc1 cbrb cell dup ctxdisp)
1073*3d8817e4Smiod     (nop)
1074*3d8817e4Smiod     ()
1075*3d8817e4Smiod)
1076*3d8817e4Smiod
1077*3d8817e4Smiod(dni fbcci "FBCCI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
1078*3d8817e4Smiod     ()
1079*3d8817e4Smiod     "fbcci $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1080*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCCI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
1081*3d8817e4Smiod     (nop)
1082*3d8817e4Smiod     ()
1083*3d8817e4Smiod)
1084*3d8817e4Smiod
1085*3d8817e4Smiod(dni fbrci "FBRCI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
1086*3d8817e4Smiod     ()
1087*3d8817e4Smiod     "fbrci $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1088*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBRCI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
1089*3d8817e4Smiod     (nop)
1090*3d8817e4Smiod     ()
1091*3d8817e4Smiod)
1092*3d8817e4Smiod
1093*3d8817e4Smiod(dni fbcri "FBCRI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
1094*3d8817e4Smiod     ()
1095*3d8817e4Smiod     "fbcri $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1096*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCRI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
1097*3d8817e4Smiod     (nop)
1098*3d8817e4Smiod     ()
1099*3d8817e4Smiod)
1100*3d8817e4Smiod
1101*3d8817e4Smiod(dni fbrri "FBRRI SRC1, RT/BR1/BR2/CS, B_all, B_r_c, FB_disp, cell, dup, ctx_disp"
1102*3d8817e4Smiod     ()
1103*3d8817e4Smiod     "fbrri $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1104*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBRRI rbbc frsr1 ball brc fbdisp cell dup ctxdisp)
1105*3d8817e4Smiod     (nop)
1106*3d8817e4Smiod     ()
1107*3d8817e4Smiod)
1108*3d8817e4Smiod
1109*3d8817e4Smiod(dni mfbcci "MFBCCI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
1110*3d8817e4Smiod     ()
1111*3d8817e4Smiod     "mfbcci $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1112*3d8817e4Smiod     (+ MSYS_YES MSOPC_MFBCCI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
1113*3d8817e4Smiod     (nop)
1114*3d8817e4Smiod     ()
1115*3d8817e4Smiod)
1116*3d8817e4Smiod
1117*3d8817e4Smiod(dni mfbrci "MFBRCI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
1118*3d8817e4Smiod     ()
1119*3d8817e4Smiod     "mfbrci $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1120*3d8817e4Smiod     (+ MSYS_YES MSOPC_MFBRCI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
1121*3d8817e4Smiod     (nop)
1122*3d8817e4Smiod     ()
1123*3d8817e4Smiod)
1124*3d8817e4Smiod
1125*3d8817e4Smiod(dni mfbcri "MFBCRI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
1126*3d8817e4Smiod     ()
1127*3d8817e4Smiod     "mfbcri $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1128*3d8817e4Smiod     (+ MSYS_YES MSOPC_MFBCRI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
1129*3d8817e4Smiod     (nop)
1130*3d8817e4Smiod     ()
1131*3d8817e4Smiod)
1132*3d8817e4Smiod
1133*3d8817e4Smiod(dni mfbrri "MFBRRI SRC1, RT/BR1/BR2/CS, SRC2, FB_disp, cell, dup, ctx_disp"
1134*3d8817e4Smiod     ()
1135*3d8817e4Smiod     "mfbrri $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp"
1136*3d8817e4Smiod     (+ MSYS_YES MSOPC_MFBRRI rbbc frsr1 frsr2 fbdisp cell dup ctxdisp)
1137*3d8817e4Smiod     (nop)
1138*3d8817e4Smiod     ()
1139*3d8817e4Smiod)
1140*3d8817e4Smiod
1141*3d8817e4Smiod(dni fbcbdr "FBCBDR SRC1, RT/BR1/BR2/CS, SRC2, B_all, B_r_c, r/c, CB/RB, cell, dup, ctx_disp"
1142*3d8817e4Smiod     ()
1143*3d8817e4Smiod     "fbcbdr $frsr1,#$rbbc,$frsr2,#$ball2,#$brc2,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
1144*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCBDR rbbc frsr1 frsr2 ball2 brc2 rc1 cbrb cell dup ctxdisp)
1145*3d8817e4Smiod     (nop)
1146*3d8817e4Smiod     ()
1147*3d8817e4Smiod)
1148*3d8817e4Smiod
1149*3d8817e4Smiod(dni rcfbcb "RCFBCB RT/BR1/BR2/CS, type, B_all, B_r_c, row#, r/c, CB/RB, cell, dup, ctx_disp"
1150*3d8817e4Smiod     ()
1151*3d8817e4Smiod     "rcfbcb #$rbbc,#$type,#$ball,#$brc,#$rownum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
1152*3d8817e4Smiod     (+ MSYS_YES MSOPC_RCFBCB rbbc (f-uu-2-23 0) type ball brc (f-uu-1-15 0) rownum rc1 cbrb cell dup ctxdisp)
1153*3d8817e4Smiod     (nop)
1154*3d8817e4Smiod     ()
1155*3d8817e4Smiod)
1156*3d8817e4Smiod
1157*3d8817e4Smiod(dni mrcfbcb "MRCFBCB SRC2, RT/BR1/BR2/CS, type, row#, r/c, CB/RB, cell, dup, ctx_disp"
1158*3d8817e4Smiod     ()
1159*3d8817e4Smiod     "mrcfbcb $frsr2,#$rbbc,#$type,#$rownum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
1160*3d8817e4Smiod     (+ MSYS_YES MSOPC_MRCFBCB rbbc (f-uu-2-23 0) type frsr2 (f-uu-1-15 0) rownum rc1 cbrb cell dup ctxdisp)
1161*3d8817e4Smiod     (nop)
1162*3d8817e4Smiod     ()
1163*3d8817e4Smiod)
1164*3d8817e4Smiod
1165*3d8817e4Smiod(dni cbcast "CBCAST mask, r/c, ctx_disp "
1166*3d8817e4Smiod     ()
1167*3d8817e4Smiod     "cbcast #$mask,#$rc2,#$ctxdisp"
1168*3d8817e4Smiod     (+ MSYS_YES MSOPC_CBCAST mask (f-uu-3-9 0) rc2 ctxdisp)
1169*3d8817e4Smiod     (nop)
1170*3d8817e4Smiod     ()
1171*3d8817e4Smiod)
1172*3d8817e4Smiod
1173*3d8817e4Smiod(dni dupcbcast "DUPCBCAST mask, cell, r/c, ctx_disp "
1174*3d8817e4Smiod     ()
1175*3d8817e4Smiod     "dupcbcast #$mask,#$cell,#$rc2,#$ctxdisp"
1176*3d8817e4Smiod     (+ MSYS_YES MSOPC_DUPCBCAST mask cell rc2 ctxdisp)
1177*3d8817e4Smiod     (nop)
1178*3d8817e4Smiod     ()
1179*3d8817e4Smiod)
1180*3d8817e4Smiod
1181*3d8817e4Smiod(dni wfbi "WFBI Bank_address, row#, cell, dup, ctx_disp "
1182*3d8817e4Smiod     ()
1183*3d8817e4Smiod    "wfbi #$bankaddr,#$rownum1,#$cell,#$dup,#$ctxdisp"
1184*3d8817e4Smiod     (+ MSYS_YES MSOPC_WFBI bankaddr rownum1 cell dup ctxdisp)
1185*3d8817e4Smiod     (nop)
1186*3d8817e4Smiod     ()
1187*3d8817e4Smiod)
1188*3d8817e4Smiod
1189*3d8817e4Smiod;(dni wfb "WFB SRC1, SRC2, FB_disp, row#, ctx_disp"
1190*3d8817e4Smiod;     ()
1191*3d8817e4Smiod;     "wfb $frsr1,$frsr2,#$fbdisp,#$rownum,#$ctxdisp"
1192*3d8817e4Smiod;     (+ MSYS_YES MSOPC_WFB (f-uu-2-25 0) frsr1 frsr2 fbdisp rownum (f-uu-1-6 0) ctxdisp)
1193*3d8817e4Smiod;     (nop)
1194*3d8817e4Smiod;     ()
1195*3d8817e4Smiod;)
1196*3d8817e4Smiod
1197*3d8817e4Smiod(dni wfb "WFB, DRC1,SRC2,FB_disp,row#,ctx_disp"
1198*3d8817e4Smiod      ()
1199*3d8817e4Smiod      "wfb $frsr1,$frsr2,#$fbdisp,#$rownum2,#$ctxdisp"
1200*3d8817e4Smiod      (+ MSYS_YES MSOPC_WFB (f-uu-2-25 0) frsr1 frsr2 fbdisp rownum2 (f-uu-1-6 0) ctxdisp)
1201*3d8817e4Smiod      (nop)
1202*3d8817e4Smiod      ()
1203*3d8817e4Smiod)
1204*3d8817e4Smiod
1205*3d8817e4Smiod
1206*3d8817e4Smiod(dni rcrisc "RCRISC DEST, RT/BR1/BR2/CS, SRC1, column#, r/c, CB/RB, cell, dup, ctx_disp"
1207*3d8817e4Smiod     ()
1208*3d8817e4Smiod     "rcrisc $frdrrr,#$rbbc,$frsr1,#$colnum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
1209*3d8817e4Smiod     (+ MSYS_YES MSOPC_RCRISC rbbc frsr1 (f-uu-1-19 0) colnum frdrrr rc1 cbrb cell dup ctxdisp)
1210*3d8817e4Smiod     (nop)
1211*3d8817e4Smiod     ()
1212*3d8817e4Smiod)
1213*3d8817e4Smiod
1214*3d8817e4Smiod(dni fbcbinc "FBCBINC SRC1, RT/BR1/BR2/CS, Incr_amount, r/c, CB/RB, cell, dup, ctx_disp "
1215*3d8817e4Smiod     ()
1216*3d8817e4Smiod     "fbcbinc $frsr1,#$rbbc,#$incamt,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp"
1217*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCBINC rbbc frsr1 incamt rc1 cbrb cell dup ctxdisp)
1218*3d8817e4Smiod     (nop)
1219*3d8817e4Smiod     ()
1220*3d8817e4Smiod)
1221*3d8817e4Smiod
1222*3d8817e4Smiod(dni rcxmode "RCXMODE SRC2, rd, wr, xmode, mask, FB_disp, row#, r/c, ctx_disp"
1223*3d8817e4Smiod     ()
1224*3d8817e4Smiod     "rcxmode $frsr2,#$rda,#$wr,#$xmode,#$mask1,#$fbdisp,#$rownum2,#$rc2,#$ctxdisp"
1225*3d8817e4Smiod     (+ MSYS_YES MSOPC_RCXMODE rda wr xmode mask1 frsr2 fbdisp rownum2 rc2 ctxdisp)
1226*3d8817e4Smiod     (nop)
1227*3d8817e4Smiod     ()
1228*3d8817e4Smiod)
1229*3d8817e4Smiod
1230*3d8817e4Smiod(dni interleaver "INTLVR ireg, mode, ireg, i/d, size"
1231*3d8817e4Smiod     ()
1232*3d8817e4Smiod     "intlvr $frsr1,#$mode,$frsr2,#$id,#$size"
1233*3d8817e4Smiod     (+ MSYS_YES MSOPC_INTLVR mode frsr1 frsr2 (f-uu-1-15 0) id size)
1234*3d8817e4Smiod     (nop)
1235*3d8817e4Smiod     ()
1236*3d8817e4Smiod)
1237*3d8817e4Smiod
1238*3d8817e4Smiod;; Issue 66262: The documenatation gives the wrong order for
1239*3d8817e4Smiod;;               the arguments to the WFBINC instruction.
1240*3d8817e4Smiod(dni wfbinc "WFBINC type, ccb/rcb, incr, all, c/r, length, rca_row, word, dup, ctxt_disp"
1241*3d8817e4Smiod     ((MACH ms1-003,ms2))
1242*3d8817e4Smiod     "wfbinc #$rda,#$wr,#$fbincr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
1243*3d8817e4Smiod     (+ MSYS_YES MSOPC_WFBINC rda wr fbincr ball colnum length rownum1 rownum2 dup ctxdisp)
1244*3d8817e4Smiod     (nop)
1245*3d8817e4Smiod     ()
1246*3d8817e4Smiod)
1247*3d8817e4Smiod
1248*3d8817e4Smiod(dni mwfbinc "MWFBINC mreg, type, ccb/rcb, incr, length, rca_row, word, dup, ctxt_disp"
1249*3d8817e4Smiod     ((MACH ms1-003,ms2))
1250*3d8817e4Smiod     "mwfbinc $frsr2,#$rda,#$wr,#$fbincr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
1251*3d8817e4Smiod     (+ MSYS_YES MSOPC_MWFBINC rda wr fbincr frsr2 length rownum1 rownum2 dup ctxdisp)
1252*3d8817e4Smiod     (nop)
1253*3d8817e4Smiod     ()
1254*3d8817e4Smiod)
1255*3d8817e4Smiod
1256*3d8817e4Smiod(dni wfbincr "WFBINCR ireg, type, ccb/rcb, all, c/r, length, rca_row, word, dup, ctxt_disp"
1257*3d8817e4Smiod     ((MACH ms1-003,ms2))
1258*3d8817e4Smiod     "wfbincr $frsr1,#$rda,#$wr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
1259*3d8817e4Smiod     (+ MSYS_YES MSOPC_WFBINCR rda wr frsr1 ball colnum length rownum1 rownum2 dup ctxdisp)
1260*3d8817e4Smiod     (nop)
1261*3d8817e4Smiod     ()
1262*3d8817e4Smiod)
1263*3d8817e4Smiod
1264*3d8817e4Smiod(dni mwfbincr "MWFBINCR ireg, mreg, type, ccb/rcb, length, rca_row, word, dup, ctxt_disp"
1265*3d8817e4Smiod     ((MACH ms1-003,ms2))
1266*3d8817e4Smiod     "mwfbincr $frsr1,$frsr2,#$rda,#$wr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp"
1267*3d8817e4Smiod     (+ MSYS_YES MSOPC_MWFBINCR rda wr frsr1 frsr2 length rownum1 rownum2 dup ctxdisp)
1268*3d8817e4Smiod     (nop)
1269*3d8817e4Smiod     ()
1270*3d8817e4Smiod)
1271*3d8817e4Smiod
1272*3d8817e4Smiod(dni fbcbincs "FBCBINCS	     perm, all, c/r, cbs, incr, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
1273*3d8817e4Smiod     ((MACH ms1-003,ms2))
1274*3d8817e4Smiod     "fbcbincs #$perm,#$a23,#$cr,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
1275*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCBINCS perm a23 cr cbs incr ccb cdb rownum2 dup ctxdisp)
1276*3d8817e4Smiod     (nop)
1277*3d8817e4Smiod     ()
1278*3d8817e4Smiod)
1279*3d8817e4Smiod
1280*3d8817e4Smiod(dni mfbcbincs "MFBCBINCS		ireg, perm, cbs, incr, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
1281*3d8817e4Smiod     ((MACH ms1-003,ms2))
1282*3d8817e4Smiod     "mfbcbincs $frsr1,#$perm,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
1283*3d8817e4Smiod     (+ MSYS_YES MSOPC_MFBCBINCS perm frsr1 cbs incr ccb cdb rownum2 dup ctxdisp)
1284*3d8817e4Smiod     (nop)
1285*3d8817e4Smiod     ()
1286*3d8817e4Smiod)
1287*3d8817e4Smiod
1288*3d8817e4Smiod(dni fbcbincrs "FBCBINCRS	     ireg, perm, all, c/r, cbs, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
1289*3d8817e4Smiod     ((MACH ms1-003,ms2))
1290*3d8817e4Smiod     "fbcbincrs $frsr1,#$perm,#$ball,#$colnum,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
1291*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCBINCRS perm frsr1 ball colnum (f-uu-1-15 0) cbx ccb cdb rownum2 dup ctxdisp)
1292*3d8817e4Smiod     (nop)
1293*3d8817e4Smiod     ()
1294*3d8817e4Smiod)
1295*3d8817e4Smiod
1296*3d8817e4Smiod(dni mfbcbincrs "MFBCBINCRS ireg, mreg, perm, cbs, ccb/rcb, cdb/rdb, word, dup, ctxt_disp"
1297*3d8817e4Smiod     ((MACH ms1-003,ms2))
1298*3d8817e4Smiod     "mfbcbincrs $frsr1,$frsr2,#$perm,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp"
1299*3d8817e4Smiod     (+ MSYS_YES MSOPC_MFBCBINCRS perm frsr1 frsr2 (f-uu-1-15 0) cbx ccb cdb rownum2 dup ctxdisp)
1300*3d8817e4Smiod     (nop)
1301*3d8817e4Smiod     ()
1302*3d8817e4Smiod)
1303*3d8817e4Smiod
1304*3d8817e4Smiod; MS2 instructions
1305*3d8817e4Smiod(dni loop "LOOP SrcReg1, label"
1306*3d8817e4Smiod     ((MACH ms2) DELAY-SLOT USES-FRSR1)
1307*3d8817e4Smiod     "loop $frsr1,$loopsize"
1308*3d8817e4Smiod     (+ MSYS_NO OPC_LOOP IMM_NO frsr1 (f-uu4a 0) (f-uu8 0) loopsize)
1309*3d8817e4Smiod     (nop)      ;; to be filled in
1310*3d8817e4Smiod     ()
1311*3d8817e4Smiod)
1312*3d8817e4Smiod
1313*3d8817e4Smiod(dni loopi "LOOPI niter, label"
1314*3d8817e4Smiod     ((MACH ms2) DELAY-SLOT)
1315*3d8817e4Smiod     "loopi #$imm16l,$loopsize"
1316*3d8817e4Smiod     (+ MSYS_NO OPC_LOOP IMM_YES imm16l loopsize)
1317*3d8817e4Smiod     (nop)      ;; to be filled in
1318*3d8817e4Smiod     ()
1319*3d8817e4Smiod)
1320*3d8817e4Smiod
1321*3d8817e4Smiod(dni dfbc "dfbc cb1sel,cb2sel,cb1inc,cb2inc,dr/c,cr/c,ctxdisp"
1322*3d8817e4Smiod     ((MACH ms2))
1323*3d8817e4Smiod     "dfbc #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp"
1324*3d8817e4Smiod     (+ MSYS_YES MSOPC_LDCTXT cb1sel cb2sel cb1incr cb2incr rc3 rc2 ctxdisp)
1325*3d8817e4Smiod     (nop)
1326*3d8817e4Smiod     ()
1327*3d8817e4Smiod)
1328*3d8817e4Smiod
1329*3d8817e4Smiod(dni dwfb "dwfb cb1sel,cb2sel,cb1inc,cb2inc,cr/c,ctxdisp"
1330*3d8817e4Smiod     ((MACH ms2))
1331*3d8817e4Smiod     "dwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc2,#$ctxdisp"
1332*3d8817e4Smiod     (+ MSYS_YES MSOPC_LDFB cb1sel cb2sel cb1incr cb2incr (f-uu1 0) rc2 ctxdisp)
1333*3d8817e4Smiod     (nop)
1334*3d8817e4Smiod     ()
1335*3d8817e4Smiod)
1336*3d8817e4Smiod
1337*3d8817e4Smiod(dni fbwfb "fbwfb cb1sel,cb2sel,cb1inc,cb2inc,r0/1,cr/c,ctxdisp"
1338*3d8817e4Smiod     ((MACH ms2))
1339*3d8817e4Smiod     "fbwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp"
1340*3d8817e4Smiod     (+ MSYS_YES MSOPC_STFB cb1sel cb2sel cb1incr cb2incr rc3 rc2 ctxdisp)
1341*3d8817e4Smiod     (nop)
1342*3d8817e4Smiod     ()
1343*3d8817e4Smiod)
1344*3d8817e4Smiod
1345*3d8817e4Smiod(dni dfbr "dfbr cb1sel,cb2sel,reg,W/O1,W/O2,mode,cr/c,ctxdisp"
1346*3d8817e4Smiod     ((MACH ms2) USES-FRSR2)
1347*3d8817e4Smiod     "dfbr #$cb1sel,#$cb2sel,$frsr2,#$length,#$rownum1,#$rownum2,#$rc2,#$ctxdisp"
1348*3d8817e4Smiod     (+ MSYS_YES MSOPC_FBCB cb1sel cb2sel frsr2 length rownum1 rownum2 rc2 ctxdisp)
1349*3d8817e4Smiod     (nop)
1350*3d8817e4Smiod     ()
1351*3d8817e4Smiod)
1352