Fix handling of null stap semaphores
[deliverable/binutils-gdb.git] / cpu / frv.cpu
index 82a88172835509aae0e5a8102ab7b4968c45f884..b6c4f809bd6eabf2e4f4481d30249423714ee1d6 100644 (file)
@@ -1,6 +1,6 @@
 ; Fujitsu FRV opcode support, for GNU Binutils.  -*- Scheme -*-
 ;
-; Copyright 2000, 2001 Free Software Foundation, Inc.
+; Copyright 2000, 2001, 2003, 2004, 2007, 2009 Free Software Foundation, Inc.
 ;
 ; Contributed by Red Hat Inc; developed under contract from Fujitsu.
 ;
@@ -8,7 +8,7 @@
 ;
 ; 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
+; the Free Software Foundation; either version 3 of the License, or
 ; (at your option) any later version.
 ;
 ; This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
 ;
 ; 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.
+; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+; MA 02110-1301, USA.
 
 (include "simplify.inc")
 
@@ -28,7 +29,7 @@
   (name frv) ; name of cpu architecture
   (comment "Fujitsu FRV")
   (insn-lsb0? #t)
-  (machs frv fr500 fr400 tomcat simple)
+  (machs frv fr550 fr500 fr450 fr400 tomcat simple)
   (isas frv)
 )
 
@@ -38,7 +39,7 @@
   ; 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 4)  ; The frv executes up to 4 insns at a time.
+  (parallel-insns 8)  ; The frv executes up to 8 insns at a time.
 )
 
 ; Cpu family definitions.
        )
 )
 \f
+; 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")
+  (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)
+       )
+)
+\f
+; Tomcat machine. Early version of fr500 machine
+(define-mach
+  (name tomcat)
+  (comment "Tomcat -- early version of fr500")
   (cpu frvbf)
 )
 (define-model
-  (name fr500) (comment "FR500 model") (attrs)
-  (mach fr500)
+  (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)
+       )
+)
+\f
+; 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-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
+   (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
   )
