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