; Fujitsu FRV opcode support, for GNU Binutils.  -*- Scheme -*-
;
; Copyright 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
;
; Contributed by Red Hat Inc; developed under contract from Fujitsu.
;
; 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

(include "simplify.inc")

; define-arch must appear first

(define-arch
  (name frv) ; name of cpu architecture
  (comment "Fujitsu FRV")
  (insn-lsb0? #t)
  (machs frv fr550 fr500 fr450 fr400 tomcat simple)
  (isas frv)
)

(define-isa
  (name frv)
  (base-insn-bitsize 32)
  ; Initial bitnumbers to decode insns by.
  (decode-assist (24 23 22 21 20 19 18))
  (liw-insns 1)       ; The frv fetches  up to 1 insns at a time.
  (parallel-insns 8)  ; The frv executes up to 8 insns at a time.
)

; Cpu family definitions.
;
(define-cpu
  ; cpu names must be distinct from the architecture name and machine names.
  ; The "b" suffix stands for "base" and is the convention.
  ; The "f" suffix stands for "family" and is the convention.
  (name frvbf)
  (comment "Fujitsu FRV base family")
  (endian big)
  (word-bitsize 32)
)

; Generic FR-V machine. Supports the entire architecture
(define-mach
  (name frv)
  (comment "Generic FRV cpu")
  (cpu frvbf)
)
(define-model
  (name frv) (comment "Generic FRV model") (attrs)
  (mach frv)

  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))

  ; `state' is a list of variables for recording model state
  ; (state)

  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

; FR550 machine
(define-mach
  (name fr550)
  (comment "FR550 cpu")
  (cpu frvbf)
)
(define-model
  (name fr550) (comment "FR550 model") (attrs)
  (mach fr550)

  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))

  ; `state' is a list of variables for recording model state
  (state
   ; State items
   ; These are all masks with each bit representing one register.
   (prev-fr-load      DI) ; Previous use of FR  register was target of a load
   (prev-fr-complex-1 DI) ; Previous use of FR  register has variable latency
   (prev-fr-complex-2 DI) ; Previous use of FR  register has variable latency
   (prev-ccr-complex  DI) ; Previous use of CCR register has variable latency
   (prev-acc-mmac     DI) ; Previous use of ACC register was a MMAC category
   (cur-fr-load       DI) ; Current  use of FR  register was target of a load
   (cur-fr-complex-1  DI) ; Current  use of FR  register has variable latency
   (cur-fr-complex-2  DI) ; Current  use of FR  register has variable latency
   (cur-ccr-complex   SI) ; Current  use of CCR register has variable latency
   (cur-acc-mmac      DI) ; Current  use of ACC register was a MMAC category
  )
  ; Basic unit for instructions with no latency penalties
  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Basic integer insn unit
  (unit u-integer "Integer Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer multiplication unit
  (unit u-imul "Integer Multiplication Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRdoublek INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer division unit
  (unit u-idiv "Integer Division Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Branch unit
  (unit u-branch "Branch Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	((pc)) ; outputs
	() ; profile action (default)
	)
  ; Trap unit
  (unit u-trap "Trap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Condition code check unit
  (unit u-check "Check Unit" ()
	1 1 ; issue done
	() ; state
	((ICCi_3 INT -1) (FCCi_3 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Float Arithmetic unit
  (unit u-float-arith "Float Arithmetic unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1) ; inputs
	 (FRdoublei INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Dual Arithmetic unit
  (unit u-float-dual-arith "Float Arithmetic unit" ()
	; This unit has a 2 cycle penalty -- see table 14-14 in the fr550 LSI
	1 3 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1) ; inputs
	 (FRdoublei INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Div unit
  (unit u-float-div "Float Div unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1)) ; inputs
	((FRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Square Root unit
  (unit u-float-sqrt "Float Square Root unit" ()
	1 1 ; issue done
	() ; state
	((FRj INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Compare unit
  (unit u-float-compare "Float Compare unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1)
	 (FRdoublei INT -1) (FRdoublej INT -1)) ; inputs
	((FCCi_2 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Dual Float Compare unit
  (unit u-float-dual-compare "Float Dual Compare unit" ()
	; This unit has a 2 cycle penalty -- see table 14-14 in the fr550 LSI
	1 3 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1)) ; inputs
	((FCCi_2 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR Move to GR unit
  (unit u-fr2gr "FR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((FRintk INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to FR unit
  (unit u-gr2fr "GR Move to FR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; SPR Move to GR unit
  (unit u-spr2gr "SPR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((spr INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to SPR unit
  (unit u-gr2spr "GR Move to SPR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((spr INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR set half unit
  (unit u-set-hilo "GR Set Half" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	((GRkhi INT -1) (GRklo INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR load unit
  (unit u-gr-load "GR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (GRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR store unit
  (unit u-gr-store "GR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (GRk INT -1) (GRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; FR load unit
  (unit u-fr-load "FR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((FRintk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR store unit
  (unit u-fr-store "FR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (FRintk INT -1) (FRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Swap unit
  (unit u-swap "Swap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR Move to FR unit
  (unit u-fr2fr "FR Move to FR Unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1)) ; inputs
	((FRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Clrgr unit
  (unit u-clrgr "Clrgr Unit" ()
	1 1 ; issue done
	() ; state
	((GRk INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Clrfr unit
  (unit u-clrfr "Clrfr Unit" ()
	1 1 ; issue done
	() ; state
	((FRk INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache invalidate unit
  (unit u-ici "Insn cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache invalidate unit
  (unit u-dci "Data cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache flush unit
  (unit u-dcf "Data cache flush unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache preload unit
  (unit u-icpl "Insn cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache preload unit
  (unit u-dcpl "Data cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache unlock unit
  (unit u-icul "Insn cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache unlock unit
  (unit u-dcul "Data cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; commit unit
  (unit u-commit "Commit Unit" ()
	1 1 ; issue done
	() ; state
	((GRk INT -1) (FRk INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Float Conversion unit
  (unit u-float-convert "Float Conversion unit" ()
	1 1 ; issue done
	() ; state
	((FRj INT -1) (FRintj INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRintk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media units
  (unit u-media "Media unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-quad "Media-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRintieven INT -1) (FRintjeven INT -1)) ; inputs
	((FRintkeven INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-dual-expand "Media Dual Expand unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintkeven INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-dual "Media-3-dual unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-acc "Media unit for M-3 using ACC" ()
	1 1 ; issue done
	() ; state
	((FRintj INT -1) (ACC40Si INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-acc-dual "Media-3-acc-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((FRintkeven INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-wtacc "Media-3-wtacc unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (ACC40Sk INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-mclracc "Media-3-mclracc unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-media-set "Media set" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4 "Media-4 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-acc "Media-4-acc unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-acc-dual "Media-4-acc-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-add-sub "Media-4-add-sub unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-add-sub-dual "Media-4-add-sub-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-quad "Media-4-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRintieven INT -1) (FRintjeven INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
)

; FR500 machine.
(define-mach
  (name fr500)
  (comment "FR500 cpu")
  (cpu frvbf)
)
(define-model
  (name fr500) (comment "FR500 model") (attrs)
  (mach fr500)

  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))

  ; `state' is a list of variables for recording model state
  (state
   ; State items
   ; These are all masks with each bit representing one register.
   (prev-fpop       DI) ; Previous use of FR register was floating point insn
   (prev-media      DI) ; Previous use of FR register was a media insn
   (prev-cc-complex DI) ; Previous use of ICC register was not simple
   (cur-fpop        DI) ; Current use of FR register was floating point insn
   (cur-media       DI) ; Current use of FR register was a media insn
   (cur-cc-complex  DI) ; Current use of ICC register was not simple
  )
  ; Basic unit for instructions with no latency penalties
  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Basic integer insn unit
  (unit u-integer "Integer Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer multiplication unit
  (unit u-imul "Integer Multiplication Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRdoublek INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer division unit
  (unit u-idiv "Integer Division Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Branch unit
  (unit u-branch "Branch Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	((pc)) ; outputs
	() ; profile action (default)
	)
  ; Trap unit
  (unit u-trap "Trap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Condition code check unit
  (unit u-check "Check Unit" ()
	1 1 ; issue done
	() ; state
	((ICCi_3 INT -1) (FCCi_3 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Clrgr unit
  (unit u-clrgr "Clrgr Unit" ()
	1 1 ; issue done
	() ; state
	((GRk INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Clrfr unit
  (unit u-clrfr "Clrfr Unit" ()
	1 1 ; issue done
	() ; state
	((FRk INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; GR set half unit
  (unit u-set-hilo "GR Set Half" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	((GRkhi INT -1) (GRklo INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR load unit -- TODO doesn't handle quad
  (unit u-gr-load "GR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (GRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR store unit -- TODO doesn't handle quad
  (unit u-gr-store "GR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (GRk INT -1) (GRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; GR recovering store unit -- TODO doesn't handle quad
  (unit u-gr-r-store "GR Recovering Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (GRk INT -1) (GRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; FR load unit -- TODO doesn't handle quad
  (unit u-fr-load "FR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((FRintk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR store unit -- TODO doesn't handle quad
  (unit u-fr-store "FR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (FRintk INT -1) (FRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; FR recovering store unit -- TODO doesn't handle quad
  (unit u-fr-r-store "FR Recovering Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (FRintk INT -1) (FRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Swap unit
  (unit u-swap "Swap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR Move to FR unit
  (unit u-fr2fr "FR Move to FR Unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1)) ; inputs
	((FRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR Move to GR unit
  (unit u-fr2gr "FR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((FRintk INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; SPR Move to GR unit
  (unit u-spr2gr "SPR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((spr INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to FR unit
  (unit u-gr2fr "GR Move to FR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to SPR unit
  (unit u-gr2spr "GR Move to SPR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((spr INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Arithmetic unit
  (unit u-float-arith "Float Arithmetic unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1) ; inputs
	 (FRdoublei INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Dual Arithmetic unit
  (unit u-float-dual-arith "Float Arithmetic unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1) ; inputs
	 (FRdoublei INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Div unit
  (unit u-float-div "Float Div unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1)) ; inputs
	((FRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Square Root unit
  (unit u-float-sqrt "Float Square Root unit" ()
	1 1 ; issue done
	() ; state
	((FRj INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Dual Square Root unit
  (unit u-float-dual-sqrt "Float Dual Square Root unit" ()
	1 1 ; issue done
	() ; state
	((FRj INT -1)) ; inputs
	((FRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Compare unit
  (unit u-float-compare "Float Compare unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1)
	 (FRdoublei INT -1) (FRdoublej INT -1)) ; inputs
	((FCCi_2 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Dual Float Compare unit
  (unit u-float-dual-compare "Float Dual Compare unit" ()
	1 1 ; issue done
	() ; state
	((FRi INT -1) (FRj INT -1)) ; inputs
	((FCCi_2 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Float Conversion unit
  (unit u-float-convert "Float Conversion unit" ()
	1 1 ; issue done
	() ; state
	((FRj INT -1) (FRintj INT -1) (FRdoublej INT -1)) ; inputs
	((FRk INT -1) (FRintk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Dual Float Conversion unit
  (unit u-float-dual-convert "Float Dual Conversion unit" ()
	1 1 ; issue done
	() ; state
	((FRj INT -1) (FRintj INT -1)) ; inputs
	((FRk INT -1) (FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit
  (unit u-media "Media unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1) (ACC40Si INT -1) (ACCGi INT -1)) ; inputs
	((FRintk INT -1) (ACC40Sk INT -1) (ACC40Uk INT -1) (ACCGk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Quad Arithmetic unit
  (unit u-media-quad-arith "Media Quad Arithmetic unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual Multiplication unit
  (unit u-media-dual-mul "Media Dual Multiplication unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Quad Multiplication unit
  (unit u-media-quad-mul "Media Quad Multiplication unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Quad Complex unit
  (unit u-media-quad-complex "Media Quad Complex unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual Expand unit
  (unit u-media-dual-expand "Media Dual Expand unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual Unpack unit
  (unit u-media-dual-unpack "Media Dual Unpack unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual byte to half unit
  (unit u-media-dual-btoh "Media Byte to byte" ()
	1 1 ; issue done
	() ; state
	((FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual half to byte unit
  (unit u-media-dual-htob "Media Half to byte" ()
	1 1 ; issue done
	() ; state
	((FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual byte to half unit extended
  (unit u-media-dual-btohe "Media Byte to byte extended" ()
	1 1 ; issue done
	() ; state
	((FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Barrier unit
  (unit u-barrier "Barrier unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Memory Barrier unit
  (unit u-membar "Memory Barrier unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache invalidate unit
  (unit u-ici "Insn cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache invalidate unit
  (unit u-dci "Data cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache flush unit
  (unit u-dcf "Data cache flush unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache preload unit
  (unit u-icpl "Insn cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache preload unit
  (unit u-dcpl "Data cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache unlock unit
  (unit u-icul "Insn cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache unlock unit
  (unit u-dcul "Data cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; commit unit
  (unit u-commit "Commit Unit" ()
	1 1 ; issue done
	() ; state
	((GRk INT -1) (FRk INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

; Tomcat machine. Early version of fr500 machine
(define-mach
  (name tomcat)
  (comment "Tomcat -- early version of fr500")
  (cpu frvbf)
)
(define-model
  (name tomcat) (comment "Tomcat model") (attrs)
  (mach tomcat)

  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))

  ; `state' is a list of variables for recording model state
  ; (state)

  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

; FR400 machine
(define-mach
  (name fr400)
  (comment "FR400 cpu")
  (cpu frvbf)
)
(define-model
  (name fr400) (comment "FR400 model") (attrs)
  (mach fr400)
  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))
  ; `state' is a list of variables for recording model state
  (state
   ; State items
   ; These are all masks with each bit representing one register.
   (prev-fp-load    DI) ; Previous use of FR  register was floating point load
   (prev-fr-p4      DI) ; Previous use of FR  register was media unit 4
   (prev-fr-p6      DI) ; Previous use of FR  register was media unit 6
   (prev-acc-p2     DI) ; Previous use of ACC register was media unit 2
   (prev-acc-p4     DI) ; Previous use of ACC register was media unit 4
   (cur-fp-load     DI) ; Current  use of FR  register is  floating point load
   (cur-fr-p4       DI) ; Current  use of FR  register is  media unit 4
   (cur-fr-p6       DI) ; Current  use of FR  register is  media unit 6
   (cur-acc-p2      DI) ; Current  use of ACC register is  media unit 2
   (cur-acc-p4      DI) ; Current  use of ACC register is  media unit 4
  )
  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Basic integer insn unit
  (unit u-integer "Integer Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer multiplication unit
  (unit u-imul "Integer Multiplication Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRdoublek INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer division unit
  (unit u-idiv "Integer Division Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Branch unit
  (unit u-branch "Branch Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	((pc)) ; outputs
	() ; profile action (default)
	)
  ; Trap unit
  (unit u-trap "Trap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Condition code check unit
  (unit u-check "Check Unit" ()
	1 1 ; issue done
	() ; state
	((ICCi_3 INT -1) (FCCi_3 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; GR set half unit
  (unit u-set-hilo "GR Set Half" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	((GRkhi INT -1) (GRklo INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR load unit -- TODO doesn't handle quad
  (unit u-gr-load "GR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (GRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR store unit -- TODO doesn't handle quad
  (unit u-gr-store "GR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (GRk INT -1) (GRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; FR load unit -- TODO doesn't handle quad
  (unit u-fr-load "FR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((FRintk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR store unit -- TODO doesn't handle quad
  (unit u-fr-store "FR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (FRintk INT -1) (FRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Swap unit
  (unit u-swap "Swap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR Move to GR unit
  (unit u-fr2gr "FR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((FRintk INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; SPR Move to GR unit
  (unit u-spr2gr "SPR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((spr INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to FR unit
  (unit u-gr2fr "GR Move to FR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to SPR unit
  (unit u-gr2spr "GR Move to SPR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((spr INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M1 -- see table 13-8 in the fr400 LSI
  (unit u-media-1 "Media-1 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-1-quad "Media-1-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-hilo "Media-hilo unit -- a variation of the Media-1 unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	((FRkhi INT -1) (FRklo INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M2 -- see table 13-8 in the fr400 LSI
  (unit u-media-2 "Media-2 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-quad "Media-2-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-acc "Media-2-acc unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-acc-dual "Media-2-acc-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-add-sub "Media-2-add-sub unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-add-sub-dual "Media-2-add-sub-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M3 -- see table 13-8 in the fr400 LSI
  (unit u-media-3 "Media-3 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-dual "Media-3-dual unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-quad "Media-3-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M4 -- see table 13-8 in the fr400 LSI
  (unit u-media-4 "Media-4 unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-accg "Media-4-accg unit" ()
	1 1 ; issue done
	() ; state
	((ACCGi INT -1) (FRinti INT -1)) ; inputs
	((ACCGk INT -1) (FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-acc-dual "Media-4-acc-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M6 -- see table 13-8 in the fr400 LSI
  (unit u-media-6 "Media-6 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M7 -- see table 13-8 in the fr400 LSI
  (unit u-media-7 "Media-1 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FCCk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual Expand unit
  (unit u-media-dual-expand "Media Dual Expand unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual half to byte unit
  (unit u-media-dual-htob "Media Half to byte" ()
	1 1 ; issue done
	() ; state
	((FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Barrier unit
  (unit u-barrier "Barrier unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Memory Barrier unit
  (unit u-membar "Memory Barrier unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache invalidate unit
  (unit u-ici "Insn cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache invalidate unit
  (unit u-dci "Data cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache flush unit
  (unit u-dcf "Data cache flush unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache preload unit
  (unit u-icpl "Insn cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache preload unit
  (unit u-dcpl "Data cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache unlock unit
  (unit u-icul "Insn cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache unlock unit
  (unit u-dcul "Data cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

; FR450 machine
(define-mach
  (name fr450)
  (comment "FR450 cpu")
  (cpu frvbf)
)
(define-model
  (name fr450) (comment "FR450 model") (attrs)
  (mach fr450)
  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))
  ; `state' is a list of variables for recording model state
  (state
   ; State items
   ; These are all masks with each bit representing one register.
   (prev-fp-load    DI) ; Previous use of FR  register was floating point load
   (prev-fr-p4      DI) ; Previous use of FR  register was media unit 4
   (prev-fr-p6      DI) ; Previous use of FR  register was media unit 6
   (prev-acc-p2     DI) ; Previous use of ACC register was media unit 2
   (prev-acc-p4     DI) ; Previous use of ACC register was media unit 4
   (cur-fp-load     DI) ; Current  use of FR  register is  floating point load
   (cur-fr-p4       DI) ; Current  use of FR  register is  media unit 4
   (cur-fr-p6       DI) ; Current  use of FR  register is  media unit 6
   (cur-acc-p2      DI) ; Current  use of ACC register is  media unit 2
   (cur-acc-p4      DI) ; Current  use of ACC register is  media unit 4
  )
  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Basic integer insn unit
  (unit u-integer "Integer Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer multiplication unit
  (unit u-imul "Integer Multiplication Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRdoublek INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Integer division unit
  (unit u-idiv "Integer Division Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (ICCi_1 INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Branch unit
  (unit u-branch "Branch Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	((pc)) ; outputs
	() ; profile action (default)
	)
  ; Trap unit
  (unit u-trap "Trap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)
	 (ICCi_2 INT -1) (FCCi_2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Condition code check unit
  (unit u-check "Check Unit" ()
	1 1 ; issue done
	() ; state
	((ICCi_3 INT -1) (FCCi_3 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; GR set half unit
  (unit u-set-hilo "GR Set Half" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	((GRkhi INT -1) (GRklo INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR load unit -- TODO doesn't handle quad
  (unit u-gr-load "GR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1) (GRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR store unit -- TODO doesn't handle quad
  (unit u-gr-store "GR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (GRk INT -1) (GRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; FR load unit -- TODO doesn't handle quad
  (unit u-fr-load "FR Load Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((FRintk INT -1) (FRdoublek INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR store unit -- TODO doesn't handle quad
  (unit u-fr-store "FR Store Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1) (FRintk INT -1) (FRdoublek INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Swap unit
  (unit u-swap "Swap Unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	((GRk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; FR Move to GR unit
  (unit u-fr2gr "FR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((FRintk INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; SPR Move to GR unit
  (unit u-spr2gr "SPR Move to GR Unit" ()
	1 1 ; issue done
	() ; state
	((spr INT -1)) ; inputs
	((GRj INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to FR unit
  (unit u-gr2fr "GR Move to FR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; GR Move to SPR unit
  (unit u-gr2spr "GR Move to SPR Unit" ()
	1 1 ; issue done
	() ; state
	((GRj INT -1)) ; inputs
	((spr INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M1 -- see table 14-8 in the fr450 LSI
  (unit u-media-1 "Media-1 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-1-quad "Media-1-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-hilo "Media-hilo unit -- a variation of the Media-1 unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	((FRkhi INT -1) (FRklo INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M2 -- see table 14-8 in the fr450 LSI
  (unit u-media-2 "Media-2 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-quad "Media-2-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-acc "Media-2-acc unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-acc-dual "Media-2-acc-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-add-sub "Media-2-add-sub unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-2-add-sub-dual "Media-2-add-sub-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((ACC40Sk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M3 -- see table 14-8 in the fr450 LSI
  (unit u-media-3 "Media-3 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-dual "Media-3-dual unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-3-quad "Media-3-quad unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M4 -- see table 14-8 in the fr450 LSI
  (unit u-media-4 "Media-4 unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1) (FRintj INT -1)) ; inputs
	((ACC40Sk INT -1) (FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-accg "Media-4-accg unit" ()
	1 1 ; issue done
	() ; state
	((ACCGi INT -1) (FRinti INT -1)) ; inputs
	((ACCGk INT -1) (FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-acc-dual "Media-4-acc-dual unit" ()
	1 1 ; issue done
	() ; state
	((ACC40Si INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-media-4-mclracca "Media-4 unit for MCLRACC with #A=1" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Media unit M6 -- see table 14-8 in the fr450 LSI
  (unit u-media-6 "Media-6 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media unit M7 -- see table 14-8 in the fr450 LSI
  (unit u-media-7 "Media-1 unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1) (FRintj INT -1)) ; inputs
	((FCCk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual Expand unit
  (unit u-media-dual-expand "Media Dual Expand unit" ()
	1 1 ; issue done
	() ; state
	((FRinti INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Media Dual half to byte unit
  (unit u-media-dual-htob "Media Half to byte" ()
	1 1 ; issue done
	() ; state
	((FRintj INT -1)) ; inputs
	((FRintk INT -1)) ; outputs
	() ; profile action (default)
	)
  ; Barrier unit
  (unit u-barrier "Barrier unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Memory Barrier unit
  (unit u-membar "Memory Barrier unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache invalidate unit
  (unit u-ici "Insn cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache invalidate unit
  (unit u-dci "Data cache invalidate unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache flush unit
  (unit u-dcf "Data cache flush unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache preload unit
  (unit u-icpl "Insn cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache preload unit
  (unit u-dcpl "Data cache preload unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Insn cache unlock unit
  (unit u-icul "Insn cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  ; Data cache unlock unit
  (unit u-dcul "Data cache unlock unit" ()
	1 1 ; issue done
	() ; state
	((GRi INT -1) (GRj INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

; Simple machine - single issue integer machine
(define-mach
  (name simple)
  (comment "Simple single issue integer cpu")
  (cpu frvbf)
)
(define-model
  (name simple) (comment "Simple model") (attrs)
  (mach simple)
  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))
  ; `state' is a list of variables for recording model state
  (state)
  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	() ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

; The instruction fetch/execute cycle.
;
; This is how to fetch and decode an instruction.
; Leave it out for now

; (define-extract (const SI 0))

; This is how to execute a decoded instruction.
; Leave it out for now

; (define-execute (const SI 0))

; An attribute to describe which unit an insn runs in.
(define-attr
  (for insn)
  (type enum)
  (name UNIT)
  (comment "parallel execution pipeline selection")
  ; The order of declaration is significant. 
  ; See the *_unit_mapping tables in frv.opc
  ; Keep variations on the same unit together.
  ; Keep the '01' variant immediately after the '1' variant in each unit.
  ; Keep the 'ALL' variations immediately after the last numbered variant in each unit.
  (values NIL
	  I0 I1 I01 I2 I3 IALL
	  FM0 FM1 FM01 FM2 FM3 FMALL FMLOW
	  B0 B1 B01
	  C
	  MULT-DIV ; multiply/division slotted differently on different machines
	  IACC     ; iacc multiply     slotted differently on different machines
	  LOAD     ; loads             slotted differently on different machines
	  STORE    ; store             slotted differently on different machines
	  SCAN     ; scan, scani       slotted differently on different machines
	  DCPL     ; dcpl              slotted differently on different machines
	  MDUALACC ; media dual acc    slotted differently on different machines
	  MDCUTSSI ; mdcutssi insn     slotted differently on different machines
	  MCLRACC-1; mclracc A==1      slotted differently on different machines
	  NUM_UNITS
  )
)
; Attributes to describe major categories of insns
(define-attr
  (for insn)
  (type enum)
  (name FR400-MAJOR)
  (comment "fr400 major insn categories")
  ; The order of declaration is significant. Keep variations on the same major
  ; together.
  (values NONE
	  I-1 I-2 I-3 I-4 I-5
	  B-1 B-2 B-3 B-4 B-5 B-6
	  C-1 C-2
	  M-1 M-2
  )
)
(define-attr
  (for insn)
  (type enum)
  (name FR450-MAJOR)
  (comment "fr450 major insn categories")
  ; The order of declaration is significant. Keep variations on the same major
  ; together.
  (values NONE
	  I-1 I-2 I-3 I-4 I-5
	  B-1 B-2 B-3 B-4 B-5 B-6
	  C-1 C-2
	  M-1 M-2 M-3 M-4 M-5 M-6
  )
)
(define-attr
  (for insn)
  (type enum)
  (name FR500-MAJOR)
  (comment "fr500 major insn categories")
  ; The order of declaration is significant. Keep variations on the same major
  ; together.
  (values NONE
	  I-1 I-2 I-3 I-4 I-5 I-6
	  B-1 B-2 B-3 B-4 B-5 B-6
	  C-1 C-2
	  F-1 F-2 F-3 F-4 F-5 F-6 F-7 F-8
	  M-1 M-2 M-3 M-4 M-5 M-6 M-7 M-8
  )
)
(define-attr
  (for insn)
  (type enum)
  (name FR550-MAJOR)
  (comment "fr550 major insn categories")
  ; The order of declaration is significant. Keep variations on the same major
  ; together.
  (values NONE
	  I-1 I-2 I-3 I-4 I-5 I-6 I-7 I-8
	  B-1 B-2 B-3 B-4 B-5 B-6
	  C-1 C-2
	  F-1 F-2 F-3 F-4
	  M-1 M-2 M-3 M-4 M-5
  )
)
; Privileged insn
(define-attr
  (for insn)
  (type boolean)
  (name PRIVILEGED)
  (comment "insn only allowed in supervisor mode")
)
; Non-Excepting insn
(define-attr
  (for insn)
  (type boolean)
  (name NON-EXCEPTING)
  (comment "non-excepting insn")
)
; Conditional insn
(define-attr
  (for insn)
  (type boolean)
  (name CONDITIONAL)
  (comment "conditional insn")
)
; insn accesses FR registers
(define-attr
  (for insn)
  (type boolean)
  (name FR-ACCESS)
  (comment "insn accesses FR registers")
)
; insn preserves MSR.OVF
(define-attr
  (for insn)
  (type boolean)
  (name PRESERVE-OVF)
  (comment "Preserve value of MSR.OVF")
)
; "Audio" instruction provided by the fr405 but not the original fr400 core.
(define-attr
  (for insn)
  (type boolean)
  (name AUDIO)
  (comment "Audio instruction added with FR405")
)
; null attribute -- used as a place holder for where an attribue is required.
(define-attr
  (for insn)
  (type boolean)
  (name NA)
  (comment "placeholder attribute")
  (attrs META) ; do not define in any generated file for now
)

; IDOC attribute for instruction documentation.

(define-attr
  (for insn)
  (type enum)
  (name IDOC)
  (comment "insn kind for documentation")
  (attrs META)
  (values
   (MEM - () "Memory")
   (ALU - () "ALU")
   (FPU - () "FPU")
   (BR - () "Branch")
   (PRIV - () "Priviledged")
   (MISC - () "Miscellaneous")
  )
)

; Instruction fields.
;
; Attributes:
; PCREL-ADDR: pc relative value (for reloc and disassembly purposes)
; ABS-ADDR: absolute address (for reloc and disassembly purposes?)
; RESERVED: bits are not used to decode insn, must be all 0
(dnf f-pack      "packing bit"                  () 31  1)
(dnf f-op        "primary opcode"               () 24  7)
(dnf f-ope1      "extended opcode"              () 11  6)
(dnf f-ope2      "extended opcode"              ()  9  4)
(dnf f-ope3      "extended opcode"              () 15  3)
(dnf f-ope4      "extended opcode"              ()  7  2)

(dnf f-GRi       "source register 1"            () 17  6)
(dnf f-GRj       "source register 2"            ()  5  6)
(dnf f-GRk       "destination register"         () 30  6)

(dnf f-FRi       "source register 1"            () 17  6)
(dnf f-FRj       "source register 2"            ()  5  6)
(dnf f-FRk       "destination register"         () 30  6)

(dnf f-CPRi      "source register 1"            () 17  6)
(dnf f-CPRj      "source register 2"            ()  5  6)
(dnf f-CPRk      "destination register"         () 30  6)

(dnf f-ACCGi     "source register"              () 17  6)
(dnf f-ACCGk     "destination register"         () 30  6)

(dnf f-ACC40Si   "40 bit signed accumulator"    () 17  6)
(dnf f-ACC40Ui   "40 bit unsigned accumulator"  () 17  6)
(dnf f-ACC40Sk   "40 bit accumulator"           () 30  6)
(dnf f-ACC40Uk   "40 bit accumulator"           () 30  6)

(dnf f-CRi       "source      register"         () 14  3)
(dnf f-CRj       "source      register"         ()  2  3)
(dnf f-CRk       "destination register"         () 27  3)
(dnf f-CCi       "condition   register"         () 11  3)

(df  f-CRj_int   "target cr for ck insns"       () 26  2 UINT
     ((value pc) (sub WI value 4))
     ((value pc) (add WI value 4))
)
(dnf f-CRj_float "target cr for fck insns"      () 26  2)

(dnf f-ICCi_1    "condition register"           () 11  2)
(dnf f-ICCi_2    "condition register"           () 26  2)
(dnf f-ICCi_3    "condition register"           ()  1  2)
(dnf f-FCCi_1    "condition register"           () 11  2)
(dnf f-FCCi_2    "condition register"           () 26  2)
(dnf f-FCCi_3    "condition register"           ()  1  2)
(dnf f-FCCk      "condition register"           () 26  2)
(dnf f-eir       "exception insn register"      () 17  6)

(df  f-s10       "10 bit sign extended"         ()  9 10  INT #f #f)
(df  f-s12       "12 bit sign extended"         () 11 12  INT #f #f)
(df  f-d12       "12 bit sign extended"         () 11 12  INT #f #f)
(df  f-u16       "16 bit unsigned"              () 15 16 UINT #f #f)
(df  f-s16       "16 bit sign extended"         () 15 16  INT #f #f)
(df  f-s6        "6  bit   signed"              ()  5  6  INT #f #f)
(df  f-s6_1      "6  bit   signed"              () 11  6  INT #f #f)
(df  f-u6        "6  bit unsigned"              ()  5  6 UINT #f #f)
(df  f-s5        "5  bit   signed"              ()  4  5  INT #f #f)

(df  f-u12-h "upper 6 bits of u12"  () 17 6  INT #f #f)
(df  f-u12-l "lower 6 bits of u12"  ()  5 6 UINT #f #f)
(dnmf f-u12   "12 bit signed immediate" () INT
      (f-u12-h f-u12-l)
      (sequence () ; insert
		(set (ifield f-u12-h) (sra SI (ifield f-u12) 6))
		(set (ifield f-u12-l) (and (ifield f-u12) #x3f))
		)
      (sequence () ; extract
		(set (ifield f-u12) (or (sll (ifield f-u12-h) 6)
					(ifield f-u12-l)))
		)
)

(dnf f-int-cc    "integer  branch conditions"   () 30  4)
(dnf f-flt-cc    "floating branch conditions"   () 30  4)
(df  f-cond      "conditional arithmetic"       ()  8  1 UINT #f #f)
(df  f-ccond     "lr branch condition"          () 12  1 UINT #f #f)
(df  f-hint      "2 bit branch prediction hint" () 17  2 UINT #f #f)
(df  f-LI        "link indicator"               () 25  1 UINT #f #f)
(df  f-lock      "cache lock indicator"         () 25  1 UINT #f #f)
(df  f-debug     "debug mode indicator"         () 25  1 UINT #f #f)
(df  f-A         "all accumulator bit"          () 17  1 UINT #f #f)
(df  f-ae        "cache all entries indicator"  () 25  1 UINT #f #f)

(dnf  f-spr-h "upper 6 bits of spr"  () 30  6)
(dnf  f-spr-l "lower 6 bits of spr"  () 17  6)
(dnmf f-spr   "special purpose register" () UINT
      (f-spr-h f-spr-l)
      (sequence () ; insert
		(set (ifield f-spr-h) (srl (ifield f-spr) (const 6)))
		(set (ifield f-spr-l) (and (ifield f-spr) (const #x3f)))
		)
      (sequence () ; extract
		(set (ifield f-spr) (or (sll (ifield f-spr-h) (const 6))
					(ifield f-spr-l)))
		)
)

(df  f-label16    "18 bit pc relative signed offset" (PCREL-ADDR) 15 16 INT
     ((value pc) (sra WI (sub WI value pc) (const 2)))
     ((value pc) (add WI (sll WI value (const 2)) pc))
)

(df   f-labelH6   "upper 6  bits of label24"  () 30  6 INT #f #f)
(dnf  f-labelL18  "lower 18 bits of label24"  () 17 18)
(dnmf f-label24   "26 bit signed offset"     (PCREL-ADDR) INT
      (f-labelH6 f-labelL18)
      ; insert
      (sequence ()
		(set (ifield f-labelH6)
		     (sra WI (sub (ifield f-label24) pc) (const 20)))
		(set (ifield f-labelL18)
		     (and (srl (sub (ifield f-label24) pc) (const 2))
			  (const #x3ffff)))
		)
      ; extract
      (sequence ()
		(set (ifield f-label24)
		     (add (sll (or (sll (ifield f-labelH6) (const 18))
				   (ifield f-labelL18))
			       (const 2))
			  pc)))
)

(dnf f-LRAE "Load Real Address E flag" () 5 1)
(dnf f-LRAD "Load Real Address D flag" () 4 1)
(dnf f-LRAS "Load Real Address S flag" () 3 1)

(dnf f-TLBPRopx "TLB Probe operation number" () 28 3)
(dnf f-TLBPRL   "TLB Probe L flag" () 25 1)

(dnf f-ICCi_1-null  "null field" (RESERVED) 11  2)
(dnf f-ICCi_2-null  "null field" (RESERVED) 26  2)
(dnf f-ICCi_3-null  "null field" (RESERVED)  1  2)
(dnf f-FCCi_1-null  "null field" (RESERVED) 11  2)
(dnf f-FCCi_2-null  "null field" (RESERVED) 26  2)
(dnf f-FCCi_3-null  "null field" (RESERVED)  1  2)
(dnf f-rs-null      "null field" (RESERVED) 17  6)
(dnf f-GRi-null     "null field" (RESERVED) 17  6)
(dnf f-GRj-null     "null field" (RESERVED)  5  6)
(dnf f-GRk-null     "null field" (RESERVED) 30  6)
(dnf f-FRi-null     "null field" (RESERVED) 17  6)
(dnf f-FRj-null     "null field" (RESERVED)  5  6)
(dnf f-ACCj-null    "null field" (RESERVED)  5  6)
(dnf f-rd-null      "null field" (RESERVED) 30  6)
(dnf f-cond-null    "null field" (RESERVED) 30  4)
(dnf f-ccond-null   "null field" (RESERVED) 12  1)
(dnf f-s12-null     "null field" (RESERVED) 11 12)
(dnf f-label16-null "null field" (RESERVED) 15 16)
(dnf f-misc-null-1  "null field" (RESERVED) 30  5)
(dnf f-misc-null-2  "null field" (RESERVED) 11  6)
(dnf f-misc-null-3  "null field" (RESERVED) 11  4)
(dnf f-misc-null-4  "null field" (RESERVED) 17  2)
(dnf f-misc-null-5  "null field" (RESERVED) 17 16)
(dnf f-misc-null-6  "null field" (RESERVED) 30  3)
(dnf f-misc-null-7  "null field" (RESERVED) 17  3)
(dnf f-misc-null-8  "null field" (RESERVED)  5  3)
(dnf f-misc-null-9  "null field" (RESERVED)  5  4)
(dnf f-misc-null-10 "null field" (RESERVED) 16  5)
(dnf f-misc-null-11 "null field" (RESERVED)  5  1)

(dnf f-LRA-null     "null field" (RESERVED)  2  3)
(dnf f-TLBPR-null   "null field" (RESERVED) 30  2)

(dnf f-LI-off      "null field" (RESERVED) 25  1)
(dnf f-LI-on       "null field" (RESERVED) 25  1)

; Relocation annotations.
(dsh h-reloc-ann   "relocation annotation" () (register BI))
(dnf f-reloc-ann   "relocation annotation" () 0 0)

(define-pmacro (dann xname xcomment xmode xparse xprint)
  (define-operand
    (name xname)
    (comment xcomment)
    (type h-reloc-ann)
    (index f-reloc-ann)
    (mode xmode)
    (handlers (parse xparse) (print xprint))
    )
  )


; Enums.

; insn-op:
; FIXME: should use die macro or some such
(define-normal-insn-enum insn-op "insn op enums" () OP_ f-op
 (
 "00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "0A" "0B" "0C" "0D" "0E" "0F"
 "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "1A" "1B" "1C" "1D" "1E" "1F"
 "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "2A" "2B" "2C" "2D" "2E" "2F"
 "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "3A" "3B" "3C" "3D" "3E" "3F"
 "40" "41" "42" "43" "44" "45" "46" "47" "48" "49" "4A" "4B" "4C" "4D" "4E" "4F"
 "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "5A" "5B" "5C" "5D" "5E" "5F"
 "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "6A" "6B" "6C" "6D" "6E" "6F"
 "70" "71" "72" "73" "74" "75" "76" "77" "78" "79" "7A" "7B" "7C" "7D" "7E" "7F"
 )
)

(define-normal-insn-enum insn-ope1 "insn ope enums" () OPE1_ f-ope1
 (
 "00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "0A" "0B" "0C" "0D" "0E" "0F"
 "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "1A" "1B" "1C" "1D" "1E" "1F"
 "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "2A" "2B" "2C" "2D" "2E" "2F"
 "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "3A" "3B" "3C" "3D" "3E" "3F"
 )
)

(define-normal-insn-enum insn-ope2 "insn ope enums" () OPE2_ f-ope2
 (
 "00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "0A" "0B" "0C" "0D" "0E" "0F"
 )
)

(define-normal-insn-enum insn-ope3 "insn ope enums" () OPE3_ f-ope3
 (
 "00" "01" "02" "03" "04" "05" "06" "07"
 )
)

(define-normal-insn-enum insn-ope4 "insn ope enums" () OPE4_ f-ope4
 (
 "0" "1" "2" "3"
 )
)

; int-cc: integer branch conditions
; FIXME: should use die macro or some such
(define-normal-insn-enum int-cc "integer branch cond enums" () ICC_ f-int-cc
  (
   "nev" "c"  "v"  "lt" "eq" "ls" "n" "le"
   "ra"  "nc" "nv" "ge" "ne" "hi" "p" "gt"
  )
)

; flt-cc: floating-point/media branch conditions
; FIXME: should use die macro or some such
(define-normal-insn-enum flt-cc "float branch cond enums" () FCC_ f-flt-cc
  ("nev" "u" "gt" "ug" "lt" "ul" "lg" "ne"
   "eq" "ue" "ge" "uge" "le" "ule" "o" "ra")
)

; Hardware pieces.
; These entries list the elements of the raw hardware.
; They're also used to provide tables and other elements of the assembly
; language.
(dnh h-pc "program counter" (PC PROFILE) (pc) () () ())

; The PSR. The individual fields are referenced more than the entire
; register, so reference them directly. We can assemble the
; entire register contents when necessary.
;
(dsh h-psr_imple "PSR.IMPLE"   () (register UQI))
(dsh h-psr_ver   "PSR.VER"     () (register UQI))
(dsh h-psr_ice   "PSR.ICE bit" () (register BI))
(dsh h-psr_nem   "PSR.NEM bit" () (register BI))
(dsh h-psr_cm    "PSR.CM  bit" () (register BI))
(dsh h-psr_be    "PSR.BE  bit" () (register BI))
(dsh h-psr_esr   "PSR.ESR bit" () (register BI))
(dsh h-psr_ef    "PSR.EF  bit" () (register BI))
(dsh h-psr_em    "PSR.EM  bit" () (register BI))
(dsh h-psr_pil   "PSR.PIL    " () (register UQI))
(dsh h-psr_ps    "PSR.PS  bit" () (register BI))
(dsh h-psr_et    "PSR.ET  bit" () (register BI))

; PSR.S requires special handling because the shadow registers (SR0-SR4) must
; be switched with GR4-GR7 when changing from user to supervisor mode or
; vice-versa.
(define-hardware
  (name h-psr_s)
  (comment "PSR.S bit")
  (attrs)
  (type register BI)
  (get)
  (set (newval) (c-call VOID "@cpu@_h_psr_s_set_handler" newval))
)

; The TBR. The individual bits are referenced more than the entire
; register, so reference them directly. We can assemble the
; entire register contents when necessary.
;
(dsh h-tbr_tba "TBR.TBA" () (register UWI))
(dsh h-tbr_tt  "TBR.TT"  () (register UQI))

; The BPSR. The individual bits are referenced more than the entire
; register, so reference them directly. We can assemble the
; entire register contents when necessary.
;
(dsh h-bpsr_bs   "PSR.S   bit" () (register BI))
(dsh h-bpsr_bet  "PSR.ET  bit" () (register BI))

; General registers
;
(define-keyword
  (name gr-names)
  (print-name h-gr)
  (prefix "")
  (values
   (sp 1) (fp 2)
   (gr0   0)(gr1   1)(gr2   2)(gr3   3)(gr4   4)(gr5   5)(gr6   6)(gr7   7)
   (gr8   8)(gr9   9)(gr10 10)(gr11 11)(gr12 12)(gr13 13)(gr14 14)(gr15 15)
   (gr16 16)(gr17 17)(gr18 18)(gr19 19)(gr20 20)(gr21 21)(gr22 22)(gr23 23)
   (gr24 24)(gr25 25)(gr26 26)(gr27 27)(gr28 28)(gr29 29)(gr30 30)(gr31 31)
   (gr32 32)(gr33 33)(gr34 34)(gr35 35)(gr36 36)(gr37 37)(gr38 38)(gr39 39)
   (gr40 40)(gr41 41)(gr42 42)(gr43 43)(gr44 44)(gr45 45)(gr46 46)(gr47 47)
   (gr48 48)(gr49 49)(gr50 50)(gr51 51)(gr52 52)(gr53 53)(gr54 54)(gr55 55)
   (gr56 56)(gr57 57)(gr58 58)(gr59 59)(gr60 60)(gr61 61)(gr62 62)(gr63 63)
  )
)

(define-hardware
  (name h-gr)
  (comment "general registers")
  (attrs PROFILE)
  (type register USI (64))
  (indices extern-keyword gr-names)
  (get (index) (c-call WI "@cpu@_h_gr_get_handler" index))
  (set (index newval) (c-call VOID "@cpu@_h_gr_set_handler" index newval))
)

; General Registers as double words
; These registers are shadowed onto h-gr
(define-hardware
  (name h-gr_double)
  (comment "general registers as double words")
  (attrs PROFILE VIRTUAL)
  (type register DI (32))
  ; FIXME: Need constraint to prohibit odd numbers.
  (indices extern-keyword gr-names)
  (get (index)
       (c-call DI "@cpu@_h_gr_double_get_handler" index))
  (set (index newval)
       (c-call VOID "@cpu@_h_gr_double_set_handler" index newval))
)

; General Registers as high and low half words
; These registers are shadowed onto h-gr
(define-hardware
  (name h-gr_hi)
  (comment "general registers as high half word")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword gr-names)
  (get (index) (c-call UHI "@cpu@_h_gr_hi_get_handler" index))
  (set (index newval) (c-call VOID "@cpu@_h_gr_hi_set_handler" index newval))
)
(define-hardware
  (name h-gr_lo)
  (comment "general registers as low half word")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword gr-names)
  (get (index) (c-call UHI "@cpu@_h_gr_lo_get_handler" index))
  (set (index newval) (c-call VOID "@cpu@_h_gr_lo_set_handler" index newval))
)

; Floating Point Registers
(define-keyword
  (name fr-names)
  (print-name h-fr)
  (prefix "")
  (values
   (fr0   0)(fr1   1)(fr2   2)(fr3   3)(fr4   4)(fr5   5)(fr6   6)(fr7   7)
   (fr8   8)(fr9   9)(fr10 10)(fr11 11)(fr12 12)(fr13 13)(fr14 14)(fr15 15)
   (fr16 16)(fr17 17)(fr18 18)(fr19 19)(fr20 20)(fr21 21)(fr22 22)(fr23 23)
   (fr24 24)(fr25 25)(fr26 26)(fr27 27)(fr28 28)(fr29 29)(fr30 30)(fr31 31)
   (fr32 32)(fr33 33)(fr34 34)(fr35 35)(fr36 36)(fr37 37)(fr38 38)(fr39 39)
   (fr40 40)(fr41 41)(fr42 42)(fr43 43)(fr44 44)(fr45 45)(fr46 46)(fr47 47)
   (fr48 48)(fr49 49)(fr50 50)(fr51 51)(fr52 52)(fr53 53)(fr54 54)(fr55 55)
   (fr56 56)(fr57 57)(fr58 58)(fr59 59)(fr60 60)(fr61 61)(fr62 62)(fr63 63)
  )
)

(define-hardware
  (name h-fr)
  (comment "floating point registers")
  (attrs PROFILE)
  (type register SF (64))
  (indices extern-keyword fr-names)
  (get (index) (c-call SF "@cpu@_h_fr_get_handler" index))
  (set (index newval) (c-call VOID "@cpu@_h_fr_set_handler" index newval))
)

; Floating Point Registers as double precision
; These registers are shadowed onto h-fr

(define-hardware
  (name h-fr_double)
  (comment "floating point registers as double precision")
  (attrs PROFILE VIRTUAL)
  (type register DF (32))
  ; FIXME: Need constraint to prohibit odd numbers.
  (indices extern-keyword fr-names)
  (get (index)
       (c-call DF "@cpu@_h_fr_double_get_handler" index))
  (set (index newval)
       (c-call VOID "@cpu@_h_fr_double_set_handler" index newval))
)

; Floating Point Registers as integer words.
; These registers are shadowed onto h-fr

(define-hardware
  (name h-fr_int)
  (comment "floating point registers as integers")
  (attrs PROFILE VIRTUAL)
  (type register USI (64))
  (indices extern-keyword fr-names)
  (get (index)
       (c-call USI "@cpu@_h_fr_int_get_handler" index))
  (set (index newval)
       (c-call VOID "@cpu@_h_fr_int_set_handler" index newval))
)

; Floating Point Registers as high and low half words
; These registers are shadowed onto h-fr
(define-hardware
  (name h-fr_hi)
  (comment "floating point registers as unsigned high half word")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword fr-names)
  (get (regno) (srl (reg h-fr_int regno) 16))
  (set (regno newval) (set (reg h-fr_int regno)
			   (or (and (reg h-fr_int regno) #xffff)
			       (sll newval 16))))
)
(define-hardware
  (name h-fr_lo)
  (comment "floating point registers as unsigned low half word")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword fr-names)
  (get (regno) (and (reg h-fr_int regno) #xffff))
  (set (regno newval) (set (reg h-fr_int regno)
			   (or (and (reg h-fr_int regno) #xffff0000)
			       (and newval #xffff))))
)

; Floating Point Registers as unsigned bytes
; These registers are shadowed onto h-fr
(define-hardware
  (name h-fr_0)
  (comment "floating point registers as unsigned byte 0")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword fr-names)
  (get (regno) (and (reg h-fr_int regno) #xff))
  (set (regno newval)
       (sequence ()
		 (if (gt USI newval #xff)
		     (set newval #xff))
		 (set (reg h-fr_int regno) (or (and (reg h-fr_int regno) #xffffff00)
					   newval))))
)
(define-hardware
  (name h-fr_1)
  (comment "floating point registers as unsigned byte 1")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword fr-names)
  (get (regno) (and (srl (reg h-fr_int regno) 8) #xff))
  (set (regno newval)
       (sequence ()
		 (if (gt USI newval #xff)
		     (set newval #xff))
		 (set (reg h-fr_int regno) (or (and (reg h-fr_int regno) #xffff00ff) 
					   (sll newval 8)))))
)
(define-hardware
  (name h-fr_2)
  (comment "floating point registers as unsigned byte 2")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword fr-names)
  (get (regno) (and (srl (reg h-fr_int regno) 16) #xff))
  (set (regno newval)
       (sequence ()
		 (if (gt USI newval #xff)
		     (set newval #xff))
		 (set (reg h-fr_int regno) (or (and (reg h-fr_int regno) #xff00ffff) 
					   (sll newval 16)))))
)
(define-hardware
  (name h-fr_3)
  (comment "floating point registers as unsigned byte 3")
  (attrs PROFILE VIRTUAL)
  (type register UHI (64))
  (indices extern-keyword fr-names)
  (get (regno) (and (srl (reg h-fr_int regno) 24) #xff))
  (set (regno newval)
       (sequence ()
		 (if (gt USI newval #xff)
		     (set newval #xff))
		 (set (reg h-fr_int regno) (or (and (reg h-fr_int regno) #x00ffffff) 
					   (sll newval 24)))))
)
; Coprocessor Registers
;
(define-keyword
  (name cpr-names)
  (print-name h-cpr)
  (prefix "")
  (values
(cpr0   0)(cpr1   1)(cpr2   2)(cpr3   3)(cpr4   4)(cpr5   5)(cpr6   6)(cpr7   7)
(cpr8   8)(cpr9   9)(cpr10 10)(cpr11 11)(cpr12 12)(cpr13 13)(cpr14 14)(cpr15 15)
(cpr16 16)(cpr17 17)(cpr18 18)(cpr19 19)(cpr20 20)(cpr21 21)(cpr22 22)(cpr23 23)
(cpr24 24)(cpr25 25)(cpr26 26)(cpr27 27)(cpr28 28)(cpr29 29)(cpr30 30)(cpr31 31)
(cpr32 32)(cpr33 33)(cpr34 34)(cpr35 35)(cpr36 36)(cpr37 37)(cpr38 38)(cpr39 39)
(cpr40 40)(cpr41 41)(cpr42 42)(cpr43 43)(cpr44 44)(cpr45 45)(cpr46 46)(cpr47 47)
(cpr48 48)(cpr49 49)(cpr50 50)(cpr51 51)(cpr52 52)(cpr53 53)(cpr54 54)(cpr55 55)
(cpr56 56)(cpr57 57)(cpr58 58)(cpr59 59)(cpr60 60)(cpr61 61)(cpr62 62)(cpr63 63)
  )
)

(define-hardware
  (name h-cpr)
  (comment "coprocessor registers")
  (attrs PROFILE (MACH frv))
  (type register WI (64))
  (indices extern-keyword cpr-names)
)

; Coprocessor Registers as double words
; These registers are shadowed onto h-cpr
(define-hardware
  (name h-cpr_double)
  (comment "coprocessor registers as double words")
  (attrs PROFILE VIRTUAL (MACH frv))
  (type register DI (32))
  ; FIXME: Need constraint to prohibit odd numbers.
  (indices extern-keyword cpr-names)
  (get (index)
       (c-call DI "@cpu@_h_cpr_double_get_handler" index))
  (set (index newval)
       (c-call VOID "@cpu@_h_cpr_double_set_handler" index newval))
)

; Special Purpose Registers
;
(define-keyword
  (name spr-names)
  (print-name h-spr)
  (prefix "")
  (values
   (psr        0) (pcsr       1) (bpcsr      2) (tbr        3) (bpsr       4)

   (hsr0      16) (hsr1      17) (hsr2      18) (hsr3      19)
   (hsr4      20) (hsr5      21) (hsr6      22) (hsr7      23)
   (hsr8      24) (hsr9      25) (hsr10     26) (hsr11     27)
   (hsr12     28) (hsr13     29) (hsr14     30) (hsr15     31)
   (hsr16     32) (hsr17     33) (hsr18     34) (hsr19     35)
   (hsr20     36) (hsr21     37) (hsr22     38) (hsr23     39)
   (hsr24     40) (hsr25     41) (hsr26     42) (hsr27     43)
   (hsr28     44) (hsr29     45) (hsr30     46) (hsr31     47)
   (hsr32     48) (hsr33     49) (hsr34     50) (hsr35     51)
   (hsr36     52) (hsr37     53) (hsr38     54) (hsr39     55)
   (hsr40     56) (hsr41     57) (hsr42     58) (hsr43     59)
   (hsr44     60) (hsr45     61) (hsr46     62) (hsr47     63)
   (hsr48     64) (hsr49     65) (hsr50     66) (hsr51     67)
   (hsr52     68) (hsr53     69) (hsr54     70) (hsr55     71)
   (hsr56     72) (hsr57     73) (hsr58     74) (hsr59     75)
   (hsr60     76) (hsr61     77) (hsr62     78) (hsr63     79)

   (ccr      256) (cccr     263) (lr       272) (lcr      273) (iacc0h   280) (iacc0l   281) (isr      288)

   (neear0   352) (neear1   353) (neear2   354) (neear3   355)
   (neear4   356) (neear5   357) (neear6   358) (neear7   359)
   (neear8   360) (neear9   361) (neear10  362) (neear11  363)
   (neear12  364) (neear13  365) (neear14  366) (neear15  367)
   (neear16  368) (neear17  369) (neear18  370) (neear19  371)
   (neear20  372) (neear21  373) (neear22  374) (neear23  375)
   (neear24  376) (neear25  377) (neear26  378) (neear27  379)
   (neear28  380) (neear29  381) (neear30  382) (neear31  383)

   (nesr0    384) (nesr1    385) (nesr2    386) (nesr3    387)
   (nesr4    388) (nesr5    389) (nesr6    390) (nesr7    391)
   (nesr8    392) (nesr9    393) (nesr10   394) (nesr11   395)
   (nesr12   396) (nesr13   397) (nesr14   398) (nesr15   399)
   (nesr16   400) (nesr17   401) (nesr18   402) (nesr19   403)
   (nesr20   404) (nesr21   405) (nesr22   406) (nesr23   407)
   (nesr24   408) (nesr25   409) (nesr26   410) (nesr27   411)
   (nesr28   412) (nesr29   413) (nesr30   414) (nesr31   415)

   (necr     416)

   (gner0    432) (gner1    433)

   (fner0    434) (fner1    435)

   (epcr0    512) (epcr1    513) (epcr2    514) (epcr3    515)
   (epcr4    516) (epcr5    517) (epcr6    518) (epcr7    519)
   (epcr8    520) (epcr9    521) (epcr10   522) (epcr11   523)
   (epcr12   524) (epcr13   525) (epcr14   526) (epcr15   527)
   (epcr16   528) (epcr17   529) (epcr18   530) (epcr19   531)
   (epcr20   532) (epcr21   533) (epcr22   534) (epcr23   535)
   (epcr24   536) (epcr25   537) (epcr26   538) (epcr27   539)
   (epcr28   540) (epcr29   541) (epcr30   542) (epcr31   543)
   (epcr32   544) (epcr33   545) (epcr34   546) (epcr35   547)
   (epcr36   548) (epcr37   549) (epcr38   550) (epcr39   551)
   (epcr40   552) (epcr41   553) (epcr42   554) (epcr43   555)
   (epcr44   556) (epcr45   557) (epcr46   558) (epcr47   559)
   (epcr48   560) (epcr49   561) (epcr50   562) (epcr51   563)
   (epcr52   564) (epcr53   565) (epcr54   566) (epcr55   567)
   (epcr56   568) (epcr57   569) (epcr58   570) (epcr59   571)
   (epcr60   572) (epcr61   573) (epcr62   574) (epcr63   575)

   (esr0     576) (esr1     577) (esr2     578) (esr3     579)
   (esr4     580) (esr5     581) (esr6     582) (esr7     583)
   (esr8     584) (esr9     585) (esr10    586) (esr11    587)
   (esr12    588) (esr13    589) (esr14    590) (esr15    591)
   (esr16    592) (esr17    593) (esr18    594) (esr19    595)
   (esr20    596) (esr21    597) (esr22    598) (esr23    599)
   (esr24    600) (esr25    601) (esr26    602) (esr27    603)
   (esr28    604) (esr29    605) (esr30    606) (esr31    607)
   (esr32    608) (esr33    609) (esr34    610) (esr35    611)
   (esr36    612) (esr37    613) (esr38    614) (esr39    615)
   (esr40    616) (esr41    617) (esr42    618) (esr43    619)
   (esr44    620) (esr45    621) (esr46    622) (esr47    623)
   (esr48    624) (esr49    625) (esr50    626) (esr51    627)
   (esr52    628) (esr53    629) (esr54    630) (esr55    631)
   (esr56    632) (esr57    633) (esr58    634) (esr59    635)
   (esr60    636) (esr61    637) (esr62    638) (esr63    639)

   (eir0     640) (eir1     641) (eir2     642) (eir3     643)
   (eir4     644) (eir5     645) (eir6     646) (eir7     647)
   (eir8     648) (eir9     649) (eir10    650) (eir11    651)
   (eir12    652) (eir13    653) (eir14    654) (eir15    655)
   (eir16    656) (eir17    657) (eir18    658) (eir19    659)
   (eir20    660) (eir21    661) (eir22    662) (eir23    663)
   (eir24    664) (eir25    665) (eir26    666) (eir27    667)
   (eir28    668) (eir29    669) (eir30    670) (eir31    671)

   (esfr0    672) (esfr1    673)

   (sr0      768) (sr1      769) (sr2      770) (sr3      771) 

   (scr0     832) (scr1     833) (scr2     834) (scr3     835)

   (fsr0    1024) (fsr1    1025) (fsr2    1026) (fsr3    1027)
   (fsr4    1028) (fsr5    1029) (fsr6    1030) (fsr7    1031)
   (fsr8    1032) (fsr9    1033) (fsr10   1034) (fsr11   1035)
   (fsr12   1036) (fsr13   1037) (fsr14   1038) (fsr15   1039)
   (fsr16   1040) (fsr17   1041) (fsr18   1042) (fsr19   1043)
   (fsr20   1044) (fsr21   1045) (fsr22   1046) (fsr23   1047)
   (fsr24   1048) (fsr25   1049) (fsr26   1050) (fsr27   1051)
   (fsr28   1052) (fsr29   1053) (fsr30   1054) (fsr31   1055)
   (fsr32   1056) (fsr33   1057) (fsr34   1058) (fsr35   1059)
   (fsr36   1060) (fsr37   1061) (fsr38   1062) (fsr39   1063)
   (fsr40   1064) (fsr41   1065) (fsr42   1066) (fsr43   1067)
   (fsr44   1068) (fsr45   1069) (fsr46   1070) (fsr47   1071)
   (fsr48   1072) (fsr49   1073) (fsr50   1074) (fsr51   1075)
   (fsr52   1076) (fsr53   1077) (fsr54   1078) (fsr55   1079)
   (fsr56   1080) (fsr57   1081) (fsr58   1082) (fsr59   1083)
   (fsr60   1084) (fsr61   1085) (fsr62   1086) (fsr63   1087)

   ; FQ0-FQ31 are 64 bit registers.
   ; These names allow access to the upper 32 bits of the FQ registers.
   (fqop0   1088) (fqop1   1090) (fqop2   1092) (fqop3   1094) 
   (fqop4   1096) (fqop5   1098) (fqop6   1100) (fqop7   1102) 
   (fqop8   1104) (fqop9   1106) (fqop10  1108) (fqop11  1110) 
   (fqop12  1112) (fqop13  1114) (fqop14  1116) (fqop15  1118) 
   (fqop16  1120) (fqop17  1122) (fqop18  1124) (fqop19  1126) 
   (fqop20  1128) (fqop21  1130) (fqop22  1132) (fqop23  1134) 
   (fqop24  1136) (fqop25  1138) (fqop26  1140) (fqop27  1142) 
   (fqop28  1144) (fqop29  1146) (fqop30  1148) (fqop31  1150) 
   ; These names allow access to the lower 32 bits of the FQ registers.
   (fqst0   1089) (fqst1   1091) (fqst2   1093) (fqst3   1095) 
   (fqst4   1097) (fqst5   1099) (fqst6   1101) (fqst7   1103) 
   (fqst8   1105) (fqst9   1107) (fqst10  1109) (fqst11  1111) 
   (fqst12  1113) (fqst13  1115) (fqst14  1117) (fqst15  1119) 
   (fqst16  1121) (fqst17  1123) (fqst18  1125) (fqst19  1127) 
   (fqst20  1129) (fqst21  1131) (fqst22  1133) (fqst23  1135) 
   (fqst24  1137) (fqst25  1139) (fqst26  1141) (fqst27  1143) 
   (fqst28  1145) (fqst29  1147) (fqst30  1149) (fqst31  1151) 
   ; These also access the lower 32 bits of the FQ registers.
   ; These are not accessible as spr registers (see LSI appendix - section 13.4)
;  (fq0     1089) (fq1     1091) (fq2     1093) (fq3     1095) 
;  (fq4     1097) (fq5     1099) (fq6     1101) (fq7     1103) 
;  (fq8     1105) (fq9     1107) (fq10    1109) (fq11    1111) 
;  (fq12    1113) (fq13    1115) (fq14    1117) (fq15    1119) 
;  (fq16    1121) (fq17    1123) (fq18    1125) (fq19    1127) 
;  (fq20    1129) (fq21    1131) (fq22    1133) (fq23    1135) 
;  (fq24    1137) (fq25    1139) (fq26    1141) (fq27    1143) 
;  (fq28    1145) (fq29    1147) (fq30    1149) (fq31    1151) 

   (mcilr0  1272) (mcilr1  1273)

   (msr0    1280) (msr1    1281) (msr2    1282) (msr3    1283)
   (msr4    1284) (msr5    1285) (msr6    1286) (msr7    1287)
   (msr8    1288) (msr9    1289) (msr10   1290) (msr11   1291)
   (msr12   1292) (msr13   1293) (msr14   1294) (msr15   1295)
   (msr16   1296) (msr17   1297) (msr18   1298) (msr19   1299)
   (msr20   1300) (msr21   1301) (msr22   1302) (msr23   1303)
   (msr24   1304) (msr25   1305) (msr26   1306) (msr27   1307)
   (msr28   1308) (msr29   1309) (msr30   1310) (msr31   1311)
   (msr32   1312) (msr33   1313) (msr34   1314) (msr35   1315)
   (msr36   1316) (msr37   1317) (msr38   1318) (msr39   1319)
   (msr40   1320) (msr41   1321) (msr42   1322) (msr43   1323)
   (msr44   1324) (msr45   1325) (msr46   1326) (msr47   1327)
   (msr48   1328) (msr49   1329) (msr50   1330) (msr51   1331)
   (msr52   1332) (msr53   1333) (msr54   1334) (msr55   1335)
   (msr56   1336) (msr57   1337) (msr58   1338) (msr59   1339)
   (msr60   1340) (msr61   1341) (msr62   1342) (msr63   1343)

   ; MQ0-MQ31 are 64 bit registers.
   ; These names allow access to the upper 32 bits of the MQ registers.
   (mqop0   1344) (mqop1   1346) (mqop2   1348) (mqop3   1350) 
   (mqop4   1352) (mqop5   1354) (mqop6   1356) (mqop7   1358) 
   (mqop8   1360) (mqop9   1362) (mqop10  1364) (mqop11  1366) 
   (mqop12  1368) (mqop13  1370) (mqop14  1372) (mqop15  1374) 
   (mqop16  1376) (mqop17  1378) (mqop18  1380) (mqop19  1382) 
   (mqop20  1384) (mqop21  1386) (mqop22  1388) (mqop23  1390) 
   (mqop24  1392) (mqop25  1394) (mqop26  1396) (mqop27  1398) 
   (mqop28  1400) (mqop29  1402) (mqop30  1404) (mqop31  1406) 
   ; These names allow access to the lower 32 bits of the MQ registers.
   (mqst0   1345) (mqst1   1347) (mqst2   1349) (mqst3   1351) 
   (mqst4   1353) (mqst5   1355) (mqst6   1357) (mqst7   1359) 
   (mqst8   1361) (mqst9   1363) (mqst10  1365) (mqst11  1367) 
   (mqst12  1369) (mqst13  1371) (mqst14  1373) (mqst15  1375) 
   (mqst16  1377) (mqst17  1379) (mqst18  1381) (mqst19  1383) 
   (mqst20  1385) (mqst21  1387) (mqst22  1389) (mqst23  1391) 
   (mqst24  1393) (mqst25  1395) (mqst26  1397) (mqst27  1399) 
   (mqst28  1401) (mqst29  1403) (mqst30  1405) (mqst31  1407) 
   ; These also access the lower 32 bits of the MQ registers.
   ; These are not accessible as spr registers (see LSI appendix - section 13.4)
;  (mq0     1345) (mq1     1347) (mq2     1349) (mq3     1351) 
;  (mq4     1353) (mq5     1355) (mq6     1357) (mq7     1359) 
;  (mq8     1361) (mq9     1363) (mq10    1365) (mq11    1367) 
;  (mq12    1369) (mq13    1371) (mq14    1373) (mq15    1375) 
;  (mq16    1377) (mq17    1379) (mq18    1381) (mq19    1383) 
;  (mq20    1385) (mq21    1387) (mq22    1389) (mq23    1391) 
;  (mq24    1393) (mq25    1395) (mq26    1397) (mq27    1399) 
;  (mq28    1401) (mq29    1403) (mq30    1405) (mq31    1407) 

   ; These are not accessible as spr registers (see LSI appendix - section 13.4)
;  (acc0    1408) (acc1    1409) (acc2    1410) (acc3    1411)
;  (acc4    1412) (acc5    1413) (acc6    1414) (acc7    1415)
;  (acc8    1416) (acc9    1417) (acc10   1418) (acc11   1419)
;  (acc12   1420) (acc13   1421) (acc14   1422) (acc15   1423)
;  (acc16   1424) (acc17   1425) (acc18   1426) (acc19   1427)
;  (acc20   1428) (acc21   1429) (acc22   1430) (acc23   1431)
;  (acc24   1432) (acc25   1433) (acc26   1434) (acc27   1435)
;  (acc28   1436) (acc29   1437) (acc30   1438) (acc31   1439)
;  (acc32   1440) (acc33   1441) (acc34   1442) (acc35   1443)
;  (acc36   1444) (acc37   1445) (acc38   1446) (acc39   1447)
;  (acc40   1448) (acc41   1449) (acc42   1450) (acc43   1451)
;  (acc44   1452) (acc45   1453) (acc46   1454) (acc47   1455)
;  (acc48   1456) (acc49   1457) (acc50   1458) (acc51   1459)
;  (acc52   1460) (acc53   1461) (acc54   1462) (acc55   1463)
;  (acc56   1464) (acc57   1465) (acc58   1466) (acc59   1467)
;  (acc60   1468) (acc61   1469) (acc62   1470) (acc63   1471)

;  (accg0   1472) (accg1   1473) (accg2   1474) (accg3   1475)
;  (accg4   1476) (accg5   1477) (accg6   1478) (accg7   1479)
;  (accg8   1480) (accg9   1481) (accg10  1482) (accg11  1483)
;  (accg12  1484) (accg13  1485) (accg14  1486) (accg15  1487)
;  (accg16  1488) (accg17  1489) (accg18  1490) (accg19  1491)
;  (accg20  1492) (accg21  1493) (accg22  1494) (accg23  1495)
;  (accg24  1496) (accg25  1497) (accg26  1498) (accg27  1499)
;  (accg28  1500) (accg29  1501) (accg30  1502) (accg31  1503)
;  (accg32  1504) (accg33  1505) (accg34  1506) (accg35  1507)
;  (accg36  1508) (accg37  1509) (accg38  1510) (accg39  1511)
;  (accg40  1512) (accg41  1513) (accg42  1514) (accg43  1515)
;  (accg44  1516) (accg45  1517) (accg46  1518) (accg47  1519)
;  (accg48  1520) (accg49  1521) (accg50  1522) (accg51  1523)
;  (accg52  1524) (accg53  1525) (accg54  1526) (accg55  1527)
;  (accg56  1528) (accg57  1529) (accg58  1530) (accg59  1531)
;  (accg60  1532) (accg61  1533) (accg62  1534) (accg63  1535)

   (ear0    1536) (ear1    1537) (ear2    1538) (ear3    1539)
   (ear4    1540) (ear5    1541) (ear6    1542) (ear7    1543)
   (ear8    1544) (ear9    1545) (ear10   1546) (ear11   1547)
   (ear12   1548) (ear13   1549) (ear14   1550) (ear15   1551)
   (ear16   1552) (ear17   1553) (ear18   1554) (ear19   1555)
   (ear20   1556) (ear21   1557) (ear22   1558) (ear23   1559)
   (ear24   1560) (ear25   1561) (ear26   1562) (ear27   1563)
   (ear28   1564) (ear29   1565) (ear30   1566) (ear31   1567)
   (ear32   1568) (ear33   1569) (ear34   1570) (ear35   1571)
   (ear36   1572) (ear37   1573) (ear38   1574) (ear39   1575)
   (ear40   1576) (ear41   1577) (ear42   1578) (ear43   1579)
   (ear44   1580) (ear45   1581) (ear46   1582) (ear47   1583)
   (ear48   1584) (ear49   1585) (ear50   1586) (ear51   1587)
   (ear52   1588) (ear53   1589) (ear54   1590) (ear55   1591)
   (ear56   1592) (ear57   1593) (ear58   1594) (ear59   1595)
   (ear60   1596) (ear61   1597) (ear62   1598) (ear63   1599)

   (edr0    1600) (edr1    1601) (edr2    1602) (edr3    1603)
   (edr4    1604) (edr5    1605) (edr6    1606) (edr7    1607)
   (edr8    1608) (edr9    1609) (edr10   1610) (edr11   1611)
   (edr12   1612) (edr13   1613) (edr14   1614) (edr15   1615)
   (edr16   1616) (edr17   1617) (edr18   1618) (edr19   1619)
   (edr20   1620) (edr21   1621) (edr22   1622) (edr23   1623)
   (edr24   1624) (edr25   1625) (edr26   1626) (edr27   1627)
   (edr28   1628) (edr29   1629) (edr30   1630) (edr31   1631)
   (edr32   1632) (edr33   1636) (edr34   1634) (edr35   1635)
   (edr36   1636) (edr37   1637) (edr38   1638) (edr39   1639)
   (edr40   1640) (edr41   1641) (edr42   1642) (edr43   1643)
   (edr44   1644) (edr45   1645) (edr46   1646) (edr47   1647)
   (edr48   1648) (edr49   1649) (edr50   1650) (edr51   1651)
   (edr52   1652) (edr53   1653) (edr54   1654) (edr55   1655)
   (edr56   1656) (edr57   1657) (edr58   1658) (edr59   1659)
   (edr60   1660) (edr61   1661) (edr62   1662) (edr63   1663)

   (iamlr0  1664) (iamlr1  1665) (iamlr2  1666) (iamlr3  1667)
   (iamlr4  1668) (iamlr5  1669) (iamlr6  1670) (iamlr7  1671)
   (iamlr8  1672) (iamlr9  1673) (iamlr10 1674) (iamlr11 1675)
   (iamlr12 1676) (iamlr13 1677) (iamlr14 1678) (iamlr15 1679)
   (iamlr16 1680) (iamlr17 1681) (iamlr18 1682) (iamlr19 1683)
   (iamlr20 1684) (iamlr21 1685) (iamlr22 1686) (iamlr23 1687)
   (iamlr24 1688) (iamlr25 1689) (iamlr26 1690) (iamlr27 1691)
   (iamlr28 1692) (iamlr29 1693) (iamlr30 1694) (iamlr31 1695)
   (iamlr32 1696) (iamlr33 1697) (iamlr34 1698) (iamlr35 1699)
   (iamlr36 1700) (iamlr37 1701) (iamlr38 1702) (iamlr39 1703)
   (iamlr40 1704) (iamlr41 1705) (iamlr42 1706) (iamlr43 1707)
   (iamlr44 1708) (iamlr45 1709) (iamlr46 1710) (iamlr47 1711)
   (iamlr48 1712) (iamlr49 1713) (iamlr50 1714) (iamlr51 1715)
   (iamlr52 1716) (iamlr53 1717) (iamlr54 1718) (iamlr55 1719)
   (iamlr56 1720) (iamlr57 1721) (iamlr58 1722) (iamlr59 1723)
   (iamlr60 1724) (iamlr61 1725) (iamlr62 1726) (iamlr63 1727)

   (iampr0  1728) (iampr1  1729) (iampr2  1730) (iampr3  1731)
   (iampr4  1732) (iampr5  1733) (iampr6  1734) (iampr7  1735)
   (iampr8  1736) (iampr9  1737) (iampr10 1738) (iampr11 1739)
   (iampr12 1740) (iampr13 1741) (iampr14 1742) (iampr15 1743)
   (iampr16 1744) (iampr17 1745) (iampr18 1746) (iampr19 1747)
   (iampr20 1748) (iampr21 1749) (iampr22 1750) (iampr23 1751)
   (iampr24 1752) (iampr25 1753) (iampr26 1754) (iampr27 1755)
   (iampr28 1756) (iampr29 1757) (iampr30 1758) (iampr31 1759)
   (iampr32 1760) (iampr33 1761) (iampr34 1762) (iampr35 1763)
   (iampr36 1764) (iampr37 1765) (iampr38 1766) (iampr39 1767)
   (iampr40 1768) (iampr41 1769) (iampr42 1770) (iampr43 1771)
   (iampr44 1772) (iampr45 1773) (iampr46 1774) (iampr47 1775)
   (iampr48 1776) (iampr49 1777) (iampr50 1778) (iampr51 1779)
   (iampr52 1780) (iampr53 1781) (iampr54 1782) (iampr55 1783)
   (iampr56 1784) (iampr57 1785) (iampr58 1786) (iampr59 1787)
   (iampr60 1788) (iampr61 1789) (iampr62 1790) (iampr63 1791)

   (damlr0  1792) (damlr1  1793) (damlr2  1794) (damlr3  1795)
   (damlr4  1796) (damlr5  1797) (damlr6  1798) (damlr7  1799)
   (damlr8  1800) (damlr9  1801) (damlr10 1802) (damlr11 1803)
   (damlr12 1804) (damlr13 1805) (damlr14 1806) (damlr15 1807)
   (damlr16 1808) (damlr17 1809) (damlr18 1810) (damlr19 1811)
   (damlr20 1812) (damlr21 1813) (damlr22 1814) (damlr23 1815)
   (damlr24 1816) (damlr25 1817) (damlr26 1818) (damlr27 1819)
   (damlr28 1820) (damlr29 1821) (damlr30 1822) (damlr31 1823)
   (damlr32 1824) (damlr33 1825) (damlr34 1826) (damlr35 1827)
   (damlr36 1828) (damlr37 1829) (damlr38 1830) (damlr39 1831)
   (damlr40 1832) (damlr41 1833) (damlr42 1834) (damlr43 1835)
   (damlr44 1836) (damlr45 1837) (damlr46 1838) (damlr47 1839)
   (damlr48 1840) (damlr49 1841) (damlr50 1842) (damlr51 1843)
   (damlr52 1844) (damlr53 1845) (damlr54 1846) (damlr55 1847)
   (damlr56 1848) (damlr57 1849) (damlr58 1850) (damlr59 1851)
   (damlr60 1852) (damlr61 1853) (damlr62 1854) (damlr63 1855)

   (dampr0  1856) (dampr1  1857) (dampr2  1858) (dampr3  1859)
   (dampr4  1860) (dampr5  1861) (dampr6  1862) (dampr7  1863)
   (dampr8  1864) (dampr9  1865) (dampr10 1866) (dampr11 1867)
   (dampr12 1868) (dampr13 1869) (dampr14 1870) (dampr15 1871)
   (dampr16 1872) (dampr17 1873) (dampr18 1874) (dampr19 1875)
   (dampr20 1876) (dampr21 1877) (dampr22 1878) (dampr23 1879)
   (dampr24 1880) (dampr25 1881) (dampr26 1882) (dampr27 1883)
   (dampr28 1884) (dampr29 1885) (dampr30 1886) (dampr31 1887)
   (dampr32 1888) (dampr33 1889) (dampr34 1890) (dampr35 1891)
   (dampr36 1892) (dampr37 1893) (dampr38 1894) (dampr39 1895)
   (dampr40 1896) (dampr41 1897) (dampr42 1898) (dampr43 1899)
   (dampr44 1900) (dampr45 1901) (dampr46 1902) (dampr47 1903)
   (dampr48 1904) (dampr49 1905) (dampr50 1906) (dampr51 1907)
   (dampr52 1908) (dampr53 1909) (dampr54 1910) (dampr55 1911)
   (dampr56 1912) (dampr57 1913) (dampr58 1914) (dampr59 1915)
   (dampr60 1916) (dampr61 1917) (dampr62 1918) (dampr63 1919)

   (amcr    1920) (stbar   1921) (mmcr    1922)
   (iamvr1  1925) (damvr1  1927)
   (cxnr    1936) (ttbr    1937) (tplr    1938) (tppr    1939)
   (tpxr    1940)
   (timerh  1952) (timerl  1953) (timerd  1954)
   (dcr     2048) (brr     2049) (nmar    2050) (btbr    2051)

   (ibar0   2052) (ibar1   2053) (ibar2   2054) (ibar3   2055)
   (dbar0   2056) (dbar1   2057) (dbar2   2058) (dbar3   2059)

   (dbdr00  2060) (dbdr01  2061) (dbdr02  2062) (dbdr03  2063)
   (dbdr10  2064) (dbdr11  2065) (dbdr12  2066) (dbdr13  2067)
   (dbdr20  2068) (dbdr21  2069) (dbdr22  2070) (dbdr23  2071)
   (dbdr30  2072) (dbdr31  2073) (dbdr32  2074) (dbdr33  2075)

   (dbmr00  2076) (dbmr01  2077) (dbmr02  2078) (dbmr03  2079)
   (dbmr10  2080) (dbmr11  2081) (dbmr12  2082) (dbmr13  2083)
   (dbmr20  2084) (dbmr21  2085) (dbmr22  2086) (dbmr23  2087)
   (dbmr30  2088) (dbmr31  2089) (dbmr32  2090) (dbmr33  2091)

   (cpcfr   2092) (cpcr    2093) (cpsr    2094)

   (cpesr0  2096) (cpesr1  2097)
   (cpemr0  2098) (cpemr1  2099)

   (ihsr8   3848)
  )
)

(define-hardware
  (name h-spr)
  (comment "special purpose registers")
  (attrs PROFILE)
  (type register UWI (4096))
  (indices extern-keyword spr-names)
  (get (index) (c-call UWI "@cpu@_h_spr_get_handler" index))
  (set (index newval) (c-call VOID "@cpu@_h_spr_set_handler" index newval))
)

(define-pmacro (spr-pcsr)  (reg h-spr   1))
(define-pmacro (spr-bpcsr) (reg h-spr   2))
(define-pmacro (spr-lr)    (reg h-spr 272))
(define-pmacro (spr-lcr)   (reg h-spr 273))
(define-pmacro (spr-iacc0h) (reg h-spr 280))
(define-pmacro (spr-iacc0l) (reg h-spr 281))
(define-pmacro (spr-sr0)   (reg h-spr 768))
(define-pmacro (spr-sr1)   (reg h-spr 769))
(define-pmacro (spr-sr2)   (reg h-spr 770))
(define-pmacro (spr-sr3)   (reg h-spr 771))

; Accumulator guard. Actually a subset of the SPR registers, but those SPRs
; are read-only in most insns. This hardware element is used by those insns
; which have direct access (mwtaccg, mrdaccg).
(define-keyword
  (name accg-names)
  (print-name h-accg)
  (prefix "")
  (values
   (accg0   0)(accg1   1)(accg2   2)(accg3   3)
   (accg4   4)(accg5   5)(accg6   6)(accg7   7)
   (accg8   8)(accg9   9)(accg10 10)(accg11 11)
   (accg12 12)(accg13 13)(accg14 14)(accg15 15)
   (accg16 16)(accg17 17)(accg18 18)(accg19 19)
   (accg20 20)(accg21 21)(accg22 22)(accg23 23)
   (accg24 24)(accg25 25)(accg26 26)(accg27 27)
   (accg28 28)(accg29 29)(accg30 30)(accg31 31)
   (accg32 32)(accg33 33)(accg34 34)(accg35 35)
   (accg36 36)(accg37 37)(accg38 38)(accg39 39)
   (accg40 40)(accg41 41)(accg42 42)(accg43 43)
   (accg44 44)(accg45 45)(accg46 46)(accg47 47)
   (accg48 48)(accg49 49)(accg50 50)(accg51 51)
   (accg52 52)(accg53 53)(accg54 54)(accg55 55)
   (accg56 56)(accg57 57)(accg58 58)(accg59 59)
   (accg60 60)(accg61 61)(accg62 62)(accg63 63)
  )
)

(define-hardware
  (name h-accg)
  (comment "accumulator guard")
  (attrs PROFILE VIRTUAL)
  (type register UWI (64))
  (indices extern-keyword accg-names)
  (get (index)
       (and (reg h-spr (add index 1472)) #xff))
  (set (index newval)
       (set (raw-reg UWI h-spr (add index 1472)) (and newval #xff)))
)

; 40 bit accumulator. Composed of ACCG and ACC registers concatenated, but
; referenced more often as the composed 40 bits.
(define-keyword
  (name acc-names)
  (print-name h-acc40)
  (prefix "")
  (values
(acc0   0)(acc1   1)(acc2   2)(acc3   3)(acc4   4)(acc5   5)(acc6   6)(acc7   7)
(acc8   8)(acc9   9)(acc10 10)(acc11 11)(acc12 12)(acc13 13)(acc14 14)(acc15 15)
(acc16 16)(acc17 17)(acc18 18)(acc19 19)(acc20 20)(acc21 21)(acc22 22)(acc23 23)
(acc24 24)(acc25 25)(acc26 26)(acc27 27)(acc28 28)(acc29 29)(acc30 30)(acc31 31)
(acc32 32)(acc33 33)(acc34 34)(acc35 35)(acc36 36)(acc37 37)(acc38 38)(acc39 39)
(acc40 40)(acc41 41)(acc42 42)(acc43 43)(acc44 44)(acc45 45)(acc46 46)(acc47 47)
(acc48 48)(acc49 49)(acc50 50)(acc51 51)(acc52 52)(acc53 53)(acc54 54)(acc55 55)
(acc56 56)(acc57 57)(acc58 58)(acc59 59)(acc60 60)(acc61 61)(acc62 62)(acc63 63)
  )
)

(define-hardware
  (name h-acc40S)
  (comment "40 bit signed accumulator")
  (attrs PROFILE VIRTUAL)
  (type register DI (64))
  (indices extern-keyword acc-names)
  ; The accumlator is made up of two 32 bit registers, accgi/acci.
  ; We want to extract this as a combined 40 signed bits
  (get (index)
       (or DI
	   (sll  DI (ext DI (trunc QI (reg h-spr (add index 1472))))
		 32)
	   (zext DI (reg h-spr (add index 1408)))))
  ; Bits 40-63 are not written. raw-reg is used to bypass read-only restrictions
  ; on ACC and ACCG registers
  (set (index newval)
       (sequence ()
		 (c-call VOID "frv_check_spr_write_access" (add index 1408))
		 (set (raw-reg UWI h-spr
			       (add index 1472)) (and (srl newval 32) #xff))
		 (set (raw-reg UWI h-spr
			       (add index 1408)) (trunc USI newval))))
)

(define-hardware
  (name h-acc40U)
  (comment "40 bit unsigned accumulator")
  (attrs PROFILE VIRTUAL)
  (type register UDI (64))
  (indices extern-keyword acc-names)
  ; The accumlator is made up of two 32 bit registers, accgi/acci.
  ; We want to extract this as a combined 40 unsigned bits
  (get (index)
       (or DI
	   (sll  DI (zext DI (reg h-spr (add index 1472))) 32)
	   (zext DI (reg h-spr (add index 1408)))))
  ; Bits 40-63 are not written. raw-reg is used to bypass read-only restrictions
  ; on ACC and ACCG registers
  (set (index newval)
       (sequence ()
		 (c-call VOID "frv_check_spr_write_access" (add index 1408))
		 (set (raw-reg UWI h-spr
			       (add index 1472)) (and (srl newval 32) #xff))
		 (set (raw-reg UWI h-spr
			       (add index 1408)) (trunc USI newval))))
)
; 64-bit signed accumulator.  Composed of iacc0h and iacc0l registers
; concatenated, but referenced more often as the composed 64 bits.
(define-keyword
  ; This is totally hokey -- I have to have an index!
  (name iacc0-names)
  (print-name h-iacc0)
  (prefix "")
  (values (iacc0 0))
)

(define-hardware
  (name h-iacc0)
  (comment "64 bit signed accumulator")
  (attrs PROFILE VIRTUAL (MACH fr400,fr450))
  (type register DI (1))
  (indices extern-keyword iacc0-names)
  ; The single 64-bit integer accumulator is made up of two 32 bit
  ; registers, iacc0h and iacc0l.  We want to extract this as a
  ; combined 64 signed bits.
  (get (idx) (or DI (sll DI (ext DI (spr-iacc0h)) 32) (zext DI (spr-iacc0l))))
  (set (idx newval)
       (sequence ()
		 (set (spr-iacc0h) (trunc SI (srl newval 32)))
		 (set (spr-iacc0l) (trunc SI newval))))
)

; Integer condition code registers (CCR)
;
; The individual sub registers bits of the CCR are referenced more often than
; the entire register so set them directly. We can assemble the
; entire register when necessary.
;
(define-keyword
  (name iccr-names)
  (print-name h-iccr)
  (prefix "")
  (values (icc0 0) (icc1 1) (icc2 2) (icc3 3))
)

(define-hardware
  (name h-iccr)
  (comment "Integer condition code registers")
  (attrs PROFILE)
  (type register UQI (4))
  (indices extern-keyword iccr-names)
)

; Floating point condition code registers (CCR)
;
; The individual sub registers bits of the CCR are referenced more often than
; the entire register so set them directly. We can assemble the
; entire register when necessary.
;
(define-keyword
  (name fccr-names)
  (print-name h-fccr)
  (prefix "")
  (values (fcc0 0) (fcc1 1) (fcc2 2) (fcc3 3))
)

(define-hardware
  (name h-fccr)
  (comment "Floating point condition code registers")
  (attrs PROFILE)
  (type register UQI (4))
  (indices extern-keyword fccr-names)
)

; C condition code registers (CCCR)
;
(define-keyword
  (name cccr-names)
  (print-name h-cccr)
  (prefix "")
  (values (cc0 0) (cc1 1) (cc2 2) (cc3 3) (cc4 4) (cc5 5) (cc6 6) (cc7 7))
)

(define-hardware
  (name h-cccr)
  (comment "Condition code registers")
  (attrs PROFILE)
  (type register UQI (8))
  (indices extern-keyword cccr-names)
)

; Dummy hardware used to define packing bit on insns
;
(define-hardware
  (name h-pack)
  (comment "Packing bit dummy hardware")
  (type immediate (UINT 1))
  (values keyword "" (("" 1) (".p" 0) (".P" 0)))
)
; Dummy hardware used to define hint field for branches always taken
;
(define-hardware
  (name h-hint-taken)
  (comment "Branch taken hint dummy hardware")
  (type immediate (UINT 1))
  ; The order of these is important. We want '2' to get written by default,
  ; but we also want the docoder/disassembler to allow the values '0', '1' and
  ; '3'.
  (values keyword "" (("" 2) ("" 0) ("" 1) ("" 3)))
)
; Dummy hardware used to define hint field for branches never taken
;
(define-hardware
  (name h-hint-not-taken)
  (comment "Branch not taken hint dummy hardware")
  (type immediate (UINT 1))
  ; The order of these is important. We want '0' to get written by default,
  ; but we also want the docoder/disassembler to allow the values '1', '2' and
  ; '3'.
  (values keyword "" (("" 0) ("" 1) ("" 2) ("" 3)))
)

; Instruction Operands.
; These entries provide a layer between the assembler and the raw hardware
; description, and are used to refer to hardware elements in the semantic
; code.  Usually there's a bit of over-specification, but in more complicated
; instruction sets there isn't.

; FRV specific operand attributes:

(define-attr
  (for operand)
  (type boolean)
  (name HASH-PREFIX)
  (comment "immediates have an optional '#' prefix")
)

; ??? Convention says this should be o-sr, but then the insn definitions
; should refer to o-sr which is clumsy.  The "o-" could be implicit, but
; then it should be implicit for all the symbols here, but then there would
; be confusion between (f-)simm8 and (h-)simm8.
; So for now the rule is exactly as it appears here.

; dnmop: define-normal-mode-operand: temporary, pending potential removal
; of modes from h/w.
(define-pmacro (dnmop xname xcomment xattrs xtype xindex xmode)
  (define-operand
    (name xname)
    (comment xcomment)
    (.splice attrs (.unsplice xattrs))
    (type xtype)
    (index xindex)
    (mode xmode)
    )
)

; dnpmop: define-normal-parsed-mode-operand: Normal mode operand with parse handler
(define-pmacro (dnpmop xname xcomment xattrs xtype xindex xmode xparse)
  (define-operand
    (name xname)
    (comment xcomment)
    (.splice attrs (.unsplice xattrs))
    (type xtype)
    (index xindex)
    (mode xmode)
    (handlers (parse xparse))
    )
)

(dnop  pack "packing bit" () h-pack f-pack)

(dnmop GRi        "source register 1"      () h-gr        f-GRi  SI)
(dnmop GRj        "source register 2"      () h-gr        f-GRj  SI)
(dnmop GRk        "destination register"   () h-gr        f-GRk  SI)
(dnmop GRkhi      "destination register"   () h-gr_hi     f-GRk  UHI)
(dnmop GRklo      "destination register"   () h-gr_lo     f-GRk  UHI)
(dnpmop GRdoublek "destination register"   () h-gr_double f-GRk  DI "even_register")
(dnmop ACC40Si    "signed accumulator"     () h-acc40S    f-ACC40Si DI)
(dnmop ACC40Ui    "unsigned accumulator"   () h-acc40U    f-ACC40Ui UDI)
(dnmop ACC40Sk    "target accumulator"     () h-acc40S    f-ACC40Sk DI)
(dnmop ACC40Uk    "target accumulator"     () h-acc40U    f-ACC40Uk UDI)
(dnmop ACCGi      "source register"        () h-accg      f-ACCGi   UWI)
(dnmop ACCGk      "target register"        () h-accg      f-ACCGk   UWI)

(dnmop CPRi       "source register"        ((MACH frv)) h-cpr        f-CPRi SI)
(dnmop CPRj       "source register"        ((MACH frv)) h-cpr        f-CPRj SI)
(dnmop CPRk       "destination register"   ((MACH frv)) h-cpr        f-CPRk SI)
(dnpmop CPRdoublek "destination register"  ((MACH frv)) h-cpr_double f-CPRk DI "even_register")

; floating point operands
(dnmop FRinti    "source register 1"      () h-fr_int    f-FRi SI)
(dnmop FRintj    "source register 2"      () h-fr_int    f-FRj SI)
(dnmop FRintk    "target register"        () h-fr_int    f-FRk SI)
(dnmop FRi       "source register 1"      () h-fr        f-FRi SF)
(dnmop FRj       "source register 2"      () h-fr        f-FRj SF)
(dnmop FRk       "destination register"   () h-fr        f-FRk SF)
(dnmop FRkhi     "destination register"   () h-fr_hi     f-FRk UHI)
(dnmop FRklo     "destination register"   () h-fr_lo     f-FRk UHI)
(dnpmop FRdoublei "source register 1"     () h-fr_double f-FRi DF "even_register")
(dnpmop FRdoublej "source register 2"     () h-fr_double f-FRj DF "even_register")
(dnpmop FRdoublek "target register"       () h-fr_double f-FRk DF "even_register")

(dnop CRi       "source register 1"       () h-cccr f-CRi)
(dnop CRj       "source register 2"       () h-cccr f-CRj)
(dnop CRj_int   "destination register"    () h-cccr f-CRj_int)
(dnop CRj_float "destination register"    () h-cccr f-CRj_float)
(dnop CRk       "destination register"    () h-cccr f-CRk)
(dnop CCi       "condition   register"    () h-cccr f-CCi)

(dnop ICCi_1  "condition   register"      () h-iccr f-ICCi_1)
(dnop ICCi_2  "condition   register"      () h-iccr f-ICCi_2)
(dnop ICCi_3  "condition   register"      () h-iccr f-ICCi_3)
(dnop FCCi_1  "condition   register"      () h-fccr f-FCCi_1)
(dnop FCCi_2  "condition   register"      () h-fccr f-FCCi_2)
(dnop FCCi_3  "condition   register"      () h-fccr f-FCCi_3)
(dnop FCCk    "condition   register"      () h-fccr f-FCCk)

(dnop eir     "exception insn reg"        () h-uint f-eir)
(dnop s10     "10 bit signed immediate"   (HASH-PREFIX) h-sint f-s10)
(dnop u16     "16 bit unsigned immediate" (HASH-PREFIX) h-uint f-u16)
(dnop s16     "16 bit signed   immediate" (HASH-PREFIX) h-sint f-s16)
(dnop s6      "6  bit signed   immediate" (HASH-PREFIX) h-sint f-s6)
(dnop s6_1    "6  bit signed   immediate" (HASH-PREFIX) h-sint f-s6_1)
(dnop u6      "6  bit unsigned immediate" (HASH-PREFIX) h-uint f-u6)
(dnop s5      "5  bit signed   immediate" (HASH-PREFIX) h-sint f-s5)
(dnop cond    "conditional arithmetic"    (HASH-PREFIX) h-uint f-cond)
(dnop ccond   "lr branch condition"       (HASH-PREFIX) h-uint f-ccond)
(dnop hint    "2 bit branch predictor"    (HASH-PREFIX) h-uint f-hint)
(dnop hint_taken "2 bit branch predictor"     () h-hint-taken     f-hint)
(dnop hint_not_taken "2 bit branch predictor" () h-hint-not-taken f-hint)

(dnop LI      "link indicator"            () h-uint f-LI)
(dnop lock    "cache lock indicator"      (HASH-PREFIX) h-uint f-lock)
(dnop debug   "debug mode indicator"      (HASH-PREFIX) h-uint f-debug)
(dnop ae      "all entries indicator"     (HASH-PREFIX) h-uint f-ae)

(dnop label16  "18 bit pc relative address" () h-iaddr f-label16)

(dnop LRAE "Load Real Address E flag" () h-uint f-LRAE)
(dnop LRAD "Load Real Address D flag" () h-uint f-LRAD)
(dnop LRAS "Load Real Address S flag" () h-uint f-LRAS)

(dnop TLBPRopx "TLB Probe operation number" () h-uint f-TLBPRopx)
(dnop TLBPRL   "TLB Probe L flag"           () h-uint f-TLBPRL)

(define-operand
  (name A0)
  (comment "A==0 operand of mclracc")
  (attrs)
  (type h-uint)
  (index f-A)
  (mode USI)
  (handlers (parse "A0"))
)

(define-operand
  (name A1)
  (comment "A==1 operand of mclracc")
  (attrs)
  (type h-uint)
  (index f-A)
  (mode USI)
  (handlers (parse "A1"))
)

(define-operand
  (name FRintieven)
  (comment "(even) source register 1")
  (attrs)
  (type h-fr_int)
  (index f-FRi)
  (mode SI)
  (handlers (parse "even_register"))
)

(define-operand
  (name FRintjeven)
  (comment "(even) source register 2")
  (attrs)
  (type h-fr_int)
  (index f-FRj)
  (mode SI)
  (handlers (parse "even_register"))
)

(define-operand
  (name FRintkeven)
  (comment "(even) target register")
  (attrs)
  (type h-fr_int)
  (index f-FRk)
  (mode SI)
  (handlers (parse "even_register"))
)

(define-operand
  (name d12)
  (comment "12 bit signed immediate")
  (attrs)
  (type h-sint)
  (index f-d12)
  (handlers (parse "d12"))
)

(define-operand
  (name s12)
  (comment "12 bit signed immediate")
  (attrs HASH-PREFIX)
  (type h-sint)
  (index f-d12)
  (handlers (parse "s12"))
)

(define-operand
  (name u12)
  (comment "12 bit signed immediate")
  (attrs HASH-PREFIX)
  (type h-sint)
  (index f-u12)
  (handlers (parse "u12"))
)

(define-operand 
  (name spr)
  (comment "special purpose register")
  (attrs)
  (type  h-spr)
  (index f-spr)
  (handlers (parse "spr") (print "spr"))
)

(define-operand
  (name ulo16)
  (comment "16 bit unsigned immediate, for #lo()")
  (attrs)
  (type h-uint)
  (index f-u16)
  (handlers (parse "ulo16") (print "lo"))
)

(define-operand
  (name slo16)
  (comment "16 bit unsigned immediate, for #lo()")
  (attrs)
  (type h-sint)
  (index f-s16)
  (handlers (parse "uslo16") (print "lo"))
)

(define-operand
  (name uhi16)
  (comment "16 bit unsigned immediate, for #hi()")
  (attrs)
  (type h-uint)
  (index f-u16)
  (handlers (parse "uhi16") (print "hi"))
)

(define-operand
  (name label24)
  (comment "26 bit pc relative address")
  (attrs)
  (type h-iaddr)
  (index f-label24)
  (mode SI)
  (handlers (parse "call_label"))
)

; operands representing hardware
;
(dnop psr_esr "PSR.ESR bit" (SEM-ONLY) h-psr_esr f-nil)
(dnop psr_s   "PSR.S   bit" (SEM-ONLY) h-psr_s   f-nil)
(dnop psr_ps  "PSR.PS  bit" (SEM-ONLY) h-psr_ps  f-nil)
(dnop psr_et  "PSR.ET  bit" (SEM-ONLY) h-psr_et  f-nil)

(dnop bpsr_bs  "BPSR.BS  bit" (SEM-ONLY) h-bpsr_bs  f-nil)
(dnop bpsr_bet "BPSR.BET bit" (SEM-ONLY) h-bpsr_bet f-nil)

(dnop tbr_tba "TBR.TBA" (SEM-ONLY) h-tbr_tba f-nil)
(dnop tbr_tt  "TBR.TT"  (SEM-ONLY) h-tbr_tt  f-nil)

; Null operands
;
(define-pmacro (ICCi_1-null)  (f-ICCi_1-null 0))
(define-pmacro (ICCi_2-null)  (f-ICCi_2-null 0))
(define-pmacro (ICCi_3-null)  (f-ICCi_3-null 0))
(define-pmacro (FCCi_1-null)  (f-FCCi_1-null 0))
(define-pmacro (FCCi_2-null)  (f-FCCi_2-null 0))
(define-pmacro (FCCi_3-null)  (f-FCCi_3-null 0))
(define-pmacro (rs-null)      (f-rs-null     0))
(define-pmacro (GRi-null)     (f-GRi-null    0))
(define-pmacro (GRj-null)     (f-GRj-null    0))
(define-pmacro (GRk-null)     (f-GRk-null    0))
(define-pmacro (FRi-null)     (f-FRi-null    0))
(define-pmacro (FRj-null)     (f-FRj-null    0))
(define-pmacro (ACCj-null)    (f-ACCj-null   0))
(define-pmacro (rd-null)      (f-rd-null     0))
(define-pmacro (cond-null)    (f-cond-null   0))
(define-pmacro (ccond-null)   (f-ccond-null  0))
(define-pmacro (s12-null)     (f-s12-null    0))
(define-pmacro (label16-null) (f-label16-null 0))
(define-pmacro (misc-null-1)  (f-misc-null-1 0))
(define-pmacro (misc-null-2)  (f-misc-null-2 0))
(define-pmacro (misc-null-3)  (f-misc-null-3 0))
(define-pmacro (misc-null-4)  (f-misc-null-4 0))
(define-pmacro (misc-null-5)  (f-misc-null-5 0))
(define-pmacro (misc-null-6)  (f-misc-null-6 0))
(define-pmacro (misc-null-7)  (f-misc-null-7 0))
(define-pmacro (misc-null-8)  (f-misc-null-8 0))
(define-pmacro (misc-null-9)  (f-misc-null-9 0))
(define-pmacro (misc-null-10) (f-misc-null-10 0))
(define-pmacro (misc-null-11) (f-misc-null-11 0))

(define-pmacro (LRA-null)     (f-LRA-null 0))
(define-pmacro (TLBPR-null)   (f-TLBPR-null 0))

(define-pmacro (LI-on)       (f-LI-on  1))
(define-pmacro (LI-off)      (f-LI-off 0))

; Instruction definitions.
;
; Notes:
; - dni is short for "define-normal-instruction"
; - Macros are used to represent each insn format. These should be used as much
;   as possible unless an insn has exceptional behaviour
;

; Commonly used Macros
;
; Specific registers
;

; Integer condition code manipulation
;
(define-pmacro (set-z-and-n icc x)
  (if (eq x 0)
      (set icc (or (and icc #x7) #x4))
      (if (lt x 0)
	  (set icc (or (and icc #xb) #x8))
	  (set icc (and icc #x3))))
)

(define-pmacro (set-n icc val)
  (if (eq val 0)
      (set icc (and icc #x7))
      (set icc (or  icc #x8)))
)

(define-pmacro (set-z icc val)
  (if (eq val 0)
      (set icc (and icc #xb))
      (set icc (or  icc #x4)))
)

(define-pmacro (set-v icc val)
  (if (eq val 0)
      (set icc (and icc #xd))
      (set icc (or  icc #x2)))
)

(define-pmacro (set-c icc val)
  (if (eq val 0)
      (set icc (and icc #xe))
      (set icc (or  icc #x1)))
)

(define-pmacro (nbit icc)
  (trunc BI (srl (and icc #x8) 3))
)

(define-pmacro (zbit icc)
  (trunc BI (srl (and icc #x4) 2))
)

(define-pmacro (vbit icc)
  (trunc BI (srl (and icc #x2) 1))
)

(define-pmacro (cbit icc)
  (trunc BI (and icc #x1))
)

(define-pmacro (ebit icc)
  (trunc BI (srl (and icc #x8) 3))
)

(define-pmacro (lbit icc)
  (trunc BI (srl (and icc #x4) 2))
)

(define-pmacro (gbit icc)
  (trunc BI (srl (and icc #x2) 1))
)

(define-pmacro (ubit icc)
  (trunc BI (and icc #x1))
)

; FRV insns
;
;
; Format: INT, Logic, Shift r-r
;
(define-pmacro (int-logic-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$GRj,$GRk")
       (+ pack GRk op GRi (ICCi_1-null) ope GRj)
       (set GRk (operation GRi GRj))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-logic-r-r add  add   OP_00 OPE2_00 "add reg/reg")
(int-logic-r-r sub  sub   OP_00 OPE2_04 "sub reg/reg")
(int-logic-r-r and  and   OP_01 OPE2_00 "and reg/reg")
(int-logic-r-r or   or    OP_01 OPE2_02 "or  reg/reg")
(int-logic-r-r xor  xor   OP_01 OPE2_04 "xor reg/reg")

(dni not
     ("not")
     ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     ("not$pack $GRj,$GRk")
     (+ pack GRk OP_01 (rs-null) (ICCi_1-null) OPE2_06 GRj)
     (set GRk (inv GRj))
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)

(dni sdiv
     "signed division"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "sdiv$pack $GRi,$GRj,$GRk"
     (+ pack GRk OP_00 GRi (ICCi_1-null) OPE2_0E GRj)
     (sequence ()
	       (c-call VOID "@cpu@_signed_integer_divide"
		       GRi GRj (index-of GRk) 0)
	       (clobber GRk))
     ((fr400 (unit u-idiv)) (fr450 (unit u-idiv))
      (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(dni nsdiv
     "non excepting signed division"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
      (MACH simple,tomcat,fr500,fr550,frv))
     "nsdiv$pack $GRi,$GRj,$GRk"
     (+ pack GRk OP_01 GRi (ICCi_1-null) OPE2_0E GRj)
     (sequence ()
	       (c-call VOID "@cpu@_signed_integer_divide"
		       GRi GRj (index-of GRk) 1)
	       (clobber GRk))
     ((fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(dni udiv
     "unsigned division reg/reg"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "udiv$pack $GRi,$GRj,$GRk"
     (+ pack GRk OP_00 GRi (ICCi_1-null) OPE2_0F GRj)
     (sequence ()
	       (c-call VOID "@cpu@_unsigned_integer_divide"
		       GRi GRj (index-of GRk) 0)
	       (clobber GRk))
     ((fr400 (unit u-idiv)) (fr450 (unit u-idiv))
      (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(dni nudiv
     "non excepting unsigned division"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
      (MACH simple,tomcat,fr500,fr550,frv))
     "nudiv$pack $GRi,$GRj,$GRk"
     (+ pack GRk OP_01 GRi (ICCi_1-null) OPE2_0F GRj)
     (sequence ()
	       (c-call VOID "@cpu@_unsigned_integer_divide"
		       GRi GRj (index-of GRk) 1)
	       (clobber GRk))
     ((fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

; Multiplication
;
(define-pmacro (multiply-r-r name signop op ope comment)
  (dni name
       (comment)
       ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$GRj,$GRdoublek")
       (+ pack GRdoublek op GRi (ICCi_1-null) ope GRj) 
       (set GRdoublek (mul DI (signop DI GRi) (signop DI GRj)))
       ((fr400 (unit u-imul)) (fr450 (unit u-imul))
	(fr500 (unit u-imul)) (fr550 (unit u-imul)))
  )
)

(multiply-r-r smul ext  OP_00 OPE2_08 "signed   multiply reg/reg")
(multiply-r-r umul zext OP_00 OPE2_0A "unsigned multiply reg/reg")

; Multiplication with integer accumulator IACC
;

(define-pmacro (iacc-set value) 
  (set (reg h-iacc0 0) value))

(define-pmacro (iacc-add value) 
  (set (reg h-iacc0 0)
       (cond DI
	     ((andif (andif (gt value 0) (gt (reg h-iacc0 0) 0))
		     (lt (sub DI #x7fffffffffffffff value) (reg h-iacc0 0)))
	      ; Positive overflow
	      (const DI #x7fffffffffffffff))
	     ((andif (andif (lt value 0) (lt (reg h-iacc0 0) 0))
		     (gt (sub DI #x8000000000000000 value) (reg h-iacc0 0)))
	      ; Negative overflow
	      (const DI #x8000000000000000))
	     (else
	      (add DI (reg h-iacc0 0) value))))
)

(define-pmacro (iacc-sub value) 
  (set (reg h-iacc0 0)
       (cond DI
	     ((andif (andif (lt value 0) (gt (reg h-iacc0 0) 0))
		     (lt (add DI #x7fffffffffffffff value) (reg h-iacc0 0)))
	      ; Positive overflow
	      (const DI #x7fffffffffffffff))
	     ((andif (andif (gt value 0) (lt (reg h-iacc0 0) 0))
		     (gt (add DI #x8000000000000000 value) (reg h-iacc0 0)))
	      ; Negative overflow
	      (const DI #x8000000000000000))
	     (else
	      (sub DI (reg h-iacc0 0) value))))
)

(define-pmacro (iacc-multiply-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IACC) (MACH fr400,fr450)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1) AUDIO)
       (.str name "$pack $GRi,$GRj")
       (+ pack (rd-null) op GRi ope GRj)
       ((.sym iacc- operation) (mul DI (ext DI GRi) (ext DI GRj)))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer)))
  )
)

(iacc-multiply-r-r smu   set OP_46 OPE1_05 "Signed multiply     reg/reg/iacc")
(iacc-multiply-r-r smass add OP_46 OPE1_06 "Signed multiply/add reg/reg/iacc")
(iacc-multiply-r-r smsss sub OP_46 OPE1_07 "Signed multiply/sub reg/reg/iacc")

(define-pmacro (int-shift-r-r name op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$GRj,$GRk")
       (+ pack GRk op GRi (ICCi_1-null) ope GRj)
       (set GRk (name GRi (and GRj #x1f)))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-shift-r-r sll OP_01 OPE2_08 "shift left  logical reg/reg")
(int-shift-r-r srl OP_01 OPE2_0A "shift right logical reg/reg")
(int-shift-r-r sra OP_01 OPE2_0C "shift right arith   reg/reg")

(dni slass
     "shift left arith reg/reg with saturation"
     ((UNIT IALL) (MACH fr400,fr450)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) AUDIO)
     "slass$pack $GRi,$GRj,$GRk"
     (+ pack GRk OP_46 GRi OPE1_02 GRj)
     (set GRk (c-call SI "@cpu@_shift_left_arith_saturate" GRi GRj))
     ()
)

(dni scutss
     "Integer accumulator cut with saturation"
     ((UNIT I0) (MACH fr400,fr450)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) AUDIO)
     "scutss$pack $GRj,$GRk"
     (+ pack GRk OP_46 (rs-null) OPE1_04 GRj)
     (set GRk (c-call SI "@cpu@_iacc_cut" (reg h-iacc0 0) GRj))
     ()
)

(define-pmacro (scan-semantics arg1 arg2 targ)
  (sequence ((WI tmp1) (WI tmp2))
	    (set tmp1 arg1)
	    (set tmp2 (sra arg2 1))
	    (set targ (c-call WI "@cpu@_scan_result" (xor tmp1 tmp2))))
)

(dni scan
     "scan"
     ((UNIT SCAN) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "scan$pack $GRi,$GRj,$GRk"
     (+ pack GRk OP_0B GRi (ICCi_1-null) OPE2_00 GRj)
     (scan-semantics GRi GRj GRk)
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)

; Format: conditional INT, Logic, Shift r-r
;
(define-pmacro (conditional-int-logic name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
       (.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
       (+ pack GRk op GRi CCi cond ope GRj)
       (if (eq CCi (or cond 2))
	   (set GRk (operation GRi GRj)))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(conditional-int-logic cadd  add  OP_58 OPE4_0 "conditional add")
(conditional-int-logic csub  sub  OP_58 OPE4_1 "conditional sub")
(conditional-int-logic cand  and  OP_5A OPE4_0 "conditional and")
(conditional-int-logic cor   or   OP_5A OPE4_1 "conditional or")
(conditional-int-logic cxor  xor  OP_5A OPE4_2 "conditional xor")

(dni cnot
     "conditional not"
     ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
     "cnot$pack $GRj,$GRk,$CCi,$cond"
     (+ pack GRk OP_5A (rs-null) CCi cond OPE4_3 GRj)
     (if (eq CCi (or cond 2))
	 (set GRk (inv GRj)))
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)

(dni csmul
     "conditional signed multiply"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
     "csmul$pack $GRi,$GRj,$GRdoublek,$CCi,$cond"
     (+ pack GRdoublek OP_58 GRi CCi cond OPE4_2 GRj)
     (if (eq CCi (or cond 2))
	 (set GRdoublek (mul DI (ext DI GRi) (ext DI GRj))))
     ((fr400 (unit u-imul)) (fr450 (unit u-imul))
      (fr500 (unit u-imul)) (fr550 (unit u-imul)))
)

(dni csdiv
     "conditional signed division"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
     "csdiv$pack $GRi,$GRj,$GRk,$CCi,$cond"
     (+ pack GRk OP_58 GRi CCi cond OPE4_3 GRj)
     (if (eq CCi (or cond 2))
	 (sequence ()
		   (c-call VOID "@cpu@_signed_integer_divide"
			   GRi GRj (index-of GRk) 0)
		   (clobber GRk)))
     ((fr400 (unit u-idiv)) (fr450 (unit u-idiv))
      (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(dni cudiv
     "conditional unsigned division"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
     "cudiv$pack $GRi,$GRj,$GRk,$CCi,$cond"
     (+ pack GRk OP_59 GRi CCi cond OPE4_3 GRj)
     (if (eq CCi (or cond 2))
	 (sequence ()
		   (c-call VOID "@cpu@_unsigned_integer_divide"
			   GRi GRj (index-of GRk) 0)
		   (clobber GRk)))
     ((fr400 (unit u-idiv)) (fr450 (unit u-idiv))
      (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(define-pmacro (conditional-shift name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
       (.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
       (+ pack GRk op GRi CCi cond ope GRj)
       (if (eq CCi (or cond 2))
	   (set GRk (operation GRi (and GRj #x1f))))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(conditional-shift csll sll OP_5C OPE4_0 "conditional shift left  logical")
(conditional-shift csrl srl OP_5C OPE4_1 "conditional shift right logical")
(conditional-shift csra sra OP_5C OPE4_2 "conditional shift right arith")

(dni cscan
     "conditional scan"
     ((UNIT SCAN) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
     "cscan$pack $GRi,$GRj,$GRk,$CCi,$cond"
     (+ pack GRk OP_65 GRi CCi cond OPE4_3 GRj)
     (if (eq CCi (or cond 2))
	 (scan-semantics GRi GRj GRk))
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)

; Format: INT, Logic, Shift, cc r-r
;
(define-pmacro (int-arith-cc-semantics operation icc)
  (sequence ((BI tmp) (QI cc) (SI result))
	    (set cc icc)
	    (set tmp ((.sym operation -oflag) GRi GRj (const 0)))
	    (set-v cc tmp)
	    (set tmp ((.sym operation -cflag) GRi GRj (const 0)))
	    (set-c cc tmp)
	    (set result (operation GRi GRj))
	    (set-z-and-n cc result)
	    (set GRk result)
	    (set icc cc))
)

(define-pmacro (int-arith-cc-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 ope GRj)
       (int-arith-cc-semantics operation ICCi_1)
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-arith-cc-r-r addcc add OP_00 OPE2_01 "add reg/reg, set icc")
(int-arith-cc-r-r subcc sub OP_00 OPE2_05 "sub reg/reg, set icc")

(define-pmacro (int-logic-cc-semantics op icc)
  (sequence ((SI tmp))
	    (set tmp (op GRi GRj))
	    (set GRk tmp)
	    (set-z-and-n icc tmp))
)

(define-pmacro (int-logic-cc-r-r name op ope comment)
  (dni (.sym name cc)
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str (.sym name cc) "$pack $GRi,$GRj,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 ope GRj)
       (int-logic-cc-semantics name ICCi_1)
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-logic-cc-r-r and OP_01 OPE2_01 "and reg/reg, set icc")
(int-logic-cc-r-r or  OP_01 OPE2_03 "or  reg/reg, set icc")
(int-logic-cc-r-r xor OP_01 OPE2_05 "xor reg/reg, set icc")

(define-pmacro (int-shift-cc-semantics op l-r icc)
  (sequence ((WI shift) (SI tmp) (QI cc))
	    (set shift (and GRj #x1f))
	    (set cc (c-call QI (.str "@cpu@_set_icc_for_shift_" l-r)
			    GRi shift icc))
	    (set tmp (op GRi shift))
	    (set GRk tmp)
	    (set-z-and-n cc tmp)
	    (set icc cc))
)

(define-pmacro (int-shift-cc-r-r name l-r op ope comment)
  (dni (.sym name cc)
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str (.sym name cc) "$pack $GRi,$GRj,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 ope GRj)
       (int-shift-cc-semantics name l-r ICCi_1)
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-shift-cc-r-r sll left  OP_01 OPE2_09 "shift left  logical reg/reg,set icc")
(int-shift-cc-r-r srl right OP_01 OPE2_0B "shift right logical reg/reg,set icc")
(int-shift-cc-r-r sra right OP_01 OPE2_0D "shift right arith   reg/reg,set icc")

(define-pmacro (multiply-cc-semantics signop arg1 arg2 targ icc)
  (sequence ((DI tmp) (QI cc))
	    (set cc icc)
	    (set tmp (mul DI (signop DI arg1) (signop DI arg2)))
	    (set-n cc (srl DI tmp 63))
	    (set-z cc (eq tmp 0))
	    (set targ tmp)
	    (set icc cc))
)

(define-pmacro (multiply-cc-r-r name signop op ope comment)
  (dni name
       (comment)
       ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$GRj,$GRdoublek,$ICCi_1")
       (+ pack GRdoublek op GRi ICCi_1 ope GRj)
       (multiply-cc-semantics signop GRi GRj GRdoublek ICCi_1)
       ((fr400 (unit u-imul)) (fr450 (unit u-imul))
	(fr500 (unit u-imul)) (fr550 (unit u-imul)))
  )
)

(multiply-cc-r-r smulcc ext  OP_00 OPE2_09 "signed   multiply reg/reg")
(multiply-cc-r-r umulcc zext OP_00 OPE2_0B "unsigned multiply reg/reg")


; Format: conditional INT, Logic, Shift, cc r-r
;
(define-pmacro (conditional-int-arith-cc name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
       (.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
       (+ pack GRk op GRi CCi cond ope GRj)
       (if (eq CCi (or cond 2))
	   (int-arith-cc-semantics operation
				   (reg h-iccr (and (index-of CCi) 3))))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(conditional-int-arith-cc caddcc add OP_59 OPE4_0 "add, set icc")
(conditional-int-arith-cc csubcc sub OP_59 OPE4_1 "sub, set icc")

(dni csmulcc
     "conditional signed multiply and set condition code"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
     "csmulcc$pack $GRi,$GRj,$GRdoublek,$CCi,$cond"
     (+ pack GRdoublek OP_59 GRi CCi cond OPE4_2 GRj)
     (if (eq CCi (or cond 2))
	 (multiply-cc-semantics ext GRi GRj GRdoublek
				(reg h-iccr (and (index-of CCi) 3))))
     ((fr400 (unit u-imul)) (fr450 (unit u-imul))
      (fr500 (unit u-imul)) (fr550 (unit u-imul)))
)

(define-pmacro (conditional-int-logic-cc name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
       (.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
       (+ pack GRk op GRi CCi cond ope GRj)
       (if (eq CCi (or cond 2))
	   (int-logic-cc-semantics operation
				   (reg h-iccr (and (index-of CCi) 3))))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(conditional-int-logic-cc candcc and OP_5B OPE4_0 "conditional and, set icc")
(conditional-int-logic-cc corcc  or  OP_5B OPE4_1 "conditional or , set icc")
(conditional-int-logic-cc cxorcc xor OP_5B OPE4_2 "conditional xor, set icc")

(define-pmacro (conditional-int-shift-cc name l-r op ope comment)
  (dni (.sym c name cc)
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
       (.str (.sym c name cc) "$pack $GRi,$GRj,$GRk,$CCi,$cond")
       (+ pack GRk op GRi CCi cond ope GRj)
       (if (eq CCi (or cond 2))
	   (int-shift-cc-semantics name l-r
				   (reg h-iccr (and (index-of CCi) 3))))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(conditional-int-shift-cc sll left  OP_5D OPE4_0 "shift left  logical, set icc")
(conditional-int-shift-cc srl right OP_5D OPE4_1 "shift right logical, set icc")
(conditional-int-shift-cc sra right OP_5D OPE4_2 "shift right arith  , set icc")

; Add and subtract with carry
;
(define-pmacro (int-arith-x-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 ope GRj)
       (set GRk ((.sym operation c) GRi GRj (cbit ICCi_1)))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-arith-x-r-r addx add OP_00 OPE2_02 "Add reg/reg, with carry")
(int-arith-x-r-r subx sub OP_00 OPE2_06 "Sub reg/reg, with carry")

(define-pmacro (int-arith-x-cc-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 ope GRj)
       (sequence ((WI tmp) (QI cc))
		 (set cc ICCi_1)
		 (set tmp ((.sym operation c) GRi GRj (cbit cc)))
		 (set-v cc ((.sym operation -oflag) GRi GRj (cbit cc)))
		 (set-c cc ((.sym operation -cflag) GRi GRj (cbit cc)))
		 (set-z-and-n cc tmp)
		 (set GRk tmp)
		 (set ICCi_1 cc))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-arith-x-cc-r-r addxcc add OP_00 OPE2_03 "Add reg/reg, use/set carry")
(int-arith-x-cc-r-r subxcc sub OP_00 OPE2_07 "Sub reg/reg, use/set carry")
; Add and subtract with saturation
;
(define-pmacro (int-arith-ss-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT IALL) (MACH fr400,fr450)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1) AUDIO)
       (.str name "$pack $GRi,$GRj,$GRk")
       (+ pack GRk op GRi ope GRj)
       (sequence ()
		 (set GRk (operation GRi GRj))
		 (if ((.sym operation -oflag) GRi GRj (const 0))
					; Overflow, saturate.
					; Sign of result will be
					; same as sign of first operand.
		     (set GRk
			  (cond SI
				((gt GRi 0) (const #x7fffffff))
				((lt GRi 0) (const #x80000000))
				(else (const 0)))))
       )
       ((fr400 (unit u-integer)) (fr450 (unit u-integer)))
  )
)

(int-arith-ss-r-r addss add OP_46 OPE1_00 "add reg/reg, with saturation")
(int-arith-ss-r-r subss sub OP_46 OPE1_01 "sub reg/reg, with saturation")

; Format: INT, Logic, Shift r-simm
;
(define-pmacro (int-logic-r-simm name operation op comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$s12,$GRk")
       (+ pack GRk op GRi s12)
       (set GRk (operation GRi s12))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-logic-r-simm addi  add   OP_10 "add reg/immed")
(int-logic-r-simm subi  sub   OP_14 "sub reg/immed")
(int-logic-r-simm andi  and   OP_20 "and reg/immed")
(int-logic-r-simm ori   or    OP_22 "or  reg/immed")
(int-logic-r-simm xori  xor   OP_24 "xor reg/immed")

(dni sdivi
     "signed division reg/immed"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "sdivi$pack $GRi,$s12,$GRk"
     (+ pack GRk OP_1E GRi s12)
     (sequence ()
	       (c-call VOID "@cpu@_signed_integer_divide"
		       GRi s12 (index-of GRk) 0)
	       (clobber GRk))
     ((fr400 (unit u-idiv)) (fr450 (unit u-idiv))
      (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(dni nsdivi
     "non excepting signed division reg/immed"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
      (MACH simple,tomcat,fr500,fr550,frv))
     "nsdivi$pack $GRi,$s12,$GRk"
     (+ pack GRk OP_2E GRi s12)
     (sequence ()
	       (c-call VOID "@cpu@_signed_integer_divide"
		       GRi s12 (index-of GRk) 1)
	       (clobber GRk))
     ((fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(dni udivi
     "unsigned division reg/immed"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "udivi$pack $GRi,$s12,$GRk"
     (+ pack GRk OP_1F GRi s12)
     (sequence ()
	       (c-call VOID "@cpu@_unsigned_integer_divide"
		       GRi s12 (index-of GRk) 0)
	       (clobber GRk))
     ((fr400 (unit u-idiv)) (fr450 (unit u-idiv))
      (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(dni nudivi
     "non excepting unsigned division reg/immed"
     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
      (MACH simple,tomcat,fr500,fr550,frv))
     "nudivi$pack $GRi,$s12,$GRk"
     (+ pack GRk OP_2F GRi s12)
     (sequence ()
	       (c-call VOID "@cpu@_unsigned_integer_divide"
		       GRi s12 (index-of GRk) 1)
	       (clobber GRk))
     ((fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)

(define-pmacro (multiply-r-simm name signop op comment)
  (dni name
       (comment)
       ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$s12,$GRdoublek")
       (+ pack GRdoublek op GRi s12)
       (set GRdoublek (mul DI (signop DI GRi) (signop DI s12)))
       ((fr400 (unit u-imul)) (fr450 (unit u-imul))
	(fr500 (unit u-imul)) (fr550 (unit u-imul)))
  )
)

(multiply-r-simm smuli ext  OP_18 "signed   multiply reg/immed")
(multiply-r-simm umuli zext OP_1A "unsigned multiply reg/immed")

(define-pmacro (int-shift-r-simm name op comment)
  (dni (.sym name i)
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str (.sym name i) "$pack $GRi,$s12,$GRk")
       (+ pack GRk op GRi s12)
       (set GRk (name GRi (and s12 #x1f)))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-shift-r-simm sll OP_28 "shift left  logical reg/immed")
(int-shift-r-simm srl OP_2A "shift right logical reg/immed")
(int-shift-r-simm sra OP_2C "shift right arith   reg/immed")

(dni scani
     "scan immediate"
     ((UNIT SCAN) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "scani$pack $GRi,$s12,$GRk"
     (+ pack GRk OP_47 GRi s12)
     (scan-semantics GRi s12 GRk)
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)

; Format: INT, Logic, Shift cc r-simm
;
(define-pmacro (int-arith-cc-r-simm name operation op comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 s10)
       (sequence ((BI tmp) (QI cc) (SI result))
		 (set cc ICCi_1)
		 (set tmp ((.sym operation -oflag) GRi s10 (const 0)))
		 (set-v cc tmp)
		 (set tmp ((.sym operation -cflag) GRi s10 (const 0)))
		 (set-c cc tmp)
		 (set result (operation GRi s10))
		 (set-z-and-n cc result)
		 (set GRk result)
		 (set ICCi_1 cc))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-arith-cc-r-simm addicc add OP_11 "add reg/immed, set icc")
(int-arith-cc-r-simm subicc sub OP_15 "sub reg/immed, set icc")

(define-pmacro (int-logic-cc-r-simm name op comment)
  (dni (.sym name icc)
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 s10)
       (sequence ((SI tmp))
		 (set tmp (name GRi s10))
		 (set GRk tmp)
		 (set-z-and-n ICCi_1 tmp))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-logic-cc-r-simm and  OP_21 "and reg/immed, set icc")
(int-logic-cc-r-simm or   OP_23 "or  reg/immed, set icc")
(int-logic-cc-r-simm xor  OP_25 "xor reg/immed, set icc")

(define-pmacro (multiply-cc-r-simm name signop op comment)
  (dni name
       (comment)
       ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$s10,$GRdoublek,$ICCi_1")
       (+ pack GRdoublek op GRi ICCi_1 s10)
       (multiply-cc-semantics signop GRi s10 GRdoublek ICCi_1)
       ((fr400 (unit u-imul)) (fr450 (unit u-imul))
	(fr500 (unit u-imul)) (fr550 (unit u-imul)))
  )
)

(multiply-cc-r-simm smulicc ext  OP_19 "signed   multiply reg/immed")
(multiply-cc-r-simm umulicc zext OP_1B "unsigned multiply reg/immed")

(define-pmacro (int-shift-cc-r-simm name l-r op comment)
  (dni (.sym name icc)
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 s10)
       (sequence ((WI shift) (SI tmp) (QI cc))
		 (set shift (and s10 #x1f))
		 (set cc (c-call QI (.str "@cpu@_set_icc_for_shift_" l-r)
				 GRi shift ICCi_1))
		 (set tmp (name GRi shift))
		 (set GRk tmp)
		 (set-z-and-n cc tmp)
		 (set ICCi_1 cc))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-shift-cc-r-simm sll left  OP_29 "shift left  logical reg/immed, set icc")
(int-shift-cc-r-simm srl right OP_2B "shift right logical reg/immed, set icc")
(int-shift-cc-r-simm sra right OP_2D "shift right arith   reg/immed, set icc")

(define-pmacro (int-arith-x-r-simm name operation op comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 s10)
       (set GRk ((.sym operation c) GRi s10 (cbit ICCi_1)))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-arith-x-r-simm addxi add OP_12 "Add reg/immed, with carry")
(int-arith-x-r-simm subxi sub OP_16 "Sub reg/immed, with carry")

(define-pmacro (int-arith-x-cc-r-simm name operation op comment)
  (dni name
       (comment)
       ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
	(FR400-MAJOR I-1) (FR450-MAJOR I-1))
       (.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
       (+ pack GRk op GRi ICCi_1 s10)
       (sequence ((WI tmp) (QI cc))
		 (set cc ICCi_1)
		 (set tmp ((.sym operation c) GRi s10 (cbit cc)))
		 (set-v cc ((.sym operation -oflag) GRi s10 (cbit cc)))
		 (set-c cc ((.sym operation -cflag) GRi s10 (cbit cc)))
		 (set-z-and-n cc tmp)
		 (set GRk tmp)
		 (set ICCi_1 cc))
       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
	(fr500 (unit u-integer)) (fr550 (unit u-integer)))
  )
)

(int-arith-x-cc-r-simm addxicc add OP_13 "Add reg/immed, with carry")
(int-arith-x-cc-r-simm subxicc sub OP_17 "Sub reg/immed, with carry")

; Byte compare insns

(dni cmpb
     "Compare bytes"
     ((UNIT IALL) (MACH fr400,fr450,fr550) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "cmpb$pack $GRi,$GRj,$ICCi_1"
     (+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0C GRj)
     (sequence ((QI cc))
	       (set-n cc (eq (and GRi #xff000000) (and GRj #xff000000)))
	       (set-z cc (eq (and GRi #x00ff0000) (and GRj #x00ff0000)))
	       (set-v cc (eq (and GRi #x0000ff00) (and GRj #x0000ff00)))
	       (set-c cc (eq (and GRi #x000000ff) (and GRj #x000000ff)))
	       (set ICCi_1 cc))
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr550 (unit u-integer)))
)

(dni cmpba
     "OR of Compare bytes"
     ((UNIT IALL) (MACH fr400,fr450,fr550) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "cmpba$pack $GRi,$GRj,$ICCi_1"
     (+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0D GRj)
     (sequence ((QI cc))
	       (set cc 0)
	       (set-c cc
		      (orif (eq (and GRi #xff000000) (and GRj #xff000000))
			    (orif (eq (and GRi #x00ff0000) (and GRj #x00ff0000))
				  (orif (eq (and GRi #x0000ff00)
					    (and GRj #x0000ff00))
					 (eq (and GRi #x000000ff)
					    (and GRj #x000000ff))))))
	       (set ICCi_1 cc))
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr550 (unit u-integer)))
)

; Format: Load immediate
;
(dni setlo
     "set low order bits"
     ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "setlo$pack $ulo16,$GRklo"
     (+ pack GRk OP_3D (misc-null-4) u16)
     (set GRklo u16)
     ((fr400 (unit u-set-hilo)) (fr450 (unit u-set-hilo))
      (fr500 (unit u-set-hilo)) (fr550 (unit u-set-hilo)))
)

(dni sethi
     "set high order bits"
     ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "sethi$pack $uhi16,$GRkhi"
     (+ pack GRkhi OP_3E (misc-null-4) u16)
     (set GRkhi u16)
     ((fr400 (unit u-set-hilo)) (fr450 (unit u-set-hilo))
      (fr500 (unit u-set-hilo)) (fr550 (unit u-set-hilo)))
)

(dni setlos
     "set low order bits and extend sign"
     ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1)
      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "setlos$pack $slo16,$GRk"
     (+ pack GRk OP_3F (misc-null-4) s16)
     (set GRk s16)
     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
      (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)

(define-pmacro (load-gr-r name mode op ope comment ann)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2))
       (.str name "$pack " ann "($GRi,$GRj),$GRk")
       (+ pack GRk op GRi ope GRj)
       (set GRk (c-call mode (.str "@cpu@_read_mem_" mode) pc (add GRi GRj)))
       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	(fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
  )
)

(dann ldann "ld annotation" SI "ld_annotation" "at")

(load-gr-r ldsb   QI OP_02 OPE1_00 "Load   signed byte" "@")
(load-gr-r ldub  UQI OP_02 OPE1_01 "Load unsigned byte" "@")
(load-gr-r ldsh   HI OP_02 OPE1_02 "Load   signed half" "@")
(load-gr-r lduh  UHI OP_02 OPE1_03 "Load unsigned half" "@")
(load-gr-r ld     SI OP_02 OPE1_04 "Load          word" "$ldann")

(define-pmacro (load-fr-r name mode op ope comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) FR-ACCESS)
       (.str name "$pack @($GRi,$GRj),$FRintk")
       (+ pack FRintk op GRi ope GRj)
       (set FRintk (c-call mode (.str "@cpu@_read_mem_" mode) pc (add GRi GRj)))
       ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
	(fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
  )
)

(load-fr-r ldbf UQI OP_02 OPE1_08 "Load byte   float")
(load-fr-r ldhf UHI OP_02 OPE1_09 "Load half   float")
(load-fr-r ldf   SI OP_02 OPE1_0A "Load word   float")

(define-pmacro (load-cpr-r name mode op ope reg attr comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) attr)
       (.str name "$pack @($GRi,$GRj),$" reg "k")
       (+ pack (.sym reg k) op GRi ope GRj)
       (set (.sym reg k)
	    (c-call mode (.str "@cpu@_read_mem_" mode) pc (add GRi GRj)))
       ()
  )
)

(load-cpr-r ldc SI OP_02 OPE1_0D CPR (MACH frv) "Load coprocessor word")

; These correspond to enumerators in frv-sim.h
(define-pmacro (ne-UQI-size) 0)
(define-pmacro (ne-QI-size)  1)
(define-pmacro (ne-UHI-size) 2)
(define-pmacro (ne-HI-size)  3)
(define-pmacro (ne-SI-size)  4)
(define-pmacro (ne-DI-size)  5)
(define-pmacro (ne-XI-size)  6)

(define-pmacro (ne-load-semantics base dispix targ idisp size is_float action)
  (sequence ((BI do_op))
	    (set do_op
		 (c-call BI "@cpu@_check_non_excepting_load"
			  (index-of base) dispix (index-of targ)
			  idisp size is_float))
	    (if do_op action))
)

(define-pmacro (ne-load-gr-r name mode op ope size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$GRj),$GRk")
       (+ pack GRk op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) GRk 0 size 0
			  (set GRk
			       (c-call mode (.str "@cpu@_read_mem_" mode)
				       pc (add GRi GRj))))
       ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
  )
)

(ne-load-gr-r nldsb  QI OP_02 OPE1_20 (ne-QI-size)  "Load   signed byte")
(ne-load-gr-r nldub UQI OP_02 OPE1_21 (ne-UQI-size) "Load unsigned byte")
(ne-load-gr-r nldsh  HI OP_02 OPE1_22 (ne-HI-size)  "Load   signed half")
(ne-load-gr-r nlduh UHI OP_02 OPE1_23 (ne-UHI-size) "Load unsigned half")
(ne-load-gr-r nld    SI OP_02 OPE1_24 (ne-SI-size)  "Load          word")

(define-pmacro (ne-load-fr-r name mode op ope size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$GRj),$FRintk")
       (+ pack FRintk op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) FRintk 0 size 1
			  (set FRintk
			       (c-call mode (.str "@cpu@_read_mem_" mode)
				       pc (add GRi GRj))))
       ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
  )
)

(ne-load-fr-r nldbf UQI OP_02 OPE1_28 (ne-UQI-size) "Load byte float")
(ne-load-fr-r nldhf UHI OP_02 OPE1_29 (ne-UHI-size) "Load half float")
(ne-load-fr-r nldf   SI OP_02 OPE1_2A (ne-SI-size)  "Load word float")

; Semantics for a load-double insn
;
(define-pmacro (load-double-semantics not_gr mode regtype address arg)
  (if (orif not_gr (ne (index-of (.sym regtype doublek)) 0))
      (sequence ()
		(set address (add GRi arg))
		(set (.sym regtype doublek)
		     (c-call mode (.str "@cpu@_read_mem_" mode) pc address))))
)

(define-pmacro (load-double-r-r
		name not_gr mode op ope regtype attr profile comment ann)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) attr)
       (.str name "$pack " ann "($GRi,$GRj),$" regtype "doublek")
       (+ pack (.sym regtype doublek) op GRi ope GRj)
       (sequence ((WI address))
		 (load-double-semantics not_gr mode regtype address GRj))
       profile
  )
)

(dann lddann "ldd annotation" SI "ldd_annotation" "at")

(load-double-r-r ldd  0 DI OP_02 OPE1_05 GR  NA
		 ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load)) 
		  (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
		 "Load double word" "$lddann")
(load-double-r-r lddf 1 DF OP_02 OPE1_0B FR  FR-ACCESS
		 ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
		  (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
		 "Load double float" "@")
(load-double-r-r lddc 1 DI OP_02 OPE1_0E CPR (MACH frv) ()
		 "Load coprocessor double" "@")

(define-pmacro (ne-load-double-r-r
		name not_gr mode op ope regtype size is_float attr profile
		comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING attr
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$GRj),$" regtype "doublek")
       (+ pack (.sym regtype doublek) op GRi ope GRj)
       (sequence ((WI address))
		 (ne-load-semantics GRi (index-of GRj) (.sym regtype doublek)
				    0 size is_float
				    (load-double-semantics not_gr mode
							   regtype
							   address GRj)))
       profile
  )
)

(ne-load-double-r-r nldd  0 DI OP_02 OPE1_25 GR (ne-DI-size) 0 NA
		    ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load double   word")
(ne-load-double-r-r nlddf 1 DF OP_02 OPE1_2B FR (ne-DI-size) 1 FR-ACCESS
		    ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load double float")

; Semantics for a load-quad insn
;
(define-pmacro (load-quad-semantics regtype address arg)
  (sequence ()
	    (set address (add GRi arg))
	    (c-call VOID (.str "@cpu@_load_quad_" regtype)
		    pc address (index-of (.sym regtype k))))
)

(define-pmacro (load-quad-r-r name op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) attr)
       (.str name "$pack @($GRi,$GRj),$" regtype "k")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (sequence ((WI address))
		 (load-quad-semantics regtype address GRj))
       ; TODO regtype-k not referenced for profiling
       profile
  )
)

(load-quad-r-r ldq  OP_02 OPE1_06 GR    NA        ((fr500 (unit u-gr-load)))
	       "Load quad word")
(load-quad-r-r ldqf OP_02 OPE1_0C FRint FR-ACCESS ((fr500 (unit u-fr-load)))
	       "Load quad float")
(load-quad-r-r ldqc OP_02 OPE1_0F CPR   NA        () "Load coprocessor quad")

(define-pmacro (ne-load-quad-r-r
		name op ope regtype size is_float attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) NON-EXCEPTING attr)
       (.str name "$pack @($GRi,$GRj),$" regtype "k")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (sequence ((WI address))
		 (ne-load-semantics GRi (index-of GRj) (.sym regtype k)
				    0 size is_float
				    (load-quad-semantics regtype address GRj)))
       ; TODO regtype-k not referenced for profiling
       profile
  )
)

(ne-load-quad-r-r nldq  OP_02 OPE1_26 GR    (ne-XI-size) 0 NA
		  ((fr500 (unit u-gr-load))) "Load quad word")
(ne-load-quad-r-r nldqf OP_02 OPE1_2C FRint (ne-XI-size) 1 FR-ACCESS
		  ((fr500 (unit u-fr-load))) "Load quad float")

(define-pmacro (load-gr-u-semantics mode)
  (sequence ((UWI address))
	    (set address (add GRi GRj))
	    (set GRk (c-call mode (.str "@cpu@_read_mem_" mode) pc address))
	    (if (ne (index-of GRi) (index-of GRk))
		(sequence ()
			  (set GRi address)
			  (c-call VOID "@cpu@_force_update"))))
)

(define-pmacro (load-gr-u name mode op ope comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2))
       (.str name "$pack @($GRi,$GRj),$GRk")
       (+ pack GRk op GRi ope GRj)
       (load-gr-u-semantics mode)
       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	(fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
  )
)

(load-gr-u ldsbu   QI OP_02 OPE1_10 "Load   signed byte, update index")
(load-gr-u ldubu  UQI OP_02 OPE1_11 "Load unsigned byte, update index")
(load-gr-u ldshu   HI OP_02 OPE1_12 "Load   signed half, update index")
(load-gr-u lduhu  UHI OP_02 OPE1_13 "Load unsigned half, update index")
(load-gr-u ldu     SI OP_02 OPE1_14 "Load          word, update index")

(define-pmacro (ne-load-gr-u name mode op ope size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$GRj),$GRk")
       (+ pack GRk op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) GRk 0 size 0 (load-gr-u-semantics mode))
       ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
  )
)

(ne-load-gr-u nldsbu  QI OP_02 OPE1_30 (ne-QI-size)  "Load   signed byte, update index")
(ne-load-gr-u nldubu UQI OP_02 OPE1_31 (ne-UQI-size) "Load unsigned byte, update index")
(ne-load-gr-u nldshu  HI OP_02 OPE1_32 (ne-HI-size)  "Load   signed half, update index")
(ne-load-gr-u nlduhu UHI OP_02 OPE1_33 (ne-UHI-size) "Load unsigned half, update index")
(ne-load-gr-u nldu    SI OP_02 OPE1_34 (ne-SI-size)  "Load          word, update index")

(define-pmacro (load-non-gr-u-semantics mode regtype)
  (sequence ((UWI address))
	    (set address (add GRi GRj))
	    (set (.sym regtype k)
		 (c-call mode (.str "@cpu@_read_mem_" mode) pc address))
	    (set GRi address)
	    (c-call VOID "@cpu@_force_update"))
)

(define-pmacro (load-fr-u name mode op ope comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) FR-ACCESS)
       (.str name "$pack @($GRi,$GRj),$FRintk")
       (+ pack FRintk op GRi ope GRj)
       (load-non-gr-u-semantics mode FRint)
       ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
	(fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
  )
)

(load-fr-u ldbfu  UQI OP_02 OPE1_18 "Load byte float, update index")
(load-fr-u ldhfu  UHI OP_02 OPE1_19 "Load half float, update index")
(load-fr-u ldfu    SI OP_02 OPE1_1A "Load word float, update index")

(define-pmacro (load-cpr-u name mode op ope comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv))
       (.str name "$pack @($GRi,$GRj),$CPRk")
       (+ pack CPRk op GRi ope GRj)
       (load-non-gr-u-semantics mode CPR)
       ()
  )
)

(load-cpr-u ldcu SI OP_02 OPE1_1D "Load coprocessor word float,update index")

(define-pmacro (ne-load-non-gr-u name mode op ope regtype size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$GRj),$" regtype "k")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) (.sym regtype k) 0 size 1
			  (load-non-gr-u-semantics mode regtype))
       ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
  )
)

(ne-load-non-gr-u nldbfu UQI OP_02 OPE1_38 FRint (ne-UQI-size) "Load byte float, update index")
(ne-load-non-gr-u nldhfu UHI OP_02 OPE1_39 FRint (ne-UHI-size) "Load half float, update index")
(ne-load-non-gr-u nldfu   SI OP_02 OPE1_3A FRint (ne-SI-size)  "Load word float, update index")

(define-pmacro (load-double-gr-u-semantics)
  (sequence ((WI address))
	    (load-double-semantics 0 DI GR address GRj)
	    (if (ne (index-of GRi) (index-of GRdoublek))
		(sequence ()
			  (set GRi address)
			  (c-call VOID "@cpu@_force_update"))))
)

(define-pmacro (load-double-gr-u name op ope comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2))
       (.str name "$pack @($GRi,$GRj),$GRdoublek")
       (+ pack GRdoublek op GRi ope GRj)
       (load-double-gr-u-semantics)
       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	(fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
  )
)

(load-double-gr-u lddu  OP_02 OPE1_15 "Load double word, update index")

(define-pmacro (ne-load-double-gr-u name op ope size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$GRj),$GRdoublek")
       (+ pack GRdoublek op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) GRdoublek 0 size 0
			  (load-double-gr-u-semantics))
       ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))

  )
)

(ne-load-double-gr-u nlddu OP_02 OPE1_35 (ne-DI-size) "Load double word, update index")

(define-pmacro (load-double-non-gr-u-semantics mode regtype)
  (sequence ((WI address))
	    (load-double-semantics 1 mode regtype address GRj)
	    (set GRi address)
	    (c-call VOID "@cpu@_force_update"))
)

(define-pmacro (load-double-non-gr-u
		name mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) attr)
       (.str name "$pack @($GRi,$GRj),$" regtype "doublek")
       (+ pack (.sym regtype doublek) op GRi ope GRj)
       (load-double-non-gr-u-semantics mode regtype)
       profile
  )
)

(load-double-non-gr-u lddfu DF OP_02 OPE1_1B FR  FR-ACCESS
		      ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
		       (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
		      "Load double float, update index")
(load-double-non-gr-u lddcu DI OP_02 OPE1_1E CPR (MACH frv)
		      () "Load coprocessor double float, update index")

(define-pmacro (ne-load-double-non-gr-u name mode op ope regtype size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$GRj),$" regtype "doublek")
       (+ pack (.sym regtype doublek) op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) (.sym regtype doublek) 0 size 1
			  (load-double-non-gr-u-semantics mode regtype))
       ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
  )
)

(ne-load-double-non-gr-u nlddfu DF OP_02 OPE1_3B FR (ne-DI-size) "Load double float, update index")

(define-pmacro (load-quad-gr-u-semantics)
  (sequence ((WI address))
	    (load-quad-semantics GR address GRj)
	    (if (ne (index-of GRi) (index-of GRk))
		(sequence ()
			  (set GRi address)
			  (c-call VOID "@cpu@_force_update"))))
)

(define-pmacro (load-quad-gr-u name op ope comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv))
       (.str name "$pack @($GRi,$GRj),$GRk")
       (+ pack GRk op GRi ope GRj)
       (load-quad-gr-u-semantics)
       ; TODO - GRk not referenced here for profiling
       ((fr500 (unit u-gr-load)))
  )
)

(load-quad-gr-u ldqu  OP_02 OPE1_16 "Load quad word, update index")

(define-pmacro (ne-load-quad-gr-u name op ope size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) NON-EXCEPTING)
       (.str name "$pack @($GRi,$GRj),$GRk")
       (+ pack GRk op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) GRk 0 size 0
			  (load-quad-gr-u-semantics))
       ; TODO - GRk not referenced here for profiling
       ((fr500 (unit u-gr-load)))
  )
)

(ne-load-quad-gr-u nldqu OP_02 OPE1_36 (ne-XI-size) "Load quad word, update index")

(define-pmacro (load-quad-non-gr-u-semantics regtype)
  (sequence ((WI address))
	    (load-quad-semantics regtype address GRj)
	    (set GRi address)
	    (c-call VOID "@cpu@_force_update"))
)

(define-pmacro (load-quad-non-gr-u name op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) attr)
       (.str name "$pack @($GRi,$GRj),$" regtype "k")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (load-quad-non-gr-u-semantics regtype)
       profile
  )
)

(load-quad-non-gr-u ldqfu OP_02 OPE1_1C FRint FR-ACCESS
		    ((fr500 (unit u-fr-load))) "Load quad float, update index")
(load-quad-non-gr-u ldqcu OP_02 OPE1_1F CPR   NA
		    () "Load coprocessor quad word, update index")

(define-pmacro (ne-load-quad-non-gr-u name op ope regtype size comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) NON-EXCEPTING FR-ACCESS)
       (.str name "$pack @($GRi,$GRj),$" regtype "k")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (ne-load-semantics GRi (index-of GRj) (.sym regtype k) 0 size 1
			  (load-quad-non-gr-u-semantics regtype))
       ((fr500 (unit u-fr-load)))
  )
)

(ne-load-quad-non-gr-u nldqfu OP_02 OPE1_3C FRint (ne-XI-size) "Load quad float,update index")

(define-pmacro (load-r-simm name mode op regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) attr)
       (.str name "$pack @($GRi,$d12),$" regtype "k")
       (+ pack (.sym regtype k) op GRi d12)
       (set (.sym regtype k)
	    (c-call mode (.str "@cpu@_read_mem_" mode) pc (add GRi d12)))
       profile
  )
)

(load-r-simm ldsbi  QI OP_30 GR NA
	     ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	      (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
	     "Load   signed byte")
(load-r-simm ldshi  HI OP_31 GR NA
	     ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	      (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
	     "Load   signed half")
(load-r-simm ldi    SI OP_32 GR NA
	     ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	      (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
	     "Load          word")
(load-r-simm ldubi UQI OP_35 GR NA
	     ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	      (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
	     "Load unsigned byte")
(load-r-simm lduhi UHI OP_36 GR NA
	     ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	      (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
	     "Load unsigned half")

(load-r-simm ldbfi UQI OP_38 FRint FR-ACCESS
	     ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
	      (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
	     "Load byte float")
(load-r-simm ldhfi UHI OP_39 FRint FR-ACCESS
	     ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
	      (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
	     "Load half float")
(load-r-simm ldfi   SI OP_3A FRint FR-ACCESS
	     ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
	      (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
	     "Load word float")

(define-pmacro (ne-load-r-simm
		name mode op regtype size is_float attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING attr
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$d12),$" regtype "k")
       (+ pack (.sym regtype k) op GRi d12)
       (ne-load-semantics GRi -1 (.sym regtype k) d12 size is_float
			  (set (.sym regtype k)
			       (c-call mode (.str "@cpu@_read_mem_" mode)
				       pc (add GRi d12))))
       profile
  )
)

(ne-load-r-simm nldsbi  QI OP_40 GR (ne-QI-size)  0 NA
		((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load   signed byte")
(ne-load-r-simm nldubi UQI OP_41 GR (ne-UQI-size) 0 NA
		((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load unsigned byte")
(ne-load-r-simm nldshi  HI OP_42 GR (ne-HI-size)  0 NA
		((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load   signed half")
(ne-load-r-simm nlduhi UHI OP_43 GR (ne-UHI-size) 0 NA
		((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load unsigned half")
(ne-load-r-simm nldi    SI OP_44 GR (ne-SI-size)  0 NA
		((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load          word")

(ne-load-r-simm nldbfi UQI OP_48 FRint (ne-UQI-size) 1 FR-ACCESS
		((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load byte float")
(ne-load-r-simm nldhfi UHI OP_49 FRint (ne-UHI-size) 1 FR-ACCESS
		((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load half float")
(ne-load-r-simm nldfi   SI OP_4A FRint (ne-SI-size)  1 FR-ACCESS
		((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load word float")

(define-pmacro (load-double-r-simm
		name not_gr mode op regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) attr)
       (.str name "$pack @($GRi,$d12),$" regtype "doublek")
       (+ pack (.sym regtype doublek) op GRi d12)
       (sequence ((WI address))
		 (load-double-semantics not_gr mode regtype address d12))
       profile
  )
)

(load-double-r-simm lddi  0 DI OP_33 GR NA
		    ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
		     (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
		    "Load double word")
(load-double-r-simm lddfi 1 DF OP_3B FR FR-ACCESS
		    ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
		     (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
		    "Load double float")

(define-pmacro (ne-load-double-r-simm
		name not_gr mode op regtype size is_float attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING attr
	(MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack @($GRi,$d12),$" regtype "doublek")
       (+ pack (.sym regtype doublek) op GRi d12)
       (sequence ((WI address))
		 (ne-load-semantics GRi -1 (.sym regtype doublek)
				    d12 size is_float
				    (load-double-semantics not_gr mode
							   regtype
							   address d12)))
       profile
  )
)

(ne-load-double-r-simm nlddi  0 DI OP_45 GR (ne-DI-size) 0 NA
		       ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load double word")
(ne-load-double-r-simm nlddfi 1 DF OP_4B FR (ne-DI-size) 1 FR-ACCESS
		       ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load double float")

(define-pmacro (load-quad-r-simm name op regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) attr)
       (.str name "$pack @($GRi,$d12),$" regtype "k")
       (+ pack (.sym regtype k) op GRi d12)
       (sequence ((WI address))
		 (load-quad-semantics regtype address d12))
       profile
  )
)

(load-quad-r-simm ldqi  OP_34 GR    NA
		  ((fr500 (unit u-gr-load))) "Load quad word")
(load-quad-r-simm ldqfi OP_3C FRint FR-ACCESS
		  ((fr500 (unit u-fr-load))) "Load quad float")

(define-pmacro (ne-load-quad-r-simm
		name op regtype size is_float attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) NON-EXCEPTING attr)
       (.str name "$pack @($GRi,$d12),$" regtype "k")
       (+ pack (.sym regtype k) op GRi d12)
       (sequence ((WI address))
		 (ne-load-semantics GRi -1 (.sym regtype k) d12 size is_float
				    (load-quad-semantics regtype address d12)))
       profile
  )
)

(ne-load-quad-r-simm nldqfi OP_4C FRint (ne-XI-size) 1 FR-ACCESS
		     ((fr500 (unit u-fr-load))) "Load quad float")

(define-pmacro (store-r-r name mode op ope reg attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) attr)
       (.str name "$pack $" reg "k,@($GRi,$GRj)")
       (+ pack (.sym reg k) op GRi ope GRj)
       (c-call VOID (.str "@cpu@_write_mem_" mode)
	       pc (add GRi GRj) (.sym reg k))
       profile
  )
)

(store-r-r stb   QI OP_03 OPE1_00 GR NA
	   ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	    (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	   "Store unsigned byte")
(store-r-r sth   HI OP_03 OPE1_01 GR NA
	   ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	    (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	   "Store unsigned half")
(store-r-r st    SI OP_03 OPE1_02 GR NA
	   ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	    (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	   "Store          word")

(store-r-r stbf  QI OP_03 OPE1_08 FRint FR-ACCESS
	   ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	    (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	   "Store byte float")
(store-r-r sthf  HI OP_03 OPE1_09 FRint FR-ACCESS
	   ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	    (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	   "Store half float")
(store-r-r stf   SI OP_03 OPE1_0A FRint FR-ACCESS
	   ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	    (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	   "Store word float")

(store-r-r stc   SI OP_03 OPE1_25 CPR (MACH frv) () "Store coprocessor word")

; Semantics for a store-double insn
;
(define-pmacro (store-double-semantics mode regtype address arg)
  (sequence ()
	    (set address (add GRi arg))
	    (c-call VOID (.str "@cpu@_write_mem_" mode)
		    pc address (.sym regtype doublek)))
)

(define-pmacro (store-double-r-r name mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) attr)
       (.str name "$pack $" regtype "doublek,@($GRi,$GRj)")
       (+ pack (.sym regtype doublek) op GRi ope GRj)
       (sequence ((WI address))
		 (store-double-semantics mode regtype address GRj))
       profile
  )
)

(store-double-r-r std  DI OP_03 OPE1_03 GR  NA
		  ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		   (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		  "Store double word")
(store-double-r-r stdf DF OP_03 OPE1_0B FR  FR-ACCESS
		  ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		   (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		  "Store double float")

(store-double-r-r stdc DI OP_03 OPE1_26 CPR (MACH frv)
		  () "Store coprocessor double word")

; Semantics for a store-quad insn
;
(define-pmacro (store-quad-semantics regtype address arg)
  (sequence ()
	    (set address (add GRi arg))
	    (c-call VOID (.str "@cpu@_store_quad_" regtype)
		     pc address (index-of (.sym regtype k))))
)

(define-pmacro (store-quad-r-r name op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
       (.str name "$pack $" regtype "k,@($GRi,$GRj)")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (sequence ((WI address))
		 (store-quad-semantics regtype address GRj))
       profile
  )
)

(store-quad-r-r stq   OP_03 OPE1_04 GR    NA
		((fr500 (unit u-gr-store))) "Store quad word")
(store-quad-r-r stqf  OP_03 OPE1_0C FRint FR-ACCESS
		((fr500 (unit u-fr-store)))
		"Store quad float")
(store-quad-r-r stqc  OP_03 OPE1_27 CPR   NA
		() "Store coprocessor quad word")

(define-pmacro (store-r-r-u name mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) attr)
       (.str name "$pack $" regtype "k,@($GRi,$GRj)")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (sequence ((UWI address))
		 (set address (add GRi GRj))
		 (c-call VOID (.str "@cpu@_write_mem_" mode)
			 pc address (.sym regtype k))
		 (set GRi address))
       profile
  )
)

(store-r-r-u stbu  QI OP_03 OPE1_10 GR NA
	     ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	      (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	     "Store unsigned byte, update index")
(store-r-r-u sthu  HI OP_03 OPE1_11 GR NA
	     ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	      (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	     "Store unsigned half, update index")
(store-r-r-u stu   WI OP_03 OPE1_12 GR NA
	     ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	      (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	     "Store          word, update index")

(store-r-r-u stbfu QI OP_03 OPE1_18 FRint FR-ACCESS
	     ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	      (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	     "Store byte float, update index")
(store-r-r-u sthfu HI OP_03 OPE1_19 FRint FR-ACCESS
	     ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	      (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	     "Store half float, update index")
(store-r-r-u stfu  SI OP_03 OPE1_1A FRint FR-ACCESS
	     ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	      (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	     "Store word float, update index")

(store-r-r-u stcu  SI OP_03 OPE1_2D CPR (MACH frv) ()
	     "Store coprocessor word, update index")

(define-pmacro (store-double-r-r-u
		name mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) attr)
       (.str name "$pack $" regtype "doublek,@($GRi,$GRj)")
       (+ pack (.sym regtype doublek) op GRi ope GRj)
       (sequence ((WI address))
		 (store-double-semantics mode regtype address GRj)
		 (set GRi address))
       profile
  )
)

(store-double-r-r-u stdu  DI OP_03 OPE1_13 GR  NA
		    ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		     (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		    "Store double word, update index")
(store-double-r-r-u stdfu DF OP_03 OPE1_1B FR  FR-ACCESS
		    ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		     (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		    "Store double float,update index")
(store-double-r-r-u stdcu DI OP_03 OPE1_2E CPR (MACH frv) ()
		    "Store coprocessor double word, update index")

(define-pmacro (store-quad-r-r-u name op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
       (.str name "$pack $" regtype "k,@($GRi,$GRj)")
       (+ pack (.sym regtype k) op GRi ope GRj)
       (sequence ((WI address))
		 (store-quad-semantics regtype address GRj)
		 (set GRi address))
       profile
  )
)

(store-quad-r-r-u stqu  OP_03 OPE1_14 GR    NA
		  ((fr500 (unit u-gr-store)))
		  "Store quad word, update index")
(store-quad-r-r-u stqfu OP_03 OPE1_1C FRint FR-ACCESS
		  ((fr500 (unit u-fr-store)))
		  "Store quad float, update index")
(store-quad-r-r-u stqcu OP_03 OPE1_2F CPR   NA ()
		  "Store coprocessor quad   word, update index")

(define-pmacro (conditional-load name mode op ope regtype profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) CONDITIONAL)
       (.str name "$pack @($GRi,$GRj),$" regtype "k,$CCi,$cond")
       (+ pack (.sym regtype k) op GRi CCi  cond ope GRj)
       (if (eq CCi (or cond 2))
	   (set (.sym regtype k)
		(c-call mode (.str "@cpu@_read_mem_" mode) pc (add GRi GRj))))
       profile
  )
)

(conditional-load cldsb  QI OP_5E OPE4_0 GR
		  ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
		   (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
		  "Load   signed byte")
(conditional-load cldub UQI OP_5E OPE4_1 GR
		  ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
		   (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
		  "Load unsigned byte")
(conditional-load cldsh  HI OP_5E OPE4_2 GR
		  ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
		   (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
		  "Load   signed half")
(conditional-load clduh UHI OP_5E OPE4_3 GR
		  ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
		   (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
		  "Load unsigned half")
(conditional-load cld    SI OP_5F OPE4_0 GR
		  ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
		   (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
		  "Load          word")

(conditional-load cldbf UQI OP_60 OPE4_0 FRint
		  ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
		   (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
		  "Load byte float")
(conditional-load cldhf UHI OP_60 OPE4_1 FRint
		  ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
		   (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
		  "Load half float")
(conditional-load cldf   SI OP_60 OPE4_2 FRint
		  ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
		   (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
		  "Load word float")

(define-pmacro (conditional-load-double
		name not_gr mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) CONDITIONAL attr)
       (.str name "$pack @($GRi,$GRj),$" regtype "doublek,$CCi,$cond")
       (+ pack (.sym regtype doublek) op GRi CCi  cond ope GRj)
       (if (eq CCi (or cond 2))
	   (sequence ((WI address))
		     (load-double-semantics not_gr mode regtype address GRj)))
       profile
  )
)

(conditional-load-double cldd  0 DI OP_5F OPE4_1 GR NA
			 ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
			  (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
			 "Load double word")
(conditional-load-double clddf 1 DF OP_60 OPE4_3 FR FR-ACCESS
			 ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
			  (fr500 (unit u-gr-load)) (fr550 (unit u-fr-load)))
			 "Load double float")

(dni cldq
     "conditional load quad integer"
     ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) CONDITIONAL)
     "cldq$pack @($GRi,$GRj),$GRk,$CCi,$cond"
     (+ pack GRk OP_5F GRi CCi cond OPE4_2 GRj)
     (if (eq CCi (or cond 2))
	 (sequence ((WI address))
		   (load-quad-semantics GR address GRj)))
     ((fr500 (unit u-gr-load)))
)

(define-pmacro (conditional-load-gr-u name mode op ope comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) CONDITIONAL)
       (.str name "$pack @($GRi,$GRj),$GRk,$CCi,$cond")
       (+ pack GRk op GRi CCi  cond ope GRj)
       (if (eq CCi (or cond 2))
	   (sequence ((WI address))
		     (set address (add GRi GRj))
		     (set GRk
			  (c-call mode (.str "@cpu@_read_mem_" mode)
				  pc address))
		     (if (ne (index-of GRi) (index-of GRk))
			 (set GRi address))))
       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
	(fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
  )
)

(conditional-load-gr-u cldsbu  QI OP_61 OPE4_0 "Load   signed byte, update")
(conditional-load-gr-u cldubu UQI OP_61 OPE4_1 "Load unsigned byte, update")
(conditional-load-gr-u cldshu  HI OP_61 OPE4_2 "Load   signed half, update")
(conditional-load-gr-u clduhu UHI OP_61 OPE4_3 "Load unsigned half, update")
(conditional-load-gr-u cldu    SI OP_62 OPE4_0 "Load          word, update")

(define-pmacro (conditional-load-non-gr-u name mode op ope regtype comment)
  (dni name
       (comment)
       ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
	(FR400-MAJOR I-2) (FR450-MAJOR I-2) CONDITIONAL FR-ACCESS)
       (.str name "$pack @($GRi,$GRj),$" regtype "k,$CCi,$cond")
       (+ pack (.sym regtype k) op GRi CCi  cond ope GRj)
       (if (eq CCi (or cond 2))
	   (sequence ((WI address))
		     (set address (add GRi GRj))
		     (set (.sym regtype k)
			  (c-call mode (.str "@cpu@_read_mem_" mode)
				  pc address))
		     (set GRi address)))
       ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
	(fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
  )
)

(conditional-load-non-gr-u cldbfu UQI OP_63 OPE4_0 FRint "Load byte float, update")
(conditional-load-non-gr-u cldhfu UHI OP_63 OPE4_1 FRint "Load half float, update")
(conditional-load-non-gr-u cldfu   SI OP_63 OPE4_2 FRint "Load word float, update")


(dni clddu
     "Load double word,  update"
     ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
      (FR400-MAJOR I-2) (FR450-MAJOR I-2) CONDITIONAL)
     "clddu$pack @($GRi,$GRj),$GRdoublek,$CCi,$cond"
     (+ pack GRdoublek OP_62 GRi CCi cond OPE4_1 GRj)
     (if (eq CCi (or cond 2))
	 (sequence ((WI address))
		   (load-double-semantics 0 DI GR address GRj)
		   (if (ne (index-of GRi) (index-of GRdoublek))
		       (set GRi address))))
     ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
      (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
)

(dni clddfu
     "Load double float, update"
     ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2)
      (FR400-MAJOR I-2) (FR450-MAJOR I-2) CONDITIONAL FR-ACCESS)
     "clddfu$pack @($GRi,$GRj),$FRdoublek,$CCi,$cond"
     (+ pack FRdoublek OP_63 GRi CCi cond OPE4_3 GRj)
     (if (eq CCi (or cond 2))
	 (sequence ((WI address))
		   (load-double-semantics 1 DF FR address GRj)
		   (set GRi address)))
     ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
      (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
)

(dni cldqu
     "conditional load quad integer and update index"
     ((UNIT LOAD) (FR500-MAJOR I-2) (MACH frv) CONDITIONAL)
     "cldqu$pack @($GRi,$GRj),$GRk,$CCi,$cond"
     (+ pack GRk OP_62 GRi CCi cond OPE4_2 GRj)
     (if (eq CCi (or cond 2))
	 (sequence ((WI address))
		   (load-quad-semantics GR address GRj)
		   (if (ne (index-of GRi) (index-of GRk))
		       (set GRi address))))
     ((fr500 (unit u-gr-load)))
)

(define-pmacro (conditional-store name mode op ope regtype profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) CONDITIONAL)
       (.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
       (+ pack (.sym regtype k) op GRi CCi cond ope GRj)
       (if (eq CCi (or cond 2))
	   (c-call VOID (.str "@cpu@_write_mem_" mode)
		   pc (add GRi GRj) (.sym regtype k)))
       profile
  )
)

(conditional-store cstb  QI OP_64 OPE4_0 GR
		   ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		    (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		   "Store unsigned byte")
(conditional-store csth  HI OP_64 OPE4_1 GR
		   ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		    (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		   "Store unsigned half")
(conditional-store cst   SI OP_64 OPE4_2 GR
		   ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		    (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		   "Store          word")

(conditional-store cstbf QI OP_66 OPE4_0 FRint
		   ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		    (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		   "Store byte float")
(conditional-store csthf HI OP_66 OPE4_1 FRint
		   ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		    (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		   "Store half float")
(conditional-store cstf  SI OP_66 OPE4_2 FRint
		   ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		    (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		   "Store word float")

(define-pmacro (conditional-store-double
		name mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) CONDITIONAL attr)
       (.str name "$pack $" regtype "doublek,@($GRi,$GRj),$CCi,$cond")
       (+ pack (.sym regtype doublek) op GRi CCi  cond ope GRj)
       (if (eq CCi (or cond 2))
	   (sequence ((WI address))
		     (store-double-semantics mode regtype address GRj)))
       profile
  )
)

(conditional-store-double cstd  DI OP_64 OPE4_3 GR NA
			  ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
			   (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
			  "Store double word")
(conditional-store-double cstdf DF OP_66 OPE4_3 FR FR-ACCESS
			  ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
			   (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
			  "Store double float")

(dni cstq
     "conditionally store quad word"
     ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) CONDITIONAL)
     "cstq$pack $GRk,@($GRi,$GRj),$CCi,$cond"
     (+ pack GRk OP_65 GRi CCi cond OPE4_0 GRj)
     (if (eq CCi (or cond 2))
	 (sequence ((WI address))
		   (store-quad-semantics GR address GRj)))
     ((fr500 (unit u-gr-store)))
)

(define-pmacro (conditional-store-u
		name mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) CONDITIONAL attr)
       (.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
       (+ pack (.sym regtype k) op GRi CCi  cond ope GRj)
       (if (eq CCi (or cond 2))
	   (sequence ((WI address))
		     (set address (add GRi GRj))
		     (c-call VOID (.str "@cpu@_write_mem_" mode)
			     pc address (.sym regtype k))
		     (set GRi address)))
       profile
  )
)

(conditional-store-u cstbu QI OP_67 OPE4_0 GR NA
		     ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		      (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		     "Store unsigned byte, update index")
(conditional-store-u csthu HI OP_67 OPE4_1 GR NA
		     ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		      (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		     "Store unsigned half, update index")
(conditional-store-u cstu  SI OP_67 OPE4_2 GR NA
		     ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		      (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		     "Store          word, update index")

(conditional-store-u cstbfu QI OP_68 OPE4_0 FRint FR-ACCESS
		     ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		      (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		     "Store byte float, update index")
(conditional-store-u csthfu HI OP_68 OPE4_1 FRint FR-ACCESS
		     ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		      (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		     "Store half float, update index")
(conditional-store-u cstfu  SI OP_68 OPE4_2 FRint FR-ACCESS
		     ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		      (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		     "Store word float, update index")

(define-pmacro (conditional-store-double-u
		name mode op ope regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) CONDITIONAL attr)
       (.str name "$pack $" regtype "doublek,@($GRi,$GRj),$CCi,$cond")
       (+ pack (.sym regtype doublek) op GRi CCi  cond ope GRj)
       (if (eq CCi (or cond 2))
	   (sequence ((WI address))
		     (store-double-semantics mode regtype address GRj)
		     (set GRi address)))
       profile
  )
)

(conditional-store-double-u cstdu  DI OP_67 OPE4_3 GR NA
			    ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
			     (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
			    "Store double word, update index")
(conditional-store-double-u cstdfu DF OP_68 OPE4_3 FR FR-ACCESS
			    ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
			     (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
			    "Store double float, update index")

(define-pmacro (store-r-simm name mode op regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) attr)
       (.str name "$pack $" regtype "k,@($GRi,$d12)")
       (+ pack (.sym regtype k) op GRi d12)
       (c-call VOID (.str "@cpu@_write_mem_" mode)
	       pc (add GRi d12) (.sym regtype k))
       profile
  )
)

(store-r-simm stbi QI OP_50 GR NA
	      ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	       (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	      "Store unsigned byte")
(store-r-simm sthi HI OP_51 GR NA
	      ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	       (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	      "Store unsigned half")
(store-r-simm sti  SI OP_52 GR NA
	      ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
	       (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
	      "Store          word")

(store-r-simm stbfi QI OP_4E FRint FR-ACCESS
	      ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	       (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	      "Store byte float")
(store-r-simm sthfi HI OP_4F FRint FR-ACCESS
	      ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	       (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	      "Store half float")
(store-r-simm stfi  SI OP_55 FRint FR-ACCESS
	      ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
	       (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
	      "Store word float")

(define-pmacro (store-double-r-simm name mode op regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3)
	(FR400-MAJOR I-3) (FR450-MAJOR I-3) attr)
       (.str name "$pack $" regtype "doublek,@($GRi,$d12)")
       (+ pack (.sym regtype doublek) op GRi d12)
       (sequence ((WI address))
		 (store-double-semantics mode regtype address d12))
       profile
  )
)

(store-double-r-simm stdi  DI OP_53 GR NA
		     ((fr400 (unit u-gr-store)) (fr450 (unit u-gr-store))
		      (fr500 (unit u-gr-store)) (fr550 (unit u-gr-store)))
		     "Store double word")
(store-double-r-simm stdfi DF OP_56 FR FR-ACCESS
		     ((fr400 (unit u-fr-store)) (fr450 (unit u-fr-store))
		      (fr500 (unit u-fr-store)) (fr550 (unit u-fr-store)))
		     "Store double float")

(define-pmacro (store-quad-r-simm name op regtype attr profile comment)
  (dni name
       (comment)
       ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
       (.str name "$pack $" regtype "k,@($GRi,$d12)")
       (+ pack (.sym regtype k) op GRi d12)
       (sequence ((WI address))
		 (store-quad-semantics regtype address d12))
       profile
  )
)

(store-quad-r-simm stqi  OP_54 GR    NA ((fr500 (unit u-gr-store)))
		   "Store quad word")
(store-quad-r-simm stqfi OP_57 FRint FR-ACCESS ()
		   "Store quad float")

(define-pmacro (swap-semantics base offset arg)
  (sequence ((WI tmp) (WI address))
	    (set tmp arg)
	    (set address (add base offset))
	    (c-call VOID "@cpu@_check_swap_address" address)
	    (set arg (c-call WI "@cpu@_read_mem_WI" pc address))
	    (c-call VOID "@cpu@_write_mem_WI" pc address tmp))
)

(dni swap
     "Swap contents of memory with GR"
     ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
      (FR400-MAJOR C-2) (FR450-MAJOR C-2))
     "swap$pack @($GRi,$GRj),$GRk"
     (+ pack GRk OP_03 GRi OPE1_05 GRj)
     (swap-semantics GRi GRj GRk)
     ((fr400 (unit u-swap)) (fr450 (unit u-swap))
      (fr500 (unit u-swap)) (fr550 (unit u-swap)))
)

(dni "swapi"
     "Swap contents of memory with GR"
     ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
      (FR400-MAJOR C-2) (FR450-MAJOR C-2))
     ("swapi$pack @($GRi,$d12),$GRk")
     (+ pack GRk OP_4D GRi d12)
     (swap-semantics GRi d12 GRk)
     ((fr400 (unit u-swap)) (fr450 (unit u-swap))
      (fr500 (unit u-swap)) (fr550 (unit u-swap)))
)

(dni cswap
     "Conditionally swap contents of memory with GR"
     ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
      (FR400-MAJOR C-2) (FR450-MAJOR C-2) CONDITIONAL)
     "cswap$pack @($GRi,$GRj),$GRk,$CCi,$cond"
     (+ pack GRk OP_65 GRi CCi cond OPE4_2 GRj)
     (if (eq CCi (or cond 2))
	 (swap-semantics GRi GRj GRk))
     ((fr400 (unit u-swap)) (fr450 (unit u-swap))
      (fr500 (unit u-swap)) (fr550 (unit u-swap)))
)

(define-pmacro (register-transfer
		name op ope reg_src reg_targ pipe attrs	profile comment)
  (dni name
       (comment)
       (.splice (UNIT pipe) (.unsplice attrs))
       (.str name "$pack $" reg_src ",$" reg_targ)
       (+ pack reg_targ op (rs-null) ope reg_src)
       (set reg_targ reg_src)
       profile
  )
)

(register-transfer movgf OP_03 OPE1_15
		   GRj FRintk I0
		   ((FR500-MAJOR I-4) (FR550-MAJOR I-5)
		    (FR400-MAJOR I-4) (FR450-MAJOR I-4) FR-ACCESS)
		   ((fr400 (unit u-gr2fr)) (fr450 (unit u-gr2fr))
		    (fr500 (unit u-gr2fr)) (fr550 (unit u-gr2fr)))
		   "transfer gr to fr")
(register-transfer movfg OP_03 OPE1_0D
		   FRintk GRj I0
		   ((FR500-MAJOR I-4) (FR550-MAJOR I-5)
		    (FR400-MAJOR I-4) (FR450-MAJOR I-4) FR-ACCESS)
		   ((fr400 (unit u-fr2gr)) (fr450 (unit u-fr2gr))
		    (fr500 (unit u-fr2gr)) (fr550 (unit u-fr2gr)))
		   "transfer fr to gr")

(define-pmacro (nextreg hw r offset) (reg hw (add (index-of r) offset)))

(define-pmacro (register-transfer-double-from-gr-semantics cond)
  (if cond
      (if (eq (index-of GRj) 0)
	  (sequence ()
		    (set FRintk 0)
		    (set (nextreg h-fr_int FRintk 1) 0))
	  (sequence ()
		    (set FRintk GRj)
		    (set (nextreg h-fr_int FRintk 1) (nextreg h-gr GRj 1)))))
)

(dni movgfd
     "move GR for FR double"
     ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5)
      (FR400-MAJOR I-4) (FR450-MAJOR I-4) FR-ACCESS)
     "movgfd$pack $GRj,$FRintk"
     (+ pack FRintk OP_03 (rs-null) OPE1_16 GRj)
     (register-transfer-double-from-gr-semantics 1)
     ; TODO -- doesn't handle second register in the pair
     ((fr400 (unit u-gr2fr)) (fr450 (unit u-gr2fr))
      (fr500 (unit u-gr2fr)) (fr550 (unit u-gr2fr)))
)

(define-pmacro (register-transfer-double-to-gr-semantics cond)
  (if (andif (ne (index-of GRj) 0) cond)
      (sequence ()
		(set GRj FRintk)
		(set (nextreg h-gr GRj 1) (nextreg h-fr_int FRintk 1))))
)

(dni movfgd
     "move FR for GR double"
     ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5)
      (FR400-MAJOR I-4) (FR450-MAJOR I-4) FR-ACCESS)
     "movfgd$pack $FRintk,$GRj"
     (+ pack FRintk OP_03 (rs-null) OPE1_0E GRj)
     (register-transfer-double-to-gr-semantics 1)
     ; TODO -- doesn't handle second register in the pair
     ((fr400 (unit u-fr2gr)) (fr450 (unit u-fr2gr))
      (fr500 (unit u-fr2gr)) (fr550 (unit u-fr2gr)))
)

(dni movgfq
     "move GR for FR quad"
     ((UNIT I0) (FR500-MAJOR I-4) (MACH frv) FR-ACCESS)
     "movgfq$pack $GRj,$FRintk"
     (+ pack FRintk OP_03 (rs-null) OPE1_17 GRj)
     (if (eq (index-of GRj) 0)
	 (sequence ()
		   (set FRintk 0)
		   (set (reg h-fr_int (add (index-of FRintk) 1)) 0)
		   (set (reg h-fr_int (add (index-of FRintk) 2)) 0)
		   (set (reg h-fr_int (add (index-of FRintk) 3)) 0))
	 (sequence ()
		   (set FRintk GRj)
		   (set (reg h-fr_int (add (index-of FRintk) 1))
			(reg h-gr (add (index-of GRj)    1)))
		   (set (reg h-fr_int (add (index-of FRintk) 2))
			(reg h-gr (add (index-of GRj)    2)))
		   (set (reg h-fr_int (add (index-of FRintk) 3))
			(reg h-gr (add (index-of GRj)    3)))))
     ()
)

(dni movfgq
     "move FR for GR quad"
     ((UNIT I0) (FR500-MAJOR I-4) (MACH frv) FR-ACCESS)
     "movfgq$pack $FRintk,$GRj"
     (+ pack FRintk OP_03 (rs-null) OPE1_0F GRj)
     (if (ne (index-of GRj) 0)
	 (sequence ()
		   (set GRj FRintk)
		   (set (reg h-gr (add (index-of GRj)    1))
			(reg h-fr_int (add (index-of FRintk) 1)))
		   (set (reg h-gr (add (index-of GRj)    2))
			(reg h-fr_int (add (index-of FRintk) 2)))
		   (set (reg h-gr (add (index-of GRj)    3))
			(reg h-fr_int (add (index-of FRintk) 3)))))
     ()
)

(define-pmacro (conditional-register-transfer
		name op ope reg_src reg_targ pipe attrs	profile comment)
  (dni name
       (comment)
       (.splice (UNIT pipe) CONDITIONAL FR-ACCESS (.unsplice attrs))
       (.str name "$pack $" reg_src ",$" reg_targ ",$CCi,$cond")
       (+ pack reg_targ op (rs-null) CCi cond ope reg_src)
       (if (eq CCi (or cond 2))
	   (set reg_targ reg_src))
       profile
  )
)

(conditional-register-transfer cmovgf OP_69 OPE4_0 GRj FRintk I0
			       ((FR500-MAJOR I-4) (FR550-MAJOR I-5)
				(FR400-MAJOR I-4) (FR450-MAJOR I-4))
			       ((fr400 (unit u-gr2fr)) (fr450 (unit u-gr2fr))
				(fr500 (unit u-gr2fr)) (fr550 (unit u-gr2fr)))
			       "transfer gr to fr")
(conditional-register-transfer cmovfg OP_69 OPE4_2 FRintk GRj I0
			       ((FR500-MAJOR I-4) (FR550-MAJOR I-5)
				(FR400-MAJOR I-4) (FR450-MAJOR I-4))
			       ((fr400 (unit u-fr2gr)) (fr450 (unit u-fr2gr))
				(fr500 (unit u-fr2gr)) (fr550 (unit u-fr2gr)))
			       "transfer fr to gr")


(dni cmovgfd
     "Conditional move GR to FR double"
     ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5)
      (FR400-MAJOR I-4) (FR450-MAJOR I-4) CONDITIONAL FR-ACCESS)
     "cmovgfd$pack $GRj,$FRintk,$CCi,$cond"
     (+ pack FRintk OP_69 (rs-null) CCi cond OPE4_1 GRj)
     (register-transfer-double-from-gr-semantics (eq CCi (or cond 2)))
     ; TODO -- doesn't handle extra registers in double
     ((fr400 (unit u-gr2fr)) (fr450 (unit u-gr2fr))
      (fr500 (unit u-gr2fr)) (fr550 (unit u-gr2fr)))
)

(dni cmovfgd
     "Conditional move FR to GR double"
     ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5)
      (FR400-MAJOR I-4) (FR450-MAJOR I-4) CONDITIONAL FR-ACCESS)
     "cmovfgd$pack $FRintk,$GRj,$CCi,$cond"
     (+ pack FRintk OP_69 (rs-null) CCi cond OPE4_3 GRj)
     (register-transfer-double-to-gr-semantics (eq CCi (or cond 2)))
     ; TODO -- doesn't handle second register in the pair
     ((fr400 (unit u-fr2gr)) (fr450 (unit u-fr2gr))
      (fr500 (unit u-fr2gr)) (fr550 (unit u-fr2gr)))
)

(define-pmacro (register-transfer-spr
		name op ope reg_src reg_targ unitname comment)
  (dni name
       (comment)
       ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
	(FR400-MAJOR C-2) (FR450-MAJOR C-2))
       (.str name "$pack $" reg_src ",$" reg_targ)
       (+ pack reg_targ op ope reg_src)
       (set reg_targ reg_src)
       ((fr400 (unit unitname)) (fr450 (unit unitname))
	(fr500 (unit unitname)) (fr550 (unit unitname)))
  )
)

(register-transfer-spr movgs OP_03 OPE1_06 GRj spr u-gr2spr "transfer gr->spr")
(register-transfer-spr movsg OP_03 OPE1_07 spr GRj u-spr2gr "transfer spr->gr")

; Integer Branch Conditions
(define-pmacro (Inev cc) (const BI 0))
(define-pmacro (Ira  cc) (const BI 1))
(define-pmacro (Ieq  cc) (     zbit cc))
(define-pmacro (Ine  cc) (not (zbit cc)))
(define-pmacro (Ile  cc) (     orif (zbit cc) (xor (nbit cc) (vbit cc))))
(define-pmacro (Igt  cc) (not (orif (zbit cc) (xor (nbit cc) (vbit cc)))))
(define-pmacro (Ilt  cc) (     xor  (nbit cc) (vbit cc)))
(define-pmacro (Ige  cc) (not (xor  (nbit cc) (vbit cc))))
(define-pmacro (Ils  cc) (     orif (cbit cc) (zbit cc)))
(define-pmacro (Ihi  cc) (not (orif (cbit cc) (zbit cc))))
(define-pmacro (Ic   cc) (     cbit cc))
(define-pmacro (Inc  cc) (not (cbit cc)))
(define-pmacro (In   cc) (     nbit cc))
(define-pmacro (Ip   cc) (not (nbit cc)))
(define-pmacro (Iv   cc) (     vbit cc))
(define-pmacro (Inv  cc) (not (vbit cc)))

; Float Branch Conditions
(define-pmacro (Fnev cc) (const BI 0))
(define-pmacro (Fra  cc) (const BI 1))
(define-pmacro (Fne  cc) (orif (lbit cc) (orif (gbit cc) (ubit cc))))
(define-pmacro (Feq  cc) (ebit cc))
(define-pmacro (Flg  cc) (orif (lbit cc) (gbit cc)))
(define-pmacro (Fue  cc) (orif (ebit cc) (ubit cc)))
(define-pmacro (Ful  cc) (orif (lbit cc) (ubit cc)))
(define-pmacro (Fge  cc) (orif (ebit cc) (gbit cc)))
(define-pmacro (Flt  cc) (lbit cc))
(define-pmacro (Fuge cc) (orif (ebit cc) (orif (gbit cc) (ubit cc))))
(define-pmacro (Fug  cc) (orif (gbit cc) (ubit cc)))
(define-pmacro (Fle  cc) (orif (ebit cc) (lbit cc)))
(define-pmacro (Fgt  cc) (gbit cc))
(define-pmacro (Fule cc) (orif (ebit cc) (orif (lbit cc) (ubit cc))))
(define-pmacro (Fu   cc) (ubit cc))
(define-pmacro (Fo   cc) (orif (ebit cc) (orif (lbit cc) (gbit cc))))

(define-pmacro (conditional-branch-i prefix cc op cond comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1)
	(FR400-MAJOR B-1) (FR450-MAJOR B-1))
       (.str (.sym prefix cc) "$pack $ICCi_2,$hint,$label16")
       (+ pack (.sym ICC_ cc) ICCi_2 op hint label16)
       (sequence ()
		 (c-call VOID "@cpu@_model_branch" label16 hint)
		 (if (cond ICCi_2)
		     (set pc label16)))
       ((fr400 (unit u-branch)) (fr450 (unit u-branch))
	(fr500 (unit u-branch)) (fr550 (unit u-branch)))
  )
)

(dni bra
     "integer branch equal"
      ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1)
       (FR400-MAJOR B-1) (FR450-MAJOR B-1))
      "bra$pack $hint_taken$label16"
      (+ pack ICC_ra (ICCi_2-null) OP_06 hint_taken label16)
      (sequence ()
		(c-call VOID "@cpu@_model_branch" label16 hint_taken)
		(set pc label16))
      ((fr400 (unit u-branch)) (fr450 (unit u-branch))
       (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni bno
     "integer branch never"
      ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1)
       (FR400-MAJOR B-1) (FR450-MAJOR B-1))
      "bno$pack$hint_not_taken"
      (+ pack ICC_nev (ICCi_2-null) OP_06 hint_not_taken (label16-null))
      (c-call VOID "@cpu@_model_branch" label16 hint_not_taken)
      ((fr400 (unit u-branch)) (fr450 (unit u-branch))
       (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(conditional-branch-i b eq  OP_06 Ieq  "integer branch equal")
(conditional-branch-i b ne  OP_06 Ine  "integer branch not equal")
(conditional-branch-i b le  OP_06 Ile  "integer branch less or equal")
(conditional-branch-i b gt  OP_06 Igt  "integer branch greater")
(conditional-branch-i b lt  OP_06 Ilt  "integer branch less")
(conditional-branch-i b ge  OP_06 Ige  "integer branch greater or equal")
(conditional-branch-i b ls  OP_06 Ils  "integer branch less or equal unsigned")
(conditional-branch-i b hi  OP_06 Ihi  "integer branch greater unsigned")
(conditional-branch-i b c   OP_06 Ic   "integer branch carry set")
(conditional-branch-i b nc  OP_06 Inc  "integer branch carry clear")
(conditional-branch-i b n   OP_06 In   "integer branch negative")
(conditional-branch-i b p   OP_06 Ip   "integer branch positive")
(conditional-branch-i b v   OP_06 Iv   "integer branch overflow set")
(conditional-branch-i b nv  OP_06 Inv  "integer branch overflow clear")

(define-pmacro (conditional-branch-f prefix cc op cond comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1)
	(FR400-MAJOR B-1) (FR450-MAJOR B-1) FR-ACCESS)
       (.str (.sym prefix cc) "$pack $FCCi_2,$hint,$label16")
       (+ pack (.sym FCC_ cc) FCCi_2 op hint label16)
       (sequence ()
		 (c-call VOID "@cpu@_model_branch" label16 hint)
		 (if (cond FCCi_2) (set pc label16)))
       ((fr400 (unit u-branch)) (fr450 (unit u-branch))
	(fr500 (unit u-branch)) (fr550 (unit u-branch)))
  )
)

(dni fbra
     "float branch equal"
      ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1)
       (FR400-MAJOR B-1) (FR450-MAJOR B-1) FR-ACCESS)
      "fbra$pack $hint_taken$label16"
      (+ pack FCC_ra (FCCi_2-null) OP_07 hint_taken label16)
      (sequence ()
		(c-call VOID "@cpu@_model_branch" label16 hint_taken)
		(set pc label16))
      ((fr400 (unit u-branch)) (fr450 (unit u-branch))
       (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni fbno
     "float branch never"
      ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1)
       (FR400-MAJOR B-1) (FR450-MAJOR B-1) FR-ACCESS)
      "fbno$pack$hint_not_taken"
      (+ pack FCC_nev (FCCi_2-null) OP_07 hint_not_taken (label16-null))
      (c-call VOID "@cpu@_model_branch" label16 hint_not_taken)
      ((fr400 (unit u-branch)) (fr450 (unit u-branch))
       (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(conditional-branch-f fb ne  OP_07 Fne  "float branch not equal")
(conditional-branch-f fb eq  OP_07 Feq  "float branch equal")
(conditional-branch-f fb lg  OP_07 Flg  "float branch less or greater")
(conditional-branch-f fb ue  OP_07 Fue  "float branch unordered or equal")
(conditional-branch-f fb ul  OP_07 Ful  "float branch unordered or less")
(conditional-branch-f fb ge  OP_07 Fge  "float branch greater or equal")
(conditional-branch-f fb lt  OP_07 Flt  "float branch less")
(conditional-branch-f fb uge OP_07 Fuge "float branch unordered, greater,equal")
(conditional-branch-f fb ug  OP_07 Fug  "float branch unordered or greater")
(conditional-branch-f fb le  OP_07 Fle  "float branch less or equal")
(conditional-branch-f fb gt  OP_07 Fgt  "float branch greater")
(conditional-branch-f fb ule OP_07 Fule "float branch unordered, less or equal")
(conditional-branch-f fb u   OP_07 Fu   "float branch unordered")
(conditional-branch-f fb o   OP_07 Fo   "float branch ordered")

(define-pmacro (ctrlr-branch-semantics cond ccond)
  (sequence ((SI tmp))
	    (set tmp (sub (spr-lcr) 1))
	    (set (spr-lcr) tmp)
	    (if cond
		(if (eq ccond 0)
		    (if (ne tmp 0)
			(set pc (spr-lr)))
		    (if (eq tmp 0)
			(set pc (spr-lr))))))
)

(dni bctrlr
     "LCR conditional branch to lr"
     ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2)
      (FR400-MAJOR B-2) (FR450-MAJOR B-2))
     ("bctrlr$pack $ccond,$hint")
     (+ pack (cond-null) (ICCi_2-null) OP_0E hint OPE3_01 ccond (s12-null))
     (sequence ()
	       (c-call VOID "@cpu@_model_branch" (spr-lr) hint)
	       (ctrlr-branch-semantics (const BI 1) ccond))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(define-pmacro (conditional-branch-cclr prefix cc i-f op ope cond attr comment)
  (dni (.sym prefix cc lr)
       (comment)
       ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3)
	(FR400-MAJOR B-3) (FR450-MAJOR B-3) attr)
       (.str (.sym prefix cc lr) "$pack $" i-f "CCi_2,$hint")
       (+ pack (.sym i-f CC_ cc) (.sym i-f CCi_2) op hint ope
	  (ccond-null) (s12-null))
       (sequence ()
		 (c-call VOID "@cpu@_model_branch" (spr-lr) hint)
		 (if (cond (.sym i-f CCi_2)) (set pc (spr-lr))))
       ((fr400 (unit u-branch)) (fr450 (unit u-branch))
	(fr500 (unit u-branch)) (fr550 (unit u-branch)))
  )
)

(dni bralr
     "integer cclr branch always"
     ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3)
      (FR400-MAJOR B-3) (FR450-MAJOR B-3))
     "bralr$pack$hint_taken"
     (+ pack ICC_ra (ICCi_2-null) OP_0E hint_taken OPE3_02 (ccond-null) (s12-null))
     (sequence ()
	       (c-call VOID "@cpu@_model_branch" (spr-lr) hint_taken)
	       (set pc (spr-lr)))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni bnolr
     "integer cclr branch never"
     ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3)
      (FR400-MAJOR B-3) (FR450-MAJOR B-3))
     "bnolr$pack$hint_not_taken"
     (+ pack ICC_nev (ICCi_2-null) OP_0E hint_not_taken OPE3_02 (ccond-null) (s12-null))
     (c-call VOID "@cpu@_model_branch" (spr-lr) hint_not_taken)
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(conditional-branch-cclr b eq  I OP_0E OPE3_02 Ieq  NA "integer cclr branch equal")
(conditional-branch-cclr b ne  I OP_0E OPE3_02 Ine  NA "integer cclr branch not equal")
(conditional-branch-cclr b le  I OP_0E OPE3_02 Ile  NA "integer cclr branch less or equal")
(conditional-branch-cclr b gt  I OP_0E OPE3_02 Igt  NA "integer cclr branch greater")
(conditional-branch-cclr b lt  I OP_0E OPE3_02 Ilt  NA "integer cclr branch less")
(conditional-branch-cclr b ge  I OP_0E OPE3_02 Ige  NA "integer cclr branch greater or equal")
(conditional-branch-cclr b ls  I OP_0E OPE3_02 Ils  NA "integer cclr branch less or equal unsigned")
(conditional-branch-cclr b hi  I OP_0E OPE3_02 Ihi  NA "integer cclr branch greater unsigned")
(conditional-branch-cclr b c   I OP_0E OPE3_02 Ic   NA "integer cclr branch carry set")
(conditional-branch-cclr b nc  I OP_0E OPE3_02 Inc  NA "integer cclr branch carry clear")
(conditional-branch-cclr b n   I OP_0E OPE3_02 In   NA "integer cclr branch negative")
(conditional-branch-cclr b p   I OP_0E OPE3_02 Ip   NA "integer cclr branch positive")
(conditional-branch-cclr b v   I OP_0E OPE3_02 Iv   NA "integer cclr branch overflow set")
(conditional-branch-cclr b nv  I OP_0E OPE3_02 Inv  NA "integer cclr branch overflow clear")

(dni fbralr
     "float cclr branch always"
     ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3)
      (FR400-MAJOR B-3) (FR450-MAJOR B-3) FR-ACCESS)
     "fbralr$pack$hint_taken"
     (+ pack FCC_ra (FCCi_2-null) OP_0E hint_taken OPE3_06 (ccond-null) (s12-null))
     (sequence ()
	       (c-call VOID "@cpu@_model_branch" (spr-lr) hint_taken)
	       (set pc (spr-lr)))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni fbnolr
     "float cclr branch never"
     ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3)
      (FR400-MAJOR B-3) (FR450-MAJOR B-3) FR-ACCESS)
     "fbnolr$pack$hint_not_taken"
     (+ pack FCC_nev (FCCi_2-null) OP_0E hint_not_taken OPE3_06 (ccond-null) (s12-null))
     (c-call VOID "@cpu@_model_branch" (spr-lr) hint_not_taken)
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(conditional-branch-cclr fb eq  F OP_0E OPE3_06 Feq  FR-ACCESS "float cclr branch equal")
(conditional-branch-cclr fb ne  F OP_0E OPE3_06 Fne  FR-ACCESS "float cclr branch not equal")
(conditional-branch-cclr fb lg  F OP_0E OPE3_06 Flg  FR-ACCESS "float branch less or greater")
(conditional-branch-cclr fb ue  F OP_0E OPE3_06 Fue  FR-ACCESS "float branch unordered or equal")
(conditional-branch-cclr fb ul  F OP_0E OPE3_06 Ful  FR-ACCESS "float branch unordered or less")
(conditional-branch-cclr fb ge  F OP_0E OPE3_06 Fge  FR-ACCESS "float branch greater or equal")
(conditional-branch-cclr fb lt  F OP_0E OPE3_06 Flt  FR-ACCESS "float branch less")
(conditional-branch-cclr fb uge F OP_0E OPE3_06 Fuge FR-ACCESS "float branch unordered, greater, equal")
(conditional-branch-cclr fb ug  F OP_0E OPE3_06 Fug  FR-ACCESS "float branch unordered or greater")
(conditional-branch-cclr fb le  F OP_0E OPE3_06 Fle  FR-ACCESS "float branch less or equal")
(conditional-branch-cclr fb gt  F OP_0E OPE3_06 Fgt  FR-ACCESS "float branch greater")
(conditional-branch-cclr fb ule F OP_0E OPE3_06 Fule FR-ACCESS "float branch unordered, less or equal")
(conditional-branch-cclr fb u   F OP_0E OPE3_06 Fu   FR-ACCESS "float branch unordered")
(conditional-branch-cclr fb o   F OP_0E OPE3_06 Fo   FR-ACCESS "float branch ordered")

(define-pmacro (conditional-branch-ctrlr prefix cc i-f op ope cond attr comment)
  (dni (.sym prefix cc lr)
       (comment)
       ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2)
	(FR400-MAJOR B-2) (FR450-MAJOR B-2) attr)
       (.str (.sym prefix cc lr) "$pack $" i-f "CCi_2,$ccond,$hint")
       (+ pack (.sym i-f CC_ cc) (.sym i-f CCi_2) op hint ope ccond (s12-null))
       (sequence ()
		 (c-call VOID "@cpu@_model_branch" (spr-lr) hint)
		 (ctrlr-branch-semantics (cond (.sym i-f CCi_2)) ccond))
       ((fr400 (unit u-branch)) (fr450 (unit u-branch))
	(fr500 (unit u-branch)) (fr550 (unit u-branch)))
  )
)

(dni bcralr
     "integer ctrlr branch always"
     ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2)
      (FR400-MAJOR B-2) (FR450-MAJOR B-2))
     "bcralr$pack $ccond$hint_taken"
     (+ pack ICC_ra (ICCi_2-null) OP_0E hint_taken OPE3_03 ccond (s12-null))
     (sequence ()
	       (c-call VOID "@cpu@_model_branch" (spr-lr) hint_taken)
	       (ctrlr-branch-semantics (const BI 1) ccond))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni bcnolr
     "integer ctrlr branch never"
     ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2)
      (FR400-MAJOR B-2) (FR450-MAJOR B-2))
     "bcnolr$pack$hint_not_taken"
     (+ pack ICC_nev (ICCi_2-null) OP_0E hint_not_taken OPE3_03 (ccond-null) (s12-null))
     (sequence ()
	       (c-call VOID "@cpu@_model_branch" (spr-lr) hint_not_taken)
	       (ctrlr-branch-semantics (const BI 0) ccond))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(conditional-branch-ctrlr bc eq  I OP_0E OPE3_03 Ieq  NA "integer ctrlr branch equal")
(conditional-branch-ctrlr bc ne  I OP_0E OPE3_03 Ine  NA "integer ctrlr branch not equal")
(conditional-branch-ctrlr bc le  I OP_0E OPE3_03 Ile  NA "integer ctrlr branch less equal")
(conditional-branch-ctrlr bc gt  I OP_0E OPE3_03 Igt  NA "integer ctrlr branch greater")
(conditional-branch-ctrlr bc lt  I OP_0E OPE3_03 Ilt  NA "integer ctrlr branch less")
(conditional-branch-ctrlr bc ge  I OP_0E OPE3_03 Ige  NA "integer ctrlr branch greater equal")
(conditional-branch-ctrlr bc ls  I OP_0E OPE3_03 Ils  NA "integer ctrlr branch less equal unsigned")
(conditional-branch-ctrlr bc hi  I OP_0E OPE3_03 Ihi  NA "integer ctrlr branch greater unsigned")
(conditional-branch-ctrlr bc c   I OP_0E OPE3_03 Ic   NA "integer ctrlr branch carry set")
(conditional-branch-ctrlr bc nc  I OP_0E OPE3_03 Inc  NA "integer ctrlr branch carry clear")
(conditional-branch-ctrlr bc n   I OP_0E OPE3_03 In   NA "integer ctrlr branch negative")
(conditional-branch-ctrlr bc p   I OP_0E OPE3_03 Ip   NA "integer ctrlr branch positive")
(conditional-branch-ctrlr bc v   I OP_0E OPE3_03 Iv   NA "integer ctrlr branch overflow set")
(conditional-branch-ctrlr bc nv  I OP_0E OPE3_03 Inv  NA "integer ctrlr branch overflow clear")

(dni fcbralr
     "float ctrlr branch always"
     ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2)
      (FR400-MAJOR B-2) (FR450-MAJOR B-2) FR-ACCESS)
     "fcbralr$pack $ccond$hint_taken"
     (+ pack FCC_ra (FCCi_2-null) OP_0E hint_taken OPE3_07 ccond (s12-null))
     (sequence ()
	       (c-call VOID "@cpu@_model_branch" (spr-lr) hint_taken)
	       (ctrlr-branch-semantics (const BI 1) ccond))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni fcbnolr
     "float ctrlr branch never"
     ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2)
      (FR400-MAJOR B-2) (FR450-MAJOR B-2) FR-ACCESS)
     "fcbnolr$pack$hint_not_taken"
     (+ pack FCC_nev (FCCi_2-null) OP_0E hint_not_taken OPE3_07 (ccond-null) (s12-null))
     (sequence ()
	       (c-call VOID "@cpu@_model_branch" (spr-lr) hint_not_taken)
	       (ctrlr-branch-semantics (const BI 0) ccond))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(conditional-branch-ctrlr fcb eq  F OP_0E OPE3_07 Feq  FR-ACCESS "float cclr branch equal")
(conditional-branch-ctrlr fcb ne  F OP_0E OPE3_07 Fne  FR-ACCESS "float cclr branch not equal")
(conditional-branch-ctrlr fcb lg  F OP_0E OPE3_07 Flg  FR-ACCESS "float branch less or greater")
(conditional-branch-ctrlr fcb ue  F OP_0E OPE3_07 Fue  FR-ACCESS "float branch unordered or equal")
(conditional-branch-ctrlr fcb ul  F OP_0E OPE3_07 Ful  FR-ACCESS "float branch unordered or less")
(conditional-branch-ctrlr fcb ge  F OP_0E OPE3_07 Fge  FR-ACCESS "float branch greater or equal")
(conditional-branch-ctrlr fcb lt  F OP_0E OPE3_07 Flt  FR-ACCESS "float branch less")
(conditional-branch-ctrlr fcb uge F OP_0E OPE3_07 Fuge FR-ACCESS "float branch unordered, greater, equal")
(conditional-branch-ctrlr fcb ug  F OP_0E OPE3_07 Fug  FR-ACCESS "float branch unordered or greater")
(conditional-branch-ctrlr fcb le  F OP_0E OPE3_07 Fle  FR-ACCESS "float branch less or equal")
(conditional-branch-ctrlr fcb gt  F OP_0E OPE3_07 Fgt  FR-ACCESS "float branch greater")
(conditional-branch-ctrlr fcb ule F OP_0E OPE3_07 Fule FR-ACCESS "float branch unordered, less or equal")
(conditional-branch-ctrlr fcb u   F OP_0E OPE3_07 Fu   FR-ACCESS "float branch unordered")
(conditional-branch-ctrlr fcb o   F OP_0E OPE3_07 Fo   FR-ACCESS "float branch ordered")

(define-pmacro (jump-and-link-semantics base offset LI)
  (sequence ()
	    (if (eq LI 1)
		(c-call VOID "@cpu@_set_write_next_vliw_addr_to_LR" 1))
	    ; Target address gets aligned here
	    (set pc (and (add base offset) #xfffffffc))
	    (c-call VOID "@cpu@_model_branch" pc #x2)) ; hint branch taken
)

(dni jmpl
     "jump and link"
     ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6)
      (FR400-MAJOR I-5) (FR450-MAJOR I-5))
     "jmpl$pack @($GRi,$GRj)"
     (+ pack (misc-null-1) (LI-off) OP_0C GRi (misc-null-2) GRj)
     (jump-and-link-semantics GRi GRj LI)
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dann callann "call annotation" SI "call_annotation" "at")

(dni calll
     "call and link"
     ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6)
      (FR400-MAJOR I-5) (FR450-MAJOR I-5))
     "calll$pack $callann($GRi,$GRj)"
     (+ pack (misc-null-1) (LI-on) OP_0C GRi (misc-null-2) GRj)
     (jump-and-link-semantics GRi GRj LI)
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni jmpil
     "jump immediate and link"
     ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6)
      (FR400-MAJOR I-5) (FR450-MAJOR I-5))
     "jmpil$pack @($GRi,$s12)"
     (+ pack (misc-null-1) (LI-off) OP_0D GRi s12)
     (jump-and-link-semantics GRi s12 LI)
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni callil
     "call immediate and link"
     ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6)
      (FR400-MAJOR I-5) (FR450-MAJOR I-5))
     "callil$pack @($GRi,$s12)"
     (+ pack (misc-null-1) (LI-on) OP_0D GRi s12)
     (jump-and-link-semantics GRi s12 LI)
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni call
     "call and link"
     ((UNIT B0) (FR500-MAJOR B-4) (FR550-MAJOR B-4)
      (FR400-MAJOR B-4) (FR450-MAJOR B-4))
     "call$pack $label24"
     (+ pack OP_0F label24)
     (sequence ()
	       (c-call VOID "@cpu@_set_write_next_vliw_addr_to_LR" 1)
	       (set pc label24)
	       (c-call VOID "@cpu@_model_branch" pc #x2)) ; hint branch taken
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni rett
    "return from trap"
    ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
     (FR400-MAJOR C-2) (FR450-MAJOR C-2) PRIVILEGED)
    "rett$pack $debug"
    (+ pack (misc-null-1) debug OP_05 (rs-null) (s12-null))
    ; frv_rett handles operating vs user mode
    (sequence ()
	      (set pc (c-call UWI "frv_rett" pc debug))
	      (c-call VOID "@cpu@_model_branch" pc #x2)) ; hint branch taken
    ()
)

(dni rei
     "run exception instruction"
     ((UNIT C) (FR500-MAJOR C-1) (MACH frv) PRIVILEGED)
     "rei$pack $eir"
     (+ pack (rd-null) OP_37 eir (s12-null))
     (nop) ; for now
     ()
)

(define-pmacro (trap-semantics cond base offset)
  (if cond
      (sequence ()
		; This is defered to frv_itrap because for the breakpoint
		; case we want to change as little of the machine state as
		; possible.
		;
		; PCSR=PC
		; PSR.PS=PSR.S
		; PSR.ET=0
		; if PSR.ESR==1
		;   SR0 through SR3=GR4 through GR7
		; TBR.TT=0x80 + ((GRi + s12) & 0x7f)
		; PC=TBR
		; We still should indicate what is modified by this insn.
		(clobber (spr-pcsr))
		(clobber psr_ps)
		(clobber psr_et)
		(clobber tbr_tt)
		(if (ne psr_esr (const 0))
		    (sequence ()
			      (clobber (spr-sr0))
			      (clobber (spr-sr1))
			      (clobber (spr-sr2))
			      (clobber (spr-sr3))))
		; frv_itrap handles operating vs user mode
		(c-call VOID "frv_itrap" pc base offset)))
)

(define-pmacro (trap-r prefix cc i-f op ope cond attr comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
	(FR400-MAJOR C-1) (FR450-MAJOR C-1) attr)
       (.str (.sym prefix cc) "$pack $" i-f "CCi_2,$GRi,$GRj")
       (+ pack (.sym i-f CC_ cc) (.sym i-f CCi_2) op GRi (misc-null-3) ope GRj)
       (trap-semantics (cond (.sym i-f CCi_2)) GRi GRj)
       ((fr400 (unit u-trap)) (fr450 (unit u-trap))
	(fr500 (unit u-trap)) (fr550 (unit u-trap)))
  )
)

(dni tra
     "integer trap always"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1))
     "tra$pack $GRi,$GRj"
     (+ pack ICC_ra (ICCi_2-null) OP_04 GRi (misc-null-3) OPE4_0 GRj)
     (trap-semantics (const BI 1) GRi GRj)
     ((fr400 (unit u-trap)) (fr450 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(dni tno
     "integer trap never"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1))
     "tno$pack"
     (+ pack ICC_nev (ICCi_2-null) OP_04 (GRi-null) (misc-null-3) OPE4_0 (GRj-null))
     (trap-semantics (const BI 0) GRi GRj)
     ((fr400 (unit u-trap)) (fr450 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(trap-r t eq  I OP_04 OPE4_0 Ieq  NA "integer trap equal")
(trap-r t ne  I OP_04 OPE4_0 Ine  NA "integer trap not equal")
(trap-r t le  I OP_04 OPE4_0 Ile  NA "integer trap less or equal")
(trap-r t gt  I OP_04 OPE4_0 Igt  NA "integer trap greater")
(trap-r t lt  I OP_04 OPE4_0 Ilt  NA "integer trap less")
(trap-r t ge  I OP_04 OPE4_0 Ige  NA "integer trap greater or equal")
(trap-r t ls  I OP_04 OPE4_0 Ils  NA "integer trap less or equal unsigned")
(trap-r t hi  I OP_04 OPE4_0 Ihi  NA "integer trap greater unsigned")
(trap-r t c   I OP_04 OPE4_0 Ic   NA "integer trap carry set")
(trap-r t nc  I OP_04 OPE4_0 Inc  NA "integer trap carry clear")
(trap-r t n   I OP_04 OPE4_0 In   NA "integer trap negative")
(trap-r t p   I OP_04 OPE4_0 Ip   NA "integer trap positive")
(trap-r t v   I OP_04 OPE4_0 Iv   NA "integer trap overflow set")
(trap-r t nv  I OP_04 OPE4_0 Inv  NA "integer trap overflow clear")

(dni ftra
     "float trap always"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1) FR-ACCESS)
     "ftra$pack $GRi,$GRj"
     (+ pack FCC_ra (FCCi_2-null) OP_04 GRi (misc-null-3) OPE4_1 GRj)
     (trap-semantics (const BI 1) GRi GRj)
     ((fr400 (unit u-trap)) (fr450 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(dni ftno
     "flost trap never"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1) FR-ACCESS)
     "ftno$pack"
     (+ pack FCC_nev (FCCi_2-null) OP_04 (GRi-null) (misc-null-3) OPE4_1 (GRj-null))
     (trap-semantics (const BI 0) GRi GRj)
     ((fr400 (unit u-trap)) (fr450 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(trap-r ft ne  F OP_04 OPE4_1 Fne  FR-ACCESS "float trap not equal")
(trap-r ft eq  F OP_04 OPE4_1 Feq  FR-ACCESS "float trap equal")
(trap-r ft lg  F OP_04 OPE4_1 Flg  FR-ACCESS "float trap greater or less")
(trap-r ft ue  F OP_04 OPE4_1 Fue  FR-ACCESS "float trap unordered or equal")
(trap-r ft ul  F OP_04 OPE4_1 Ful  FR-ACCESS "float trap unordered or less")
(trap-r ft ge  F OP_04 OPE4_1 Fge  FR-ACCESS "float trap greater or equal")
(trap-r ft lt  F OP_04 OPE4_1 Flt  FR-ACCESS "float trap less")
(trap-r ft uge F OP_04 OPE4_1 Fuge FR-ACCESS "float trap unordered greater or equal")
(trap-r ft ug  F OP_04 OPE4_1 Fug  FR-ACCESS "float trap unordered or greater")
(trap-r ft le  F OP_04 OPE4_1 Fle  FR-ACCESS "float trap less or equal")
(trap-r ft gt  F OP_04 OPE4_1 Fgt  FR-ACCESS "float trap greater")
(trap-r ft ule F OP_04 OPE4_1 Fule FR-ACCESS "float trap unordered less or equal")
(trap-r ft u   F OP_04 OPE4_1 Fu   FR-ACCESS "float trap unordered")
(trap-r ft o   F OP_04 OPE4_1 Fo   FR-ACCESS "float trap ordered")

(define-pmacro (trap-immed prefix cc i-f op cond attr comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
	(FR400-MAJOR C-1) (FR450-MAJOR C-1) attr)
       (.str (.sym prefix cc) "$pack $" i-f "CCi_2,$GRi,$s12")
       (+ pack (.sym i-f CC_ cc) (.sym i-f CCi_2) op GRi s12)
       (trap-semantics (cond (.sym i-f CCi_2)) GRi s12)
       ((fr400 (unit u-trap)) (fr450 (unit u-trap))
	(fr500 (unit u-trap)) (fr550 (unit u-trap)))
  )
)

(dni tira
     "integer trap always"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1))
     "tira$pack $GRi,$s12"
     (+ pack ICC_ra (ICCi_2-null) OP_1C GRi s12)
     (trap-semantics (const BI 1) GRi s12)
     ((fr400 (unit u-trap)) (fr450 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(dni tino
     "integer trap never"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1))
     "tino$pack"
     (+ pack ICC_nev (ICCi_2-null) OP_1C (GRi-null) (s12-null))
     (trap-semantics (const BI 0) GRi s12)
     ((fr400 (unit u-trap)) (fr450 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(trap-immed ti eq  I OP_1C Ieq  NA "integer trap equal")
(trap-immed ti ne  I OP_1C Ine  NA "integer trap not equal")
(trap-immed ti le  I OP_1C Ile  NA "integer trap less or equal")
(trap-immed ti gt  I OP_1C Igt  NA "integer trap greater")
(trap-immed ti lt  I OP_1C Ilt  NA "integer trap less")
(trap-immed ti ge  I OP_1C Ige  NA "integer trap greater or equal")
(trap-immed ti ls  I OP_1C Ils  NA "integer trap less or equal unsigned")
(trap-immed ti hi  I OP_1C Ihi  NA "integer trap greater unsigned")
(trap-immed ti c   I OP_1C Ic   NA "integer trap carry set")
(trap-immed ti nc  I OP_1C Inc  NA "integer trap carry clear")
(trap-immed ti n   I OP_1C In   NA "integer trap negative")
(trap-immed ti p   I OP_1C Ip   NA "integer trap positive")
(trap-immed ti v   I OP_1C Iv   NA "integer trap overflow set")
(trap-immed ti nv  I OP_1C Inv  NA "integer trap overflow clear")

(dni ftira
     "float trap always"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1) FR-ACCESS)
     "ftira$pack $GRi,$s12"
     (+ pack FCC_ra (ICCi_2-null) OP_1D GRi s12)
     (trap-semantics (const BI 1) GRi s12)
     ((fr400 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(dni ftino
     "float trap never"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1) FR-ACCESS)
     "ftino$pack"
     (+ pack FCC_nev (FCCi_2-null) OP_1D (GRi-null) (s12-null))
     (trap-semantics (const BI 0) GRi s12)
     ((fr400 (unit u-trap)) (fr450 (unit u-trap))
      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)

(trap-immed fti ne  F OP_1D Fne  FR-ACCESS "float trap not equal")
(trap-immed fti eq  F OP_1D Feq  FR-ACCESS "float trap equal")
(trap-immed fti lg  F OP_1D Flg  FR-ACCESS "float trap greater or less")
(trap-immed fti ue  F OP_1D Fue  FR-ACCESS "float trap unordered or equal")
(trap-immed fti ul  F OP_1D Ful  FR-ACCESS "float trap unordered or less")
(trap-immed fti ge  F OP_1D Fge  FR-ACCESS "float trap greater or equal")
(trap-immed fti lt  F OP_1D Flt  FR-ACCESS "float trap less")
(trap-immed fti uge F OP_1D Fuge FR-ACCESS "float trap unordered greater or equal")
(trap-immed fti ug  F OP_1D Fug  FR-ACCESS "float trap unordered or greater")
(trap-immed fti le  F OP_1D Fle  FR-ACCESS "float trap less or equal")
(trap-immed fti gt  F OP_1D Fgt  FR-ACCESS "float trap greater")
(trap-immed fti ule F OP_1D Fule FR-ACCESS "float trap unordered less or equal")
(trap-immed fti u   F OP_1D Fu   FR-ACCESS "float trap unordered")
(trap-immed fti o   F OP_1D Fo   FR-ACCESS "float trap ordered")

(dni break
     "break trap"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1))
     "break$pack"
     (+ pack (rd-null) OP_04 (rs-null) (misc-null-3) OPE4_3 (GRj-null))
     (sequence ()
	       ; This is defered to frv_break because for the breakpoint
	       ; case we want to change as little of the machine state as
	       ; possible.
	       ;
	       ; BPCSR=PC
	       ; BPSR.BS=PSR.S
	       ; BPSR.BET=PSR.ET
	       ; PSR.S=1
	       ; PSR.ET=0
	       ; TBR.TT=0xff
	       ; PC=TBR
	       ; We still should indicate what is modified by this insn.
	       (clobber (spr-bpcsr))
	       (clobber bpsr_bs)
	       (clobber bpsr_bet)
	       (clobber psr_s)
	       (clobber psr_et)
	       (clobber tbr_tt)
	       (c-call VOID "frv_break"))
     ()
)

(dni mtrap
     "media trap"
     ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1)
      (FR400-MAJOR C-1) (FR450-MAJOR C-1) FR-ACCESS)
     "mtrap$pack"
     (+ pack (rd-null) OP_04 (rs-null) (misc-null-3) OPE4_2 (GRj-null))
     (c-call VOID "frv_mtrap")
     ()
)

(define-pmacro (condition-code-logic name operation ope comment)
  (dni name
       (comment)
       ((UNIT B01) (FR500-MAJOR B-6) (FR550-MAJOR B-6)
	(FR400-MAJOR B-6) (FR450-MAJOR B-6))
       (.str name "$pack $CRi,$CRj,$CRk")
       (+ pack (misc-null-6) CRk OP_0A (misc-null-7) CRi ope (misc-null-8) CRj)
       (set CRk (c-call UQI "@cpu@_cr_logic" operation CRi CRj))
       ()
  )
)
(define-pmacro (op-andcr)   0)
(define-pmacro (op-orcr)    1)
(define-pmacro (op-xorcr)   2)
(define-pmacro (op-nandcr)  3)
(define-pmacro (op-norcr)   4)
(define-pmacro (op-andncr)  5)
(define-pmacro (op-orncr)   6)
(define-pmacro (op-nandncr) 7)
(define-pmacro (op-norncr)  8)

(define-pmacro (cr-true)  3)
(define-pmacro (cr-false) 2)
(define-pmacro (cr-undefined) 0)

(condition-code-logic andcr   (op-andcr)   OPE1_08 "and   condition code regs")
(condition-code-logic orcr    (op-orcr)    OPE1_09 "or    condition code regs")
(condition-code-logic xorcr   (op-xorcr)   OPE1_0A "xor   condition code regs")
(condition-code-logic nandcr  (op-nandcr)  OPE1_0C "nand  condition code regs")
(condition-code-logic norcr   (op-norcr)   OPE1_0D "nor   condition code regs")
(condition-code-logic andncr  (op-andncr)  OPE1_10 "andn  condition code regs")
(condition-code-logic orncr   (op-orncr)   OPE1_11 "orn   condition code regs")
(condition-code-logic nandncr (op-nandncr) OPE1_14 "nandn condition code regs")
(condition-code-logic norncr  (op-norncr)  OPE1_15 "norn  condition code regs")

(dni notcr
     ("not cccr register")
     ((UNIT B01) (FR500-MAJOR B-6) (FR550-MAJOR B-6)
      (FR400-MAJOR B-6) (FR450-MAJOR B-6))
     (.str notcr "$pack $CRj,$CRk")
     (+ pack (misc-null-6) CRk OP_0A (rs-null) OPE1_0B (misc-null-8) CRj)
     (set CRk (xor CRj 1))
     ()
)

(define-pmacro (check-semantics cond cr)
  (if cond (set cr (cr-true)) (set cr (cr-false)))
)

(define-pmacro (check-int-condition-code prefix cc op cond comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
	(FR400-MAJOR B-5) (FR450-MAJOR B-5))
       (.str (.sym prefix cc) "$pack $ICCi_3,$CRj_int")
       (+ pack (.sym ICC_ cc) CRj_int op (misc-null-5) ICCi_3)
       (check-semantics (cond ICCi_3) CRj_int)
       ((fr400 (unit u-check)) (fr450 (unit u-check))
	(fr500 (unit u-check)) (fr550 (unit u-check)))
  )
)

(dni ckra
     "check integer cc always"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5))
     "ckra$pack $CRj_int"
     (+ pack ICC_ra CRj_int OP_08 (misc-null-5) (ICCi_3-null))
     (check-semantics (const BI 1) CRj_int)
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(dni ckno
     "check integer cc never"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5))
     "ckno$pack $CRj_int"
     (+ pack ICC_nev CRj_int OP_08 (misc-null-5) (ICCi_3-null))
     (check-semantics (const BI 0) CRj_int)
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(check-int-condition-code ck eq  OP_08 Ieq  "check integer cc equal")
(check-int-condition-code ck ne  OP_08 Ine  "check integer cc not equal")
(check-int-condition-code ck le  OP_08 Ile  "check integer cc less or equal")
(check-int-condition-code ck gt  OP_08 Igt  "check integer cc greater")
(check-int-condition-code ck lt  OP_08 Ilt  "check integer cc less")
(check-int-condition-code ck ge  OP_08 Ige  "check integer cc greater or equal")
(check-int-condition-code ck ls  OP_08 Ils  "check integer cc less or equal unsigned")
(check-int-condition-code ck hi  OP_08 Ihi  "check integer cc greater unsigned")
(check-int-condition-code ck c   OP_08 Ic   "check integer cc carry set")
(check-int-condition-code ck nc  OP_08 Inc  "check integer cc carry clear")
(check-int-condition-code ck n   OP_08 In   "check integer cc negative")
(check-int-condition-code ck p   OP_08 Ip   "check integer cc positive")
(check-int-condition-code ck v   OP_08 Iv   "check integer cc overflow set")
(check-int-condition-code ck nv  OP_08 Inv  "check integer cc overflow clear")

(define-pmacro (check-float-condition-code prefix cc op cond comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
	(FR400-MAJOR B-5) (FR450-MAJOR B-5) FR-ACCESS)
       (.str (.sym prefix cc) "$pack $FCCi_3,$CRj_float")
       (+ pack (.sym FCC_ cc) CRj_float op (misc-null-5) FCCi_3)
       (check-semantics (cond FCCi_3) CRj_float)
       ((fr400 (unit u-check)) (fr450 (unit u-check))
	(fr500 (unit u-check)) (fr550 (unit u-check)))
  )
)

(dni fckra
     "check float cc always"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5) FR-ACCESS)
     "fckra$pack $CRj_float"
     (+ pack FCC_ra CRj_float OP_09 (misc-null-5) FCCi_3)
     (check-semantics (const BI 1) CRj_float)
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(dni fckno
     "check float cc never"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5) FR-ACCESS)
     "fckno$pack $CRj_float"
     (+ pack FCC_nev CRj_float OP_09 (misc-null-5) FCCi_3)
     (check-semantics (const BI 0) CRj_float)
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(check-float-condition-code fck ne  OP_09 Fne  "check float cc not equal")
(check-float-condition-code fck eq  OP_09 Feq  "check float cc equal")
(check-float-condition-code fck lg  OP_09 Flg  "check float cc greater or less")
(check-float-condition-code fck ue  OP_09 Fue  "check float cc unordered or equal")
(check-float-condition-code fck ul  OP_09 Ful  "check float cc unordered or less")
(check-float-condition-code fck ge  OP_09 Fge  "check float cc greater or equal")
(check-float-condition-code fck lt  OP_09 Flt  "check float cc less")
(check-float-condition-code fck uge OP_09 Fuge "check float cc unordered greater or equal")
(check-float-condition-code fck ug  OP_09 Fug  "check float cc unordered or greater")
(check-float-condition-code fck le  OP_09 Fle  "check float cc less or equal")
(check-float-condition-code fck gt  OP_09 Fgt  "check float cc greater")
(check-float-condition-code fck ule OP_09 Fule "check float cc unordered less or equal")
(check-float-condition-code fck u   OP_09 Fu   "check float cc unordered")
(check-float-condition-code fck o   OP_09 Fo   "check float cc ordered")

(define-pmacro (conditional-check-int-condition-code prefix cc op ope test comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
	(FR400-MAJOR B-5) (FR450-MAJOR B-5) CONDITIONAL)
       (.str (.sym prefix cc) "$pack $ICCi_3,$CRj_int,$CCi,$cond")
       (+ pack (.sym ICC_ cc) CRj_int op (rs-null) CCi cond ope
	  (misc-null-9) ICCi_3)
       (if (eq CCi (or cond 2))
	   (check-semantics (test ICCi_3) CRj_int)
	   (set CRj_int (cr-undefined)))
       ((fr400 (unit u-check)) (fr450 (unit u-check))
	(fr500 (unit u-check)) (fr550 (unit u-check)))
  )
)

(dni cckra
     "conditional check integer cc always"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5) CONDITIONAL)
     "cckra$pack $CRj_int,$CCi,$cond"
     (+ pack ICC_ra CRj_int OP_6A (rs-null) CCi cond OPE4_0
	(misc-null-9) (ICCi_3-null))
     (if (eq CCi (or cond 2))
	 (check-semantics (const BI 1) CRj_int)
	 (set CRj_int (cr-undefined)))
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(dni cckno
     "conditional check integer cc never"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5) CONDITIONAL)
     "cckno$pack $CRj_int,$CCi,$cond"
     (+ pack ICC_nev CRj_int OP_6A (rs-null) CCi cond OPE4_0
	(misc-null-9) (ICCi_3-null))
     (if (eq CCi (or cond 2))
	 (check-semantics (const BI 0) CRj_int)
	 (set CRj_int (cr-undefined)))
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(conditional-check-int-condition-code cck eq  OP_6A OPE4_0 Ieq  "check integer cc equal")
(conditional-check-int-condition-code cck ne  OP_6A OPE4_0 Ine  "check integer cc not equal")
(conditional-check-int-condition-code cck le  OP_6A OPE4_0 Ile  "check integer cc less or equal")
(conditional-check-int-condition-code cck gt  OP_6A OPE4_0 Igt  "check integer cc greater")
(conditional-check-int-condition-code cck lt  OP_6A OPE4_0 Ilt  "check integer cc less")
(conditional-check-int-condition-code cck ge  OP_6A OPE4_0 Ige  "check integer cc greater or equal")
(conditional-check-int-condition-code cck ls  OP_6A OPE4_0 Ils  "check integer cc less or equal unsigned")
(conditional-check-int-condition-code cck hi  OP_6A OPE4_0 Ihi  "check integer cc greater unsigned")
(conditional-check-int-condition-code cck c   OP_6A OPE4_0 Ic   "check integer cc carry set")
(conditional-check-int-condition-code cck nc  OP_6A OPE4_0 Inc  "check integer cc carry clear")
(conditional-check-int-condition-code cck n   OP_6A OPE4_0 In   "check integer cc negative")
(conditional-check-int-condition-code cck p   OP_6A OPE4_0 Ip   "check integer cc positive")
(conditional-check-int-condition-code cck v   OP_6A OPE4_0 Iv   "check integer cc overflow set")
(conditional-check-int-condition-code cck nv  OP_6A OPE4_0 Inv  "check integer cc overflow clear")

(define-pmacro (conditional-check-float-condition-code prefix cc op ope test comment)
  (dni (.sym prefix cc)
       (comment)
       ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
	(FR400-MAJOR B-5) (FR450-MAJOR B-5) CONDITIONAL FR-ACCESS)
       (.str (.sym prefix cc) "$pack $FCCi_3,$CRj_float,$CCi,$cond")
       (+ pack (.sym FCC_ cc) CRj_float op (rs-null) CCi cond ope
	  (misc-null-9) FCCi_3)
       (if (eq CCi (or cond 2))
	   (check-semantics (test FCCi_3) CRj_float)
	   (set CRj_float (cr-undefined)))
       ((fr400 (unit u-check)) (fr450 (unit u-check))
	(fr500 (unit u-check)) (fr550 (unit u-check)))
  )
)

(dni cfckra
     "conditional check float cc always"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5) CONDITIONAL FR-ACCESS)
     "cfckra$pack $CRj_float,$CCi,$cond"
     (+ pack FCC_ra CRj_float OP_6A (rs-null) CCi cond OPE4_1
	(misc-null-9) (FCCi_3-null))
     (if (eq CCi (or cond 2))
	 (check-semantics (const BI 1) CRj_float)
	 (set CRj_float (cr-undefined)))
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(dni cfckno
     "conditional check float cc never"
     ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5)
      (FR400-MAJOR B-5) (FR450-MAJOR B-5) CONDITIONAL FR-ACCESS)
     "cfckno$pack $CRj_float,$CCi,$cond"
     (+ pack FCC_nev CRj_float OP_6A (rs-null) CCi cond OPE4_1
	(misc-null-9) (FCCi_3-null))
     (if (eq CCi (or cond 2))
	 (check-semantics (const BI 0) CRj_float)
	 (set CRj_float (cr-undefined)))
     ((fr400 (unit u-check)) (fr450 (unit u-check))
      (fr500 (unit u-check)) (fr550 (unit u-check)))
)

(conditional-check-float-condition-code cfck ne  OP_6A OPE4_1 Fne  "check float cc not equal")
(conditional-check-float-condition-code cfck eq  OP_6A OPE4_1 Feq  "check float cc equal")
(conditional-check-float-condition-code cfck lg  OP_6A OPE4_1 Flg  "check float cc greater or less")
(conditional-check-float-condition-code cfck ue  OP_6A OPE4_1 Fue  "check float cc unordered or equal")
(conditional-check-float-condition-code cfck ul  OP_6A OPE4_1 Ful  "check float cc unordered or less")
(conditional-check-float-condition-code cfck ge  OP_6A OPE4_1 Fge  "check float cc greater or equal")
(conditional-check-float-condition-code cfck lt  OP_6A OPE4_1 Flt  "check float cc less")
(conditional-check-float-condition-code cfck uge OP_6A OPE4_1 Fuge "check float cc unordered greater or equal")
(conditional-check-float-condition-code cfck ug  OP_6A OPE4_1 Fug  "check float cc unordered or greater")
(conditional-check-float-condition-code cfck le  OP_6A OPE4_1 Fle  "check float cc less or equal")
(conditional-check-float-condition-code cfck gt  OP_6A OPE4_1 Fgt  "check float cc greater")
(conditional-check-float-condition-code cfck ule OP_6A OPE4_1 Fule "check float cc unordered less or equal")
(conditional-check-float-condition-code cfck u   OP_6A OPE4_1 Fu   "check float cc unordered")
(conditional-check-float-condition-code cfck o   OP_6A OPE4_1 Fo   "check float cc ordered")

(dni cjmpl
     "conditional jump and link"
     ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6)
      (FR400-MAJOR I-5) (FR450-MAJOR I-5) CONDITIONAL)
     "cjmpl$pack @($GRi,$GRj),$CCi,$cond"
     (+ pack (misc-null-1) (LI-off) OP_6A GRi CCi cond OPE4_2 GRj)
     (if (eq CCi (or cond 2))
	 (jump-and-link-semantics GRi GRj LI))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(dni ccalll
     "conditional call and link"
     ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6)
      (FR400-MAJOR I-5) (FR450-MAJOR I-5) CONDITIONAL)
     "ccalll$pack @($GRi,$GRj),$CCi,$cond"
     (+ pack (misc-null-1) (LI-on) OP_6A GRi CCi cond OPE4_2 GRj)
     (if (eq CCi (or cond 2))
	 (jump-and-link-semantics GRi GRj LI))
     ((fr400 (unit u-branch)) (fr450 (unit u-branch))
      (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)

(define-pmacro (cache-invalidate name cache all op ope profile comment)
  (dni name
       (comment)
       ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
	(FR400-MAJOR C-2) (FR450-MAJOR C-2))
       (.str name "$pack @($GRi,$GRj)")
       (+ pack (rd-null) op GRi ope GRj)
       (c-call VOID (.str "@cpu@_" cache "_cache_invalidate") (add GRi GRj) all)
       profile
  )
)

(cache-invalidate ici insn 0 OP_03 OPE1_38
		  ((fr400 (unit u-ici)) (fr450 (unit u-ici))
		   (fr500 (unit u-ici)) (fr550 (unit u-ici)))
		  "invalidate insn cache")
(cache-invalidate dci data 0 OP_03 OPE1_3C
		  ((fr400 (unit u-dci)) (fr450 (unit u-dci))
		   (fr500 (unit u-dci)) (fr550 (unit u-dci)))
		  "invalidate data cache")

(define-pmacro (cache-invalidate-entry name cache op ope profile comment)
  (dni name
       (comment)
       ((UNIT C) (MACH fr400,fr450,fr550) (FR550-MAJOR C-2)
	(FR400-MAJOR C-2) (FR450-MAJOR C-2))
       (.str name "$pack @($GRi,$GRj),$ae")
       (+ pack (misc-null-1) ae op GRi ope GRj)
       (if (eq ae 0)
	   (c-call VOID (.str "@cpu@_" cache "_cache_invalidate") (add GRi GRj) -1) ; Invalid ae setting for this insn
	   (c-call VOID (.str "@cpu@_" cache "_cache_invalidate") (add GRi GRj) ae))
       profile
  )
)

(cache-invalidate-entry icei insn OP_03 OPE1_39
			((fr400 (unit u-ici)) (fr450 (unit u-ici))
			 (fr550 (unit u-ici)))
			"invalidate insn cache entry")
(cache-invalidate-entry dcei data OP_03 OPE1_3A
			((fr400 (unit u-dci)) (fr450 (unit u-dci))
			 (fr550 (unit u-dci)))
			"invalidate data cache entry")

(dni dcf
     "Data cache flush"
     ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
      (FR400-MAJOR C-2) (FR450-MAJOR C-2))
     "dcf$pack @($GRi,$GRj)"
     (+ pack (rd-null) OP_03 GRi OPE1_3D GRj)
     (c-call VOID "@cpu@_data_cache_flush" (add GRi GRj) 0)
     ((fr400 (unit u-dcf)) (fr450 (unit u-dcf))
      (fr500 (unit u-dcf)) (fr550 (unit u-dcf)))
)

(dni dcef
     "Data cache entry flush"
     ((UNIT C) (MACH fr400,fr450,fr550) (FR550-MAJOR C-2)
      (FR400-MAJOR C-2) (FR450-MAJOR C-2))
     "dcef$pack @($GRi,$GRj),$ae"
     (+ pack (misc-null-1) ae OP_03 GRi OPE1_3B GRj)
     (if (eq ae 0)
	 (c-call VOID "@cpu@_data_cache_flush" (add GRi GRj) -1)
	 (c-call VOID "@cpu@_data_cache_flush" (add GRi GRj) ae))
     ((fr400 (unit u-dcf)) (fr450 (unit u-dcf)) (fr550 (unit u-dcf)))
)

(define-pmacro (write-TLB name insn op ope comment)
  (dni name
       (comment)
       ((UNIT C) (FR500-MAJOR C-2) (MACH frv) PRIVILEGED)
       (.str insn "$pack $GRk,@($GRi,$GRj)")
       (+ pack GRk op GRi ope GRj)
       (nop) ; for now
       ()
  )
)

(write-TLB witlb witlb OP_03 OPE1_32 "write for insn TLB")
(write-TLB wdtlb wdtlb OP_03 OPE1_36 "write for data TLB")

(define-pmacro (invalidate-TLB name insn op ope comment)
  (dni name
       (comment)
       ((UNIT C) (FR500-MAJOR C-2) (MACH frv) PRIVILEGED)
       (.str insn "$pack @($GRi,$GRj)")
       (+ pack (rd-null) op GRi ope GRj)
       (nop) ; for now
       ()
  )
)

(invalidate-TLB itlbi itlbi OP_03 OPE1_33 "invalidate insn TLB")
(invalidate-TLB dtlbi dtlbi OP_03 OPE1_37 "invalidate data TLB")

(define-pmacro (cache-preload name cache pipe attrs op ope profile comment)
  (dni name
       (comment)
       (.splice (UNIT pipe) (FR500-MAJOR C-2)
		(FR400-MAJOR C-2) (.unsplice attrs))
       (.str name "$pack $GRi,$GRj,$lock")
       (+ pack (misc-null-1) lock op GRi ope GRj)
       (c-call VOID (.str "@cpu@_" cache "_cache_preload") GRi GRj lock)
       profile
  )
)

(cache-preload icpl insn C ((FR550-MAJOR C-2) (FR450-MAJOR C-2)) OP_03 OPE1_30
	       ((fr400 (unit u-icpl)) (fr450 (unit u-icpl)) 
		(fr500 (unit u-icpl)) (fr550 (unit u-icpl)))
	       "preload insn cache")
(cache-preload dcpl data DCPL ((FR550-MAJOR I-8) (FR450-MAJOR I-2)) OP_03 OPE1_34
	       ((fr400 (unit u-dcpl)) (fr450 (unit u-dcpl))
		(fr500 (unit u-dcpl)) (fr550 (unit u-dcpl)))
	       "preload data cache")

(define-pmacro (cache-unlock name cache op ope profile comment)
  (dni name
       (comment)
       ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
	(FR400-MAJOR C-2) (FR450-MAJOR C-2))
       (.str name "$pack $GRi")
       (+ pack (rd-null) op GRi ope (GRj-null))
       (c-call VOID (.str "@cpu@_" cache "_cache_unlock") GRi)
       profile
  )
)

(cache-unlock icul insn OP_03 OPE1_31
	      ((fr400 (unit u-icul)) (fr450 (unit u-icul))
	       (fr500 (unit u-icul)) (fr550 (unit u-icul)))
	      "unlock insn cache")
(cache-unlock dcul data OP_03 OPE1_35
	      ((fr400 (unit u-dcul)) (fr450 (unit u-dcul))
	       (fr500 (unit u-dcul)) (fr550 (unit u-dcul)))
	      "unlock data cache")

(define-pmacro (barrier name insn op ope profile comment)
  (dni name
       (comment)
       ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2)
	(FR400-MAJOR C-2) (FR450-MAJOR C-2))
       (.str insn "$pack")
       (+ pack (rd-null) op (rs-null) ope (GRj-null))
       (nop) ; sufficient implementation
       profile
  )
)

(barrier bar    bar    OP_03 OPE1_3E
	 ((fr400 (unit u-barrier)) (fr450 (unit u-barrier))
	  (fr500 (unit u-barrier)))
	 "barrier")
(barrier membar membar OP_03 OPE1_3F
	 ((fr400 (unit u-membar)) (fr450 (unit u-membar))
	  (fr500 (unit u-membar)))
	 "memory barrier")

; Load real address instructions
(define-pmacro (load-real-address name insn what op ope)
  (dni name
       (.str "Load real address of " what)
       ((UNIT C) (FR450-MAJOR C-2) (MACH fr450))
       (.str insn "$pack $GRi,$GRk,$LRAE,$LRAD,$LRAS")
       (+ pack GRk op GRi ope LRAE LRAD LRAS (LRA-null))
       (nop) ; not simulated
       ()
  )
)

(load-real-address lrai "lrai" "instruction" OP_03 OPE1_20)
(load-real-address lrad "lrad" "data" OP_03 OPE1_21)

(dni tlbpr
     "TLB Probe"
     ((UNIT C) (FR450-MAJOR C-2) (MACH fr450))
     "tlbpr$pack $GRi,$GRj,$TLBPRopx,$TLBPRL"
     (+ pack (TLBPR-null) TLBPRopx TLBPRL OP_03 GRi OPE1_24 GRj)
     (nop) ; not simulated
     ()
)

; Coprocessor operations
(define-pmacro (cop-op num op)
  (dni (.sym cop num)
       "Coprocessor operation"
       ((UNIT C) (FR500-MAJOR C-2) (MACH frv))
       (.str "cop" num "$pack $s6_1,$CPRi,$CPRj,$CPRk")
       (+ pack CPRk op CPRi s6_1 CPRj)
       (nop) ; sufficient implementation
       ()
  )
)

(cop-op 1 OP_7E)
(cop-op 2 OP_7F)

(define-pmacro (clear-ne-flag-semantics target_index is_float)
  (c-call VOID "@cpu@_clear_ne_flags" target_index is_float)
)

(define-pmacro (clear-ne-flag-r name op ope reg is_float attr profile comment)
  (dni name
       (comment)
       ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH simple,tomcat,fr500,fr550,frv) attr)
       (.str name "$pack $" reg "k")
       (+ pack (.sym reg k) op (rs-null) ope (GRj-null))
       (sequence ()
		 ; hack to get this referenced for profiling
		 (c-raw-call VOID "frv_ref_SI" (.sym reg k))
		 (clear-ne-flag-semantics (index-of (.sym reg k)) is_float))
       profile
  )
)

(clear-ne-flag-r clrgr OP_0A OPE1_00 GR 0 NA
		 ((fr500 (unit u-clrgr)) (fr550 (unit u-clrgr)))
		 "Clear GR NE flag")
(clear-ne-flag-r clrfr OP_0A OPE1_02 FR 1 FR-ACCESS
		 ((fr500 (unit u-clrfr)) (fr550 (unit u-clrfr)))
		 "Clear FR NE flag")

(define-pmacro (clear-ne-flag-all name op ope is_float attr profile comment)
  (dni name
       (comment)
       ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH simple,tomcat,fr500,fr550,frv) attr)
       (.str name "$pack")
       (+ pack (rd-null) op (rs-null) ope (GRj-null))
       (clear-ne-flag-semantics -1 is_float)
       profile
  )
)

(clear-ne-flag-all clrga OP_0A OPE1_01 0 NA
		 ((fr500 (unit u-clrgr)) (fr550 (unit u-clrgr)))
		   "Clear GR NE flag ALL")
(clear-ne-flag-all clrfa OP_0A OPE1_03 1 FR-ACCESS
		 ((fr500 (unit u-clrfr)) (fr550 (unit u-clrfr)))
		   "Clear FR NE flag ALL")

(define-pmacro (commit-semantics target_index is_float)
  (c-call VOID "@cpu@_commit" target_index is_float)
)

(define-pmacro (commit-r name op ope reg is_float attr comment)
  (dni name
       (comment)
       ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH frv,fr500,fr550) attr)
       (.str name "$pack $" reg "k")
       (+ pack (.sym reg k) op (rs-null) ope (GRj-null))
       (commit-semantics (index-of (.sym reg k)) is_float)
       ((fr500 (unit u-commit)) (fr550 (unit u-commit)))
  )
)

(commit-r commitgr OP_0A OPE1_04 GR 0 NA        "commit exceptions, specific GR")
(commit-r commitfr OP_0A OPE1_06 FR 1 FR-ACCESS "commit exceptions, specific FR")

(define-pmacro (commit name op ope is_float attr comment)
  (dni name
       (comment)
       ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH frv,fr500,fr550) attr)
       (.str name "$pack")
       (+ pack (rd-null) op (rs-null) ope (GRj-null))
       (commit-semantics -1 is_float)
       ((fr500 (unit u-commit)) (fr550 (unit u-commit)))
  )
)

(commit commitga OP_0A OPE1_05 0 NA        "commit exceptions, any GR")
(commit commitfa OP_0A OPE1_07 1 FR-ACCESS "commit exceptions, any FR")

(define-pmacro (floating-point-conversion
		name op ope conv mode src targ attr comment)
  (dni name
       (comment)
       (.splice (UNIT FMALL) (FR500-MAJOR F-1) (.unsplice attr))
       (.str name "$pack $" src ",$" targ)
       (+ pack targ op (rs-null) ope src)
       (set targ (conv mode src))
       ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
  )
)

(floating-point-conversion fitos OP_79 OPE1_00 float SF FRintj FRk
			   ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
			   "Convert Integer to Single")
(floating-point-conversion fstoi OP_79 OPE1_01 fix   SI FRj FRintk
			   ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
			   "Convert Single  to Integer")
(floating-point-conversion fitod OP_7A OPE1_00 float DF FRintj FRdoublek
			   ((MACH frv))
			   "Convert Integer to Double")
(floating-point-conversion fdtoi OP_7A OPE1_01 fix   SI FRdoublej FRintk
			   ((MACH frv))
			   "Convert Double to Integer")

(define-pmacro (floating-point-dual-conversion
		name op ope conv mode src src_hw targ targ_hw attr comment)
  (dni name
       (comment)
       ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1) attr)
       (.str name "$pack $" src ",$" targ)
       (+ pack targ op (rs-null) ope src)
       (sequence ()
		 (set targ (conv mode src))
		 (set (nextreg targ_hw targ 1)
		      (conv mode (nextreg src_hw src 1))))
       ((fr500 (unit u-float-dual-convert)))
  )
)

(floating-point-dual-conversion fditos OP_79 OPE1_10 float SF FRintj h-fr_int FRk h-fr NA "Dual Convert Integer to Single")
(floating-point-dual-conversion fdstoi OP_79 OPE1_11 fix   SI FRj h-fr FRintk h-fr_int NA "Dual Convert Single  to Integer")

(define-pmacro (ne-floating-point-dual-conversion
		name op ope conv mode src src_hw targ targ_hw attr comment)
  (dni name
       (comment)
       ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1) NON-EXCEPTING attr)
       (.str name "$pack $" src ",$" targ)
       (+ pack targ op (rs-null) ope src)
       (sequence ()
		 (c-call VOID "@cpu@_set_ne_index" (index-of targ))
		 (set targ (conv mode src))
		 (c-call VOID "@cpu@_set_ne_index" (add (index-of targ) 1))
		 (set (nextreg targ_hw targ 1)
		      (conv mode (nextreg src_hw src 1))))
       ((fr500 (unit u-float-dual-convert)))
  )
)

(ne-floating-point-dual-conversion nfditos OP_79 OPE1_30 float SF FRintj h-fr_int FRk h-fr NA "Non excepting dual Convert Integer to Single")
(ne-floating-point-dual-conversion nfdstoi OP_79 OPE1_31 fix   SI FRj h-fr FRintk h-fr_int NA "Non excepting dual Convert Single  to Integer")

(define-pmacro (conditional-floating-point-conversion
		name op ope conv mode src targ comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack $" src ",$" targ ",$CCi,$cond")
       (+ pack targ op (rs-null) CCi cond ope src)
       (if (eq CCi (or cond 2))
	   (set targ (conv mode src)))
       ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
  )
)

(conditional-floating-point-conversion cfitos OP_6B OPE4_0 float SF FRintj FRk "Conditional convert Integer to Single")
(conditional-floating-point-conversion cfstoi OP_6B OPE4_1 fix   SI FRj FRintk "Conditional convert Single to Integer")

(define-pmacro (ne-floating-point-conversion 
		name op ope conv mode src targ comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack $" src ",$" targ)
       (+ pack targ op (rs-null) ope src)
       (sequence ()
		 (c-call VOID "@cpu@_set_ne_index" (index-of targ))
		 (set targ (conv mode src)))
       ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
  )
)

(ne-floating-point-conversion nfitos OP_79 OPE1_20 float SF FRintj FRk "NE convert Integer to Single")
(ne-floating-point-conversion nfstoi OP_79 OPE1_21 fix   SI FRj FRintk "NE convert Single to Integer")

(register-transfer fmovs OP_79 OPE1_02
		   FRj FRk FMALL
		   ((FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
		   ((fr500 (unit u-fr2fr)))
		   "Move Single Float")
(register-transfer fmovd OP_7A OPE1_02
		   ; TODO -- unit doesn't handle extra register
		   FRdoublej FRdoublek FM01
		   ((FR500-MAJOR F-1) (MACH frv))
		   ((fr500 (unit u-fr2fr)) (fr550 (unit u-fr2fr)))
		   "Move Double Float")

(dni fdmovs
     "Dual move single float"
     ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
     "fdmovs$pack $FRj,$FRk"
     (+ pack FRk OP_79 (rs-null) OPE1_12 FRj)
     (sequence ()
	       (set FRk FRj)
	       (set (nextreg h-fr FRk 1) (nextreg h-fr FRj 1)))
     ; TODO -- unit doesn't handle extra register
     ((fr500 (unit u-fr2fr)))
)

(conditional-register-transfer cfmovs OP_6C OPE4_0 FRj FRk FMALL
			       ((FR500-MAJOR F-1) (FR550-MAJOR F-2)
				(MACH simple,tomcat,fr500,fr550,frv))
			       ((fr500 (unit u-fr2fr)) (fr550 (unit u-fr2fr)))
			       "Conditional move Single Float")

(define-pmacro (floating-point-neg name src targ op ope attr comment)
  (dni name
       (comment)
       (.splice (UNIT FMALL) (FR500-MAJOR F-1) (.unsplice attr))
       (.str name "$pack $" src ",$" targ)
       (+ pack src op (rs-null) ope targ)
       (set targ (neg src))
       ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
  )
)

(floating-point-neg fnegs FRj FRk OP_79 OPE1_03 ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv)) "Floating point negate, single")
(floating-point-neg fnegd FRdoublej FRdoublek OP_7A OPE1_03 ((MACH frv)) "Floating point negate, double")

(dni fdnegs
     "Floating point dual negate, single"
     ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
     "fdnegs$pack $FRj,$FRk"
     (+ pack FRk OP_79 (rs-null) OPE1_13 FRj)
     (sequence ()
	       (set FRk (neg FRj))
	       (set (nextreg h-fr FRk 1) (neg (nextreg h-fr FRj 1))))
     ((fr500 (unit u-float-dual-arith)))
)

(dni cfnegs
     "Conditional floating point negate, single"
     ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
     "cfnegs$pack $FRj,$FRk,$CCi,$cond"
     (+ pack FRj OP_6C (rs-null) CCi cond OPE4_1 FRk)
     (if (eq CCi (or cond 2))
	 (set FRk (neg FRj)))
     ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
)

(define-pmacro (float-abs name src targ op ope attr comment)
  (dni name
       (comment)
       (.splice (UNIT FMALL) (FR500-MAJOR F-1) (.unsplice attr))
       (.str name "$pack $" src ",$" targ )
       (+ pack targ op (rs-null) ope src)
       (set targ (abs src))
       ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
  )
)

(float-abs fabss FRj FRk OP_79 OPE1_04 ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv)) "Float absolute value, single")
(float-abs fabsd FRdoublej FRdoublek OP_7A OPE1_04 ((MACH frv)) "Float absolute value, double")

(dni fdabss
     "Floating point dual absolute value, single"
     ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
     "fdabss$pack $FRj,$FRk"
     (+ pack FRk OP_79 (rs-null) OPE1_14 FRj)
     (sequence ()
	       (set FRk (abs FRj))
	       (set (nextreg h-fr FRk 1) (abs (nextreg h-fr FRj 1))))
     ((fr500 (unit u-float-dual-arith)))
)

(dni cfabss
     "Conditional floating point absolute value, single"
     ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
     "cfabss$pack $FRj,$FRk,$CCi,$cond"
     (+ pack FRj OP_6C (rs-null) CCi cond OPE4_2 FRk)
     (if (eq CCi (or cond 2))
	 (set FRk (abs FRj)))
     ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
)

(dni fsqrts
     "Square root single"
     ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
     "fsqrts$pack $FRj,$FRk"
     (+ pack FRk OP_79 (rs-null) OPE1_05 FRj)
     (set FRk (sqrt SF FRj))
     ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
)

(dni fdsqrts
     "Dual square root single"
     ((MACH frv) (UNIT FM01) (FR500-MAJOR F-4))
     "fdsqrts$pack $FRj,$FRk"
     (+ pack FRk OP_79 (rs-null) OPE1_15 FRj)
     (sequence ()
	       (set FRk (sqrt SF FRj))
	       (set (nextreg h-fr FRk 1) (sqrt (nextreg h-fr FRj 1))))
     ((fr500 (unit u-float-dual-sqrt)))
)

(dni nfdsqrts
     "Non excepting Dual square root single"
     ((MACH frv) (UNIT FM01) (FR500-MAJOR F-4) NON-EXCEPTING)
     "nfdsqrts$pack $FRj,$FRk"
     (+ pack FRk OP_79 (rs-null) OPE1_35 FRj)
     (sequence ()
	       (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
	       (set FRk (sqrt SF FRj))
	       (c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
	       (set (nextreg h-fr FRk 1) (sqrt (nextreg h-fr FRj 1))))
     ((fr500 (unit u-float-dual-sqrt)))
)

(dni fsqrtd
     "Square root double"
     ((UNIT FM01) (FR500-MAJOR F-4) (MACH frv))
     "fsqrtd$pack $FRdoublej,$FRdoublek"
     (+ pack FRdoublek OP_7A (rs-null) OPE1_05 FRdoublej)
     (set FRdoublek (sqrt DF FRdoublej))
     ((fr500 (unit u-float-sqrt)))
)

(dni cfsqrts
     "Conditional square root single"
     ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
     "cfsqrts$pack $FRj,$FRk,$CCi,$cond"
     (+ pack FRk OP_6E (rs-null) CCi cond OPE4_2 FRj)
     (if (eq CCi (or cond 2))
	 (set FRk (sqrt SF FRj)))
     ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
)

(dni nfsqrts
     "Non exception square root, single"
     ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
     "nfsqrts$pack $FRj,$FRk"
     (+ pack FRk OP_79 (rs-null) OPE1_25 FRj)
     (sequence ()
	       (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
	       (set FRk (sqrt SF FRj)))
     ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
)

(define-pmacro (float-binary-op-s name pipe attr operation op ope comment)
  (dni name
       (comment)
       (.splice (UNIT pipe) (MACH simple,tomcat,fr500,fr550,frv) (.unsplice attr))
       (.str name "$pack $FRi,$FRj,$FRk")
       (+ pack FRk op FRi ope FRj)
       (set FRk (operation FRi FRj))
       ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
  )
)

(float-binary-op-s fadds FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) add OP_79 OPE1_06 "add single float")
(float-binary-op-s fsubs FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) sub OP_79 OPE1_07 "sub single float")
(float-binary-op-s fmuls FM01  ((FR500-MAJOR F-3) (FR550-MAJOR F-3)) mul OP_79 OPE1_08 "mul single float")

(dni fdivs
     "div single float"
     ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
     "fdivs$pack $FRi,$FRj,$FRk"
     (+ pack FRk OP_79 FRi OPE1_09 FRj)
     (set FRk (div FRi FRj))
     ((fr500 (unit u-float-div))
      (fr550 (unit u-float-div)))
)

(define-pmacro (float-binary-op-d name operation op ope major comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR major) (MACH frv))
       (.str name "$pack $FRdoublei,$FRdoublej,$FRdoublek")
       (+ pack FRdoublek op FRdoublei ope FRdoublej)
       (set FRdoublek (operation FRdoublei FRdoublej))
       ((fr500 (unit u-float-arith)))
  )
)

(float-binary-op-d faddd add OP_7A OPE1_06 F-2 "add double float")
(float-binary-op-d fsubd sub OP_7A OPE1_07 F-2 "sub double float")
(float-binary-op-d fmuld mul OP_7A OPE1_08 F-3 "mul double float")
(float-binary-op-d fdivd div OP_7A OPE1_09 F-4 "div double float")

(define-pmacro (conditional-float-binary-op name pipe attr operation op ope profile comment)
  (dni name
       (comment)
       (.splice (UNIT pipe) (MACH simple,tomcat,fr500,fr550,frv)
		(.unsplice attr))
       (.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
       (+ pack FRk op FRi CCi cond ope FRj)
       (if (eq CCi (or cond 2))
	   (set FRk (operation FRi FRj)))
       profile
  )
)

(conditional-float-binary-op cfadds FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) add OP_6D OPE4_0
			     ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
			     "cond add single")
(conditional-float-binary-op cfsubs FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) sub OP_6D OPE4_1
			     ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
			     "cond sub single")
(conditional-float-binary-op cfmuls FM01  ((FR500-MAJOR F-3) (FR550-MAJOR F-3)) mul OP_6E OPE4_0
			     ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
			     "cond mul single")
(conditional-float-binary-op cfdivs FM01  ((FR500-MAJOR F-4) (FR550-MAJOR F-3)) div OP_6E OPE4_1
			     ((fr500 (unit u-float-div)) (fr550 (unit u-float-div)))
			     "cond div single")

(define-pmacro (ne-float-binary-op name pipe attr operation op ope profile comment)
  (dni name
       (comment)
       (.splice (UNIT pipe) (MACH simple,tomcat,fr500,fr550,frv)
		(.unsplice attr))
       (.str name "$pack $FRi,$FRj,$FRk")
       (+ pack FRk op FRi ope FRj)
       (sequence ()
		 (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
		 (set FRk (operation FRi FRj)))
       profile
  )
)

(ne-float-binary-op nfadds FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) add OP_79 OPE1_26
		    ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
		    "ne add single")
(ne-float-binary-op nfsubs FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) sub OP_79 OPE1_27
		    ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
		    "ne sub single")
(ne-float-binary-op nfmuls FM01  ((FR500-MAJOR F-3) (FR550-MAJOR F-3)) mul OP_79 OPE1_28
		    ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
		    "ne mul single")
(ne-float-binary-op nfdivs FM01  ((FR500-MAJOR F-4) (FR550-MAJOR F-3)) div OP_79 OPE1_29
		    ((fr500 (unit u-float-div)) (fr550 (unit u-float-div)))
		    "ne div single")

(define-pmacro (fcc-eq) 8)
(define-pmacro (fcc-lt) 4)
(define-pmacro (fcc-gt) 2)
(define-pmacro (fcc-uo) 1)

(define-pmacro (compare-and-set-fcc arg1 arg2 fcc)
  (if (gt arg1 arg2)
      (set fcc (fcc-gt))
      (if (eq arg1 arg2)
	  (set fcc (fcc-eq))
	  (if (lt arg1 arg2)
	      (set fcc (fcc-lt))
	      (set fcc (fcc-uo)))))
)

(dni fcmps
     "compare single float"
     ((UNIT FMALL) (FR500-MAJOR F-2) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
     "fcmps$pack $FRi,$FRj,$FCCi_2"
     (+ pack (cond-null) FCCi_2 OP_79 FRi OPE1_0A FRj)
     (compare-and-set-fcc FRi FRj FCCi_2)
     ((fr500 (unit u-float-compare)) (fr550 (unit u-float-compare)))
)

(dni fcmpd
     "compare double float"
     ((UNIT FMALL) (FR500-MAJOR F-2) (MACH frv))
     "fcmpd$pack $FRdoublei,$FRdoublej,$FCCi_2"
     (+ pack (cond-null) FCCi_2 OP_7A FRdoublei OPE1_0A FRdoublej)
     (compare-and-set-fcc FRdoublei FRdoublej FCCi_2)
     ((fr500 (unit u-float-compare)))
)

(dni cfcmps
     "Conditional compare single, float"
     ((UNIT FMALL) (FR500-MAJOR F-2) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
     "cfcmps$pack $FRi,$FRj,$FCCi_2,$CCi,$cond"
     (+ pack (cond-null) FCCi_2 OP_6D FRi CCi cond OPE4_2 FRj)
     (if (eq CCi (or cond 2))
	 (compare-and-set-fcc FRi FRj FCCi_2))
     ((fr500 (unit u-float-compare)) (fr550 (unit u-float-compare)))
)

(dni fdcmps
     "float dual compare single"
     ((UNIT FMALL) (FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
     "fdcmps$pack $FRi,$FRj,$FCCi_2"
     (+ pack (cond-null) FCCi_2 OP_79 FRi OPE1_1A FRj)
     (sequence ()
	       (compare-and-set-fcc FRi FRj FCCi_2)
	       (compare-and-set-fcc (nextreg h-fr FRi 1) (nextreg h-fr FRj 1)
				    (nextreg h-fccr FCCi_2 1)))
     ((fr500 (unit u-float-dual-compare)) (fr550 (unit u-float-dual-compare)))
)

(define-pmacro (float-mul-with-add name add_sub arg1 arg2 targ op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
       (.str name "$pack $" arg1 ",$" arg2 ",$" targ)
       (+ pack targ op arg1 ope arg2)
       (set targ (add_sub (mul arg1 arg2) targ))
       ((fr500 (unit u-float-dual-arith)))
  )
)

(float-mul-with-add fmadds add FRi FRj FRk OP_79 OPE1_0B "mul with add, single")
(float-mul-with-add fmsubs sub FRi FRj FRk OP_79 OPE1_0C "mul with sub, single")

(float-mul-with-add fmaddd add FRdoublei FRdoublej FRdoublek OP_7A OPE1_0B "mul with add, double")
(float-mul-with-add fmsubd sub FRdoublei FRdoublej FRdoublek OP_7A OPE1_0C "mul with sub, double")

(dni fdmadds
     "Float dual multiply with add"
     ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
     "fdmadds$pack $FRi,$FRj,$FRk"
     (+ pack FRk OP_79 FRi OPE1_1B FRj)
     (sequence ()
	       (set FRk (add (mul FRi FRj) FRk))
	       (set (nextreg h-fr FRk 1)
		    (add (mul (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))
			 (nextreg h-fr FRk 1))))
     ; TODO dual registers not referenced for profiling
     ((fr500 (unit u-float-dual-arith)))
)

(dni nfdmadds
     "Non excepting float dual multiply with add"
     ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
     "nfdmadds$pack $FRi,$FRj,$FRk"
     (+ pack FRk OP_79 FRi OPE1_3B FRj)
     (sequence ()
	       (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
	       (set FRk (add (mul FRi FRj) FRk))
	       (c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
	       (set (nextreg h-fr FRk 1)
		    (add (mul (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))
			 (nextreg h-fr FRk 1))))
     ; TODO dual registers not referenced for profiling
     ((fr500 (unit u-float-dual-arith)))
)

(define-pmacro (conditional-float-mul-with-add
		name add_sub arg1 arg2 targ op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv) CONDITIONAL)
       (.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
       (+ pack FRk op FRi CCi cond ope FRj)
       (if (eq CCi (or cond 2))
	   (set targ (add_sub (mul arg1 arg2) targ)))
       ((fr500 (unit u-float-dual-arith)))
  )
)

(conditional-float-mul-with-add cfmadds add FRi FRj FRk OP_6F OPE4_0 "conditional mul with add, single")
(conditional-float-mul-with-add cfmsubs sub FRi FRj FRk OP_6F OPE4_1 "conditional mul with sub, single")

(define-pmacro (ne-float-mul-with-add name add_sub arg1 arg2 targ op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv) NON-EXCEPTING)
       (.str name "$pack $" arg1 ",$" arg2 ",$" targ)
       (+ pack targ op arg1 ope arg2)
       (sequence ()
		 (c-call VOID "@cpu@_set_ne_index" (index-of targ))
		 (set targ (add_sub (mul arg1 arg2) targ)))
       ((fr500 (unit u-float-dual-arith)))
  )
)

(ne-float-mul-with-add nfmadds add FRi FRj FRk OP_79 OPE1_2B "non excepting mul with add, single")
(ne-float-mul-with-add nfmsubs sub FRi FRj FRk OP_79 OPE1_2C "non excepting mul with sub, single")

(define-pmacro (float-parallel-mul-add-semantics cond add_sub arg1 arg2 targ)
  (if cond
      (sequence ()
		(set targ (mul arg1 arg2))
		(set (nextreg h-fr targ 1)
		     (add_sub (nextreg h-fr arg1 1) (nextreg h-fr arg2 1)))))
)

(define-pmacro (float-parallel-mul-add
		name add_sub arg1 arg2 targ op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR F-5) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack $" arg1 ",$" arg2 ",$" targ)
       (+ pack targ op arg1 ope arg2)
       (float-parallel-mul-add-semantics 1 add_sub arg1 arg2 targ)
       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
  )
)

(float-parallel-mul-add fmas add FRi FRj FRk OP_79 OPE1_0E "parallel mul/add, single")
(float-parallel-mul-add fmss sub FRi FRj FRk OP_79 OPE1_0F "parallel mul/sub, single")

(define-pmacro (float-dual-parallel-mul-add-semantics add_sub arg1 arg2 targ)
  (sequence ()
	    (set targ (mul arg1 arg2))
	    (set (nextreg h-fr targ 1)
		 (add_sub (nextreg h-fr arg1 1) (nextreg h-fr arg2 1)))
	    (set (nextreg h-fr targ 2)
		 (mul (nextreg h-fr arg1 2)	(nextreg h-fr arg2 2)))
	    (set (nextreg h-fr targ 3)
		 (add_sub (nextreg h-fr arg1 3) (nextreg h-fr arg2 3))))
)

(define-pmacro (float-dual-parallel-mul-add
		name add_sub arg1 arg2 targ op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
       (.str name "$pack $" arg1 ",$" arg2 ",$" targ)
       (+ pack targ op arg1 ope arg2)
       (float-dual-parallel-mul-add-semantics add_sub arg1 arg2 targ)
       ()
  )
)

(float-dual-parallel-mul-add fdmas add FRi FRj FRk OP_79 OPE1_1C "dual parallel mul/add, single")
(float-dual-parallel-mul-add fdmss sub FRi FRj FRk OP_79 OPE1_1D "dual parallel mul/sub, single")

(define-pmacro (ne-float-dual-parallel-mul-add-semantics add_sub arg1 arg2 targ)
  (sequence ()
	    (c-call VOID "@cpu@_set_ne_index" (index-of targ))
	    (c-call VOID "@cpu@_set_ne_index" (add (index-of targ) 1))
	    (c-call VOID "@cpu@_set_ne_index" (add (index-of targ) 2))
	    (c-call VOID "@cpu@_set_ne_index" (add (index-of targ) 3))
	    (set targ (mul arg1 arg2))
	    (set (nextreg h-fr targ 1)
		 (add_sub (nextreg h-fr arg1 1) (nextreg h-fr arg2 1)))
	    (set (nextreg h-fr targ 2)
		 (mul (nextreg h-fr arg1 2)	(nextreg h-fr arg2 2)))
	    (set (nextreg h-fr targ 3)
		 (add_sub (nextreg h-fr arg1 3) (nextreg h-fr arg2 3))))
)

(define-pmacro (ne-float-dual-parallel-mul-add
		name add_sub arg1 arg2 targ op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
       (.str name "$pack $" arg1 ",$" arg2 ",$" targ)
       (+ pack targ op arg1 ope arg2)
       (ne-float-dual-parallel-mul-add-semantics add_sub arg1 arg2 targ)
       ()
  )
)

(ne-float-dual-parallel-mul-add nfdmas add FRi FRj FRk OP_79 OPE1_3C "non excepting dual parallel mul/add, single")
(ne-float-dual-parallel-mul-add nfdmss sub FRi FRj FRk OP_79 OPE1_3D "non excepting dual parallel mul/sub, single")

(define-pmacro (conditional-float-parallel-mul-add name add_sub op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR F-5) (FR550-MAJOR F-4) CONDITIONAL (MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
       (+ pack FRk op FRi CCi cond ope FRj)
       (float-parallel-mul-add-semantics (eq CCi (or cond 2))
					 add_sub FRi FRj FRk)
       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
  )
)

(conditional-float-parallel-mul-add cfmas add OP_6F OPE4_2 "conditional parallel mul/add, single")
(conditional-float-parallel-mul-add cfmss sub OP_6F OPE4_3 "conditional parallel mul/sub, single")

(define-pmacro (float-parallel-mul-add-double-semantics add_sub arg1 arg2 targ)
  (sequence ()
	    (set targ (ftrunc SF (mul DF (fext DF arg1) (fext DF arg2))))
	    (set (nextreg h-fr targ 1)
		 (ftrunc SF (add_sub DF
				     (fext DF (nextreg h-fr arg1 1))
				     (fext DF (nextreg h-fr arg2 1))))))
)

(define-pmacro (float-parallel-mul-add-double
		name add_sub arg1 arg2 targ op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
       (.str name "$pack $" arg1 ",$" arg2 ",$" targ)
       (+ pack targ op arg1 ope arg2)
       (float-parallel-mul-add-double-semantics add_sub arg1 arg2 targ)
       ()
  )
)

(float-parallel-mul-add-double fmad add FRi FRj FRk OP_7A OPE1_0E "parallel mul/add, double")
(float-parallel-mul-add-double fmsd sub FRi FRj FRk OP_7A OPE1_0F "parallel mul/sub, double")

(define-pmacro (ne-float-parallel-mul-add name add_sub op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR F-5) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
       (.str name "$pack $FRi,$FRj,$FRk")
       (+ pack FRk op FRi ope FRj)
       (sequence ()
		 (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
		 (set FRk (mul FRi FRj))
		 (c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
		 (set (nextreg h-fr FRk 1)
		      (add_sub (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))))
       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
  )
)

(ne-float-parallel-mul-add nfmas add OP_79 OPE1_2E "ne parallel mul/add,single")
(ne-float-parallel-mul-add nfmss sub OP_79 OPE1_2F "ne parallel mul/sub,single")

(define-pmacro (float-dual-arith name attr oper1 oper2 op ope comment)
  (dni name
       (comment)
       (.splice (UNIT FM01) (.unsplice attr))
       (.str name "$pack $FRi,$FRj,$FRk")
       (+ pack FRk op FRi ope FRj)
       (sequence ()
		 (set FRk (oper1 FRi FRj))
		 (set (nextreg h-fr FRk 1)
		      (oper2 (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))))
       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
  )
)

(float-dual-arith fdadds ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add add OP_79 OPE1_16 "dual add, single")
(float-dual-arith fdsubs ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) sub sub OP_79 OPE1_17 "dual sub, single")
(float-dual-arith fdmuls ((FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) mul mul OP_79 OPE1_18 "dual mul, single")
(float-dual-arith fddivs ((FR500-MAJOR F-7) (MACH frv))                           div div OP_79 OPE1_19 "dual div,single")
(float-dual-arith fdsads ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add sub OP_79 OPE1_1E "dual add/sub, single")

(dni fdmulcs
     "Float dual cross multiply single"
     ((UNIT FM01) (FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
     "fdmulcs$pack $FRi,$FRj,$FRk"
     (+ pack FRk OP_79 FRi OPE1_1F FRj)
     (sequence ()
	       (set FRk (mul FRi (nextreg h-fr FRj 1)))
	       (set (nextreg h-fr FRk 1) (mul (nextreg h-fr FRi 1) FRj)))
     ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)

(dni nfdmulcs
     "NE float dual cross multiply single"
     ((UNIT FM01) (FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
     "nfdmulcs$pack $FRi,$FRj,$FRk"
     (+ pack FRk OP_79 FRi OPE1_3F FRj)
     (sequence ()
	       (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
	       (set FRk (mul FRi (nextreg h-fr FRj 1)))
	       (c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
	       (set (nextreg h-fr FRk 1) (mul (nextreg h-fr FRi 1) FRj)))
     ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)

(define-pmacro (ne-float-dual-arith name attr oper1 oper2 op ope comment)
  (dni name
       (comment)
       (.splice (UNIT FM01) (.unsplice attr))
       (.str name "$pack $FRi,$FRj,$FRk")
       (+ pack FRk op FRi ope FRj)
       (sequence ()
		 (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
		 (set FRk (oper1 FRi FRj))
		 (c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
		 (set (nextreg h-fr FRk 1)
		      (oper2 (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))))
       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
  )
)

(ne-float-dual-arith nfdadds ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add add OP_79 OPE1_36 "ne dual add, single")
(ne-float-dual-arith nfdsubs ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) sub sub OP_79 OPE1_37 "ne dual sub, single")
(ne-float-dual-arith nfdmuls ((FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) mul mul OP_79 OPE1_38 "ne dual mul, single")
(ne-float-dual-arith nfddivs ((FR500-MAJOR F-7) (MACH frv))                           div div OP_79 OPE1_39 "ne dual div,single")
(ne-float-dual-arith nfdsads ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add sub OP_79 OPE1_3E "ne dual add/sub, single")

(dni nfdcmps
     "non-excepting dual float compare"
     ((UNIT FM01) (FR500-MAJOR F-6) (MACH simple,tomcat,frv))
     "nfdcmps$pack $FRi,$FRj,$FCCi_2"
     (+ pack (cond-null) FCCi_2 OP_79 FRi OPE1_3A FRj)
     (sequence ()
	       (c-call VOID "@cpu@_set_ne_index" (index-of FRk))
	       (compare-and-set-fcc FRi FRj FCCi_2)
	       (c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
	       (compare-and-set-fcc (nextreg h-fr FRi 1) (nextreg h-fr FRj 1)
				    (nextreg h-fccr FCCi_2 1)))
     ((fr500 (unit u-float-dual-compare)))
)

; Media Instructions
;
(define-pmacro (halfword hilo arg offset)
  (reg (.sym h-fr_ hilo) (add (index-of arg) offset)))

(dni mhsetlos
     "Media set lower signed 12 bits"
     ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-5)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mhsetlos$pack $u12,$FRklo"
     (+ pack FRklo OP_78 OPE1_20 u12)
     (set FRklo u12)
     ((fr400 (unit u-media-hilo)) (fr450 (unit u-media-hilo))
      (fr550 (unit u-media-set (out FRintk FRklo))))
)

(dni mhsethis
     "Media set upper signed 12 bits"
     ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-5)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mhsethis$pack $u12,$FRkhi"
     (+ pack FRkhi OP_78 OPE1_22 u12)
     (set FRkhi u12)
     ((fr400 (unit u-media-hilo)) (fr450 (unit u-media-hilo))
      (fr550 (unit u-media-set (out FRintk FRkhi))))
)

(dni mhdsets
     "Media dual set halfword signed 12 bits"
     ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-5)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mhdsets$pack $u12,$FRintk"
     (+ pack FRintk OP_78 OPE1_24 u12)
     (sequence ()
	       ; hack to get FRintk passed to modelling functions
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (set (halfword hi FRintk 0) u12)
	       (set (halfword lo FRintk 0) u12))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr550 (unit u-media-set)))
)

(define-pmacro (set-5-semantics target value)
  (sequence ((HI tmp))
	    (set tmp target)
	    (set tmp (and tmp #x07ff))
	    (set tmp (or tmp (sll (and s5 #x1f) 11)))
	    (set target tmp))
)

(define-pmacro (media-set-5 name hilo op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-5)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1))
       (.str name "$pack $s5,$FRk" hilo)
       (+ pack (.sym FRk hilo) op (FRi-null) ope (misc-null-11) s5)
       (set-5-semantics (.sym FRk hilo) s5)
       ((fr400 (unit u-media-hilo)) (fr450 (unit u-media-hilo))
	(fr550 (unit u-media-set (out FRintk (.sym FRk hilo)))))
  )
)

(media-set-5 mhsetloh lo OP_78 OPE1_21 "Media set upper 5 bits lo")
(media-set-5 mhsethih hi OP_78 OPE1_23 "Media set upper 5 bits hi")

(dni mhdseth
     "Media dual set halfword upper 5 bits"
     ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-5)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mhdseth$pack $s5,$FRintk"
     (+ pack FRintk OP_78 (FRi-null) OPE1_25 (misc-null-11) s5)
     (sequence ()
	       ; hack to get FRintk passed to modelling functions
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (set-5-semantics (halfword hi FRintk 0) s5)
	       (set-5-semantics (halfword lo FRintk 0) s5))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr550 (unit u-media-set)))
)

(define-pmacro (media-logic-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1))
       (.str name "$pack $FRinti,$FRintj,$FRintk")
       (+ pack FRintk op FRinti ope FRintj)
       (set FRintk (operation FRinti FRintj))
       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
	(fr500 (unit u-media)) (fr550 (unit u-media)))
  )
)

(media-logic-r-r mand and OP_7B OPE1_00 "and reg/reg")
(media-logic-r-r mor  or  OP_7B OPE1_01 "or  reg/reg")
(media-logic-r-r mxor xor OP_7B OPE1_02 "xor reg/reg")

(define-pmacro (conditional-media-logic name operation op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1) CONDITIONAL)
       (.str name "$pack $FRinti,$FRintj,$FRintk,$CCi,$cond")
       (+ pack FRintk op FRinti CCi cond ope FRintj)
       (if (eq CCi (or cond 2))
	   (set FRintk (operation FRinti FRintj)))
       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
	(fr500 (unit u-media)) (fr550 (unit u-media)))
  )
)

(conditional-media-logic cmand and OP_70 OPE4_0 "conditional and reg/reg")
(conditional-media-logic cmor  or  OP_70 OPE4_1 "conditional or  reg/reg")
(conditional-media-logic cmxor xor OP_70 OPE4_2 "conditional xor reg/reg")

(dni mnot
     ("mnot")
     ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     ("mnot$pack $FRintj,$FRintk")
     (+ pack FRintk OP_7B (rs-null) OPE1_03 FRintj)
     (set FRintk (inv FRintj))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(dni cmnot
     ("cmnot")
     ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1) CONDITIONAL)
     ("cmnot$pack $FRintj,$FRintk,$CCi,$cond")
     (+ pack FRintk OP_70 (rs-null) CCi cond OPE4_3 FRintj)
     (if (eq CCi (or cond 2))
	 (set FRintk (inv FRintj)))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(define-pmacro (media-rotate-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1))
       (.str name "$pack $FRinti,$u6,$FRintk")
       (+ pack FRintk op FRinti ope u6)
       (set FRintk (operation FRinti (and u6 #x1f)))
       ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
	(fr500 (unit u-media)) (fr550 (unit u-media)))
  )
)

(media-rotate-r-r mrotli rol OP_7B OPE1_04 "rotate left reg/reg")
(media-rotate-r-r mrotri ror OP_7B OPE1_05 "rotate right reg/reg")

(define-pmacro (media-cut-r-r name arg op ope comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
	(FR400-MAJOR M-2) (FR450-MAJOR M-2))
       (.str name "$pack $FRinti,$" arg ",$FRintk")
       (+ pack FRintk op FRinti ope arg)
       (set FRintk (c-call SI "@cpu@_cut" FRinti (nextreg h-fr_int FRinti 1) arg))
       ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
	(fr500 (unit u-media)) (fr550 (unit u-media)))
  )
)

(media-cut-r-r mwcut  FRintj OP_7B OPE1_06 "media cut")
(media-cut-r-r mwcuti u6     OP_7B OPE1_07 "media cut")

(define-pmacro (media-cut-acc name arg op ope fr450-major comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
	(FR400-MAJOR M-1) (FR450-MAJOR fr450-major))
       (.str name "$pack $ACC40Si,$" arg ",$FRintk")
       (+ pack FRintk op ACC40Si ope arg)
       (set FRintk (c-call SI "@cpu@_media_cut" ACC40Si arg))
       ((fr400 (unit u-media-4)) (fr450 (unit u-media-4))
	(fr500 (unit u-media)) (fr550 (unit u-media-3-acc)))
  )
)

(media-cut-acc mcut  FRintj OP_7B OPE1_2C M-1 "media accumulator cut reg")
(media-cut-acc mcuti s6     OP_7B OPE1_2E M-5 "media accumulator cut immed")

(define-pmacro (media-cut-acc-ss name arg op ope fr450-major comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
	(FR400-MAJOR M-1) (FR450-MAJOR fr450-major))
       (.str name "$pack $ACC40Si,$" arg ",$FRintk")
       (+ pack FRintk op ACC40Si ope arg)
       (set FRintk (c-call SI "@cpu@_media_cut_ss" ACC40Si arg))
       ((fr400 (unit u-media-4)) (fr450 (unit u-media-4))
	(fr500 (unit u-media)) (fr550 (unit u-media-3-acc)))
  )
)

(media-cut-acc-ss mcutss  FRintj OP_7B OPE1_2D M-1 "media accumulator cut reg with saturation")
(media-cut-acc-ss mcutssi s6     OP_7B OPE1_2F M-5 "media accumulator cut immed with saturation")

; Dual Media Instructions
;
(define-pmacro (register-unaligned register alignment)
  (and (index-of register) (sub alignment 1))
)

(dni mdcutssi
     "Media dual cut with signed saturation"
     ((UNIT MDCUTSSI) (MACH fr400,fr450,fr550) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-6))
     "mdcutssi$pack $ACC40Si,$s6,$FRintkeven"
     (+ pack FRintkeven OP_78 ACC40Si OPE1_0E s6)
     (if (register-unaligned ACC40Si 2)
	 (c-call VOID "@cpu@_media_acc_not_aligned")
	 (if (register-unaligned FRintkeven 2)
	     (c-call VOID "@cpu@_media_register_not_aligned")
	     (sequence ()
		       (set FRintkeven (c-call SI "@cpu@_media_cut_ss" ACC40Si s6))
		       (set (nextreg h-fr_int FRintkeven 1)
			    (c-call SI "@cpu@_media_cut_ss"
				    (nextreg h-acc40S ACC40Si 1) s6)))))
     ((fr400 (unit u-media-4-acc-dual
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-4-acc-dual
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-3-acc-dual)))
)

; The (add (xxxx) (mul arg 0)) is a hack to get a reference to arg generated
; so it will be passed to the unit modelers.   YUCK!!!!!
(define-pmacro (extract-hilo reg1 off1 reg2 off2 arg1hi arg1lo arg2hi arg2lo)
  (sequence ()
	    (set arg1hi (add (halfword hi reg1 off1) (mul reg1 0)))
	    (set arg1lo (add (halfword lo reg1 off1) (mul reg1 0)))
	    (set arg2hi (add (halfword hi reg2 off2) (mul reg2 0)))
	    (set arg2lo (add (halfword lo reg2 off2) (mul reg2 0))))
)

(dni maveh
     "Media dual average"
     ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "maveh$pack $FRinti,$FRintj,$FRintk"
     (+ pack FRintk OP_7B FRinti OPE1_08 FRintj)
     (set FRintk (c-call SI "@cpu@_media_average" FRinti FRintj))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(define-pmacro (media-dual-shift name operation op ope profile comment)
  (dni name
       (comment)
       ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1))
       (.str name "$pack $FRinti,$u6,$FRintk")
       (+ pack FRintk op FRinti ope u6)
       (sequence ()
		 ; hack to get these referenced for profiling
		 (set FRinti (c-raw-call SI "frv_ref_SI" FRinti))
		 (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
		 (set (halfword hi FRintk 0)
		      (operation (halfword hi FRinti 0) (and u6 #xf)))
		 (set (halfword lo FRintk 0)
		      (operation (halfword lo FRinti 0) (and u6 #xf))))
       profile
  )
)

(media-dual-shift msllhi sll OP_7B OPE1_09
		  ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
		   (fr500 (unit u-media)) (fr550 (unit u-media)))
		  "Media dual shift left  logical")
(media-dual-shift msrlhi srl OP_7B OPE1_0A
		  ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
		   (fr500 (unit u-media)) (fr550 (unit u-media)))
		  "Media dual shift right logical")
(media-dual-shift msrahi sra OP_7B OPE1_0B
		  ((fr400 (unit u-media-6)) (fr450 (unit u-media-6))
		   (fr500 (unit u-media)) (fr550 (unit u-media)))
		  "Media dual shift right arithmetic")

(define-pmacro (media-dual-word-rotate-r-r name operation op ope comment)
  (dni name
       (comment)
       ((UNIT FMLOW) (MACH fr400,fr450,fr550) (FR550-MAJOR M-3)
	(FR400-MAJOR M-2) (FR450-MAJOR M-2))
       (.str name "$pack $FRintieven,$s6,$FRintkeven")
       (+ pack FRintkeven op FRintieven ope s6)
       (if (orif (register-unaligned FRintieven 2)
		 (register-unaligned FRintkeven 2))
	   (c-call VOID "@cpu@_media_register_not_aligned")
	   (sequence ()
		     (set FRintkeven (operation FRintieven (and s6 #x1f)))
		     (set (nextreg h-fr_int FRintkeven 1)
			  (operation (nextreg h-fr_int FRintieven 1)
				     (and s6 #x1f)))))
       ((fr400 (unit u-media-3-quad
		     (in  FRinti FRintieven)
		     (out FRintk FRintkeven))) 
	(fr450 (unit u-media-3-quad
		     (in  FRinti FRintieven)
		     (out FRintk FRintkeven)))
	(fr550 (unit u-media-quad)))
  )
)

(media-dual-word-rotate-r-r mdrotli rol OP_78 OPE1_0B "rotate left reg/reg")

(dni mcplhi
     "Media bit concatenate, halfword"
     ((UNIT FMLOW) (MACH fr400,fr450,fr550) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "mcplhi$pack $FRinti,$u6,$FRintk"
     (+ pack FRintk OP_78 FRinti OPE1_0C u6)
     (sequence ((HI arg1) (HI arg2) (HI shift))
	       (set FRinti (c-raw-call SI "frv_ref_SI" FRinti))
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (set shift (and u6 #xf))
	       (set arg1 (sll (halfword hi FRinti 0) shift))
	       (if (ne shift 0)
		   (sequence ()
			     (set arg2 (halfword hi FRinti 1))
			     (set arg2 (srl HI (sll HI arg2 (sub 15 shift))
					    (sub 15 shift)))
			     (set arg1 (or HI arg1 arg2))))
	       (set (halfword hi FRintk 0) arg1))
     ((fr400 (unit u-media-3-dual)) (fr450 (unit u-media-3-dual))
      (fr550 (unit u-media-3-dual)))
)

(dni mcpli
     "Media bit concatenate, word"
     ((UNIT FMLOW) (MACH fr400,fr450,fr550) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "mcpli$pack $FRinti,$u6,$FRintk"
     (+ pack FRintk OP_78 FRinti OPE1_0D u6)
     (sequence ((SI tmp) (SI shift))
	       (set shift (and u6 #x1f))
	       (set tmp (sll FRinti shift))
	       (if (ne shift 0)
		   (sequence ((SI tmp1))
			     (set tmp1 (srl (sll (nextreg h-fr_int FRinti 1)
						 (sub 31 shift))
					    (sub 31 shift)))
			     (set tmp (or tmp tmp1))))
	       (set FRintk tmp))
     ((fr400 (unit u-media-3-dual)) (fr450 (unit u-media-3-dual))
      (fr550 (unit u-media-3-dual)))
)

(define-pmacro (saturate arg max min result)
  (if (gt arg max)
      (set result max)
      (if (lt arg min)
	  (set result min)
	  (set result arg)))
)

(dni msaths
     "Media dual saturation signed"
     ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "msaths$pack $FRinti,$FRintj,$FRintk"
     (+ pack FRintk OP_7B FRinti OPE1_0C FRintj)
     (sequence ((HI argihi) (HI argilo) (HI argjhi) (HI argjlo))
	       (extract-hilo FRinti 0 FRintj 0 argihi argilo argjhi argjlo)
	       (saturate argihi argjhi (inv argjhi) (halfword hi FRintk 0))
	       (saturate argilo argjlo (inv argjlo) (halfword lo FRintk 0)))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(dni mqsaths
     "Media quad saturation signed"
     ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-2)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "mqsaths$pack $FRintieven,$FRintjeven,$FRintkeven"
     (+ pack FRintkeven OP_78 FRintieven OPE1_0F FRintjeven)
     (if (orif (register-unaligned FRintieven 2)
	       (orif (register-unaligned FRintjeven 2)
		     (register-unaligned FRintkeven 2)))
	 (c-call VOID "@cpu@_media_register_not_aligned")
	 (sequence ((HI argihi) (HI argilo) (HI argjhi) (HI argjlo))
		   ; hack to get FRintkeven referenced as a target for profiling
		   (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
		   (extract-hilo FRintieven 0 FRintjeven 0 argihi argilo argjhi argjlo)
		   (saturate argihi argjhi (inv argjhi) (halfword hi FRintkeven 0))
		   (saturate argilo argjlo (inv argjlo) (halfword lo FRintkeven 0))
		   (extract-hilo FRintieven 1 FRintjeven 1 argihi argilo argjhi argjlo)
		   (saturate argihi argjhi (inv argjhi) (halfword hi FRintkeven 1))
		   (saturate argilo argjlo (inv argjlo) (halfword lo FRintkeven 1))))
     ((fr400 (unit u-media-1-quad
		   (in  FRinti FRintieven)
		   (in  FRintj FRintjeven)
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-1-quad
		   (in  FRinti FRintieven)
		   (in  FRintj FRintjeven)
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-quad)))
)

(define-pmacro (saturate-unsigned arg max result)
  (if (gt arg max)
      (set result max)
      (set result arg))
)

(dni msathu
     "Media dual saturation unsigned"
     ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "msathu$pack $FRinti,$FRintj,$FRintk"
     (+ pack FRintk OP_7B FRinti OPE1_0D FRintj)
     (sequence ((UHI argihi) (UHI argilo) (UHI argjhi) (UHI argjlo))
	       (extract-hilo FRinti 0 FRintj 0 argihi argilo argjhi argjlo)
	       (saturate-unsigned argihi argjhi (halfword hi FRintk 0))
	       (saturate-unsigned argilo argjlo (halfword lo FRintk 0)))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(define-pmacro (media-dual-compare name mode op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1))
       (.str name "$pack $FRinti,$FRintj,$FCCk")
       (+ pack (cond-null) FCCk op FRinti ope FRintj)
       (if (register-unaligned FCCk 2)
	   (c-call VOID "@cpu@_media_cr_not_aligned")
	   (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
		     (extract-hilo FRinti 0 FRintj 0
				   argihi argilo argjhi argjlo)
		     (compare-and-set-fcc argihi argjhi FCCk)
		     (compare-and-set-fcc argilo argjlo (nextreg h-fccr FCCk 1))))
       ; TODO - doesn't handle second FCC
       ((fr400 (unit u-media-7)) (fr450 (unit u-media-7))
	(fr500 (unit u-media)) (fr550 (unit u-media)))
  )
)

(media-dual-compare mcmpsh HI  OP_7B OPE1_0E "Media dual compare signed")
(media-dual-compare mcmpuh UHI OP_7B OPE1_0F "Media dual compare unsigned")

; Bits for the MSR.SIE field
(define-pmacro (msr-sie-nil)      0)
(define-pmacro (msr-sie-fri-hi)   8)
(define-pmacro (msr-sie-fri-lo)   4)
(define-pmacro (msr-sie-fri-1-hi) 2)
(define-pmacro (msr-sie-fri-1-lo) 1)
(define-pmacro (msr-sie-acci)     8)
(define-pmacro (msr-sie-acci-1)   4)
(define-pmacro (msr-sie-acci-2)   2)
(define-pmacro (msr-sie-acci-3)   1)

(define-pmacro (saturate-v arg max min sie result)
  (if (gt DI arg max)
      (sequence ()
		(set result max)
		(c-call VOID "@cpu@_media_overflow" sie))
      (if (lt DI arg min)
	  (sequence ()
		    (set result min)
		    (c-call VOID "@cpu@_media_overflow" sie))
	  (set result arg)))
)

(dni mabshs
     "Media dual absolute value, halfword"
     ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-2)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mabshs$pack $FRintj,$FRintk"
     (+ pack FRintk OP_78 (FRi-null) OPE1_0A FRintj)
     (sequence ((HI arghi) (HI arglo))
	       (set FRintj (c-raw-call SI "frv_ref_SI" FRintj))
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (set arghi (halfword hi FRintj 0))
	       (set arglo (halfword lo FRintj 0))
	       (saturate-v (abs arghi) 32767 -32768 (msr-sie-fri-hi)
			   (halfword hi FRintk 0))
	       (saturate-v (abs arglo) 32767 -32768 (msr-sie-fri-lo)
			   (halfword lo FRintk 0)))
     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
      (fr550 (unit u-media)))
)

(define-pmacro (media-arith-sat-semantics
		operation arg1 arg2 res mode max min sie)
  (sequence ((DI tmp))
	    (set tmp (operation arg1 arg2))
	    (saturate-v tmp max min sie res))
)

(define-pmacro (media-dual-arith-sat-semantics operation mode max min)
  (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
	    (extract-hilo FRinti 0 FRintj 0 argihi argilo argjhi argjlo)
	    (media-arith-sat-semantics operation argihi argjhi
				       (halfword hi FRintk 0) mode max min
				       (msr-sie-fri-hi))
	    (media-arith-sat-semantics operation argilo argjlo
				       (halfword lo FRintk 0) mode max min
				       (msr-sie-fri-lo)))
)

(define-pmacro (media-dual-arith-sat name operation mode max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1))
       (.str name "$pack $FRinti,$FRintj,$FRintk")
       (+ pack FRintk op FRinti ope FRintj)
       (media-dual-arith-sat-semantics operation mode max min)
       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
	(fr500 (unit u-media)) (fr550 (unit u-media)))
  )
)

(media-dual-arith-sat maddhss add  HI 32767 -32768 OP_7B OPE1_10 "Media dual add signed with saturation")
(media-dual-arith-sat maddhus add UHI 65535      0 OP_7B OPE1_11 "Media dual add unsigned with saturation")

(media-dual-arith-sat msubhss sub  HI 32767 -32768 OP_7B OPE1_12 "Media dual sub signed with saturation")
(media-dual-arith-sat msubhus sub UHI 65535      0 OP_7B OPE1_13 "Media dual sub unsigned with saturation")

(define-pmacro (conditional-media-dual-arith-sat
		name operation mode max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
	(FR400-MAJOR M-1) (FR450-MAJOR M-1) CONDITIONAL)
       (.str name "$pack $FRinti,$FRintj,$FRintk,$CCi,$cond")
       (+ pack FRintk op FRinti CCi cond ope FRintj)
       (if (eq CCi (or cond 2))
	   (media-dual-arith-sat-semantics operation mode max min))
       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
	(fr500 (unit u-media)) (fr550 (unit u-media)))
  )
)

(conditional-media-dual-arith-sat cmaddhss add  HI 32767 -32768 OP_71 OPE4_0 "Conditional Media dual add signed with saturation")
(conditional-media-dual-arith-sat cmaddhus add UHI 65535      0 OP_71 OPE4_1 "Conditional Media dual add unsigned with saturation")

(conditional-media-dual-arith-sat cmsubhss sub  HI 32767 -32768 OP_71 OPE4_2 "Conditional Media dual sub signed with saturation")
(conditional-media-dual-arith-sat cmsubhus sub UHI 65535      0 OP_71 OPE4_3 "Conditional Media dual sub unsigned with saturation")

(define-pmacro (media-quad-arith-sat-semantics cond operation mode max min)
  (if (orif (register-unaligned FRintieven 2)
	    (orif (register-unaligned FRintjeven 2)
		  (register-unaligned FRintkeven 2)))
      (c-call VOID "@cpu@_media_register_not_aligned")
      (if cond
	  (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
		    ; hack to get FRintkeven referenced as a target for profiling
		    (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
		    (extract-hilo FRintieven 0 FRintjeven 0
				  argihi argilo argjhi argjlo)
		    (media-arith-sat-semantics operation argihi argjhi
					       (halfword hi FRintkeven 0) mode
					       max min (msr-sie-fri-hi))
		    (media-arith-sat-semantics operation argilo argjlo
					       (halfword lo FRintkeven 0) mode
					       max min (msr-sie-fri-lo))
		    (extract-hilo FRintieven 1 FRintjeven 1
				  argihi argilo argjhi argjlo)
		    (media-arith-sat-semantics operation argihi argjhi
					       (halfword hi FRintkeven 1) mode
					       max min	(msr-sie-fri-1-hi))
		    (media-arith-sat-semantics operation argilo argjlo
					       (halfword lo FRintkeven 1) mode
					       max min (msr-sie-fri-1-lo)))))
)

(define-pmacro (media-quad-arith-sat name operation mode max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
	(FR400-MAJOR M-2) (FR450-MAJOR M-2))
       (.str name "$pack $FRintieven,$FRintjeven,$FRintkeven")
       (+ pack FRintkeven op FRintieven ope FRintjeven)
       (media-quad-arith-sat-semantics 1 operation mode max min)
       ((fr400 (unit u-media-1-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)
		     (out FRintk FRintkeven)))
	(fr450 (unit u-media-1-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)
		     (out FRintk FRintkeven)))
	(fr500 (unit u-media-quad-arith
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)
		     (out FRintk FRintkeven))) (fr550 (unit u-media-quad)))
  )
)

(media-quad-arith-sat mqaddhss add  HI 32767 -32768 OP_7B OPE1_18 "Media quad add signed with saturation")
(media-quad-arith-sat mqaddhus add UHI 65535      0 OP_7B OPE1_19 "Media quad add unsigned with saturation")

(media-quad-arith-sat mqsubhss sub  HI 32767 -32768 OP_7B OPE1_1A "Media quad sub signed with saturation")
(media-quad-arith-sat mqsubhus sub UHI 65535      0 OP_7B OPE1_1B "Media quad sub unsigned with saturation")

(define-pmacro (conditional-media-quad-arith-sat
		name operation mode max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2)
	(FR400-MAJOR M-2) (FR450-MAJOR M-2) CONDITIONAL)
       (.str name "$pack $FRintieven,$FRintjeven,$FRintkeven,$CCi,$cond")
       (+ pack FRintkeven op FRintieven CCi cond ope FRintjeven)
       (media-quad-arith-sat-semantics (eq CCi (or cond 2))
				       operation mode max min)
       ((fr400 (unit u-media-1-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)
		     (out FRintk FRintkeven)))
	(fr450 (unit u-media-1-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)
		     (out FRintk FRintkeven)))
	(fr500 (unit u-media-quad-arith
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)
		     (out FRintk FRintkeven))) (fr550 (unit u-media-quad)))
  )
)

(conditional-media-quad-arith-sat cmqaddhss add  HI 32767 -32768 OP_73 OPE4_0 "Conditional Media quad add signed with saturation")
(conditional-media-quad-arith-sat cmqaddhus add UHI 65535      0 OP_73 OPE4_1 "Conditional Media quad add unsigned with saturation")

(conditional-media-quad-arith-sat cmqsubhss sub  HI 32767 -32768 OP_73 OPE4_2 "Conditional Media quad sub signed with saturation")
(conditional-media-quad-arith-sat cmqsubhus sub UHI 65535      0 OP_73 OPE4_3 "Conditional Media quad sub unsigned with saturation")

;; Return A if |A| > |B| and B is positive.  Return -A if |A| > |B| and
;; B is negative, saturating 0x8000 as 0x7fff.  Return 0 otherwise.
(define-pmacro (media-low-clear-semantics a b)
  (cond HI
	((le UHI (abs a) (abs b)) 0)
	((le HI 0 b) a)
	((eq HI a -32768) 32767)
	(else (neg a))))

;; Return A if -|B| < A < |B|.  Return -B if A <= -|B|, saturating 0x8000
;; as 0x7fff.  Return B if A >= |B|.
(define-pmacro (media-scope-limit-semantics a b)
  (cond HI
	((andif (gt HI b -32768)
		(ge HI a (abs b))) b)
	((gt HI a (neg (abs b))) a)
	((eq HI b -32768) 32767)
	(else (neg b))))

(define-pmacro (media-quad-limit name operation op ope comment)
  (dni name
       comment
       ((UNIT FM0) (MACH fr450) (FR450-MAJOR M-2))
       (.str name "$pack $FRintieven,$FRintjeven,$FRintkeven")
       (+ pack FRintkeven op FRintieven ope FRintjeven)
       (if (orif (register-unaligned FRintieven 2)
		 (orif (register-unaligned FRintjeven 2)
		       (register-unaligned FRintkeven 2)))
	   (c-call VOID "@cpu@_media_register_not_aligned")
	   (sequence ((HI a1) (HI a2) (HI a3) (HI a4)
		      (HI b1) (HI b2) (HI b3) (HI b4))
		     ; hack to get FRintkeven referenced as a target
		     ; for profiling
		     (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
		     (extract-hilo FRintieven 0 FRintjeven 0 a1 a2 b1 b2)
		     (extract-hilo FRintieven 1 FRintjeven 1 a3 a4 b3 b4)
		     (set (halfword hi FRintkeven 0) (operation a1 b1))
		     (set (halfword lo FRintkeven 0) (operation a2 b2))
		     (set (halfword hi FRintkeven 1) (operation a3 b3))
		     (set (halfword lo FRintkeven 1) (operation a4 b4))))
       ((fr450 (unit u-media-1-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)
		     (out FRintk FRintkeven))))
  )
)

(media-quad-limit mqlclrhs media-low-clear-semantics OP_78 OPE1_10
		  "Media quad low clear")
(media-quad-limit mqlmths media-scope-limit-semantics OP_78 OPE1_14
		  "Media quad scope limitation")

(define-pmacro (media-quad-shift name operation op ope comment)
  (dni name
       (comment)
       ((UNIT FM0) (MACH fr450) (FR450-MAJOR M-2))
       (.str name "$pack $FRintieven,$u6,$FRintkeven")
       (+ pack FRintkeven op FRintieven ope u6)
       (if (orif (register-unaligned FRintieven 2)
		 (register-unaligned FRintkeven 2))
	   (c-call VOID "@cpu@_media_register_not_aligned")
	   (sequence ()
		     ; hack to get these referenced for profiling
		     (set FRintieven (c-raw-call SI "frv_ref_SI" FRintieven))
		     (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
		     (set (halfword hi FRintkeven 0)
			  (operation HI (halfword hi FRintieven 0)
					(and u6 #xf)))
		     (set (halfword lo FRintkeven 0)
			  (operation HI (halfword lo FRintieven 0)
					(and u6 #xf)))
		     (set (halfword hi FRintkeven 1)
			  (operation HI (halfword hi FRintieven 1)
					(and u6 #xf)))
		     (set (halfword lo FRintkeven 1)
			  (operation HI (halfword lo FRintieven 1)
					(and u6 #xf)))))
       ((fr450 (unit u-media-3-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintieven)
		     (out FRintk FRintkeven))))
  )
)

(media-quad-shift mqsllhi sll OP_78 OPE1_11 "Media quad left shift")
(media-quad-shift mqsrahi sra OP_78 OPE1_13 "Media quad right shift")

(define-pmacro (media-acc-arith-sat name operation mode max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3))
       (.str name "$pack $ACC40Si,$ACC40Sk")
       (+ pack ACC40Sk op ACC40Si ope (ACCj-null))
       (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
	   (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
	       (if (register-unaligned ACC40Si 2)
		   (c-call VOID "@cpu@_media_acc_not_aligned")
		   (media-arith-sat-semantics operation ACC40Si
					      (nextreg h-acc40S ACC40Si 1)
					      ACC40Sk mode max min (msr-sie-acci)))))
       ((fr400 (unit u-media-2-acc)) (fr450 (unit u-media-2-acc))
	(fr550 (unit u-media-4-acc)))
  )
)

(media-acc-arith-sat maddaccs add DI #x7fffffffff (inv DI #x7fffffffff)
		     OP_78 OPE1_04 "Media accumulator addition")
(media-acc-arith-sat msubaccs sub DI #x7fffffffff (inv DI #x7fffffffff)
		     OP_78 OPE1_05 "Media accumulator subtraction")

(define-pmacro (media-dual-acc-arith-sat name operation mode max min op ope
					 comment)
  (dni name
       (comment)
       ((UNIT MDUALACC) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       (.str name "$pack $ACC40Si,$ACC40Sk")
       (+ pack ACC40Sk op ACC40Si ope (ACCj-null))
       (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
	   (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
	       (if (register-unaligned ACC40Si 4)
		   (c-call VOID "@cpu@_media_acc_not_aligned")
		   (if (register-unaligned ACC40Sk 2)
		       (c-call VOID "@cpu@_media_acc_not_aligned")
		       (sequence ()
				 (media-arith-sat-semantics operation ACC40Si
							    (nextreg h-acc40S ACC40Si 1)
							    ACC40Sk mode max min
							    (msr-sie-acci))
				 (media-arith-sat-semantics operation
							    (nextreg h-acc40S ACC40Si 2)
							    (nextreg h-acc40S ACC40Si 3)
							    (nextreg h-acc40S ACC40Sk 1)
							    mode max min
							    (msr-sie-acci-1)))))))
       ((fr400 (unit u-media-2-acc-dual)) (fr450 (unit u-media-2-acc-dual))
	(fr550 (unit u-media-4-acc-dual)))
  )
)

(media-dual-acc-arith-sat mdaddaccs add DI #x7fffffffff (inv DI #x7fffffffff)
			  OP_78 OPE1_06 "Media accumulator addition")
(media-dual-acc-arith-sat mdsubaccs sub DI #x7fffffffff (inv DI #x7fffffffff)
			  OP_78 OPE1_07 "Media accumulator subtraction")

(dni masaccs
     "Media add and subtract signed accumulator with saturation"
       ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3))
       "masaccs$pack $ACC40Si,$ACC40Sk"
       (+ pack ACC40Sk OP_78 ACC40Si OPE1_08 (ACCj-null))
       (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
	   (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
	       (if (register-unaligned ACC40Si 2)
		   (c-call VOID "@cpu@_media_acc_not_aligned")
		   (if (register-unaligned ACC40Sk 2)
		       (c-call VOID "@cpu@_media_acc_not_aligned")
		       (sequence ()
				 (media-arith-sat-semantics add ACC40Si
							    (nextreg h-acc40S ACC40Si 1)
							    ACC40Sk DI
							    #x7fffffffff
							    (inv DI #x7fffffffff)
							    (msr-sie-acci))
				 (media-arith-sat-semantics sub ACC40Si
							    (nextreg h-acc40S ACC40Si 1)
							    (nextreg h-acc40S ACC40Sk 1)
							    DI
							    #x7fffffffff
							    (inv DI #x7fffffffff)
							    (msr-sie-acci-1)))))))
       ((fr400 (unit u-media-2-add-sub)) (fr450 (unit u-media-2-add-sub))
	(fr550 (unit u-media-4-add-sub)))
  )

(dni mdasaccs
     "Media add and subtract signed accumulator with saturation"
       ((UNIT MDUALACC) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       "mdasaccs$pack $ACC40Si,$ACC40Sk"
       (+ pack ACC40Sk OP_78 ACC40Si OPE1_09 (ACCj-null))
       (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
	   (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
	       (if (register-unaligned ACC40Si 4)
		   (c-call VOID "@cpu@_media_acc_not_aligned")
		   (if (register-unaligned ACC40Sk 4)
		       (c-call VOID "@cpu@_media_acc_not_aligned")
		       (sequence ()
				 (media-arith-sat-semantics add ACC40Si
							    (nextreg h-acc40S ACC40Si 1)
							    ACC40Sk DI
							    #x7fffffffff
							    (inv DI #x7fffffffff)
							    (msr-sie-acci))
				 (media-arith-sat-semantics sub ACC40Si
							    (nextreg h-acc40S ACC40Si 1)
							    (nextreg h-acc40S ACC40Sk 1)
							    DI
							    #x7fffffffff
							    (inv DI #x7fffffffff)
							    (msr-sie-acci-1))
				 (media-arith-sat-semantics add
							    (nextreg h-acc40S ACC40Si 2)
							    (nextreg h-acc40S ACC40Si 3)
							    (nextreg h-acc40S ACC40Sk 2)
							    DI
							    #x7fffffffff
							    (inv DI #x7fffffffff)
							    (msr-sie-acci-2))
				 (media-arith-sat-semantics sub
							    (nextreg h-acc40S ACC40Si 2)
							    (nextreg h-acc40S ACC40Si 3)
							    (nextreg h-acc40S ACC40Sk 3)
							    DI
							    #x7fffffffff
							    (inv DI #x7fffffffff)
							    (msr-sie-acci-3)))))))
       ((fr400 (unit u-media-2-add-sub-dual))
	(fr450 (unit u-media-2-add-sub-dual))
	(fr550 (unit u-media-4-add-sub-dual)))
  )

(define-pmacro (media-multiply-semantics conv arg1 arg2 res)
  (set res (mul DI (conv DI arg1) (conv DI arg2)))
)

(define-pmacro (media-dual-multiply-semantics cond mode conv rhs1 rhs2)
  (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
      (if (register-unaligned ACC40Sk 2)
	  (c-call VOID "@cpu@_media_acc_not_aligned")
	  (if cond
	      (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
			(extract-hilo FRinti 0 FRintj 0
				      argihi argilo argjhi argjlo)
			(media-multiply-semantics conv argihi rhs1 ACC40Sk)
			(media-multiply-semantics conv argilo rhs2
						  (nextreg h-acc40S ACC40Sk 1))))))
)

(define-pmacro (media-dual-multiply name mode conv rhs1 rhs2 op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3) PRESERVE-OVF)
       (.str name "$pack $FRinti,$FRintj,$ACC40Sk")
       (+ pack ACC40Sk op FRinti ope FRintj)
       (media-dual-multiply-semantics 1 mode conv rhs1 rhs2)
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(media-dual-multiply mmulhs  HI ext  argjhi argjlo OP_7B OPE1_14 "Media dual multiply signed")
(media-dual-multiply mmulhu UHI zext argjhi argjlo OP_7B OPE1_15 "Media dual multiply unsigned")

(media-dual-multiply mmulxhs  HI ext  argjlo argjhi OP_7B OPE1_28 "Media dual cross multiply signed")
(media-dual-multiply mmulxhu UHI zext argjlo argjhi OP_7B OPE1_29 "Media dual cross multiply unsigned")

(define-pmacro (conditional-media-dual-multiply
		name mode conv rhs1 rhs2 op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3)
	PRESERVE-OVF CONDITIONAL)
       (.str name "$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond")
       (+ pack ACC40Sk op FRinti CCi cond ope FRintj)
       (media-dual-multiply-semantics (eq CCi (or cond 2)) mode conv rhs1 rhs2)
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(conditional-media-dual-multiply cmmulhs  HI ext  argjhi argjlo OP_72 OPE4_0 "Conditional Media dual multiply signed")
(conditional-media-dual-multiply cmmulhu UHI zext argjhi argjlo OP_72 OPE4_1 "Conditional Media dual multiply unsigned")

(define-pmacro (media-quad-multiply-semantics cond mode conv rhs1 rhs2)
  (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
      (if (register-unaligned ACC40Sk 4)
	  (c-call VOID "@cpu@_media_acc_not_aligned")
	  (if (orif (register-unaligned FRintieven 2)
		    (register-unaligned FRintjeven 2))
	      (c-call VOID "@cpu@_media_register_not_aligned")
	      (if cond
		  (sequence ((mode argihi) (mode argilo)
			     (mode argjhi) (mode argjlo))
			    (extract-hilo FRintieven 0 FRintjeven 0
					  argihi argilo argjhi argjlo)
			    (media-multiply-semantics conv argihi rhs1 ACC40Sk)
			    (media-multiply-semantics conv argilo rhs2
						      (nextreg h-acc40S ACC40Sk 1))
			    (extract-hilo FRintieven 1 FRintjeven 1
					  argihi argilo argjhi argjlo)
			    (media-multiply-semantics conv argihi rhs1
						      (nextreg h-acc40S ACC40Sk 2))
			    (media-multiply-semantics conv argilo rhs2
						      (nextreg h-acc40S ACC40Sk 3)))))))
)

(define-pmacro (media-quad-multiply name mode conv rhs1 rhs2 op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4) PRESERVE-OVF)
       (.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
       (+ pack ACC40Sk op FRintieven ope FRintjeven)
       (media-quad-multiply-semantics 1 mode conv rhs1 rhs2) 
       ((fr400 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr500 (unit u-media-quad-mul
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
  )
)

(media-quad-multiply mqmulhs  HI ext  argjhi argjlo OP_7B OPE1_1C "Media quad multiply signed")
(media-quad-multiply mqmulhu UHI zext argjhi argjlo OP_7B OPE1_1D "Media quad multiply unsigned")

(media-quad-multiply mqmulxhs  HI ext  argjlo argjhi OP_7B OPE1_2A "Media quad cross multiply signed")
(media-quad-multiply mqmulxhu UHI zext argjlo argjhi OP_7B OPE1_2B "Media quad cross multiply unsigned")

(define-pmacro (conditional-media-quad-multiply
		name mode conv rhs1 rhs2 op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4)
	PRESERVE-OVF CONDITIONAL)
       (.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond")
       (+ pack ACC40Sk op FRintieven CCi cond ope FRintjeven)
       (media-quad-multiply-semantics (eq CCi (or cond 2)) mode conv rhs1 rhs2)
       ((fr400 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr500 (unit u-media-quad-mul
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
  )
)

(conditional-media-quad-multiply cmqmulhs  HI ext  argjhi argjlo OP_74 OPE4_0 "Conditional Media quad multiply signed")
(conditional-media-quad-multiply cmqmulhu UHI zext argjhi argjlo OP_74 OPE4_1 "Conditional Media quad multiply unsigned")

(define-pmacro (media-multiply-acc-semantics 
		conv arg1 addop arg2 res max min sie)
  (sequence ((DI tmp))
	    (set tmp (addop res (mul DI (conv DI arg1) (conv DI arg2))))
	    (saturate-v tmp max min sie res))
)

(define-pmacro (media-dual-multiply-acc-semantics
		cond mode conv addop rhw res max min)
  (if (c-call SI "@cpu@_check_acc_range" (index-of res))
      (if (register-unaligned res 2)
	  (c-call VOID "@cpu@_media_acc_not_aligned")
	  (if cond
	      (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
			(extract-hilo FRinti 0 FRintj 0
				      argihi argilo argjhi argjlo)
			(media-multiply-acc-semantics conv argihi addop argjhi
						      res
						      max min (msr-sie-acci))
			(media-multiply-acc-semantics conv argilo addop argjlo
						      (nextreg rhw res 1)
						      max min (msr-sie-acci-1))))))
)

(define-pmacro (media-dual-multiply-acc
		name mode conv addop rhw res max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3))
       (.str name "$pack $FRinti,$FRintj,$" res)
       (+ pack res op FRinti ope FRintj)
       (media-dual-multiply-acc-semantics 1 mode conv addop rhw res max min)
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(media-dual-multiply-acc mmachs HI ext add h-acc40S ACC40Sk
			 (const DI #x7fffffffff) (const DI #xffffff8000000000)
			 OP_7B OPE1_16
			 "Media dual multiply and accumulate signed")

(media-dual-multiply-acc mmachu UHI zext add h-acc40U ACC40Uk
			 (const DI #xffffffffff) (const DI 0)
			 OP_7B OPE1_17
			 "Media dual multiply and accumulate unsigned")

(media-dual-multiply-acc mmrdhs HI ext sub h-acc40S ACC40Sk
			 (const DI #x7fffffffff) (const DI #xffffff8000000000)
			 OP_7B OPE1_30
			 "Media dual multiply and reduce signed")

(media-dual-multiply-acc mmrdhu UHI zext sub h-acc40U ACC40Uk
			 (const DI #xffffffffff) (const DI 0)
			 OP_7B OPE1_31
			 "Media dual multiply and reduce unsigned")

(define-pmacro (conditional-media-dual-multiply-acc
		name mode conv addop rhw res max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3) CONDITIONAL)
       (.str name "$pack $FRinti,$FRintj,$" res ",$CCi,$cond")
       (+ pack res op FRinti CCi cond ope FRintj)
       (media-dual-multiply-acc-semantics (eq CCi (or cond 2))
					  mode conv addop rhw res max min)
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(conditional-media-dual-multiply-acc cmmachs HI ext add h-acc40S ACC40Sk
			 (const DI #x7fffffffff) (const DI #xffffff8000000000)
			 OP_72 OPE4_2
			 "Conditional Media dual multiply and accumulate signed")

(conditional-media-dual-multiply-acc cmmachu UHI zext add  h-acc40U ACC40Uk
			 (const DI #xffffffffff) (const DI 0)
			 OP_72 OPE4_3
			 "Conditional Media dual multiply and accumulate unsigned")

(define-pmacro (media-quad-multiply-acc-semantics
		cond mode conv addop rhw res max min)
  (if (c-call SI "@cpu@_check_acc_range" (index-of res))
      (if (register-unaligned res 4)
	  (c-call VOID "@cpu@_media_acc_not_aligned")
	  (if (orif (register-unaligned FRintieven 2)
		    (register-unaligned FRintjeven 2))
	      (c-call VOID "@cpu@_media_register_not_aligned")
	      (if cond
		  (sequence ((mode argihi) (mode argilo)
			     (mode argjhi) (mode argjlo))
			    (extract-hilo FRintieven 0 FRintjeven 0
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjhi
							  res
							  max min (msr-sie-acci))
			    (media-multiply-acc-semantics conv argilo addop argjlo
							  (nextreg rhw res 1)
							  max min (msr-sie-acci-1))
			    (extract-hilo FRintieven 1 FRintjeven 1
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjhi
							  (nextreg rhw res 2)
							  max min (msr-sie-acci-2))
			    (media-multiply-acc-semantics conv argilo addop argjlo
							  (nextreg rhw res 3)
							  max min
							  (msr-sie-acci-3)))))))
)

(define-pmacro (media-quad-multiply-acc
		name mode conv addop rhw res max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       (.str name "$pack $FRintieven,$FRintjeven,$" res)
       (+ pack res op FRintieven ope FRintjeven)
       (media-quad-multiply-acc-semantics 1 mode conv addop rhw res max min)
       ((fr400 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr500 (unit u-media-quad-mul
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
  )
)

(media-quad-multiply-acc mqmachs HI ext add h-acc40S ACC40Sk
			 (const DI #x7fffffffff) (const DI #xffffff8000000000)
			 OP_7B OPE1_1E
			 "Media quad multiply and accumulate signed")

(media-quad-multiply-acc mqmachu UHI zext add h-acc40U ACC40Uk
			 (const DI #xffffffffff) (const DI 0)
			 OP_7B OPE1_1F
			 "Media quad multiply and accumulate unsigned")

(define-pmacro (conditional-media-quad-multiply-acc
		name mode conv addop rhw res max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4) CONDITIONAL)
       (.str name "$pack $FRintieven,$FRintjeven,$" res ",$CCi,$cond")
       (+ pack res op FRintieven CCi cond ope FRintjeven)
       (media-quad-multiply-acc-semantics (eq CCi (or cond 2))
					  mode conv addop rhw res max min)
       ((fr400 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr500 (unit u-media-quad-mul
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
  )
)

(conditional-media-quad-multiply-acc cmqmachs HI ext add h-acc40S ACC40Sk
			 (const DI #x7fffffffff) (const DI #xffffff8000000000)
			 OP_74 OPE4_2
			 "Conditional Media quad multiply and accumulate signed")

(conditional-media-quad-multiply-acc cmqmachu UHI zext add h-acc40U ACC40Uk
			 (const DI #xffffffffff) (const DI 0)
			 OP_74 OPE4_3
			 "Conditional media quad multiply and accumulate unsigned")

(define-pmacro (media-quad-multiply-cross-acc-semantics
		cond mode conv addop rhw res max min)
  (if (c-call SI "@cpu@_check_acc_range" (index-of res))
      (if (register-unaligned res 4)
	  (c-call VOID "@cpu@_media_acc_not_aligned")
	  (if (orif (register-unaligned FRintieven 2)
		    (register-unaligned FRintjeven 2))
	      (c-call VOID "@cpu@_media_register_not_aligned")
	      (if cond
		  (sequence ((mode argihi) (mode argilo)
			     (mode argjhi) (mode argjlo))
			    (extract-hilo FRintieven 0 FRintjeven 0
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjhi
							  (nextreg rhw res 2)
							  max min (msr-sie-acci-2))
			    (media-multiply-acc-semantics conv argilo addop argjlo
							  (nextreg rhw res 3)
							  max min (msr-sie-acci-3))
			    (extract-hilo FRintieven 1 FRintjeven 1
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjhi
							  res
							  max min (msr-sie-acci))
			    (media-multiply-acc-semantics conv argilo addop argjlo
							  (nextreg rhw res 1)
							  max min
							  (msr-sie-acci-1)))))))
)

(define-pmacro (media-quad-multiply-cross-acc
		name mode conv addop rhw res max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       (.str name "$pack $FRintieven,$FRintjeven,$" res)
       (+ pack res op FRintieven ope FRintjeven)
       (media-quad-multiply-cross-acc-semantics 1 mode conv addop rhw res
						max min)
       ((fr400 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr550 (unit u-media-4-quad)))
  )
)

(media-quad-multiply-cross-acc mqxmachs HI ext add h-acc40S ACC40Sk
			 (const DI #x7fffffffff) (const DI #xffffff8000000000)
			 OP_78 OPE1_00
			 "Media quad multiply and cross accumulate signed")

(define-pmacro (media-quad-cross-multiply-cross-acc-semantics
		cond mode conv addop rhw res max min)
  (if (c-call SI "@cpu@_check_acc_range" (index-of res))
      (if (register-unaligned res 4)
	  (c-call VOID "@cpu@_media_acc_not_aligned")
	  (if (orif (register-unaligned FRintieven 2)
		    (register-unaligned FRintjeven 2))
	      (c-call VOID "@cpu@_media_register_not_aligned")
	      (if cond
		  (sequence ((mode argihi) (mode argilo)
			     (mode argjhi) (mode argjlo))
			    (extract-hilo FRintieven 0 FRintjeven 0
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjlo
							  (nextreg rhw res 2)
							  max min (msr-sie-acci-2))
			    (media-multiply-acc-semantics conv argilo addop argjhi
							  (nextreg rhw res 3)
							  max min (msr-sie-acci-3))
			    (extract-hilo FRintieven 1 FRintjeven 1
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjlo
							  res
							  max min (msr-sie-acci))
			    (media-multiply-acc-semantics conv argilo addop argjhi
							  (nextreg rhw res 1)
							  max min
							  (msr-sie-acci-1)))))))
)

(define-pmacro (media-quad-cross-multiply-cross-acc
		name mode conv addop rhw res max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       (.str name "$pack $FRintieven,$FRintjeven,$" res)
       (+ pack res op FRintieven ope FRintjeven)
       (media-quad-cross-multiply-cross-acc-semantics 1 mode conv addop rhw res
						      max min)
       ((fr400 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in  FRinti FRintieven)
		     (in  FRintj FRintjeven)))
	(fr550 (unit u-media-4-quad)))
  )
)

(media-quad-cross-multiply-cross-acc mqxmacxhs HI ext add h-acc40S ACC40Sk
			(const DI #x7fffffffff) (const DI #xffffff8000000000)
			OP_78 OPE1_01
			"Media quad cross multiply and cross accumulate signed")

(define-pmacro (media-quad-cross-multiply-acc-semantics
		cond mode conv addop rhw res max min)
  (if (c-call SI "@cpu@_check_acc_range" (index-of res))
      (if (register-unaligned res 4)
	  (c-call VOID "@cpu@_media_acc_not_aligned")
	  (if (orif (register-unaligned FRintieven 2)
		    (register-unaligned FRintjeven 2))
	      (c-call VOID "@cpu@_media_register_not_aligned")
	      (if cond
		  (sequence ((mode argihi) (mode argilo)
			     (mode argjhi) (mode argjlo))
			    (extract-hilo FRintieven 0 FRintjeven 0
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjlo
							  res
							  max min (msr-sie-acci))
			    (media-multiply-acc-semantics conv argilo addop argjhi
							  (nextreg rhw res 1)
							  max min (msr-sie-acci-1))
			    (extract-hilo FRintieven 1 FRintjeven 1
					  argihi argilo argjhi argjlo)
			    (media-multiply-acc-semantics conv argihi addop argjlo
							  (nextreg rhw res 2)
							  max min (msr-sie-acci-2))
			    (media-multiply-acc-semantics conv argilo addop argjhi
							  (nextreg rhw res 3)
							  max min
							  (msr-sie-acci-3)))))))
)

(define-pmacro (media-quad-cross-multiply-acc
		name mode conv addop rhw res max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       (.str name "$pack $FRintieven,$FRintjeven,$" res)
       (+ pack res op FRintieven ope FRintjeven)
       (media-quad-cross-multiply-acc-semantics 1 mode conv addop rhw res
						max min)
       ((fr400 (unit u-media-2-quad
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven)))
	(fr550 (unit u-media-4-quad)))
  )
)

(media-quad-cross-multiply-acc mqmacxhs HI ext add h-acc40S ACC40Sk
			(const DI #x7fffffffff) (const DI #xffffff8000000000)
			OP_78 OPE1_02
			"Media quad cross multiply and accumulate signed")

(define-pmacro (media-complex-semantics
		conv lhs1 rhs1 lhs2 rhs2 res max min sie)
  (sequence ((DI tmp1) (DI tmp2))
	    (media-multiply-semantics conv lhs1 rhs1 tmp1)
	    (media-multiply-semantics conv lhs2 rhs2 tmp2)
	    (set tmp1 (sub tmp1 tmp2))
	    (saturate-v tmp1 max min sie res))
)

(define-pmacro (media-complex-semantics-i
		conv lhs1 rhs1 lhs2 rhs2 res max min sie)
  (sequence ((DI tmp1) (DI tmp2))
	    (media-multiply-semantics conv lhs1 rhs1 tmp1)
	    (media-multiply-semantics conv lhs2 rhs2 tmp2)
	    (set tmp1 (add tmp1 tmp2))
	    (saturate-v tmp1 max min sie res))
)

(define-pmacro (media-dual-complex-semantics mode conv rhs1 rhs2 max min)
  (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
      (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
		(extract-hilo FRinti 0 FRintj 0 argihi argilo argjhi argjlo)
		(media-complex-semantics conv argihi rhs1 argilo rhs2 ACC40Sk
					 max min (msr-sie-acci))))
)

(define-pmacro (media-dual-complex-semantics-i mode conv rhs1 rhs2 max min)
  (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
      (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
		(extract-hilo FRinti 0 FRintj 0 argihi argilo argjhi argjlo)
		(media-complex-semantics-i conv argihi rhs1 argilo rhs2 ACC40Sk
					   max min (msr-sie-acci))))
)

(define-pmacro (media-dual-complex
		name mode conv rhs1 rhs2 max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3))
       (.str name "$pack $FRinti,$FRintj,$ACC40Sk")
       (+ pack ACC40Sk op FRinti ope FRintj)
       (media-dual-complex-semantics mode conv rhs1 rhs2 max min)
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(define-pmacro (media-dual-complex-i
		name mode conv rhs1 rhs2 max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3))
       (.str name "$pack $FRinti,$FRintj,$ACC40Sk")
       (+ pack ACC40Sk op FRinti ope FRintj)
       (media-dual-complex-semantics-i mode conv rhs1 rhs2 max min)
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(media-dual-complex mcpxrs HI ext argjhi argjlo
		    (const DI #x7fffffffff) (const DI #xffffff8000000000)
		    OP_7B OPE1_20
		    "Media dual complex real signed with saturation")

(media-dual-complex mcpxru UHI zext argjhi argjlo
		    (const DI #xffffffffff) (const DI 0)
		    OP_7B OPE1_21
		    "Media dual complex real unsigned with saturation")

(media-dual-complex-i mcpxis HI ext argjlo argjhi
		    (const DI #x7fffffffff) (const DI #xffffff8000000000)
		    OP_7B OPE1_22
		    "Media dual complex imaginary signed with saturation")

(media-dual-complex-i mcpxiu UHI zext argjlo argjhi
		    (const DI #xffffffffff) (const DI 0)
		    OP_7B OPE1_23
		    "Media dual complex imaginary unsigned with saturation")

(define-pmacro (conditional-media-dual-complex
		name mode conv rhs1 rhs2 max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3) CONDITIONAL)
       (.str name "$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond")
       (+ pack ACC40Sk op FRinti CCi cond ope FRintj)
       (if (eq CCi (or cond 2))
	   (media-dual-complex-semantics mode conv rhs1 rhs2 max min))
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(define-pmacro (conditional-media-dual-complex-i
		name mode conv rhs1 rhs2 max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-1) (FR450-MAJOR M-3) CONDITIONAL)
       (.str name "$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond")
       (+ pack ACC40Sk op FRinti CCi cond ope FRintj)
       (if (eq CCi (or cond 2))
	   (media-dual-complex-semantics-i mode conv rhs1 rhs2 max min))
       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
	(fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
  )
)

(conditional-media-dual-complex cmcpxrs HI ext argjhi argjlo
		    (const DI #x7fffffffff) (const DI #xffffff8000000000)
		    OP_75 OPE4_0
		    "Conditional Media dual complex real signed with saturation")

(conditional-media-dual-complex cmcpxru UHI zext argjhi argjlo
		    (const DI #xffffffffff) (const DI 0)
		    OP_75 OPE4_1
		    "Conditional Media dual complex real unsigned with saturation")

(conditional-media-dual-complex-i cmcpxis HI ext argjlo argjhi
		    (const DI #x7fffffffff) (const DI #xffffff8000000000)
		    OP_75 OPE4_2
		    "Conditional Media dual complex imaginary signed with saturation")

(conditional-media-dual-complex-i cmcpxiu UHI zext argjlo argjhi
		    (const DI #xffffffffff) (const DI 0)
		    OP_75 OPE4_3
		    "Conditional Media dual complex imaginary unsigned with saturation")

(define-pmacro (media-quad-complex
		name mode conv rhs1 rhs2 max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       (.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
       (+ pack ACC40Sk op FRintieven ope FRintjeven)
       (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
	   (if (register-unaligned ACC40Sk 2)
	       (c-call VOID "@cpu@_media_acc_not_aligned")
	       (if (orif (register-unaligned FRintieven 2)
			 (register-unaligned FRintjeven 2))
		   (c-call VOID "@cpu@_media_register_not_aligned")
		   (sequence ((mode argihi) (mode argilo)
			      (mode argjhi) (mode argjlo))
			     (extract-hilo FRintieven 0 FRintjeven 0
					   argihi argilo argjhi argjlo)
			     (media-complex-semantics conv argihi rhs1 argilo rhs2
						      ACC40Sk
						      max min (msr-sie-acci))
			     (extract-hilo FRintieven 1 FRintjeven 1
					   argihi argilo argjhi argjlo)
			     (media-complex-semantics conv argihi rhs1 argilo rhs2
						      (nextreg h-acc40S ACC40Sk 1)
						      max min (msr-sie-acci-1))))))
       ((fr400 (unit u-media-2-quad
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven)))
	(fr500 (unit u-media-quad-complex
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
  )
)

(define-pmacro (media-quad-complex-i
		name mode conv rhs1 rhs2 max min op ope comment)
  (dni name
       (comment)
       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
	(FR400-MAJOR M-2) (FR450-MAJOR M-4))
       (.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
       (+ pack ACC40Sk op FRintieven ope FRintjeven)
       (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
	   (if (register-unaligned ACC40Sk 2)
	       (c-call VOID "@cpu@_media_acc_not_aligned")
	       (if (orif (register-unaligned FRintieven 2)
			 (register-unaligned FRintjeven 2))
		   (c-call VOID "@cpu@_media_register_not_aligned")
		   (sequence ((mode argihi) (mode argilo)
			      (mode argjhi) (mode argjlo))
			     (extract-hilo FRintieven 0 FRintjeven 0
					   argihi argilo argjhi argjlo)
			     (media-complex-semantics-i conv argihi rhs1 argilo rhs2
							ACC40Sk
							max min (msr-sie-acci))
			     (extract-hilo FRintieven 1 FRintjeven 1
					   argihi argilo argjhi argjlo)
			     (media-complex-semantics-i conv argihi rhs1 argilo rhs2
							(nextreg h-acc40S ACC40Sk 1)
							max min (msr-sie-acci-1))))))
       ((fr400 (unit u-media-2-quad
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven)))
	(fr450 (unit u-media-2-quad
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven)))
	(fr500 (unit u-media-quad-complex
		     (in FRinti FRintieven)
		     (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
  )
)

(media-quad-complex mqcpxrs HI ext argjhi argjlo
		    (const DI #x7fffffffff) (const DI #xffffff8000000000)
		    OP_7B OPE1_24
		    "Media quad complex real signed with saturation")

(media-quad-complex mqcpxru UHI zext argjhi argjlo
		    (const DI #xffffffffff) (const DI 0)
		    OP_7B OPE1_25
		    "Media quad complex real unsigned with saturation")

(media-quad-complex-i mqcpxis HI ext argjlo argjhi
		    (const DI #x7fffffffff) (const DI #xffffff8000000000)
		    OP_7B OPE1_26
		    "Media quad complex imaginary signed with saturation")

(media-quad-complex-i mqcpxiu UHI zext argjlo argjhi
		    (const DI #xffffffffff) (const DI 0)
		    OP_7B OPE1_27
		    "Media quad complex imaginary unsigned with saturation")

(define-pmacro (media-pack src1 src2 targ offset)
  (sequence ()
	    (set (halfword hi targ offset) (halfword lo src1 offset))
	    (set (halfword lo targ offset) (halfword lo src2 offset)))
)

(define-pmacro (media-expand-halfword-to-word-semantics cond)
  (if cond
      (sequence ((UHI tmp))
		(if (and u6 1)
		    (set tmp (halfword lo FRinti 0))
		    (set tmp (halfword hi FRinti 0)))
		(set (halfword hi FRintk 0) tmp)
		(set (halfword lo FRintk 0) tmp)))
)

(dni mexpdhw
     "Media expand halfword to word"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mexpdhw$pack $FRinti,$u6,$FRintk"
     (+ pack FRintk OP_7B FRinti OPE1_32 u6)
     (media-expand-halfword-to-word-semantics 1)
     ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(dni cmexpdhw
     "Conditional media expand halfword to word"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1) CONDITIONAL)
     "cmexpdhw$pack $FRinti,$u6,$FRintk,$CCi,$cond"
     (+ pack FRintk OP_76 FRinti CCi cond OPE4_2 u6)
     (media-expand-halfword-to-word-semantics (eq CCi (or cond 2)))
     ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(define-pmacro (media-expand-halfword-to-double-semantics cond)
  (if (register-unaligned FRintkeven 2)
      (c-call VOID "@cpu@_media_register_not_aligned")
      (if cond
	  (sequence ((UHI tmp))
		    ; a hack to get FRintkeven referenced for profiling
		    (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
		    (if (and u6 1)
			(set tmp (halfword lo FRinti 0))
			(set tmp (halfword hi FRinti 0)))
		    (set (halfword hi FRintkeven 0) tmp)
		    (set (halfword lo FRintkeven 0) tmp)
		    (set (halfword hi FRintkeven 1) tmp)
		    (set (halfword lo FRintkeven 1) tmp))))
)

(dni mexpdhd
     "Media expand halfword to double"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "mexpdhd$pack $FRinti,$u6,$FRintkeven"
     (+ pack FRintkeven OP_7B FRinti OPE1_33 u6)
     (media-expand-halfword-to-double-semantics 1)
     ((fr400 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr500 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-dual-expand)))
)

(dni cmexpdhd
     "Conditional media expand halfword to double"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2) CONDITIONAL)
     "cmexpdhd$pack $FRinti,$u6,$FRintkeven,$CCi,$cond"
     (+ pack FRintkeven OP_76 FRinti CCi cond OPE4_3 u6)
     (media-expand-halfword-to-double-semantics (eq CCi (or cond 2)))
     ((fr400 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr500 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-dual-expand)))
)

(dni mpackh
     "Media halfword pack"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mpackh$pack $FRinti,$FRintj,$FRintk"
     (+ pack FRintk OP_7B FRinti OPE1_34 FRintj)
     (media-pack FRinti FRintj FRintk 0)
     ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
      (fr500 (unit u-media)) (fr550 (unit u-media)))
)

(dni mdpackh
     "Media dual pack"
     ((UNIT FM01) (FR500-MAJOR M-5) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "mdpackh$pack $FRintieven,$FRintjeven,$FRintkeven"
     (+ pack FRintkeven OP_7B FRintieven OPE1_36 FRintjeven)
     (if (orif (register-unaligned FRintieven 2)
	       (orif (register-unaligned FRintjeven 2)
		     (register-unaligned FRintkeven 2)))
	 (c-call VOID "@cpu@_media_register_not_aligned")
	 (sequence ()
		   ; hack to get these referenced for profiling
		   (set FRintieven (c-raw-call SI "frv_ref_SI" FRintieven))
		   (set FRintjeven (c-raw-call SI "frv_ref_SI" FRintjeven))
		   (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
		   (media-pack FRintieven FRintjeven FRintkeven 0)
		   (media-pack FRintieven FRintjeven FRintkeven 1)))
     ((fr400 (unit u-media-3-quad
		   (in  FRinti FRintieven)
		   (in  FRintj FRintjeven)
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-3-quad
		   (in  FRinti FRintieven)
		   (in  FRintj FRintjeven)
		   (out FRintk FRintkeven)))
      (fr500 (unit u-media-quad-arith
		   (in  FRinti FRintieven)
		   (in  FRintj FRintjeven)
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-quad)))
)

(define-pmacro (media-unpack src soff targ toff)
  (sequence ()
	    (set (halfword hi targ toff) (halfword hi src soff))
	    (set (halfword lo targ toff) (halfword hi src soff))
	    (set (halfword hi targ (add toff 1)) (halfword lo src soff))
	    (set (halfword lo targ (add toff 1)) (halfword lo src soff)))
)

(dni munpackh
     "Media halfword unpack"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "munpackh$pack $FRinti,$FRintkeven"
     (+ pack FRintkeven OP_7B FRinti OPE1_35 (FRj-null))
     (if (register-unaligned FRintkeven 2)
	 (c-call VOID "@cpu@_media_register_not_aligned")
	 (sequence ()
		   ; hack to get these referenced for profiling
		   (set FRinti (c-raw-call SI "frv_ref_SI" FRinti))
		   (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
		   (media-unpack FRinti 0 FRintkeven 0)))
     ((fr400 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr500 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-dual-expand)))
)

(dni mdunpackh
     "Media dual unpack"
     ((UNIT FM01) (FR500-MAJOR M-7) (MACH simple,tomcat,frv))
     "mdunpackh$pack $FRintieven,$FRintk"
     (+ pack FRintk OP_7B FRintieven OPE1_37 (FRj-null))
     (if (orif (register-unaligned FRintieven 2) (register-unaligned FRintk 4))
	 (c-call VOID "@cpu@_media_register_not_aligned")
	 (sequence ()
		   ; hack to get these referenced for profiling
		   (set FRintieven (c-raw-call SI "frv_ref_SI" FRintieven))
		   (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
		   (media-unpack FRintieven 0 FRintk 0)
		   (media-unpack FRintieven 1 FRintk 2)))
     ((fr500 (unit u-media-dual-unpack
		   (in FRinti FRintieven))))
)

(define-pmacro (ubyte num arg offset)
  (reg (.sym h-fr_ num) (add (index-of arg) offset)))

(define-pmacro (mbtoh-semantics cond)
  (if (register-unaligned FRintkeven 2)
      (c-call VOID "@cpu@_media_register_not_aligned")
      (if cond
	  (sequence ()
		    (set (halfword hi FRintkeven 0) (ubyte 3 FRintj 0))
		    (set (halfword lo FRintkeven 0) (ubyte 2 FRintj 0))
		    (set (halfword hi FRintkeven 1) (ubyte 1 FRintj 0))
		    (set (halfword lo FRintkeven 1) (ubyte 0 FRintj 0)))))
)

(dni mbtoh
     "Media convert byte to halfword"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "mbtoh$pack $FRintj,$FRintkeven"
     (+ pack FRintkeven OP_7B (FRi-null) OPE1_38 FRintj)
     (sequence ()
	       ; hack to get these referenced for profiling
	       (set FRintj (c-raw-call SI "frv_ref_SI" FRintj))
	       (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
	       (mbtoh-semantics 1))
     ((fr400 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr500 (unit u-media-dual-btoh
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-dual-expand)))
)

(dni cmbtoh
     "Conditional media convert byte to halfword"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2) CONDITIONAL)
     "cmbtoh$pack $FRintj,$FRintkeven,$CCi,$cond"
     (+ pack FRintkeven OP_77 (FRi-null) CCi cond OPE4_0 FRintj)
     (sequence ()
	       ; hack to get these referenced for profiling
	       (set FRintj (c-raw-call SI "frv_ref_SI" FRintj))
	       (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
	       (mbtoh-semantics (eq CCi (or cond 2))))
     ((fr400 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr450 (unit u-media-dual-expand
		   (out FRintk FRintkeven)))
      (fr500 (unit u-media-dual-btoh
		   (out FRintk FRintkeven)))
      (fr550 (unit u-media-dual-expand
		   (in FRinti FRintj))))
)

(define-pmacro (mhtob-semantics cond)
  (if (register-unaligned FRintjeven 2)
      (c-call VOID "@cpu@_media_register_not_aligned")
      (if cond
	  (sequence ()
		    (set (ubyte 3 FRintk 0) (halfword hi FRintjeven 0))
		    (set (ubyte 2 FRintk 0) (halfword lo FRintjeven 0))
		    (set (ubyte 1 FRintk 0) (halfword hi FRintjeven 1))
		    (set (ubyte 0 FRintk 0) (halfword lo FRintjeven 1)))))
)

(dni mhtob
     "Media convert halfword to byte"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2))
     "mhtob$pack $FRintjeven,$FRintk"
     (+ pack FRintk OP_7B (FRi-null) OPE1_39 FRintjeven)
     (sequence ()
	       ; hack to get these referenced for profiling
	       (set FRintjeven (c-raw-call SI "frv_ref_SI" FRintjeven))
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (mhtob-semantics 1))
     ((fr400 (unit u-media-dual-htob
		   (in FRintj FRintjeven)))
      (fr450 (unit u-media-dual-htob
		   (in FRintj FRintjeven)))
      (fr500 (unit u-media-dual-htob
		   (in FRintj FRintjeven)))
      (fr550 (unit u-media-3-dual
		   (in FRinti FRintjeven))))
)

(dni cmhtob
     "Conditional media convert halfword to byte"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-2) CONDITIONAL)
     "cmhtob$pack $FRintjeven,$FRintk,$CCi,$cond"
     (+ pack FRintk OP_77 (FRi-null) CCi cond OPE4_1 FRintjeven)
     (sequence ()
	       ; hack to get these referenced for profiling
	       (set FRintjeven (c-raw-call SI "frv_ref_SI" FRintjeven))
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (mhtob-semantics (eq CCi (or cond 2))))
     ((fr400 (unit u-media-dual-htob
		   (in FRintj FRintjeven)))
      (fr450 (unit u-media-dual-htob
		   (in FRintj FRintjeven)))
      (fr500 (unit u-media-dual-htob
		   (in FRintj FRintjeven)))
      (fr550 (unit u-media-3-dual
		   (in FRinti FRintjeven))))
)

(define-pmacro (mbtohe-semantics cond)
  (if (register-unaligned FRintk 4)
      (c-call VOID "@cpu@_media_register_not_aligned")
      (if cond
	  (sequence ()
		    (set (halfword hi FRintk 0) (ubyte 3 FRintj 0))
		    (set (halfword lo FRintk 0) (ubyte 3 FRintj 0))
		    (set (halfword hi FRintk 1) (ubyte 2 FRintj 0))
		    (set (halfword lo FRintk 1) (ubyte 2 FRintj 0))
		    (set (halfword hi FRintk 2) (ubyte 1 FRintj 0))
		    (set (halfword lo FRintk 2) (ubyte 1 FRintj 0))
		    (set (halfword hi FRintk 3) (ubyte 0 FRintj 0))
		    (set (halfword lo FRintk 3) (ubyte 0 FRintj 0)))))
)

(dni mbtohe
     "Media convert byte to halfword extended"
     ((UNIT FM01) (FR500-MAJOR M-7) (MACH simple,tomcat,frv))
     "mbtohe$pack $FRintj,$FRintk"
     (+ pack FRintk OP_7B (FRi-null) OPE1_3A FRintj)
     (sequence ()
	       ; hack to get these referenced for profiling
	       (set FRintj (c-raw-call SI "frv_ref_SI" FRintj))
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (mbtohe-semantics 1))
     ((fr500 (unit u-media-dual-btohe)))
)

(dni cmbtohe
     "Conditional media convert byte to halfword extended"
     ((UNIT FM01) (FR500-MAJOR M-7) CONDITIONAL (MACH simple,tomcat,frv))
     "cmbtohe$pack $FRintj,$FRintk,$CCi,$cond"
     (+ pack FRintk OP_77 (FRi-null) CCi cond OPE4_2 FRintj)
     (sequence ()
	       ; hack to get these referenced for profiling
	       (set FRintj (c-raw-call SI "frv_ref_SI" FRintj))
	       (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
	       (mbtohe-semantics (eq CCi (or cond 2))))
     ((fr500 (unit u-media-dual-btohe)))
)

; Media NOP
; A special case of mclracc
(dni mnop "Media nop"
     ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-1)
      (FR400-MAJOR M-1) (FR450-MAJOR M-1))
     "mnop$pack"
     (+ pack (f-ACC40Sk 63) OP_7B (f-A 1) (misc-null-10) OPE1_3B (FRj-null))
     (nop)
     ()
)

; mclracc with #A==0
(dni mclracc-0
     "Media clear accumulator(s)"
     ((UNIT FM01) (FR500-MAJOR M-3) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-3))
     "mclracc$pack $ACC40Sk,$A0"
     (+ pack ACC40Sk OP_7B (f-A 0) (misc-null-10) OPE1_3B (FRj-null))
     (c-call VOID "@cpu@_clear_accumulators" (index-of ACC40Sk) 0)
     ((fr400 (unit u-media-4)) (fr450 (unit u-media-4))
      (fr500 (unit u-media)) (fr550 (unit u-media-3-mclracc)))
)

; mclracc with #A==1
(dni mclracc-1
     "Media clear accumulator(s)"
     ((UNIT MCLRACC-1) (FR500-MAJOR M-6) (FR550-MAJOR M-3)
      (FR400-MAJOR M-2) (FR450-MAJOR M-4))
     "mclracc$pack $ACC40Sk,$A1"
     (+ pack ACC40Sk OP_7B (f-A 1) (misc-null-10) OPE1_3B (FRj-null))
     (c-call VOID "@cpu@_clear_accumulators" (index-of ACC40Sk) 1)
     ((fr400 (unit u-media-4)) (fr450 (unit u-media-4-mclracca))
      (fr500 (unit u-media)) (fr550 (unit u-media-3-mclracc)))
)

(dni mrdacc
     "Media read accumulator"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-5))
     "mrdacc$pack $ACC40Si,$FRintk"
     (+ pack FRintk OP_7B ACC40Si OPE1_3C (FRj-null))
     (set FRintk ACC40Si)
     ((fr400 (unit u-media-4)) (fr450 (unit u-media-4))
      (fr500 (unit u-media)) (fr550 (unit u-media-3-acc)))
)

(dni mrdaccg
     "Media read accumulator guard"
     ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-5))
     "mrdaccg$pack $ACCGi,$FRintk"
     (+ pack FRintk OP_7B ACCGi OPE1_3E (FRj-null))
     (set FRintk ACCGi)
     ((fr400 (unit u-media-4-accg)) (fr450 (unit u-media-4-accg))
      (fr500 (unit u-media)) (fr550 (unit u-media-3-acc (in ACC40Si ACCGi))))
)

(dni mwtacc
     "Media write accumulator"
     ((UNIT FM01) (FR500-MAJOR M-3) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-3))
     "mwtacc$pack $FRinti,$ACC40Sk"
     (+ pack ACC40Sk OP_7B FRinti OPE1_3D (FRj-null))
     (set ACC40Sk (or (and ACC40Sk (const DI #xffffffff00000000))
		     FRinti))
     ((fr400 (unit u-media-4)) (fr450 (unit u-media-4))
      (fr500 (unit u-media)) (fr550 (unit u-media-3-wtacc)))
)

(dni mwtaccg
     "Media write accumulator guard"
     ((UNIT FM01) (FR500-MAJOR M-3) (FR550-MAJOR M-3)
      (FR400-MAJOR M-1) (FR450-MAJOR M-3))
     "mwtaccg$pack $FRinti,$ACCGk"
     (+ pack ACCGk OP_7B FRinti OPE1_3F (FRj-null))
     (sequence ()
	       ; hack to get these referenced for profiling
	       (c-raw-call VOID "frv_ref_SI" ACCGk)
	       (set ACCGk FRinti))
     ((fr400 (unit u-media-4-accg)) (fr450 (unit u-media-4-accg))
      (fr500 (unit u-media)) (fr550 (unit u-media-3-wtacc (in ACC40Sk ACCGk))))
)

(define-pmacro (media-cop num op)
  (dni (.sym mcop num)
       "Media custom instruction"
       ((UNIT FM01) (FR500-MAJOR M-1) (MACH frv))
       (.str "mcop" num "$pack $FRi,$FRj,$FRk")
       (+ pack FRk op FRi OPE1_00 FRj)
       (c-call VOID "@cpu@_media_cop" num)
       ()
  )
)

(media-cop 1 OP_7C)
(media-cop 2 OP_7D)

; nop
; A nop is defined to be a "ori gr0,0,gr0"
; This needn't be a macro-insn, but making it one greatly simplifies decode.c
; On the other hand spending a little time in the decoder is often worth it.
;
(dnmi nop "nop"
     ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) (FR450-MAJOR I-1))
     "nop$pack"
     (emit ori pack (GRi 0) (s12 0) (GRk 0))
)

; Floating point NOP
(dni fnop
     "Floating point nop"
     ((UNIT FMALL) (FR500-MAJOR F-8) (FR550-MAJOR F-1) (MACH simple,tomcat,fr500,fr550,frv))
     "fnop$pack"
     (+ pack (rd-null) OP_79 (FRi-null) OPE1_0D (FRj-null))
     (nop)
     ()
)

; A return instruction
(dnmi ret "return"
      (NO-DIS (UNIT B01) (FR500-MAJOR B-3)
	      (FR400-MAJOR B-3) (FR450-MAJOR B-3))
      "ret$pack"
      (emit bralr pack (hint_taken 2))
)

(dnmi cmp "compare"
      (NO-DIS (UNIT IALL) (FR500-MAJOR I-1)
	      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
      "cmp$pack $GRi,$GRj,$ICCi_1"
      (emit subcc pack GRi GRj (GRk 0) ICCi_1)
)

(dnmi cmpi "compare immediate"
      (NO-DIS (UNIT IALL) (FR500-MAJOR I-1)
	      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
      "cmpi$pack $GRi,$s10,$ICCi_1"
      (emit subicc pack GRi s10 (GRk 0) ICCi_1)
)

(dnmi ccmp "conditional compare"
      (NO-DIS (UNIT IALL) (FR500-MAJOR I-1)
	      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
      "ccmp$pack $GRi,$GRj,$CCi,$cond"
      (emit csubcc pack GRi GRj (GRk 0) CCi cond)
)

(dnmi mov "move"
      (NO-DIS (UNIT IALL) (FR500-MAJOR I-1)
	      (FR400-MAJOR I-1) (FR450-MAJOR I-1))
      "mov$pack $GRi,$GRk"
      (emit ori pack GRi (s12 0) GRk)
)   

(dnmi cmov "conditional move"
      (NO-DIS (UNIT IALL) (FR500-MAJOR I-1)
	      (FR400-MAJOR I-1) (FR450-MAJOR I-1) CONDITIONAL)
      "cmov$pack $GRi,$GRk,$CCi,$cond"
      (emit cor pack GRi (GRj 0) GRk CCi cond)
)   