-  ; Basic unit for instructions with no latency penalties
   (unit u-exec "Execution Unit" ()
        1 1 ; issue done
        () ; state
        () ; 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
        () ; 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
        ((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
        ((spr INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Float Arithmetic unit
-  (unit u-float-arith "Float Arithmetic unit" ()
+  ; Media unit M1 -- see table 13-8 in the fr400 LSI
+  (unit u-media-1 "Media-1 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
+       ((FRinti INT -1) (FRintj INT -1)) ; inputs
+       ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Float Dual Arithmetic unit
-  (unit u-float-dual-arith "Float Arithmetic unit" ()
+  (unit u-media-1-quad "Media-1-quad 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
+       ((FRinti INT -1) (FRintj INT -1)) ; inputs
+       ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Float Div unit
-  (unit u-float-div "Float Div unit" ()
+  (unit u-media-hilo "Media-hilo unit -- a variation of the Media-1 unit" ()
        1 1 ; issue done
        () ; state
-       ((FRi INT -1) (FRj INT -1)) ; inputs
-       ((FRk INT -1)) ; outputs
+       () ; inputs
+       ((FRkhi INT -1) (FRklo INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Float Square Root unit
-  (unit u-float-sqrt "Float Square Root unit" ()
+  ; Media unit M2 -- see table 13-8 in the fr400 LSI
+  (unit u-media-2 "Media-2 unit" ()
        1 1 ; issue done
        () ; state
-       ((FRj INT -1) (FRdoublej INT -1)) ; inputs
-       ((FRk INT -1) (FRdoublek INT -1)) ; outputs
+       ((FRinti INT -1) (FRintj INT -1)) ; inputs
+       ((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Float Dual Square Root unit
-  (unit u-float-dual-sqrt "Float Dual Square Root unit" ()
+  (unit u-media-2-quad "Media-2-quad unit" ()
        1 1 ; issue done
        () ; state
-       ((FRj INT -1)) ; inputs
-       ((FRk INT -1)) ; outputs
+       ((FRinti INT -1) (FRintj INT -1)) ; inputs
+       ((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Float Compare unit
-  (unit u-float-compare "Float Compare unit" ()
+  (unit u-media-2-acc "Media-2-acc unit" ()
        1 1 ; issue done
        () ; state
-       ((FRi INT -1) (FRj INT -1)
-        (FRdoublei INT -1) (FRdoublej INT -1)) ; inputs
-       ((FCCi_2 INT -1)) ; outputs
+       ((ACC40Si INT -1)) ; inputs
+       ((ACC40Sk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Dual Float Compare unit
-  (unit u-float-dual-compare "Float Dual Compare unit" ()
+  (unit u-media-2-acc-dual "Media-2-acc-dual unit" ()
        1 1 ; issue done
        () ; state
-       ((FRi INT -1) (FRj INT -1)) ; inputs
-       ((FCCi_2 INT -1)) ; outputs
+       ((ACC40Si INT -1)) ; inputs
+       ((ACC40Sk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Float Conversion unit
-  (unit u-float-convert "Float Conversion unit" ()
+  (unit u-media-2-add-sub "Media-2-add-sub 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
+       ((ACC40Si INT -1)) ; inputs
+       ((ACC40Sk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Dual Float Conversion unit
-  (unit u-float-dual-convert "Float Dual Conversion unit" ()
+  (unit u-media-2-add-sub-dual "Media-2-add-sub-dual unit" ()
        1 1 ; issue done
        () ; state
-       ((FRj INT -1) (FRintj INT -1)) ; inputs
-       ((FRk INT -1) (FRintk INT -1)) ; outputs
+       ((ACC40Si INT -1)) ; inputs
+       ((ACC40Sk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media unit
-  (unit u-media "Media unit" ()
+  ; 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) (ACC40Si INT -1) (ACCGi INT -1)) ; inputs
-       ((FRintk INT -1) (ACC40Sk INT -1) (ACC40Uk INT -1) (ACCGk INT -1)) ; outputs
+       ((FRinti INT -1) (FRintj INT -1)) ; inputs
+       ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media Quad Arithmetic unit
-  (unit u-media-quad-arith "Media Quad Arithmetic unit" ()
+  (unit u-media-3-dual "Media-3-dual unit" ()
        1 1 ; issue done
        () ; state
-       ((FRinti INT -1) (FRintj INT -1)) ; inputs
+       ((FRinti INT -1)) ; inputs
        ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media Dual Multiplication unit
-  (unit u-media-dual-mul "Media Dual Multiplication unit" ()
+  (unit u-media-3-quad "Media-3-quad unit" ()
        1 1 ; issue done
        () ; state
        ((FRinti INT -1) (FRintj INT -1)) ; inputs
-       ((ACC40Sk INT -1) (ACC40Uk INT -1)) ; outputs
+       ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media Quad Multiplication unit
-  (unit u-media-quad-mul "Media Quad Multiplication unit" ()
+  ; Media unit M4 -- see table 13-8 in the fr400 LSI
+  (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
+       ((ACC40Si INT -1) (FRintj INT -1)) ; inputs
+       ((ACC40Sk INT -1) (FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media Quad Complex unit
-  (unit u-media-quad-complex "Media Quad Complex unit" ()
+  (unit u-media-4-accg "Media-4-accg unit" ()
        1 1 ; issue done
        () ; state
-       ((FRinti INT -1) (FRintj INT -1)) ; inputs
-       ((ACC40Sk INT -1)) ; outputs
+       ((ACCGi INT -1) (FRinti INT -1)) ; inputs
+       ((ACCGk INT -1) (FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media Dual Expand unit
-  (unit u-media-dual-expand "Media Dual Expand unit" ()
+  (unit u-media-4-acc-dual "Media-4-acc-dual unit" ()
        1 1 ; issue done
        () ; state
-       ((FRinti INT -1)) ; inputs
+       ((ACC40Si INT -1)) ; inputs
        ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media Dual Unpack unit
-  (unit u-media-dual-unpack "Media Dual Unpack unit" ()
+  ; 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 Dual byte to half unit
-  (unit u-media-dual-btoh "Media Byte to byte" ()
+  ; Media unit M7 -- see table 13-8 in the fr400 LSI
+  (unit u-media-7 "Media-1 unit" ()
        1 1 ; issue done
        () ; state
-       ((FRintj INT -1)) ; inputs
-       ((FRintk INT -1)) ; outputs
+       ((FRinti INT -1) (FRintj INT -1)) ; inputs
+       ((FCCk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media Dual half to byte unit
-  (unit u-media-dual-htob "Media Half to byte" ()
+  ; Media Dual Expand unit
+  (unit u-media-dual-expand "Media Dual Expand unit" ()
        1 1 ; issue done
        () ; state
-       ((FRintj INT -1)) ; inputs
+       ((FRinti 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" ()
+  ; Media Dual half to byte unit
+  (unit u-media-dual-htob "Media Half to byte" ()
        1 1 ; issue done
        () ; state
        ((FRintj INT -1)) ; inputs
        )
 )
 \f
-; 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)
-       )
-)
-\f
-; FR400 machine
+; FR450 machine
 (define-mach
-  (name fr400)
-  (comment "FR400 cpu")
+  (name fr450)
+  (comment "FR450 cpu")
   (cpu frvbf)
 )
 (define-model
-  (name fr400) (comment "FR400 model") (attrs)
-  (mach fr400)
+  (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
        ((spr INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media unit M1 -- see table 13-8 in the fr400 LSI
+  ; Media unit M1 -- see table 14-8 in the fr450 LSI
   (unit u-media-1 "Media-1 unit" ()
        1 1 ; issue done
        () ; state
        ((FRkhi INT -1) (FRklo INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media unit M2 -- see table 13-8 in the fr400 LSI
+  ; Media unit M2 -- see table 14-8 in the fr450 LSI
   (unit u-media-2 "Media-2 unit" ()
        1 1 ; issue done
        () ; state
        ((ACC40Sk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media unit M3 -- see table 13-8 in the fr400 LSI
+  ; Media unit M3 -- see table 14-8 in the fr450 LSI
   (unit u-media-3 "Media-3 unit" ()
        1 1 ; issue done
        () ; state
        ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media unit M4 -- see table 13-8 in the fr400 LSI
+  ; Media unit M4 -- see table 14-8 in the fr450 LSI
   (unit u-media-4 "Media-4 unit" ()
        1 1 ; issue done
        () ; state
        ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media unit M6 -- see table 13-8 in the fr400 LSI
+  (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
        ((FRintk INT -1)) ; outputs
        () ; profile action (default)
        )
-  ; Media unit M7 -- see table 13-8 in the fr400 LSI
+  ; Media unit M7 -- see table 14-8 in the fr450 LSI
   (unit u-media-7 "Media-1 unit" ()
        1 1 ; issue done
        () ; state
   (type enum)
   (name UNIT)
   (comment "parallel execution pipeline selection")
-  ; The order of declaration is significant. Keep variations on the same unit
-  ; together and keep the '01' variation last within each unit.
+  ; 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
-         FM0 FM1 FM01
+         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
   )
 )
          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)
          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)
   (name PRESERVE-OVF)
   (comment "Preserve value of MSR.OVF")
 )
-; null attribute -- used as a place holder for where an attribue it required.
+; "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)
   (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")
+  )
+)
 \f
 ; Instruction fields.
 ;
                          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-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))
+    )
+  )
+
 \f
 ; Enums.
 
    (hsr56     72) (hsr57     73) (hsr58     74) (hsr59     75)
    (hsr60     76) (hsr61     77) (hsr62     78) (hsr63     79)
 
-   (ccr      256) (cccr     263) (lr       272) (lcr      273) (isr      288)
+   (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)
 
    (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)
    (dampr60 1916) (dampr61 1917) (dampr62 1918) (dampr63 1919)
 
    (amcr    1920) (stbar   1921) (mmcr    1922)
-   (dcr     2048) (brr     2049) (nmar    2050)
+   (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)
    (dbmr20  2084) (dbmr21  2085) (dbmr22  2086) (dbmr23  2087)
    (dbmr30  2088) (dbmr31  2089) (dbmr32  2090) (dbmr33  2091)
 
-   (cpcfr   2092) (cpcr    2093) (cpsr    2094)
+   (cpcfr   2304) (cpcr    2305) (cpsr    2306) (cptr    2307)
+   (cphsr0  2308) (cphsr1  2309) (cpesr0  2320) (cpesr1  2321)
+   (cpemr0  2322) (cpemr1  2323) 
+
+   (iperr0  2324) (iperr1  2325) (ipjsr   2326) (ipjrr   2327)
+   (ipcsr0  2336) (ipcsr1  2337) (ipcwer0 2338) (ipcwer1 2339)
+   (ipcwr   2340)
 
-   (cpesr0  2096) (cpesr1  2097)
-   (cpemr0  2098) (cpemr1  2099)
+   (mbhsr   2352) (mbssr   2353) (mbrsr   2354) (mbsdr   2355)
+   (mbrdr   2356) (mbsmr   2357) (mbstr0  2359) (mbstr1  2360)
 
-   (ihsr8   3848)
+   (slpr    2368) (sldr    2369) (slhsr   2370) (sltr    2371)
+   (slwr    2372)
+
+   (ihsr8   3848) (ihsr9   3849) (ihsr10  3850)
   )
 )
 
 (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))
                 (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)
 ;
 
 (define-hardware
   (name h-fccr)
-  (comment "Integer condition code registers")
+  (comment "Floating point condition code registers")
   (attrs PROFILE)
   (type register UQI (4))
   (indices extern-keyword fccr-names)
     )
 )
 
+; 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 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)
-(dnmop GRdoublek  "destination register"   () h-gr_double f-GRk  DI)
+(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 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)
-(dnmop CPRdoublek "destination register"   ((MACH frv)) h-cpr_double f-CPRk DI)
+(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 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)
-(dnmop FRdoublei "source register 1"      () h-fr_double f-FRi DF)
-(dnmop FRdoublej "source register 2"      () h-fr_double f-FRj DF)
-(dnmop FRdoublek "target register"        () h-fr_double f-FRk DF)
+(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 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 A       "all accumulator indicator" (HASH-PREFIX) h-uint f-A)
 (dnop ae      "all entries indicator"     (HASH-PREFIX) h-uint f-ae)
 
 (dnop label16  "18 bit pc relative address" () h-iaddr f-label16)
-(dnop label24  "26 bit pc relative address" () h-iaddr f-label24)
+
+(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)
   (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)
 (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))
 \f
   (trunc BI (and icc #x1))
 )
 
-; FRV specific insn attributes:
+; FRV insns
+;
 ;
-
 ; Format: INT, Logic, Shift r-r
 ;
 (define-pmacro (int-logic-r-r name operation op ope comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 
 (dni not
      ("not")
-     ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-integer)))
+     ((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) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-idiv)))
+     ((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) NON-EXCEPTING
-      (MACH simple,tomcat,fr500,frv))
+     ((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))
-     ((fr400 (unit u-idiv))
-      (fr500 (unit u-idiv)))
+     ((fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
 )
 
 (dni udiv
      "unsigned division reg/reg"
-     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-idiv)))
+     ((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) NON-EXCEPTING
-      (MACH simple,tomcat,fr500,frv))
+     ((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))
-     ((fr400 (unit u-idiv))
-      (fr500 (unit u-idiv)))
+     ((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) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-imul)))
+       ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((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")
+(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))
 
 (dni scan
      "scan"
-     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-integer)))
+     ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 
 (dni cnot
      "conditional not"
-     ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-integer)))
+     ((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) (FR400-MAJOR I-1) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-imul)))
+     ((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) (FR400-MAJOR I-1) CONDITIONAL)
+     ((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))
                   (c-call VOID "@cpu@_signed_integer_divide"
                           GRi GRj (index-of GRk) 0)
                   (clobber GRk)))
-     ((fr400 (unit u-idiv))
-      (fr500 (unit u-idiv)))
+     ((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) (FR400-MAJOR I-1) CONDITIONAL)
+     ((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))
                   (c-call VOID "@cpu@_unsigned_integer_divide"
                           GRi GRj (index-of GRk) 0)
                   (clobber GRk)))
-     ((fr400 (unit u-idiv))
-      (fr500 (unit u-idiv)))
+     ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 
 (dni cscan
      "conditional scan"
-     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-integer)))
+     ((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-r-r name operation op ope comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (int-logic-cc-r-r name op ope comment)
   (dni (.sym name cc)
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (int-shift-cc-r-r name l-r op ope comment)
   (dni (.sym name cc)
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (multiply-cc-r-r name signop op ope comment)
   (dni name
        (comment)
-       ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-imul)))
+       ((fr400 (unit u-imul)) (fr450 (unit u-imul))
+       (fr500 (unit u-imul)) (fr550 (unit u-imul)))
   )
 )
 
 (define-pmacro (conditional-int-arith-cc name operation op ope comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 
 (dni csmulcc
      "conditional signed multiply and set condition code"
-     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-imul)))
+     ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (conditional-int-shift-cc name l-r op ope comment)
   (dni (.sym c name cc)
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (int-arith-x-r-r name operation op ope comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (int-arith-x-cc-r-r name operation op ope comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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-z-and-n cc tmp)
                 (set GRk tmp)
                 (set ICCi_1 cc))
-       ((fr400 (unit u-integer))
-       (fr500 (unit u-integer)))
+       ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 
 (dni sdivi
      "signed division reg/immed"
-     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-idiv)))
+     ((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) NON-EXCEPTING
-      (MACH simple,tomcat,fr500,frv))
+     ((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))
-     ((fr400 (unit u-idiv))
-      (fr500 (unit u-idiv)))
+     ((fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
 )
 
 (dni udivi
      "unsigned division reg/immed"
-     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-idiv)))
+     ((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) NON-EXCEPTING
-      (MACH simple,tomcat,fr500,frv))
+     ((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))
-     ((fr400 (unit u-idiv))
-      (fr500 (unit u-idiv)))
+     ((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) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-imul)))
+       ((fr400 (unit u-imul)) (fr450 (unit u-imul))
+       (fr500 (unit u-imul)) (fr550 (unit u-imul)))
   )
 )
 
 (define-pmacro (int-shift-r-simm name op comment)
   (dni (.sym name i)
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 
 (dni scani
      "scan immediate"
-     ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-integer)))
+     ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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-z-and-n cc result)
                 (set GRk result)
                 (set ICCi_1 cc))
-       ((fr400 (unit u-integer))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (int-logic-cc-r-simm name op comment)
   (dni (.sym name icc)
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (multiply-cc-r-simm name signop op comment)
   (dni name
        (comment)
-       ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-imul)))
+       ((fr400 (unit u-imul)) (fr450 (unit u-imul))
+       (fr500 (unit u-imul)) (fr550 (unit u-imul)))
   )
 )
 
 (define-pmacro (int-shift-cc-r-simm name l-r op comment)
   (dni (.sym name icc)
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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 GRk tmp)
                 (set-z-and-n cc tmp)
                 (set ICCi_1 cc))
-       ((fr400 (unit u-integer))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (int-arith-x-r-simm name operation op comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 (define-pmacro (int-arith-x-cc-r-simm name operation op comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+       ((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-z-and-n cc tmp)
                 (set GRk tmp)
                 (set ICCi_1 cc))
-       ((fr400 (unit u-integer))
-       (fr500 (unit u-integer)))
+       ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+       (fr500 (unit u-integer)) (fr550 (unit u-integer)))
   )
 )
 
 
 (dni cmpb
      "Compare bytes"
-     ((UNIT I01) (FR400-MAJOR I-1) (MACH fr400))
+     ((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-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)))
+     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+      (fr550 (unit u-integer)))
 )
 
 (dni cmpba
      "OR of Compare bytes"
-     ((UNIT I01) (FR400-MAJOR I-1) (MACH fr400))
+     ((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))
                                         (eq (and GRi #x000000ff)
                                            (and GRj #x000000ff))))))
               (set ICCi_1 cc))
-     ((fr400 (unit u-integer)))
+     ((fr400 (unit u-integer)) (fr450 (unit u-integer))
+      (fr550 (unit u-integer)))
 )
 
 ; Format: Load immediate
 ;
 (dni setlo
      "set low order bits"
-     ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-set-hilo)))
+     ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-set-hilo)))
+     ((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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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))
-      (fr500 (unit u-integer)))
+     ((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)
+(define-pmacro (load-gr-r name mode op ope comment ann)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2))
-       (.str name "$pack @($GRi,$GRj),$GRk")
+       ((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))
-       (fr500 (unit u-gr-load)))
+       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
+       (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
   )
 )
 
-(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")
+(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) (FR500-MAJOR I-2) (FR400-MAJOR I-2) FR-ACCESS)
+       ((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))
-       (fr500 (unit u-fr-load)))
+       ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
+       (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
   )
 )
 
 (define-pmacro (ne-load-gr-r name mode op ope size comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) NON-EXCEPTING
-       (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
   )
 )
 
 (define-pmacro (ne-load-fr-r name mode op ope size comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
-       (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
   )
 )
 
 )
 
 (define-pmacro (load-double-r-r
-               name not_gr mode op ope regtype attr profile comment)
+               name not_gr mode op ope regtype attr profile comment ann)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
-       (.str name "$pack @($GRi,$GRj),$" regtype "doublek")
+       ((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))
   )
 )
 
+(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)) (fr500 (unit u-gr-load)))
-                "Load double word")
+                ((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)) (fr500 (unit u-fr-load)))
-                "Load double float")
+                ((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")
+                "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) (FR500-MAJOR I-2) NON-EXCEPTING attr
-       (MACH simple,tomcat,fr500,frv))
+       ((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-double-r-r nldd  0 DI OP_02 OPE1_25 GR (ne-DI-size) 0 NA
-                   ((fr500 (unit u-gr-load))) "Load double   word")
+                   ((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))) "Load double float")
+                   ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load double float")
 
 ; Semantics for a load-quad insn
 ;
 (define-pmacro (load-gr-u name mode op ope comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2))
+       ((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))
-       (fr500 (unit u-gr-load)))
+       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
+       (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
   )
 )
 
 (define-pmacro (ne-load-gr-u name mode op ope size comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) NON-EXCEPTING
-       (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
   )
 )
 
 (define-pmacro (load-fr-u name mode op ope comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) FR-ACCESS)
+       ((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))
-       (fr500 (unit u-fr-load)))
+       ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
+       (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
   )
 )
 
 (define-pmacro (ne-load-non-gr-u name mode op ope regtype size comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
-       (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
   )
 )
 
 (define-pmacro (load-double-gr-u name op ope comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2))
+       ((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))
-       (fr500 (unit u-gr-load)))
+       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
+       (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
   )
 )
 
 (define-pmacro (ne-load-double-gr-u name op ope size comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) NON-EXCEPTING
-       (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
 
   )
 )
                name mode op ope regtype attr profile comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
+       ((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)
 )
 
 (load-double-non-gr-u lddfu DF OP_02 OPE1_1B FR  FR-ACCESS
-                     ((fr400 (unit u-fr-load)) (fr500 (unit u-fr-load)))
+                     ((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) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
-       (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
   )
 )
 
 (define-pmacro (load-r-simm name mode op regtype attr profile comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
+       ((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)
 )
 
 (load-r-simm ldsbi  QI OP_30 GR NA
-            ((fr400 (unit u-gr-load)) (fr500 (unit u-gr-load)))
+            ((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)) (fr500 (unit u-gr-load)))
+            ((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)) (fr500 (unit u-gr-load)))
+            ((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)) (fr500 (unit u-gr-load)))
+            ((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)) (fr500 (unit u-gr-load)))
+            ((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)) (fr500 (unit u-fr-load)))
+            ((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)) (fr500 (unit u-fr-load)))
+            ((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)) (fr500 (unit u-fr-load)))
+            ((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) (FR500-MAJOR I-2) NON-EXCEPTING attr
-       (MACH simple,tomcat,fr500,frv))
+       ((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
 )
 
 (ne-load-r-simm nldsbi  QI OP_40 GR (ne-QI-size)  0 NA
-               ((fr500 (unit u-gr-load))) "Load   signed byte")
+               ((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))) "Load unsigned byte")
+               ((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))) "Load   signed half")
+               ((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))) "Load unsigned half")
+               ((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))) "Load          word")
+               ((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))) "Load byte float")
+               ((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))) "Load half float")
+               ((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))) "Load word float")
+               ((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) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
+       ((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-r-simm lddi  0 DI OP_33 GR NA
-                   ((fr400 (unit u-gr-load)) (fr500 (unit u-gr-load)))
+                   ((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)) (fr500 (unit u-fr-load)))
+                   ((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) (FR500-MAJOR I-2) NON-EXCEPTING attr
-       (MACH simple,tomcat,fr500,frv))
+       ((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-double-r-simm nlddi  0 DI OP_45 GR (ne-DI-size) 0 NA
-                      ((fr500 (unit u-gr-load))) "Load double word")
+                      ((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))) "Load double float")
+                      ((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
   )
 )
 
-(ne-load-quad-r-simm nldqi  OP_46 GR    (ne-XI-size) 0 NA
-                    ((fr500 (unit u-gr-load))) "Load quad word")
 (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 I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+       ((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)
 )
 
 (store-r-r stb   QI OP_03 OPE1_00 GR NA
-          ((fr400 (unit u-gr-store)) (fr500 (unit u-gr-store)))
+          ((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)) (fr500 (unit u-gr-store)))
+          ((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)) (fr500 (unit u-gr-store)))
+          ((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)) (fr500 (unit u-fr-store)))
+          ((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)) (fr500 (unit u-fr-store)))
+          ((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)) (fr500 (unit u-fr-store)))
+          ((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")
 
-(define-pmacro (r-store name mode op ope reg size is_float profile comment)
-  (dni name
-       (comment)
-       ((UNIT I0) (FR500-MAJOR I-3) (MACH frv))
-       (.str name "$pack $" reg "k,@($GRi,$GRj)")
-       (+ pack (.sym reg k) op GRi ope GRj)
-       (sequence ((WI address))
-                (set address (add GRi GRj))
-                (c-call VOID (.str "@cpu@_write_mem_" mode)
-                        pc address (.sym reg k))
-                (c-call VOID "@cpu@_check_recovering_store"
-                        address (index-of (.sym reg k)) size is_float))
-       profile
-  )
-)
-
-(r-store rstb  QI OP_03 OPE1_20 GR 1 0
-        ((fr500 (unit u-gr-r-store))) "Store unsigned byte")
-(r-store rsth  HI OP_03 OPE1_21 GR 2 0
-        ((fr500 (unit u-gr-r-store))) "Store unsigned half")
-(r-store rst   SI OP_03 OPE1_22 GR 4 0
-        ((fr500 (unit u-gr-r-store))) "Store          word")
-
-(r-store rstbf QI OP_03 OPE1_28 FRint 1 1
-        ((fr500 (unit u-fr-r-store))) "Store byte float")
-(r-store rsthf HI OP_03 OPE1_29 FRint 2 1
-        ((fr500 (unit u-fr-r-store))) "Store half float")
-(r-store rstf  SI OP_03 OPE1_2A FRint 4 1
-        ((fr500 (unit u-fr-r-store))) "Store word float")
-
 ; Semantics for a store-double insn
 ;
 (define-pmacro (store-double-semantics mode regtype address arg)
 (define-pmacro (store-double-r-r name mode op ope regtype attr profile comment)
   (dni name
        (comment)
-       ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
-       (.str name "$pack $" regtype "k,@($GRi,$GRj)")
-       (+ pack (.sym regtype k) op GRi ope GRj)
+       ((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)) (fr500 (unit u-gr-store)))
+                 ((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)) (fr500 (unit u-fr-store)))
+                 ((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")
 
-(define-pmacro (r-store-double
-               name mode op ope regtype is_float attr profile comment)
-  (dni name
-       (comment)
-       ((UNIT I0) (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-double-semantics mode regtype address GRj)
-                (c-call VOID "@cpu@_check_recovering_store"
-                        address (index-of (.sym regtype k)) 8 is_float))
-       profile
-  )
-)
-
-(r-store-double rstd  DI OP_03 OPE1_23 GR 0 NA
-               ((fr500 (unit u-gr-r-store))) "Store double word")
-(r-store-double rstdf DF OP_03 OPE1_2B FR 1 FR-ACCESS
-               ((fr500 (unit u-fr-r-store))) "Store double float")
-
 ; Semantics for a store-quad insn
 ;
 (define-pmacro (store-quad-semantics regtype address arg)
 (define-pmacro (store-quad-r-r name op ope regtype attr profile comment)
   (dni name
        (comment)
-       ((UNIT I0) (FR500-MAJOR I-3) (MACH frv) attr)
+       ((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-r-r stqc  OP_03 OPE1_27 CPR   NA
                () "Store coprocessor quad word")
 
-(define-pmacro (r-store-quad name op ope regtype is_float attr profile comment)
-  (dni name
-       (comment)
-       ((UNIT I0) (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)
-                (c-call VOID "@cpu@_check_recovering_store"
-                        address (index-of (.sym regtype k)) 16 is_float))
-       profile
-  )
-)
-
-(r-store-quad rstq  OP_03 OPE1_24 GR    0 NA
-             ((fr500 (unit u-gr-r-store))) "Store quad word")
-(r-store-quad rstqf OP_03 OPE1_2C FRint 1 FR-ACCESS
-             ((fr500 (unit u-fr-r-store))) "Store quad float")
-
 (define-pmacro (store-r-r-u name mode op ope regtype attr profile comment)
   (dni name
        (comment)
-       ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+       ((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))
 )
 
 (store-r-r-u stbu  QI OP_03 OPE1_10 GR NA
-            ((fr400 (unit u-gr-store)) (fr500 (unit u-gr-store)))
+            ((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)) (fr500 (unit u-gr-store)))
+            ((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)) (fr500 (unit u-gr-store)))
+            ((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)) (fr500 (unit u-fr-store)))
+            ((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)) (fr500 (unit u-fr-store)))
+            ((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)) (fr500 (unit u-fr-store)))
+            ((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) ()
                name mode op ope regtype attr profile comment)
   (dni name
        (comment)
-       ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
-       (.str name "$pack $" regtype "k,@($GRi,$GRj)")
-       (+ pack (.sym regtype k) op GRi ope GRj)
+       ((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))
 )
 
 (store-double-r-r-u stdu  DI OP_03 OPE1_13 GR  NA
-                   ((fr400 (unit u-gr-store)) (fr500 (unit u-gr-store)))
+                   ((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)) (fr500 (unit u-fr-store)))
+                   ((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 I0) (FR500-MAJOR I-3) (MACH frv) attr)
+       ((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))
 (define-pmacro (conditional-load name mode op ope regtype profile comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) CONDITIONAL)
+       ((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))
 )
 
 (conditional-load cldsb  QI OP_5E OPE4_0 GR
-                 ((fr400 (unit u-gr-load)) (fr500 (unit u-gr-load)))
+                 ((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)) (fr500 (unit u-gr-load)))
+                 ((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)) (fr500 (unit u-gr-load)))
+                 ((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)) (fr500 (unit u-gr-load)))
+                 ((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)) (fr500 (unit u-gr-load)))
+                 ((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)) (fr500 (unit u-fr-load)))
+                 ((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)) (fr500 (unit u-fr-load)))
+                 ((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)) (fr500 (unit u-fr-load)))
+                 ((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) (FR500-MAJOR I-2) (FR400-MAJOR I-2) CONDITIONAL attr)
+       ((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))
 )
 
 (conditional-load-double cldd  0 DI OP_5F OPE4_1 GR NA
-                        ((fr400 (unit u-gr-load)) (fr500 (unit u-gr-load)))
+                        ((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)) (fr500 (unit u-gr-load)))
+                        ((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
 (define-pmacro (conditional-load-gr-u name mode op ope comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) CONDITIONAL)
+       ((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))
                                  pc address))
                     (if (ne (index-of GRi) (index-of GRk))
                         (set GRi address))))
