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