; IQ2000-only CPU description. -*- Scheme -*-
;
; Copyright 2000, 2001, 2002, 2004, 2007, 2009 Free Software Foundation, Inc.
;
; Contributed by Red Hat Inc; developed under contract from Vitesse.
;
; This file is part of the GNU Binutils.
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
; MA 02110-1301, USA.

(dni andoui "and upper ones immediate" (MACH2000 USES-RS USES-RT)
     "andoui $rt,$rs,$hi16"
     (+ OP_ANDOUI rs rt hi16)
     (set rt (and rs (or (sll hi16 16) #xFFFF)))
     ())

(dni andoui2 "and upper ones immediate" (ALIAS NO-DIS MACH2000 USES-RS USES-RT)
     "andoui ${rt-rs},$hi16"
     (+ OP_ANDOUI rt-rs hi16)
     (set rt-rs (and rt-rs (or (sll hi16 16) #xFFFF)))
     ())

(dni orui2 "or upper immediate" (ALIAS NO-DIS MACH2000 USES-RS USES-RT)
     "orui ${rt-rs},$hi16"
     (+ OP_ORUI rt-rs hi16)
     (set rt-rs (or rt-rs (sll hi16 16)))
     ())

(dni orui "or upper immediate" (MACH2000 USES-RS USES-RT)
     "orui $rt,$rs,$hi16"
     (+ OP_ORUI rs rt hi16)
     (set rt (or rs (sll hi16 16)))
     ())

(dni bgtz "branch if greater than zero" (MACH2000 USES-RS)
     "bgtz $rs,$offset"
     (+ OP_BGTZ rs (f-rt 0) offset)
     (if (gt rs 0)
	 (delay 1 (set pc offset)))
     ())


(dni bgtzl "branch if greater than zero likely" (MACH2000 USES-RS)
     "bgtzl $rs,$offset"
     (+ OP_BGTZL rs (f-rt 0) offset)
     (if (gt rs 0)
	 (delay 1 (set pc offset))
	 (skip 1))
     ())

(dni blez "branch if less than or equal to zero" (MACH2000 USES-RS)
     "blez $rs,$offset"
     (+ OP_BLEZ rs (f-rt 0) offset)
     (if (le rs 0)
	 (delay 1 (set pc offset)))
     ())

(dni blezl "branch if less than or equal to zero likely" (MACH2000 USES-RS)
     "blezl $rs,$offset"
     (+ OP_BLEZL rs (f-rt 0) offset)
     (if (le rs 0)
	 (delay 1 (set pc offset))
	 (skip 1))
     ())


(dni mrgb "merge bytes" (MACH2000 USES-RD USES-RS USES-RT)
     "mrgb $rd,$rs,$rt,$mask"
     (+ OP_SPECIAL rs rt rd (f-10 0) mask FUNC_MRGB)
     (sequence ((SI temp))
	       (if (bitclear? mask 0)
		   (set temp (and rs #xFF))
		   (set temp (and rt #xFF)))
	       (if (bitclear? mask 1)
		   (set temp (or temp (and rs #xFF00)))
		   (set temp (or temp (and rt #xFF00))))
	       (if (bitclear? mask 2)
		   (set temp (or temp (and rs #xFF0000)))
		   (set temp (or temp (and rt #xFF0000))))
	       (if (bitclear? mask 3)
		   (set temp (or temp (and rs #xFF000000)))
		   (set temp (or temp (and rt #xFF000000))))
	       (set rd temp))
     ())

(dni mrgb2 "merge bytes" (ALIAS NO-DIS MACH2000 USES-RD USES-RS USES-RT)
     "mrgb ${rd-rs},$rt,$mask"
     (+ OP_SPECIAL rt rd-rs (f-10 0) mask FUNC_MRGB)
     (sequence ((SI temp))
	       (if (bitclear? mask 0)
		   (set temp (and rd-rs #xFF))
		   (set temp (and rt #xFF)))
	       (if (bitclear? mask 1)
		   (set temp (or temp (and rd-rs #xFF00)))
		   (set temp (or temp (and rt #xFF00))))
	       (if (bitclear? mask 2)
		   (set temp (or temp (and rd-rs #xFF0000)))
		   (set temp (or temp (and rt #xFF0000))))
	       (if (bitclear? mask 3)
		   (set temp (or temp (and rd-rs #xFF000000)))
		   (set temp (or temp (and rt #xFF000000))))
	       (set rd-rs temp))
     ())

; NOTE: None of these instructions' semantics are specified, so they
; will not work in a simulator.
;
; Architectural and coprocessor instructions.
; BREAK and SYSCALL are implemented with escape hatches to the C
; code.  These are used by the test suite to indicate pass/failures.

(dni bctxt "branch and switch context" (MACH2000 DELAY-SLOT COND-CTI USES-RS)
     "bctxt $rs,$offset"
     (+ OP_REGIMM rs (f-rt 6) offset)
     (unimp bctxt)
     ())

(dni bc0f "branch if copro 0 condition false" (MACH2000 DELAY-SLOT COND-CTI)
     "bc0f $offset"
     (+ OP_COP0 (f-rs 8) (f-rt 0) offset)
     (unimp bc0f)
     ())

(dni bc0fl "branch if copro 0 condition false likely" (MACH2000 DELAY-SLOT COND-CTI SKIP-CTI)
     "bc0fl $offset"
     (+ OP_COP0 (f-rs 8) (f-rt 2) offset)
     (unimp bc0fl)
     ())

(dni bc3f "branch if copro 3 condition false" (MACH2000 DELAY-SLOT COND-CTI)
     "bc3f $offset"
     (+ OP_COP3 (f-rs 8) (f-rt 0) offset)
     (unimp bc3f)
     ())

(dni bc3fl "branch if copro 3 condition false likely" (MACH2000 DELAY-SLOT COND-CTI SKIP-CTI)
     "bc3fl $offset"
     (+ OP_COP3 (f-rs 8) (f-rt 2) offset)
     (unimp bc3fl)
     ())

(dni bc0t "branch if copro 0 condition true" (MACH2000 DELAY-SLOT COND-CTI)
     "bc0t $offset"
     (+ OP_COP0 (f-rs 8) (f-rt 1) offset)
     (unimp bc0t)
     ())

(dni bc0tl "branch if copro 0 condition true likely" (MACH2000 DELAY-SLOT COND-CTI SKIP-CTI)
     "bc0tl $offset"
     (+ OP_COP0 (f-rs 8) (f-rt 3) offset)
     (unimp bc0tl)
     ())

(dni bc3t "branch if copro 3 condition true" (MACH2000 DELAY-SLOT COND-CTI)
     "bc3t $offset"
     (+ OP_COP3 (f-rs 8) (f-rt 1) offset)
     (unimp bc3t)
     ())

(dni bc3tl "branch if copro 3 condition true likely" (MACH2000 DELAY-SLOT COND-CTI SKIP-CTI)
     "bc3tl $offset"
     (+ OP_COP3 (f-rs 8) (f-rt 3) offset)
     (unimp bc3tl)
     ())

; Note that we don't set the USES-RD or USES-RT attributes for many of the following 
; instructions, as it's the COP register that's being specified.

(dni cfc0 "control from coprocessor 0" (MACH2000 LOAD-DELAY USES-RT)
     "cfc0 $rt,$rd"
     (+ OP_COP0 (f-rs 2) rt rd (f-10-11 0))
     (unimp cfc0)
     ())

(dni cfc1 "control from coprocessor 1" (MACH2000 LOAD-DELAY USES-RT)
     "cfc1 $rt,$rd"
     (+ OP_COP1 (f-rs 2) rt rd (f-10-11 0))
     (unimp cfc1)
     ())

(dni cfc2 "control from coprocessor 2" (MACH2000 LOAD-DELAY USES-RT YIELD-INSN)
     "cfc2 $rt,$rd"
     (+ OP_COP2 (f-rs 2) rt rd (f-10-11 0))
     (unimp cfc2)
     ())

(dni cfc3 "control from coprocessor 3" (MACH2000 LOAD-DELAY USES-RT YIELD-INSN)
     "cfc3 $rt,$rd"
     (+ OP_COP3 (f-rs 2) rt rd (f-10-11 0))
     (unimp cfc3)
     ())

; COPz instructions are an instruction form, not real instructions
; with associated assembly mnemonics.  Therefore, they are omitted
; from the ISA description.

(dni chkhdr "check header" (MACH2000 LOAD-DELAY USES-RD YIELD-INSN)
     "chkhdr $rd,$rt"
     (+ OP_COP3 (f-rs 9) rt rd (f-shamt 0) (f-func 0))
     (unimp chkhdr)
     ())

(dni ctc0 "control to coprocessor 0" (MACH2000 USES-RT)
     "ctc0 $rt,$rd"
     (+ OP_COP0 (f-rs 6) rt rd (f-10-11 0))
     (unimp ctc0)
     ())

(dni ctc1 "control to coprocessor 1" (MACH2000 USES-RT)
     "ctc1 $rt,$rd"
     (+ OP_COP1 (f-rs 6) rt rd (f-10-11 0))
     (unimp ctc1)
     ())

(dni ctc2 "control to coprocessor 2" (MACH2000 USES-RT)
     "ctc2 $rt,$rd"
     (+ OP_COP2 (f-rs 6) rt rd (f-10-11 0))
     (unimp ctc2)
     ())

(dni ctc3 "control to coprocessor 3" (MACH2000 USES-RT)
     "ctc3 $rt,$rd"
     (+ OP_COP3 (f-rs 6) rt rd (f-10-11 0))
     (unimp ctc3)
     ())

(dni jcr "jump context register" (MACH2000 DELAY-SLOT UNCOND-CTI USES-RS)
     "jcr $rs"
     (+ OP_SPECIAL rs (f-rt 0) (f-rd 0) (f-shamt 0) FUNC_JCR)
     (unimp jcr)
     ())

(dni luc32 "lookup chain 32 bits" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "luc32 $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 3))
     (unimp luc32)
     ())

(dni luc32l "lookup chain 32 bits and lock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "luc32l $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 7))
     (unimp luc32l)
     ())

(dni luc64 "lookup chain 64 bits" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "luc64 $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 11))
     (unimp luc64)
     ())

(dni luc64l "lookup chain 64 bits and lock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "luc64l $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 15))
     (unimp luc64l)
     ())

(dni luk "lookup key" (MACH2000 USES-RD USES-RT)
     "luk $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 8))
     (unimp luk)
     ())

(dni lulck "lookup lock" (MACH2000 USES-RT YIELD-INSN)
     "lulck $rt"
     (+ OP_COP2 (f-rs 1) rt (f-rd 0) (f-shamt 0) (f-func 4))
     (unimp lulck)
     ())

(dni lum32 "lookup match 32 bits" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "lum32 $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 2))
     (unimp lum32)
     ())

(dni lum32l "lookup match 32 bits and lock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "lum32l $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 6))
     (unimp lum32l)
     ())

(dni lum64 "lookup match 64 bits" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "lum64 $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 10))
     (unimp lum64)
     ())

(dni lum64l "lookup match 64 bits and lock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "lum64l $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 14))
     (unimp lum64l)
     ())

(dni lur "lookup read" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "lur $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 1))
     (unimp lur)
     ())

(dni lurl "lookup read and lock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "lurl $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 5))
     (unimp lurl)
     ())

(dni luulck "lookup unlock" (MACH2000 USES-RT YIELD-INSN)
     "luulck $rt"
     (+ OP_COP2 (f-rs 1) rt (f-rd 0) (f-shamt 0) (f-func 0))
     (unimp luulck)
     ())

(dni mfc0 "move from coprocessor 0" (MACH2000 LOAD-DELAY USES-RT)
     "mfc0 $rt,$rd"
     (+ OP_COP0 (f-rs 0) rt rd (f-10-11 0))
     (unimp mfc0)
     ())

(dni mfc1 "move from coprocessor 1" (MACH2000 LOAD-DELAY USES-RT)
     "mfc1 $rt,$rd"
     (+ OP_COP1 (f-rs 0) rt rd (f-10-11 0))
     (unimp mfc1)
     ())

(dni mfc2 "move from coprocessor 2" (MACH2000 LOAD-DELAY USES-RT YIELD-INSN)
     "mfc2 $rt,$rd"
     (+ OP_COP2 (f-rs 0) rt rd (f-10-11 0))
     (unimp mfc2)
     ())

(dni mfc3 "move from coprocessor 3" (MACH2000 LOAD-DELAY USES-RT YIELD-INSN)
     "mfc3 $rt,$rd"
     (+ OP_COP3 (f-rs 0) rt rd (f-10-11 0))
     (unimp mfc3)
     ())

(dni mtc0 "move to coprocessor 0" (MACH2000 USES-RT)
     "mtc0 $rt,$rd"
     (+ OP_COP0 (f-rs 4) rt rd (f-10-11 0))
     (unimp mtc0)
     ())

(dni mtc1 "move to coprocessor 1" (MACH2000 USES-RT)
     "mtc1 $rt,$rd"
     (+ OP_COP1 (f-rs 4) rt rd (f-10-11 0))
     (unimp mtc1)
     ())

(dni mtc2 "move to coprocessor 2" (MACH2000 USES-RT)
     "mtc2 $rt,$rd"
     (+ OP_COP2 (f-rs 4) rt rd (f-10-11 0))
     (unimp mtc2)
     ())

(dni mtc3 "move to coprocessor 3" (MACH2000 USES-RT)
     "mtc3 $rt,$rd"
     (+ OP_COP3 (f-rs 4) rt rd (f-10-11 0))
     (unimp mtc3)
     ())

(dni pkrl "pkrl" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "pkrl $rd,$rt"
     (+ OP_COP3 (f-rs 1) rt rd (f-shamt 0) (f-func 7))
     (unimp pkrl)
     ())

(dni pkrlr1 "pkrlr1" (MACH2000 USES-RT YIELD-INSN)
     "pkrlr1 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 29) rt count _index)
     (unimp pkrlr1)
     ())

(dni pkrlr30 "pkrlr30" (MACH2000 USES-RT YIELD-INSN)
     "pkrlr30 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 31) rt count _index)
     (unimp pkrlr30)
     ())

(dni rb "dma read bytes" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "rb $rd,$rt"
     (+ OP_COP3 (f-rs 1) rt rd (f-shamt 0) (f-func 4))
     (unimp rb)
     ())

(dni rbr1 "dma read bytes using r1" (MACH2000 USES-RT YIELD-INSN)
     "rbr1 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 24) rt count _index)
     (unimp rbr1)
     ())

(dni rbr30 "dma read bytes using r30" (MACH2000 USES-RT YIELD-INSN)
     "rbr30 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 26) rt count _index)
     (unimp rbr30)
     ())

(dni rfe "restore from exception" (MACH2000)
     "rfe"
     (+ OP_COP0 (f-25 1) (f-24-19 0) (f-func 16))
     (unimp rfe)
     ())

(dni rx "dma read word64s" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "rx $rd,$rt"
     (+ OP_COP3 (f-rs 1) rt rd (f-shamt 0) (f-func 6))
     (unimp rx)
     ())

(dni rxr1 "dma read word64s using r1" (MACH2000 USES-RT YIELD-INSN)
     "rxr1 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 28) rt count _index)
     (unimp rxr1)
     ())

(dni rxr30 "dma read word 64s using r30" (MACH2000 USES-RT YIELD-INSN)
     "rxr30 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 30) rt count _index)
     (unimp rxr30)
     ())

(dni sleep "sleep" (MACH2000 YIELD-INSN)
     "sleep"
     (+ OP_SPECIAL execode FUNC_SLEEP)
     (unimp sleep)
     ())

(dni srrd "sram read" (MACH2000 USES-RT YIELD-INSN)
     "srrd $rt"
     (+ OP_COP2 (f-rs 1) rt (f-rd 0) (f-shamt 0) (f-func 16))
     (unimp srrd)
     ())

(dni srrdl "sram read and lock" (MACH2000 USES-RT YIELD-INSN)
     "srrdl $rt"
     (+ OP_COP2 (f-rs 1) rt (f-rd 0) (f-shamt 0) (f-func 20))
     (unimp srrdl)
     ())

(dni srulck "sram unlock" (MACH2000 USES-RT YIELD-INSN)
     "srulck $rt"
     (+ OP_COP2 (f-rs 1) rt (f-rd 0) (f-shamt 0) (f-func 22))
     (unimp srulck)
     ())

(dni srwr "sram write" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "srwr $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 17))
     (unimp srwr)
     ())

(dni srwru "sram write and unlock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "srwru $rt,$rd"
     (+ OP_COP2 (f-rs 1) rt rd (f-shamt 0) (f-func 21))
     (unimp srwru)
     ())

(dni trapqfl "yield if dma queue full" (MACH2000 YIELD-INSN)
     "trapqfl"
     (+ OP_COP3 (f-rs 1) (f-rt 0) (f-rd 0) (f-shamt 0) (f-func 8))
     (unimp trapqfl)
     ())

(dni trapqne "yield if dma queue not empty" (MACH2000 YIELD-INSN)
     "trapqne"
     (+ OP_COP3 (f-rs 1) (f-rt 0) (f-rd 0) (f-shamt 0) (f-func 9))
     (unimp trapqne)
     ())

(dni traprel "traprel" (MACH2000 USES-RT YIELD-INSN)
     "traprel $rt"
     (+ OP_COP3 (f-rs 1) rt (f-rd 0) (f-shamt 0) (f-func 10))
     (unimp traprel)
     ())

(dni wb "dma write bytes" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "wb $rd,$rt"
     (+ OP_COP3 (f-rs 1) rt rd (f-shamt 0) (f-func 0))
     (unimp wb)
     ())

(dni wbu "dma write bytes and unlock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "wbu $rd,$rt"
     (+ OP_COP3 (f-rs 1) rt rd (f-shamt 0) (f-func 1))
     (unimp wbu)
     ())

(dni wbr1 "dma write bytes using r1" (MACH2000 USES-RT YIELD-INSN)
     "wbr1 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 16) rt count _index)
     (unimp wbr1)
     ())

(dni wbr1u "dma write bytes using r1 and unlock" (MACH2000 USES-RT YIELD-INSN)
     "wbr1u $rt,$_index,$count"
     (+ OP_COP3 (f-rs 17) rt count _index)
     (unimp wbr1u)
     ())

(dni wbr30 "dma write bytes using r30" (MACH2000 USES-RT YIELD-INSN)
     "wbr30 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 18) rt count _index)
     (unimp wbr30)
     ())

(dni wbr30u "dma write bytes using r30 and unlock" (MACH2000 USES-RT YIELD-INSN)
     "wbr30u $rt,$_index,$count"
     (+ OP_COP3 (f-rs 19) rt count _index)
     (unimp wbr30u)
     ())

(dni wx "dma write word64s" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "wx $rd,$rt"
     (+ OP_COP3 (f-rs 1) rt rd (f-shamt 0) (f-func 2))
     (unimp wx)
     ())

(dni wxu "dma write word64s and unlock" (MACH2000 USES-RD USES-RT YIELD-INSN)
     "wxu $rd,$rt"
     (+ OP_COP3 (f-rs 1) rt rd (f-shamt 0) (f-func 3))
     (unimp wxu)
     ())

(dni wxr1 "dma write word64s using r1" (MACH2000 USES-RT YIELD-INSN)
     "wxr1 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 20) rt count _index)
     (unimp wxr1)
     ())

(dni wxr1u "dma write word64s using r1 and unlock" (MACH2000 USES-RT YIELD-INSN)
     "wxr1u $rt,$_index,$count"
     (+ OP_COP3 (f-rs 21) rt count _index)
     (unimp wxr1u)
     ())

(dni wxr30 "dma write word64s using r30" (MACH2000 USES-RT YIELD-INSN)
     "wxr30 $rt,$_index,$count"
     (+ OP_COP3 (f-rs 22) rt count _index)
     (unimp wxr30)
     ())

(dni wxr30u "dma write word64s using r30 and unlock" (MACH2000 USES-RT YIELD-INSN)
     "wxr30u $rt,$_index,$count"
     (+ OP_COP3 (f-rs 23) rt count _index)
     (unimp wxr30u)
     ())


; Load/Store instructions.

(dni ldw "load double word" (MACH2000 EVEN-REG-NUM LOAD-DELAY USES-RT)
     "ldw $rt,$lo16($base)"
     (+ OP_LDW base rt lo16)
     (sequence ((SI addr))
	       (set addr (and (add base lo16) (inv 3)))
	       (set (reg h-gr (add (ifield f-rt) 1)) (mem SI addr))
	       (set rt (mem SI (add addr 4))))
     ())

(dni sdw "store double word" (MACH2000 EVEN-REG-NUM USES-RT)
     "sdw $rt,$lo16($base)"
     (+ OP_SDW base rt lo16)
     (sequence ((SI addr))
	       (set addr (and (add base lo16) (inv 3)))
	       (set (mem SI (add addr 4)) rt)
	       (set (mem SI addr) (reg h-gr (add (ifield f-rt) 1))))
     ())


; Jump instructions

(dni j "jump" (MACH2000)
     "j $jmptarg"
     (+ OP_J (f-rsrvd 0) jmptarg)
     (delay 1 (set pc jmptarg))
     ())

(dni jal "jump and link" (MACH2000 USES-R31)
     "jal $jmptarg"
     (+ OP_JAL (f-rsrvd 0) jmptarg)
     (delay 1
	    (sequence ()
		      (set (reg h-gr 31) (add pc 8))
		      (set pc jmptarg)))
     ())

(dni bmb "branch if matching byte-lane" (MACH2000 USES-RS USES-RT)
     "bmb $rs,$rt,$offset"
     (+ OP_BMB rs rt offset)
     (sequence ((BI branch?))
	       (set branch? 0)
	       (if (eq (and rs #xFF) (and rt #xFF))
		   (set branch? 1))
	       (if (eq (and rs #xFF00) (and rt #xFF00))
		   (set branch? 1))
	       (if (eq (and rs #xFF0000) (and rt #xFF0000))
		   (set branch? 1))
	       (if (eq (and rs #xFF000000) (and rt #xFF000000))
		   (set branch? 1))
	       (if branch?
		   (delay 1 (set pc offset))))
     ())


; Macros

(dnmi ldw-base-0 "load double word - implied base 0" (MACH2000 EVEN-REG-NUM LOAD-DELAY USES-RT USES-RS NO-DIS)
      "ldw $rt,$lo16"
      (emit ldw rt lo16 (base 0))
)

(dnmi sdw-base-0 "store double word - implied base 0" (MACH2000 EVEN-REG-NUM USES-RT NO-DIS)
      "sdw $rt,$lo16"
      (emit sdw rt lo16 (base 0))
)