-       ((fr400 (unit u-gr-load))
-       (fr500 (unit u-gr-load)))
+       ((fr400 (unit u-gr-load)) (fr450 (unit u-gr-load))
+       (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
   )
 )
 
 (define-pmacro (conditional-load-non-gr-u name mode op ope regtype comment)
   (dni name
        (comment)
-       ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) CONDITIONAL FR-ACCESS)
+       ((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))
                          (c-call mode (.str "@cpu@_read_mem_" mode)
                                  pc address))
                     (set GRi address)))
-       ((fr400 (unit u-fr-load))
-       (fr500 (unit u-fr-load)))
+       ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
+       (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
   )
 )
 
 
 (dni clddu
      "Load double word,  update"
-     ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) CONDITIONAL)
+     ((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))
                   (load-double-semantics 0 DI GR address GRj)
                   (if (ne (index-of GRi) (index-of GRdoublek))
                       (set GRi address))))
-     ((fr400 (unit u-gr-load))
-      (fr500 (unit u-gr-load)))
+     ((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) (FR500-MAJOR I-2) (FR400-MAJOR I-2) CONDITIONAL FR-ACCESS)
+     ((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))
-      (fr500 (unit u-fr-load)))
+     ((fr400 (unit u-fr-load)) (fr450 (unit u-fr-load))
+      (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
 )
 
 (dni cldqu
 (define-pmacro (conditional-store name mode op ope regtype profile comment)
   (dni name
        (comment)
-       ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL)
+       ((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))
 )
 
 (conditional-store cstb  QI OP_64 OPE4_0 GR
-                  ((fr400 (unit u-gr-store)) (fr500 (unit u-gr-store)))
+                  ((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)) (fr500 (unit u-gr-store)))
+                  ((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)) (fr500 (unit u-gr-store)))
+                  ((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)) (fr500 (unit u-fr-store)))
+                  ((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)) (fr500 (unit u-fr-store)))
+                  ((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)) (fr500 (unit u-fr-store)))
+                  ((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 I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
-       (.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
-       (+ pack (.sym regtype k) op GRi CCi  cond ope GRj)
+       ((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)))
 )
 
 (conditional-store-double cstd  DI OP_64 OPE4_3 GR NA
-                         ((fr400 (unit u-gr-store)) (fr500 (unit u-gr-store)))
+                         ((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)) (fr500 (unit u-fr-store)))
+                         ((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 I0) (FR500-MAJOR I-3) (MACH frv) CONDITIONAL)
+     ((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))
                name mode op ope regtype attr profile comment)
   (dni name
        (comment)
-       ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
+       ((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))
 )
 
 (conditional-store-u cstbu QI OP_67 OPE4_0 GR NA
-                    ((fr400 (unit u-gr-store)) (fr500 (unit u-gr-store)))
+                    ((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)) (fr500 (unit u-gr-store)))
+                    ((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)) (fr500 (unit u-gr-store)))
+                    ((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)) (fr500 (unit u-fr-store)))
+                    ((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)) (fr500 (unit u-fr-store)))
+                    ((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)) (fr500 (unit u-fr-store)))
+                    ((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 I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
-       (.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
-       (+ pack (.sym regtype k) op GRi CCi  cond ope GRj)
+       ((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)
 )
 
 (conditional-store-double-u cstdu  DI OP_67 OPE4_3 GR NA
-                           ((fr400 (unit u-gr-store))
-                            (fr500 (unit u-gr-store)))
+                           ((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)) (fr500 (unit u-fr-store)))
+                           ((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 I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+       ((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)
 )
 
 (store-r-simm stbi QI OP_50 GR NA
-             ((fr400 (unit u-gr-store)) (fr500 (unit u-gr-store)))
+             ((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)) (fr500 (unit u-gr-store)))
+             ((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)) (fr500 (unit u-gr-store)))
+             ((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)) (fr500 (unit u-fr-store)))
+             ((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)) (fr500 (unit u-fr-store)))
+             ((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)) (fr500 (unit u-fr-store)))
+             ((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 I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
-       (.str name "$pack $" regtype "k,@($GRi,$d12)")
-       (+ pack (.sym regtype k) op GRi d12)
+       ((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)) (fr500 (unit u-gr-store)))
+                    ((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)) (fr500 (unit u-fr-store)))
+                    ((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 I0) (FR500-MAJOR I-3) (MACH frv) attr)
+       ((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))
   (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) (FR400-MAJOR C-2))
+     ((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))
-      (fr500 (unit u-swap)))
+     ((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) (FR400-MAJOR C-2))
+     ((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))
-      (fr500 (unit u-swap)))
+     ((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) (FR400-MAJOR C-2) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-swap)))
+     ((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 major1 major2 attr1 attr2
-               profile comment)
+               name op ope reg_src reg_targ pipe attrs profile comment)
   (dni name
        (comment)
-       ((UNIT pipe) major1 major2 attr1 attr2)
+       (.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)
 )
 
 (register-transfer movgf OP_03 OPE1_15
-                  GRj FRintk I0 (FR500-MAJOR I-4) (FR400-MAJOR I-4)
-                  FR-ACCESS NA
-                  ((fr400 (unit u-gr2fr)) (fr500 (unit u-gr2fr)))
+                  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) (FR400-MAJOR I-4)
-                  FR-ACCESS NA
-                  ((fr400 (unit u-fr2gr)) (fr500 (unit u-fr2gr)))
+                  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)))
 
 (dni movgfd
      "move GR for FR double"
-     ((UNIT I0) (FR500-MAJOR I-4) (FR400-MAJOR I-4) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-gr2fr)))
+     ((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)
 
 (dni movfgd
      "move FR for GR double"
-     ((UNIT I0) (FR500-MAJOR I-4) (FR400-MAJOR I-4) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-fr2gr)))
+     ((fr400 (unit u-fr2gr)) (fr450 (unit u-fr2gr))
+      (fr500 (unit u-fr2gr)) (fr550 (unit u-fr2gr)))
 )
 
 (dni movgfq
 )
 
 (define-pmacro (conditional-register-transfer
-               name op ope reg_src reg_targ pipe major1 major2 mach
-               profile comment)
+               name op ope reg_src reg_targ pipe attrs profile comment)
   (dni name
        (comment)
-       ((UNIT pipe) major1 major2 CONDITIONAL FR-ACCESS mach)
+       (.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))
 )
 
 (conditional-register-transfer cmovgf OP_69 OPE4_0 GRj FRintk I0
-                              (FR500-MAJOR I-4) (FR400-MAJOR I-4)
-                              NA
-                              ((fr400 (unit u-gr2fr)) (fr500 (unit u-gr2fr)))
+                              ((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) (FR400-MAJOR I-4)
-                              NA
-                              ((fr400 (unit u-fr2gr)) (fr500 (unit u-fr2gr)))
+                              ((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) (FR400-MAJOR I-4) CONDITIONAL FR-ACCESS)
+     ((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))
-      (fr500 (unit u-gr2fr)))
+     ((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) (FR400-MAJOR I-4) CONDITIONAL FR-ACCESS)
+     ((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))
-      (fr500 (unit u-fr2gr)))
+     ((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) (FR400-MAJOR C-2))
+       ((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))
-       (fr500 (unit unitname)))
+       ((fr400 (unit unitname)) (fr450 (unit unitname))
+       (fr500 (unit unitname)) (fr550 (unit unitname)))
   )
 )
 
 (define-pmacro (conditional-branch-i prefix cc op cond comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT B01) (FR500-MAJOR B-1) (FR400-MAJOR B-1))
+       ((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))
-       (fr500 (unit u-branch)))
+       ((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) (FR400-MAJOR B-1))
+      ((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))
-       (fr500 (unit u-branch)))
+      ((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) (FR400-MAJOR B-1))
+      ((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))
-       (fr500 (unit u-branch)))
+      ((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")
 (define-pmacro (conditional-branch-f prefix cc op cond comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT B01) (FR500-MAJOR B-1) (FR400-MAJOR B-1) FR-ACCESS)
+       ((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))
-       (fr500 (unit u-branch)))
+       ((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) (FR400-MAJOR B-1) FR-ACCESS)
+      ((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))
-       (fr500 (unit u-branch)))
+      ((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) (FR400-MAJOR B-1) FR-ACCESS)
+      ((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))
-       (fr500 (unit u-branch)))
+      ((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")
 
 (dni bctrlr
      "LCR conditional branch to lr"
-     ((UNIT B0) (FR500-MAJOR B-2) (FR400-MAJOR B-2))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR B-3) attr)
+       ((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))
-       (fr500 (unit u-branch)))
+       ((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) (FR400-MAJOR B-3))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR B-3))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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")
 
 (dni fbralr
      "float cclr branch always"
-     ((UNIT B01) (FR500-MAJOR B-3) (FR400-MAJOR B-3) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR B-3) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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")
 (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) (FR400-MAJOR B-2) attr)
+       ((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))
-       (fr500 (unit u-branch)))
+       ((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) (FR400-MAJOR B-2))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR B-2))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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")
 
 (dni fcbralr
      "float ctrlr branch always"
-     ((UNIT B0) (FR500-MAJOR B-2) (FR400-MAJOR B-2) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR B-2) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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")
 
 (dni jmpl
      "jump and link"
-     ((UNIT I0) (FR500-MAJOR I-5) (FR400-MAJOR I-5))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR I-5))
-     "calll$pack @($GRi,$GRj)"
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR I-5))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR I-5))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR B-4))
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR C-2) PRIVILEGED)
+    ((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
 (define-pmacro (trap-r prefix cc i-f op ope cond attr comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1) attr)
+       ((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))
-       (fr500 (unit u-trap)))
+       ((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) (FR400-MAJOR C-1))
+     ((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))
-      (fr500 (unit u-trap)))
+     ((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) (FR400-MAJOR C-1))
+     ((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))
-      (fr500 (unit u-trap)))
+     ((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")
 
 (dni ftra
      "float trap always"
-     ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-trap)))
+     ((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) (FR400-MAJOR C-1) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-trap)))
+     ((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")
 (define-pmacro (trap-immed prefix cc i-f op cond attr comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1) attr)
+       ((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))
-       (fr500 (unit u-trap)))
+       ((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) (FR400-MAJOR C-1))
+     ((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))
-      (fr500 (unit u-trap)))
+     ((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) (FR400-MAJOR C-1))
+     ((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))
-      (fr500 (unit u-trap)))
+     ((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")
 
 (dni ftira
      "float trap always"
-     ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1) FR-ACCESS)
+     ((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)))
+      (fr500 (unit u-trap)) (fr550 (unit u-trap)))
 )
 
 (dni ftino
      "float trap never"
-     ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-trap)))
+     ((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")
 
 (dni break
      "break trap"
-     ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1))
+     ((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 ()
 
 (dni mtrap
      "media trap"
-     ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1) FR-ACCESS)
+     ((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) (FR400-MAJOR B-6))
+       ((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))
 
 (dni notcr
      ("not cccr register")
-     ((UNIT B01) (FR500-MAJOR B-6) (FR400-MAJOR B-6))
+     ((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-int-condition-code prefix cc op cond comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT B01) (FR500-MAJOR B-5) (FR400-MAJOR B-5))
+       ((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))
-       (fr500 (unit u-check)))
+       ((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) (FR400-MAJOR B-5))
+     ((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))
-      (fr500 (unit u-check)))
+     ((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) (FR400-MAJOR B-5))
+     ((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))
-      (fr500 (unit u-check)))
+     ((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")
 (define-pmacro (check-float-condition-code prefix cc op cond comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT B01) (FR500-MAJOR B-5) (FR400-MAJOR B-5) FR-ACCESS)
+       ((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))
-       (fr500 (unit u-check)))
+       ((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) (FR400-MAJOR B-5) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-check)))
+     ((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) (FR400-MAJOR B-5) FR-ACCESS)
+     ((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))
-      (fr500 (unit u-check)))
+     ((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")
 (define-pmacro (conditional-check-int-condition-code prefix cc op ope test comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT B01) (FR500-MAJOR B-5) (FR400-MAJOR B-5) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-check)))
+       ((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) (FR400-MAJOR B-5) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-check)))
+     ((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) (FR400-MAJOR B-5) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-check)))
+     ((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")
 (define-pmacro (conditional-check-float-condition-code prefix cc op ope test comment)
   (dni (.sym prefix cc)
        (comment)
-       ((UNIT B01) (FR500-MAJOR B-5) (FR400-MAJOR B-5) CONDITIONAL FR-ACCESS)
+       ((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))
-       (fr500 (unit u-check)))
+       ((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) (FR400-MAJOR B-5) CONDITIONAL FR-ACCESS)
+     ((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))
-      (fr500 (unit u-check)))
+     ((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) (FR400-MAJOR B-5) CONDITIONAL FR-ACCESS)
+     ((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))
-      (fr500 (unit u-check)))
+     ((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")
 
 (dni cjmpl
      "conditional jump and link"
-     ((UNIT I0) (FR500-MAJOR I-5) (FR400-MAJOR I-5) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR I-5) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-branch)))
+     ((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) (FR400-MAJOR C-2))
+       ((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)
 )
 
 (cache-invalidate ici insn 0 OP_03 OPE1_38
-                 ((fr400 (unit u-ici)) (fr500 (unit u-ici)))
+                 ((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)) (fr500 (unit u-dci)))
+                 ((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) (FR400-MAJOR C-2) (MACH fr400))
+       ((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)
 )
 
 (cache-invalidate-entry icei insn OP_03 OPE1_39
-                       ((fr400 (unit u-ici)))
+                       ((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)))
+                       ((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) (FR400-MAJOR C-2))
+     ((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))
-      (fr500 (unit u-dcf)))
+     ((fr400 (unit u-dcf)) (fr450 (unit u-dcf))
+      (fr500 (unit u-dcf)) (fr550 (unit u-dcf)))
 )
 
 (dni dcef
      "Data cache entry flush"
-     ((UNIT C) (FR400-MAJOR C-2) (MACH fr400))
+     ((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)))
+     ((fr400 (unit u-dcf)) (fr450 (unit u-dcf)) (fr550 (unit u-dcf)))
 )
 
 (define-pmacro (write-TLB name insn op ope comment)
 (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 op ope profile comment)
+(define-pmacro (cache-preload name cache pipe attrs op ope profile comment)
   (dni name
        (comment)
-       ((UNIT C) (FR500-MAJOR C-2) (FR400-MAJOR C-2))
+       (.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)
   )
 )
 
-(cache-preload icpl insn OP_03 OPE1_30
-              ((fr400 (unit u-icpl)) (fr500 (unit u-icpl)))
+(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 OP_03 OPE1_34
-              ((fr400 (unit u-dcpl)) (fr500 (unit u-dcpl)))
+(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) (FR400-MAJOR C-2))
+       ((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)
 )
 
 (cache-unlock icul insn OP_03 OPE1_31
-             ((fr400 (unit u-icul)) (fr500 (unit u-icul)))
+             ((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)) (fr500 (unit u-dcul)))
+             ((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) (FR400-MAJOR C-2))
+       ((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
 )
 
 (barrier bar    bar    OP_03 OPE1_3E
-        ((fr400 (unit u-barrier)) (fr500 (unit u-barrier)))
+        ((fr400 (unit u-barrier)) (fr450 (unit u-barrier))
+         (fr500 (unit u-barrier)))
         "barrier")
 (barrier membar membar OP_03 OPE1_3F
-        ((fr400 (unit u-membar)) (fr500 (unit u-membar)))
+        ((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)
   (c-call VOID "@cpu@_clear_ne_flags" target_index is_float)
 )
 
-(define-pmacro (clear-ne-flag-r name op ope reg is_float attr comment)
+(define-pmacro (clear-ne-flag-r name op ope reg is_float attr profile comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-6) (MACH simple,tomcat,fr500,frv) attr)
+       ((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))
-       (clear-ne-flag-semantics (index-of (.sym reg k)) is_float)
-       ()
+       (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        "Clear GR NE flag")
-(clear-ne-flag-r clrfr OP_0A OPE1_02 FR 1 FR-ACCESS "Clear FR NE flag")
+(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 comment)
+(define-pmacro (clear-ne-flag-all name op ope is_float attr profile comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-6) (MACH simple,tomcat,fr500,frv) attr)
+       ((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        "Clear GR NE flag ALL")
-(clear-ne-flag-all clrfa OP_0A OPE1_03 1 FR-ACCESS "Clear FR NE flag ALL")
+(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) (MACH frv,fr500) attr)
+       ((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)))
   )
 )
 
 (define-pmacro (commit name op ope is_float attr comment)
   (dni name
        (comment)
-       ((UNIT I01) (FR500-MAJOR I-6) (MACH frv,fr500) attr)
+       ((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)))
   )
 )
 
                name op ope conv mode src targ attr comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv) attr)
+       (.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)))
+       (set targ (conv mode FPCONV-DEFAULT src))
+       ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
   )
 )
 
-(floating-point-conversion fitos OP_79 OPE1_00 float SF FRintj FRk NA "Convert Integer to Single")
-(floating-point-conversion fstoi OP_79 OPE1_01 fix   SI FRj FRintk NA "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")
+(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 FM01) (FR500-MAJOR F-1) attr)
+       ((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 targ (conv mode FPCONV-DEFAULT src))
                 (set (nextreg targ_hw targ 1)
-                     (conv mode (nextreg src_hw src 1))))
+                     (conv mode FPCONV-DEFAULT (nextreg src_hw src 1))))
        ((fr500 (unit u-float-dual-convert)))
   )
 )
                name op ope conv mode src src_hw targ targ_hw attr comment)
   (dni name
        (comment)
-       ((MACH frv) (UNIT FM01) (FR500-MAJOR F-1) NON-EXCEPTING attr)
+       ((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))
+                (set targ (conv mode FPCONV-DEFAULT 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))))
+                     (conv mode FPCONV-DEFAULT (nextreg src_hw src 1))))
        ((fr500 (unit u-float-dual-convert)))
   )
 )
                name op ope conv mode src targ comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+       ((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)))
+          (set targ (conv mode FPCONV-DEFAULT src)))
+       ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
   )
 )
 
                name op ope conv mode src targ comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+       ((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)))
+                (set targ (conv mode FPCONV-DEFAULT src)))
+       ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
   )
 )
 
 (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 FM01 (FR500-MAJOR F-1) NA
-                  (MACH simple,tomcat,fr500,frv) NA
+                  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) NA
-                  (MACH frv) NA
-                  ((fr500 (unit u-fr2fr)))
+                  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 FM01) (FR500-MAJOR F-1))
+     ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
      "fdmovs$pack $FRj,$FRk"
      (+ pack FRk OP_79 (rs-null) OPE1_12 FRj)
      (sequence ()
      ((fr500 (unit u-fr2fr)))
 )
 
-(conditional-register-transfer cfmovs OP_6C OPE4_0 FRj FRk FM01
-                              (FR500-MAJOR F-1) NA
-                              (MACH simple,tomcat,fr500,frv)
-                              ((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)
-       ((UNIT FM01) (FR500-MAJOR F-1) attr)
+       (.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)))
+       ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
   )
 )
 
-(floating-point-neg fnegs FRj FRk OP_79 OPE1_03 (MACH simple,tomcat,fr500,frv) "Floating point negate, single")
-(floating-point-neg fnegd FRdoublej FRdoublek OP_7A OPE1_03 (MACH frv) "Floating point negate, double")
+(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 FM01) (FR500-MAJOR F-1))
+     ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
      "fdnegs$pack $FRj,$FRk"
      (+ pack FRk OP_79 (rs-null) OPE1_13 FRj)
      (sequence ()
 
 (dni cfnegs
      "Conditional floating point negate, single"
-     ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
 )
 
 (define-pmacro (float-abs name src targ op ope attr comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-1) attr)
+       (.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)))
+       ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
   )
 )
 
-(float-abs fabss FRj FRk OP_79 OPE1_04 (MACH simple,tomcat,fr500,frv) "Float absolute value, single")
-(float-abs fabsd FRdoublej FRdoublek OP_7A OPE1_04 (MACH frv) "Float absolute value, double")
+(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 FM01) (FR500-MAJOR F-1))
+     ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
      "fdabss$pack $FRj,$FRk"
      (+ pack FRk OP_79 (rs-null) OPE1_14 FRj)
      (sequence ()
 
 (dni cfabss
      "Conditional floating point absolute value, single"
-     ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
 )
 
 (dni fsqrts
      "Square root single"
-     ((UNIT FM01) (FR500-MAJOR F-4) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
 )
 
 (dni fdsqrts
 
 (dni cfsqrts
      "Conditional square root single"
-     ((UNIT FM01) (FR500-MAJOR F-4) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
 )
 
 (dni nfsqrts
      "Non exception square root, single"
-     ((UNIT FM01) (FR500-MAJOR F-4) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
 )
 
-(define-pmacro (float-binary-op-s name operation op ope major comment)
+(define-pmacro (float-binary-op-s name pipe attr operation op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
+       (.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)))
+       ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
   )
 )
 
-(float-binary-op-s fadds add OP_79 OPE1_06 F-2 "add single float")
-(float-binary-op-s fsubs sub OP_79 OPE1_07 F-2 "sub single float")
-(float-binary-op-s fmuls mul OP_79 OPE1_08 F-3 "mul single float")
+(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) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((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 FM01) (FR500-MAJOR major) (MACH frv))
+       ((UNIT FMALL) (FR500-MAJOR major) (MACH frv))
        (.str name "$pack $FRdoublei,$FRdoublej,$FRdoublek")
        (+ pack FRdoublek op FRdoublei ope FRdoublej)
        (set FRdoublek (operation FRdoublei FRdoublej))
 (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 operation op ope major comment)
+(define-pmacro (conditional-float-binary-op name pipe attr operation op ope profile comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
+       (.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)))
-       ((fr500 (unit u-float-arith)))
+       profile
   )
 )
 
-(conditional-float-binary-op cfadds add OP_6D OPE4_0 F-2 "cond add single")
-(conditional-float-binary-op cfsubs sub OP_6D OPE4_1 F-2 "cond sub single")
-(conditional-float-binary-op cfmuls mul OP_6E OPE4_0 F-3 "cond mul single")
-(conditional-float-binary-op cfdivs div OP_6E OPE4_1 F-4 "cond div single")
+(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 operation op ope major comment)
+(define-pmacro (ne-float-binary-op name pipe attr operation op ope profile comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
+       (.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)))
-       ((fr500 (unit u-float-arith)))
+       profile
   )
 )
 
-(ne-float-binary-op nfadds add OP_79 OPE1_26 F-2 "ne add single")
-(ne-float-binary-op nfsubs sub OP_79 OPE1_27 F-2 "ne sub single")
-(ne-float-binary-op nfmuls mul OP_79 OPE1_28 F-3 "ne mul single")
-(ne-float-binary-op nfdivs div OP_79 OPE1_29 F-4 "ne div single")
+(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)
 
 (dni fcmps
      "compare single float"
-     ((UNIT FM01) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((fr500 (unit u-float-compare)) (fr550 (unit u-float-compare)))
 )
 
 (dni fcmpd
      "compare double float"
-     ((UNIT FM01) (FR500-MAJOR F-2) (MACH frv))
+     ((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)
 
 (dni cfcmps
      "Conditional compare single, float"
-     ((UNIT FM01) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((fr500 (unit u-float-compare)) (fr550 (unit u-float-compare)))
 )
 
 (dni fdcmps
      "float dual compare single"
-     ((UNIT FM01) (FR500-MAJOR F-6) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((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 FM01) (FR500-MAJOR F-5) (MACH frv))
+       ((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))
 
 (dni fdmadds
      "Float dual multiply with add"
-     ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
+     ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
      "fdmadds$pack $FRi,$FRj,$FRk"
      (+ pack FRk OP_79 FRi OPE1_1B FRj)
      (sequence ()
 
 (dni nfdmadds
      "Non excepting float dual multiply with add"
-     ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
+     ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
      "nfdmadds$pack $FRi,$FRj,$FRk"
      (+ pack FRk OP_79 FRi OPE1_3B FRj)
      (sequence ()
                name add_sub arg1 arg2 targ op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv) CONDITIONAL)
+       ((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))
 (define-pmacro (ne-float-mul-with-add name add_sub arg1 arg2 targ op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv) NON-EXCEPTING)
+       ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv) NON-EXCEPTING)
        (.str name "$pack $" arg1 ",$" arg2 ",$" targ)
        (+ pack targ op arg1 ope arg2)
        (sequence ()
                name add_sub arg1 arg2 targ op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-5) (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
   )
 )
 
 (define-pmacro (conditional-float-parallel-mul-add name add_sub op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-5) CONDITIONAL (MACH simple,tomcat,fr500,frv))
+       ((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)))
+       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
   )
 )
 
 
 (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 targ (ftrunc SF FPCONV-DEFAULT
+                             (mul DF
+                                  (fext DF FPCONV-DEFAULT arg1)
+                                  (fext DF FPCONV-DEFAULT 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))))))
+                (ftrunc SF FPCONV-DEFAULT
+                        (add_sub DF
+                                 (fext DF FPCONV-DEFAULT (nextreg h-fr arg1 1))
+                                 (fext DF FPCONV-DEFAULT (nextreg h-fr arg2 1))))))
 )
 
 (define-pmacro (float-parallel-mul-add-double
 (define-pmacro (ne-float-parallel-mul-add name add_sub op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR F-5) (MACH simple,tomcat,fr500,frv))
+       ((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" (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)))
+       ((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 major oper1 oper2 op ope attr comment)
+(define-pmacro (float-dual-arith name attr oper1 oper2 op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR major) attr)
+       (.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)))
+       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
   )
 )
 
-(float-dual-arith fdadds F-6 add add OP_79 OPE1_16 (MACH simple,tomcat,fr500,frv) "dual add, single")
-(float-dual-arith fdsubs F-6 sub sub OP_79 OPE1_17 (MACH simple,tomcat,fr500,frv) "dual sub, single")
-(float-dual-arith fdmuls F-7 mul mul OP_79 OPE1_18 (MACH simple,tomcat,fr500,frv) "dual mul, single")
-(float-dual-arith fddivs F-7 div div OP_79 OPE1_19 (MACH frv) "dual div,single")
-(float-dual-arith fdsads F-6 add sub OP_79 OPE1_1E (MACH simple,tomcat,fr500,frv) "dual add/sub, single")
+(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) (MACH simple,tomcat,fr500,frv))
+     ((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)))
+     ((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) (MACH simple,tomcat,fr500,frv))
+     ((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 ()
               (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)))
+     ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
 )
 
-(define-pmacro (ne-float-dual-arith name major oper1 oper2 op ope attr comment)
+(define-pmacro (ne-float-dual-arith name attr oper1 oper2 op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR major) attr)
+       (.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" (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)))
+       ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
   )
 )
 
-(ne-float-dual-arith nfdadds F-6 add add OP_79 OPE1_36 (MACH simple,tomcat,fr500,frv) "ne dual add, single")
-(ne-float-dual-arith nfdsubs F-6 sub sub OP_79 OPE1_37 (MACH simple,tomcat,fr500,frv) "ne dual sub, single")
-(ne-float-dual-arith nfdmuls F-7 mul mul OP_79 OPE1_38 (MACH simple,tomcat,fr500,frv) "ne dual mul, single")
-(ne-float-dual-arith nfddivs F-7 div div OP_79 OPE1_39 (MACH frv) "ne dual div,single")
-(ne-float-dual-arith nfdsads F-6 add sub OP_79 OPE1_3E (MACH simple,tomcat,fr500,frv) "ne dual add/sub, single")
+(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"
 
 (dni mhsetlos
      "Media set lower signed 12 bits"
-     ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+     ((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)))
+     ((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 FM01) (MACH fr400) (FR400-MAJOR M-1))
+     ((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)))
+     ((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 FM01) (MACH fr400) (FR400-MAJOR M-1))
+     ((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 ()
               (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)))
+     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
+      (fr550 (unit u-media-set)))
 )
 
 (define-pmacro (set-5-semantics target value)
 (define-pmacro (media-set-5 name hilo op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+       ((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)))
+       ((fr400 (unit u-media-hilo)) (fr450 (unit u-media-hilo))
+       (fr550 (unit u-media-set (out FRintk (.sym FRk hilo)))))
   )
 )
 
 
 (dni mhdseth
      "Media dual set halfword upper 5 bits"
-     ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+     ((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 ()
               (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)))
+     ((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 FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
+       (fr500 (unit u-media)) (fr550 (unit u-media)))
   )
 )
 
 (define-pmacro (conditional-media-logic name operation op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
+       (fr500 (unit u-media)) (fr550 (unit u-media)))
   )
 )
 
 
 (dni mnot
      ("mnot")
-     ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
+      (fr500 (unit u-media)) (fr550 (unit u-media)))
 )
 
 (dni cmnot
      ("cmnot")
-     ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-3)) (fr450 (unit u-media-3))
+       (fr500 (unit u-media)) (fr550 (unit u-media)))
   )
 )
 
 (define-pmacro (media-cut-r-r name arg op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-2))
+       ((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))
-       (fr500 (unit u-media)))
+       ((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 comment)
+(define-pmacro (media-cut-acc name arg op ope fr450-major comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media)))
+       ((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 "media accumulator cut reg")
-(media-cut-acc mcuti s6     OP_7B OPE1_2E "media accumulator cut immed")
+(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 comment)
+(define-pmacro (media-cut-acc-ss name arg op ope fr450-major comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media)))
+       ((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 "media accumulator cut reg with saturation")
-(media-cut-acc-ss mcutssi s6     OP_7B OPE1_2F "media accumulator cut immed with saturation")
+(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
 ;
 
 (dni mdcutssi
      "Media dual cut with signed saturation"
-     ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
-     "mdcutssi$pack $ACC40Si,$s6,$FRintk"
-     (+ pack FRintk OP_78 ACC40Si OPE1_0E s6)
+     ((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 FRintk 2)
+        (if (register-unaligned FRintkeven 2)
             (c-call VOID "@cpu@_media_register_not_aligned")
             (sequence ()
-                      (set FRintk (c-call SI "@cpu@_media_cut_ss" ACC40Si s6))
-                      (set (nextreg h-fr_int FRintk 1)
+                      (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)))
+     ((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
 
 (dni maveh
      "Media dual average"
-     ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-1))
+       ((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 ()
 )
 
 (media-dual-shift msllhi sll OP_7B OPE1_09
-                 ((fr400 (unit u-media-3)) (fr500 (unit u-media)))
+                 ((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)) (fr500 (unit u-media)))
+                 ((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)) (fr500 (unit u-media)))
+                 ((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 FM0) (MACH fr400) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$u6,$FRintk")
-       (+ pack FRintk op FRinti ope u6)
-       (if (orif (register-unaligned FRinti 2)
-                (register-unaligned FRintk 2))
+       ((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 FRintk (operation FRinti (and u6 #x1f)))
-                    (set (nextreg h-fr_int FRintk 1)
-                         (operation (nextreg h-fr_int FRinti 1)
-                                    (and u6 #x1f)))))
-       ((fr400 (unit u-media-3-quad)))
+                    (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 dual couple, halfword"
-     ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+     "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))
                                            (sub 15 shift)))
                             (set arg1 (or HI arg1 arg2))))
               (set (halfword hi FRintk 0) arg1))
-     ((fr400 (unit u-media-3-dual)))
+     ((fr400 (unit u-media-3-dual)) (fr450 (unit u-media-3-dual))
+      (fr550 (unit u-media-3-dual)))
 )
 
 (dni mcpli
-     "Media dual couple, word"
-     ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+     "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))
                                            (sub 31 shift)))
                             (set tmp (or tmp tmp1))))
               (set FRintk tmp))
-     ((fr400 (unit u-media-3-dual)))
+     ((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)
 
 (dni msaths
      "Media dual saturation signed"
-     ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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 FM01) (MACH fr400) (FR400-MAJOR M-1))
-     "mqsaths$pack $FRinti,$FRintj,$FRintk"
-     (+ pack FRintk OP_78 FRinti OPE1_0F FRintj)
-     (if (orif (register-unaligned FRinti 2)
-              (orif (register-unaligned FRintj 2)
-                    (register-unaligned FRintk 2)))
+     ((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 FRintk referenced as a target for profiling
-                  (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
-                  (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))
-                  (extract-hilo FRinti 1 FRintj 1 argihi argilo argjhi argjlo)
-                  (saturate argihi argjhi (inv argjhi) (halfword hi FRintk 1))
-                  (saturate argilo argjlo (inv argjlo) (halfword lo FRintk 1))))
-     ((fr400 (unit u-media-1-quad)))
+                  ; 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)
 
 (dni msathu
      "Media dual saturation unsigned"
-     ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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 FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+       ((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)
                     (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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-7)) (fr450 (unit u-media-7))
+       (fr500 (unit u-media)) (fr550 (unit u-media)))
   )
 )
 
 
 (dni mabshs
      "Media dual absolute value, halfword"
-     ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+     ((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 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)
+              ; We extend the argument before the abs operation so we can
+              ; notice -32768 overflowing as 32768.
+              (saturate-v (abs (ext DI arghi)) 32767 -32768 (msr-sie-fri-hi)
                           (halfword hi FRintk 0))
-              (saturate-v (abs arglo) 32767 -32768 (msr-sie-fri-lo)
+              (saturate-v (abs (ext DI arglo)) 32767 -32768 (msr-sie-fri-lo)
                           (halfword lo FRintk 0)))
-     ((fr400 (unit u-media-1)))
+     ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
+      (fr550 (unit u-media)))
 )
 
+; How to extend from a mode to get the intended signedness.
+(define-pmacro (DI-ext-HI x) (ext DI x))
+(define-pmacro (DI-ext-UHI x) (zext DI x))
+(define-pmacro (DI-ext-DI x) x)
+
 (define-pmacro (media-arith-sat-semantics
                operation arg1 arg2 res mode max min sie)
   (sequence ((DI tmp))
-           (set tmp (operation arg1 arg2))
+           ; Make sure we saturate at max/min against a value that is
+           ; sign- or zero-extended appropriately from "mode".
+           (set tmp (operation DI
+                     ((.sym DI-ext- mode) arg1) ((.sym DI-ext- mode) arg2)))
            (saturate-v tmp max min sie res))
 )
 
 (define-pmacro (media-dual-arith-sat name operation mode max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
+       (fr500 (unit u-media)) (fr550 (unit u-media)))
   )
 )
 
                name operation mode max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-1)) (fr450 (unit u-media-1))
+       (fr500 (unit u-media)) (fr550 (unit u-media)))
   )
 )
 
 (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 FRinti 2)
-           (orif (register-unaligned FRintj 2)
-                 (register-unaligned FRintk 2)))
+  (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 FRintk referenced as a target for profiling
-                   (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
-                   (extract-hilo FRinti 0 FRintj 0
+                   ; 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 FRintk 0) mode
+                                              (halfword hi FRintkeven 0) mode
                                               max min (msr-sie-fri-hi))
                    (media-arith-sat-semantics operation argilo argjlo
-                                              (halfword lo FRintk 0) mode
+                                              (halfword lo FRintkeven 0) mode
                                               max min (msr-sie-fri-lo))
-                   (extract-hilo FRinti 1 FRintj 1
+                   (extract-hilo FRintieven 1 FRintjeven 1
                                  argihi argilo argjhi argjlo)
                    (media-arith-sat-semantics operation argihi argjhi
-                                              (halfword hi FRintk 1) mode
+                                              (halfword hi FRintkeven 1) mode
                                               max min  (msr-sie-fri-1-hi))
                    (media-arith-sat-semantics operation argilo argjlo
-                                              (halfword lo FRintk 1) mode
+                                              (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 FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$FRintj,$FRintk")
-       (+ pack FRintk op FRinti ope FRintj)
+       ((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))
-       (fr500 (unit u-media-quad-arith)))
+       ((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)))
   )
 )
 
                name operation mode max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-2) CONDITIONAL)
-       (.str name "$pack $FRinti,$FRintj,$FRintk,$CCi,$cond")
-       (+ pack FRintk op FRinti CCi cond ope FRintj)
+       ((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))
-       (fr500 (unit u-media-quad-arith)))
+       ((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 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 FM01) (MACH fr400) (FR400-MAJOR M-1))
+       ((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 (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)))
+       (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)))
   )
 )
 
                                         comment)
   (dni name
        (comment)
-       ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+       ((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 (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)))
+       (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)))
   )
 )
 
 
 (dni masaccs
      "Media add and subtract signed accumulator with saturation"
-       ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+       ((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 (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)))
+       (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 FM0) (MACH fr400) (FR400-MAJOR M-2))
+       ((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 (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)))
+       (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)
 )
 
 (define-pmacro (media-dual-multiply-semantics cond mode conv rhs1 rhs2)
-  (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)))))
+  (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 FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1) PRESERVE-OVF)
+       ((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))
-       (fr500 (unit u-media-dual-mul)))
+       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
+       (fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
   )
 )
 
                name mode conv rhs1 rhs2 op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1)
+       ((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))
-       (fr500 (unit u-media-dual-mul)))
+       ((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 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 (register-unaligned ACC40Sk 4)
-      (c-call VOID "@cpu@_media_acc_not_aligned")
-      (if (orif (register-unaligned FRinti 2)
-               (register-unaligned FRintj 2))
-         (c-call VOID "@cpu@_media_register_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))
-                       (extract-hilo FRinti 1 FRintj 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))))))
+  (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 FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2) PRESERVE-OVF)
-       (.str name "$pack $FRinti,$FRintj,$ACC40Sk")
-       (+ pack ACC40Sk op FRinti ope FRintj)
+       ((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))
-       (fr500 (unit u-media-quad-mul)))
+       ((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)))
   )
 )
 
                name mode conv rhs1 rhs2 op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2)
+       ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4)
+       (FR400-MAJOR M-2) (FR450-MAJOR M-4)
        PRESERVE-OVF CONDITIONAL)
-       (.str name "$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond")
-       (+ pack ACC40Sk op FRinti CCi cond ope FRintj)
+       (.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))
-       (fr500 (unit u-media-quad-mul)))
+       ((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)))
   )
 )
 
 
 (define-pmacro (media-dual-multiply-acc-semantics
                cond mode conv addop rhw res max min)
-  (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)))))
+  (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 FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media-dual-mul)))
+       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
+       (fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
   )
 )
 
                name mode conv addop rhw res max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-media-dual-mul)))
+       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
+       (fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
   )
 )
 
 
 (define-pmacro (media-quad-multiply-acc-semantics
                cond mode conv addop rhw res max min)
-  (if (register-unaligned res 4)
-      (c-call VOID "@cpu@_media_acc_not_aligned")
-      (if (orif (register-unaligned FRinti 2)
-               (register-unaligned FRintj 2))
-         (c-call VOID "@cpu@_media_register_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))
-                       (extract-hilo FRinti 1 FRintj 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))))))
+  (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 FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$FRintj,$" res)
-       (+ pack res op FRinti ope FRintj)
+       ((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))
-       (fr500 (unit u-media-quad-mul)))
+       ((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)))
   )
 )
 
                name mode conv addop rhw res max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2) CONDITIONAL)
-       (.str name "$pack $FRinti,$FRintj,$" res ",$CCi,$cond")
-       (+ pack res op FRinti CCi cond ope FRintj)
+       ((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))
-       (fr500 (unit u-media-quad-mul)))
+       ((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)))
   )
 )
 
 
 (define-pmacro (media-quad-multiply-cross-acc-semantics
                cond mode conv addop rhw res max min)
-  (if (register-unaligned res 4)
-      (c-call VOID "@cpu@_media_acc_not_aligned")
-      (if (orif (register-unaligned FRinti 2)
-               (register-unaligned FRintj 2))
-         (c-call VOID "@cpu@_media_register_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
-                                                     (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 FRinti 1 FRintj 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))))))
+  (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 FM0) (MACH fr400) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$FRintj,$" res)
-       (+ pack res op FRinti ope FRintj)
+       ((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)))
+       ((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)))
   )
 )
 
 
 (define-pmacro (media-quad-cross-multiply-cross-acc-semantics
                cond mode conv addop rhw res max min)
-  (if (register-unaligned res 4)
-      (c-call VOID "@cpu@_media_acc_not_aligned")
-      (if (orif (register-unaligned FRinti 2)
-               (register-unaligned FRintj 2))
-         (c-call VOID "@cpu@_media_register_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 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 FRinti 1 FRintj 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))))))
+  (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 FM0) (MACH fr400) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$FRintj,$" res)
-       (+ pack res op FRinti ope FRintj)
+       ((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)))
+       ((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)))
   )
 )
 
 
 (define-pmacro (media-quad-cross-multiply-acc-semantics
                cond mode conv addop rhw res max min)
-  (if (register-unaligned res 4)
-      (c-call VOID "@cpu@_media_acc_not_aligned")
-      (if (orif (register-unaligned FRinti 2)
-               (register-unaligned FRintj 2))
-         (c-call VOID "@cpu@_media_register_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 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 FRinti 1 FRintj 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))))))
+  (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 FM0) (MACH fr400) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$FRintj,$" res)
-       (+ pack res op FRinti ope FRintj)
+       ((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)))
+       ((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)))
   )
 )
 
 )
 
 (define-pmacro (media-dual-complex-semantics mode conv rhs1 rhs2 max min)
-  (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)))
+  (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)
-  (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)))
+  (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 FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
+       (fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
   )
 )
 
                name mode conv rhs1 rhs2 max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
+       ((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))
-       (fr500 (unit u-media-dual-mul)))
+       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
+       (fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
   )
 )
 
                name mode conv rhs1 rhs2 max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-media)))
+       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
+       (fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
   )
 )
 
                name mode conv rhs1 rhs2 max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1) CONDITIONAL)
+       ((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))
-       (fr500 (unit u-media-dual-mul)))
+       ((fr400 (unit u-media-2)) (fr450 (unit u-media-2))
+       (fr500 (unit u-media-dual-mul)) (fr550 (unit u-media-4)))
   )
 )
 
                name mode conv rhs1 rhs2 max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$FRintj,$ACC40Sk")
-       (+ pack ACC40Sk op FRinti ope FRintj)
-       (if (register-unaligned ACC40Sk 2)
-          (c-call VOID "@cpu@_media_acc_not_aligned")
-          (if (orif (register-unaligned FRinti 2)
-                    (register-unaligned FRintj 2))
-              (c-call VOID "@cpu@_media_register_not_aligned")
-              (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))
-                        (extract-hilo FRinti 1 FRintj 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))
-       (fr500 (unit u-media-quad-complex)))
+       ((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)))
   )
 )
 
                name mode conv rhs1 rhs2 max min op ope comment)
   (dni name
        (comment)
-       ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
-       (.str name "$pack $FRinti,$FRintj,$ACC40Sk")
-       (+ pack ACC40Sk op FRinti ope FRintj)
-       (if (register-unaligned ACC40Sk 2)
-          (c-call VOID "@cpu@_media_acc_not_aligned")
-          (if (orif (register-unaligned FRinti 2)
-                    (register-unaligned FRintj 2))
-              (c-call VOID "@cpu@_media_register_not_aligned")
-              (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))
-                        (extract-hilo FRinti 1 FRintj 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))
-       (fr500 (unit u-media-quad-complex)))
+       ((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)))
   )
 )
 
 
 (dni mexpdhw
      "Media expand halfword to word"
-     ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-1) CONDITIONAL)
+     ((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))
-      (fr500 (unit u-media)))
+     ((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 FRintk 2)
+  (if (register-unaligned FRintkeven 2)
       (c-call VOID "@cpu@_media_register_not_aligned")
       (if cond
          (sequence ((UHI tmp))
-                   ; a hack to get FRintk referenced for profiling
-                   (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
+                   ; 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 FRintk 0) tmp)
-                   (set (halfword lo FRintk 0) tmp)
-                   (set (halfword hi FRintk 1) tmp)
-                   (set (halfword lo FRintk 1) tmp))))
+                   (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) (FR400-MAJOR M-2))
-     "mexpdhd$pack $FRinti,$u6,$FRintk"
-     (+ pack FRintk OP_7B FRinti OPE1_33 u6)
+     ((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))
-      (fr500 (unit u-media-dual-expand)))
+     ((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) (FR400-MAJOR M-2) CONDITIONAL)
-     "cmexpdhd$pack $FRinti,$u6,$FRintk,$CCi,$cond"
-     (+ pack FRintk OP_76 FRinti CCi cond OPE4_3 u6)
+     ((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))
-      (fr500 (unit u-media-dual-expand)))
+     ((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) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-2))
-     "mdpackh$pack $FRinti,$FRintj,$FRintk"
-     (+ pack FRintk OP_7B FRinti OPE1_36 FRintj)
-     (if (orif (register-unaligned FRinti 2)
-              (orif (register-unaligned FRintj 2)
-                    (register-unaligned FRintk 2)))
+     ((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 FRinti (c-raw-call SI "frv_ref_SI" FRinti))
-                  (set FRintj (c-raw-call SI "frv_ref_SI" FRintj))
-                  (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
-                  (media-pack FRinti FRintj FRintk 0)
-                  (media-pack FRinti FRintj FRintk 1)))
-     ((fr400 (unit u-media-3-quad))
-      (fr500 (unit u-media-quad-arith)))
+                  (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)
 
 (dni munpackh
      "Media halfword unpack"
-     ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-2))
-     "munpackh$pack $FRinti,$FRintk"
-     (+ pack FRintk OP_7B FRinti OPE1_35 (FRj-null))
-     (if (register-unaligned FRintk 2)
+     ((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 FRintk (c-raw-call SI "frv_ref_SI" FRintk))
-                  (media-unpack FRinti 0 FRintk 0)))
-     ((fr400 (unit u-media-dual-expand))
-      (fr500 (unit u-media-dual-expand)))
+                  (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 $FRinti,$FRintk"
-     (+ pack FRintk OP_7B FRinti OPE1_37 (FRj-null))
-     (if (orif (register-unaligned FRinti 2) (register-unaligned FRintk 4))
+     "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 FRinti (c-raw-call SI "frv_ref_SI" FRinti))
+                  (set FRintieven (c-raw-call SI "frv_ref_SI" FRintieven))
                   (set FRintk (c-raw-call SI "frv_ref_SI" FRintk))
-                  (media-unpack FRinti 0 FRintk 0)
-                  (media-unpack FRinti 1 FRintk 2)))
-     ((fr500 (unit u-media-dual-unpack)))
+                  (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 FRintk 2)
+  (if (register-unaligned FRintkeven 2)
       (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 2 FRintj 0))
-                   (set (halfword hi FRintk 1) (ubyte 1 FRintj 0))
-                   (set (halfword lo FRintk 1) (ubyte 0 FRintj 0)))))
+                   (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) (FR400-MAJOR M-2))
-     "mbtoh$pack $FRintj,$FRintk"
-     (+ pack FRintk OP_7B (FRi-null) OPE1_38 FRintj)
+     ((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 FRintk (c-raw-call SI "frv_ref_SI" FRintk))
+              (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven))
               (mbtoh-semantics 1))
-     ((fr400 (unit u-media-dual-expand))
-      (fr500 (unit u-media-dual-btoh)))
+     ((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) (FR400-MAJOR M-2) CONDITIONAL)
-     "cmbtoh$pack $FRintj,$FRintk,$CCi,$cond"
-     (+ pack FRintk OP_77 (FRi-null) CCi cond OPE4_0 FRintj)
-     (mbtoh-semantics (eq CCi (or cond 2)))
-     ((fr400 (unit u-media-dual-expand))
-      (fr500 (unit u-media-dual-btoh)))
+     ((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 FRintj 2)
+  (if (register-unaligned FRintjeven 2)
       (c-call VOID "@cpu@_media_register_not_aligned")
       (if cond
          (sequence ()
-                   (set (ubyte 3 FRintk 0) (halfword hi FRintj 0))
-                   (set (ubyte 2 FRintk 0) (halfword lo FRintj 0))
-                   (set (ubyte 1 FRintk 0) (halfword hi FRintj 1))
-                   (set (ubyte 0 FRintk 0) (halfword lo FRintj 1)))))
+                   (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) (FR400-MAJOR M-2))
-     "mhtob$pack $FRintj,$FRintk"
-     (+ pack FRintk OP_7B (FRi-null) OPE1_39 FRintj)
+     ((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 FRintj (c-raw-call SI "frv_ref_SI" FRintj))
+              (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))
-      (fr500 (unit u-media-dual-htob)))
+     ((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) (FR400-MAJOR M-2) CONDITIONAL)
-     "cmhtob$pack $FRintj,$FRintk,$CCi,$cond"
-     (+ pack FRintk OP_77 (FRi-null) CCi cond OPE4_1 FRintj)
+     ((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 FRintj (c-raw-call SI "frv_ref_SI" FRintj))
+              (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))
-      (fr500 (unit u-media-dual-htob)))
+     ((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)
      ((fr500 (unit u-media-dual-btohe)))
 )
 
-(dni mclracc
+; 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 FM01) (FR500-MAJOR M-3))
-     "mclracc$pack $ACC40Sk,$A"
-     (+ pack ACC40Sk OP_7B A (misc-null-10) OPE1_3B (FRj-null))
-     (c-call VOID "@cpu@_clear_accumulators" (index-of ACC40Sk) A)
-     ((fr400 (unit u-media-4))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-1))
+     ((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))
-      (fr500 (unit u-media)))
+     ((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) (FR400-MAJOR M-1))
+     ((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))
-     (set ACCGk FRinti)
-     ((fr400 (unit u-media-4-accg))
-      (fr500 (unit u-media)))
+     (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)
 ; On the other hand spending a little time in the decoder is often worth it.
 ;
 (dnmi nop "nop"
-     ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+     ((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 FM01) (FR500-MAJOR F-8) (MACH simple,tomcat,fr500,frv))
+     ((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)
      ()
 )
 
-; Media NOP
-; A special case of mclracc
-(dnmi mnop "Media nop"
-      (NO-DIS (UNIT FM01) (FR500-MAJOR M-3))
-     "mnop$pack"
-     (emit mclracc pack (ACC40Sk 63) (A 1))
-)
-
 ; A return instruction
 (dnmi ret "return"
-      (NO-DIS (UNIT B01) (FR500-MAJOR B-3) (FR400-MAJOR B-3))
+      (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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+      (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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+      (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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+      (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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+      (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 I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+      (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)
 )   
This page took 0.173889 seconds and 4 git commands to generate.