X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=cpu%2Ffrv.cpu;h=b6c4f809bd6eabf2e4f4481d30249423714ee1d6;hb=e6ced26afd50b0d74b8ea14ca1cd62cdc5d11ae8;hp=9ded3383f2139c45d6d7dc9632147b4bbcccea83;hpb=d03124067c162553fb099983d2a6c9bf6e247284;p=deliverable%2Fbinutils-gdb.git diff --git a/cpu/frv.cpu b/cpu/frv.cpu index 9ded3383f2..b6c4f809bd 100644 --- a/cpu/frv.cpu +++ b/cpu/frv.cpu @@ -1,6 +1,6 @@ ; Fujitsu FRV opcode support, for GNU Binutils. -*- Scheme -*- ; -; Copyright 2000, 2001, 2003 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. @@ -77,30 +78,915 @@ ) ) +; 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) + ) +) + +; 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) + ) +) + +; 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 @@ -158,22 +1044,6 @@ () ; 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 @@ -198,14 +1068,6 @@ () ; 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 @@ -222,14 +1084,6 @@ () ; 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 @@ -238,14 +1092,6 @@ ((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 @@ -278,155 +1124,141 @@ ((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 + () ; state + ((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 @@ -505,49 +1337,17 @@ () ; outputs () ; profile action (default) ) - ; commit unit - (unit u-commit "Commit Unit" () - 1 1 ; issue done - () ; state - ((GRk INT -1) (FRk INT -1)) ; inputs - () ; outputs - () ; profile action (default) - ) -) - -; Tomcat machine. Early version of fr500 machine -(define-mach - (name tomcat) - (comment "Tomcat -- early version of fr500") - (cpu frvbf) -) -(define-model - (name tomcat) (comment "Tomcat model") (attrs) - (mach tomcat) - - (pipeline all "" () ((fetch) (decode) (execute) (writeback))) - - ; `state' is a list of variables for recording model state - ; (state) - - (unit u-exec "Execution Unit" () - 1 1 ; issue done - () ; state - () ; inputs - () ; outputs - () ; profile action (default) - ) ) -; FR400 machine +; 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 @@ -701,7 +1501,7 @@ ((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 @@ -723,7 +1523,7 @@ ((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 @@ -766,7 +1566,7 @@ ((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 @@ -788,7 +1588,7 @@ ((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 @@ -810,7 +1610,14 @@ ((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 @@ -818,7 +1625,7 @@ ((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 @@ -961,16 +1768,18 @@ ; 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 IALL - FM0 FM1 FM01 FMALL FMLOW + 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 ) @@ -990,6 +1799,20 @@ 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) @@ -1005,6 +1828,21 @@ 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) @@ -1040,6 +1878,13 @@ (name PRESERVE-OVF) (comment "Preserve value of MSR.OVF") ) +; "Audio" instruction provided by the fr405 but not the original fr400 core. +(define-attr + (for insn) + (type boolean) + (name AUDIO) + (comment "Audio instruction added with FR405") +) ; null attribute -- used as a place holder for where an attribue is required. (define-attr (for insn) @@ -1195,6 +2040,13 @@ 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) @@ -1225,8 +2077,27 @@ (dnf f-misc-null-10 "null field" (RESERVED) 16 5) (dnf f-misc-null-11 "null field" (RESERVED) 5 1) +(dnf f-LRA-null "null field" (RESERVED) 2 3) +(dnf f-TLBPR-null "null field" (RESERVED) 30 2) + (dnf f-LI-off "null field" (RESERVED) 25 1) (dnf f-LI-on "null field" (RESERVED) 25 1) + +; Relocation annotations. +(dsh h-reloc-ann "relocation annotation" () (register BI)) +(dnf f-reloc-ann "relocation annotation" () 0 0) + +(define-pmacro (dann xname xcomment xmode xparse xprint) + (define-operand + (name xname) + (comment xcomment) + (type h-reloc-ann) + (index f-reloc-ann) + (mode xmode) + (handlers (parse xparse) (print xprint)) + ) + ) + ; Enums. @@ -1610,7 +2481,7 @@ (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) @@ -1683,6 +2554,8 @@ (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) @@ -1917,7 +2790,11 @@ (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) @@ -1932,12 +2809,21 @@ (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) ) ) @@ -1955,6 +2841,8 @@ (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)) @@ -2063,6 +2951,31 @@ (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) ; @@ -2188,6 +3101,19 @@ ) ) +; 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) @@ -2195,7 +3121,7 @@ (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) @@ -2206,7 +3132,7 @@ (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) @@ -2217,9 +3143,9 @@ (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) @@ -2256,7 +3182,13 @@ (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) @@ -2371,6 +3303,16 @@ (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) @@ -2416,6 +3358,9 @@ (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)) @@ -2506,12 +3451,13 @@ (define-pmacro (int-logic-r-r name operation op ope comment) (dni name (comment) - ((UNIT IALL) (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))) ) ) @@ -2523,66 +3469,67 @@ (dni not ("not") - ((UNIT IALL) (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 @@ -2590,27 +3537,81 @@ (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 IALL) (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))) ) ) @@ -2618,6 +3619,26 @@ (int-shift-r-r srl OP_01 OPE2_0A "shift right logical reg/reg") (int-shift-r-r sra OP_01 OPE2_0C "shift right arith reg/reg") +(dni slass + "shift left arith reg/reg with saturation" + ((UNIT IALL) (MACH fr400,fr450) + (FR400-MAJOR I-1) (FR450-MAJOR I-1) AUDIO) + "slass$pack $GRi,$GRj,$GRk" + (+ pack GRk OP_46 GRi OPE1_02 GRj) + (set GRk (c-call SI "@cpu@_shift_left_arith_saturate" GRi GRj)) + () +) + +(dni scutss + "Integer accumulator cut with saturation" + ((UNIT I0) (MACH fr400,fr450) + (FR400-MAJOR I-1) (FR450-MAJOR I-1) AUDIO) + "scutss$pack $GRj,$GRk" + (+ pack GRk OP_46 (rs-null) OPE1_04 GRj) + (set GRk (c-call SI "@cpu@_iacc_cut" (reg h-iacc0 0) GRj)) + () +) + (define-pmacro (scan-semantics arg1 arg2 targ) (sequence ((WI tmp1) (WI tmp2)) (set tmp1 arg1) @@ -2627,12 +3648,13 @@ (dni scan "scan" - ((UNIT SCAN) (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 @@ -2640,13 +3662,14 @@ (define-pmacro (conditional-int-logic name operation op ope comment) (dni name (comment) - ((UNIT IALL) (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))) ) ) @@ -2658,29 +3681,32 @@ (dni cnot "conditional not" - ((UNIT IALL) (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)) @@ -2688,13 +3714,14 @@ (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)) @@ -2702,20 +3729,21 @@ (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 IALL) (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))) ) ) @@ -2725,13 +3753,14 @@ (dni cscan "conditional scan" - ((UNIT SCAN) (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 @@ -2752,12 +3781,13 @@ (define-pmacro (int-arith-cc-r-r name operation op ope comment) (dni name (comment) - ((UNIT IALL) (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))) ) ) @@ -2774,12 +3804,13 @@ (define-pmacro (int-logic-cc-r-r name op ope comment) (dni (.sym name cc) (comment) - ((UNIT IALL) (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))) ) ) @@ -2801,12 +3832,13 @@ (define-pmacro (int-shift-cc-r-r name l-r op ope comment) (dni (.sym name cc) (comment) - ((UNIT IALL) (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))) ) ) @@ -2827,12 +3859,13 @@ (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))) ) ) @@ -2845,14 +3878,15 @@ (define-pmacro (conditional-int-arith-cc name operation op ope comment) (dni name (comment) - ((UNIT IALL) (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))) ) ) @@ -2861,27 +3895,29 @@ (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 IALL) (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))) ) ) @@ -2892,14 +3928,15 @@ (define-pmacro (conditional-int-shift-cc name l-r op ope comment) (dni (.sym c name cc) (comment) - ((UNIT IALL) (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))) ) ) @@ -2912,12 +3949,13 @@ (define-pmacro (int-arith-x-r-r name operation op ope comment) (dni name (comment) - ((UNIT IALL) (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))) ) ) @@ -2927,7 +3965,8 @@ (define-pmacro (int-arith-x-cc-r-r name operation op ope comment) (dni name (comment) - ((UNIT IALL) (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)) @@ -2938,25 +3977,53 @@ (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-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") +(int-arith-ss-r-r addss add OP_46 OPE1_00 "add reg/reg, with saturation") +(int-arith-ss-r-r subss sub OP_46 OPE1_01 "sub reg/reg, with saturation") ; Format: INT, Logic, Shift r-simm ; (define-pmacro (int-logic-r-simm name operation op comment) (dni name (comment) - ((UNIT IALL) (FR500-MAJOR I-1) (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))) ) ) @@ -2968,67 +4035,68 @@ (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))) ) ) @@ -3038,12 +4106,13 @@ (define-pmacro (int-shift-r-simm name op comment) (dni (.sym name i) (comment) - ((UNIT IALL) (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))) ) ) @@ -3053,12 +4122,13 @@ (dni scani "scan immediate" - ((UNIT SCAN) (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 @@ -3066,7 +4136,8 @@ (define-pmacro (int-arith-cc-r-simm name operation op comment) (dni name (comment) - ((UNIT IALL) (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)) @@ -3079,8 +4150,8 @@ (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))) ) ) @@ -3090,15 +4161,16 @@ (define-pmacro (int-logic-cc-r-simm name op comment) (dni (.sym name icc) (comment) - ((UNIT IALL) (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))) ) ) @@ -3109,12 +4181,13 @@ (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))) ) ) @@ -3124,7 +4197,8 @@ (define-pmacro (int-shift-cc-r-simm name l-r op comment) (dni (.sym name icc) (comment) - ((UNIT IALL) (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)) @@ -3135,8 +4209,8 @@ (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))) ) ) @@ -3147,12 +4221,13 @@ (define-pmacro (int-arith-x-r-simm name operation op comment) (dni name (comment) - ((UNIT IALL) (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))) ) ) @@ -3162,7 +4237,8 @@ (define-pmacro (int-arith-x-cc-r-simm name operation op comment) (dni name (comment) - ((UNIT IALL) (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)) @@ -3173,8 +4249,8 @@ (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))) ) ) @@ -3185,7 +4261,8 @@ (dni cmpb "Compare bytes" - ((UNIT IALL) (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)) @@ -3194,12 +4271,14 @@ (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 IALL) (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)) @@ -3212,68 +4291,76 @@ (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 IALL) (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 IALL) (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 IALL) (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))) ) ) @@ -3316,15 +4403,15 @@ (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))) ) ) @@ -3337,15 +4424,15 @@ (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))) ) ) @@ -3364,11 +4451,12 @@ ) (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)) @@ -3376,22 +4464,26 @@ ) ) +(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)) @@ -3405,9 +4497,9 @@ ) (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 ; @@ -3471,12 +4563,13 @@ (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))) ) ) @@ -3489,12 +4582,12 @@ (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))) ) ) @@ -3516,12 +4609,13 @@ (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))) ) ) @@ -3545,13 +4639,13 @@ (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))) ) ) @@ -3571,12 +4665,13 @@ (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))) ) ) @@ -3585,13 +4680,13 @@ (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))) ) ) @@ -3609,7 +4704,8 @@ 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) @@ -3618,7 +4714,8 @@ ) (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") @@ -3626,13 +4723,13 @@ (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))) ) ) @@ -3716,7 +4813,8 @@ (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) @@ -3726,37 +4824,45 @@ ) (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 @@ -3768,28 +4874,29 @@ ) (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)) @@ -3799,18 +4906,20 @@ ) (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)) @@ -3824,9 +4933,9 @@ ) (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 @@ -3865,7 +4974,8 @@ (define-pmacro (store-r-r name mode op ope reg attr profile comment) (dni name (comment) - ((UNIT STORE) (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) @@ -3875,57 +4985,33 @@ ) (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 STORE) (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) @@ -3938,9 +5024,10 @@ (define-pmacro (store-double-r-r name mode op ope regtype attr profile comment) (dni name (comment) - ((UNIT STORE) (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 @@ -3948,35 +5035,17 @@ ) (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 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-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) @@ -4006,29 +5075,11 @@ (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 STORE) (FR500-MAJOR I-3) (MACH frv) attr) - (.str name "$pack $" regtype "k,@($GRi,$GRj)") - (+ pack (.sym regtype k) op GRi ope GRj) - (sequence ((WI address)) - (store-quad-semantics regtype address GRj) - (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 STORE) (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)) @@ -4041,23 +5092,29 @@ ) (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) () @@ -4067,9 +5124,10 @@ name mode op ope regtype attr profile comment) (dni name (comment) - ((UNIT STORE) (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)) @@ -4078,10 +5136,12 @@ ) (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") @@ -4111,7 +5171,8 @@ (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)) @@ -4122,36 +5183,45 @@ ) (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)) @@ -4162,10 +5232,12 @@ ) (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 @@ -4182,7 +5254,8 @@ (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)) @@ -4193,8 +5266,8 @@ 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))) ) ) @@ -4207,7 +5280,8 @@ (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)) @@ -4217,8 +5291,8 @@ (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))) ) ) @@ -4229,7 +5303,8 @@ (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)) @@ -4237,21 +5312,22 @@ (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 @@ -4270,7 +5346,8 @@ (define-pmacro (conditional-store name mode op ope regtype profile comment) (dni name (comment) - ((UNIT STORE) (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)) @@ -4281,32 +5358,39 @@ ) (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 STORE) (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))) @@ -4315,10 +5399,12 @@ ) (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 @@ -4336,7 +5422,8 @@ name mode op ope regtype attr profile comment) (dni name (comment) - ((UNIT STORE) (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)) @@ -4350,32 +5437,39 @@ ) (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 STORE) (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) @@ -4385,17 +5479,19 @@ ) (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 STORE) (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) @@ -4405,31 +5501,38 @@ ) (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 STORE) (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 @@ -4437,10 +5540,12 @@ ) (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) @@ -4464,39 +5569,43 @@ (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 @@ -4513,13 +5622,17 @@ (register-transfer movgf OP_03 OPE1_15 GRj FRintk I0 - ((FR500-MAJOR I-4) (FR400-MAJOR I-4) FR-ACCESS) - ((fr400 (unit u-gr2fr)) (fr500 (unit u-gr2fr))) + ((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) - ((fr400 (unit u-fr2gr)) (fr500 (unit u-fr2gr))) + ((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))) @@ -4537,13 +5650,14 @@ (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) @@ -4555,13 +5669,14 @@ (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 @@ -4617,47 +5732,54 @@ ) (conditional-register-transfer cmovgf OP_69 OPE4_0 GRj FRintk I0 - ((FR500-MAJOR I-4) (FR400-MAJOR I-4)) - ((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)) - ((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))) ) ) @@ -4703,38 +5825,41 @@ (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") @@ -4755,37 +5880,40 @@ (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") @@ -4817,51 +5945,55 @@ (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") @@ -4881,24 +6013,26 @@ (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") @@ -4919,39 +6053,42 @@ (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") @@ -4971,26 +6108,28 @@ (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") @@ -5019,60 +6158,68 @@ (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 @@ -5123,33 +6270,36 @@ (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") @@ -5169,22 +6319,24 @@ (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") @@ -5205,33 +6357,36 @@ (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") @@ -5251,22 +6406,24 @@ (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") @@ -5286,7 +6443,8 @@ (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 () @@ -5314,7 +6472,8 @@ (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") @@ -5324,7 +6483,8 @@ (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)) @@ -5357,7 +6517,8 @@ (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)) @@ -5371,33 +6532,36 @@ (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") @@ -5418,33 +6582,36 @@ (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") @@ -5465,42 +6632,45 @@ (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") @@ -5521,42 +6691,45 @@ (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") @@ -5576,30 +6749,33 @@ (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) @@ -5608,16 +6784,19 @@ ) (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) @@ -5628,31 +6807,35 @@ ) (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) @@ -5686,7 +6869,8 @@ (define-pmacro (cache-preload name cache pipe attrs op ope profile comment) (dni name (comment) - (.splice (UNIT pipe) (FR500-MAJOR C-2) (FR400-MAJOR C-2) (.unsplice attrs)) + (.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) @@ -5694,17 +6878,20 @@ ) ) -(cache-preload icpl insn C () 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 DCPL () 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) @@ -5713,16 +6900,19 @@ ) (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 @@ -5731,12 +6921,38 @@ ) (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) @@ -5759,7 +6975,7 @@ (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)) (sequence () @@ -5771,16 +6987,16 @@ ) (clear-ne-flag-r clrgr OP_0A OPE1_00 GR 0 NA - ((fr500 (unit u-clrgr))) + ((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))) + ((fr500 (unit u-clrfr)) (fr550 (unit u-clrfr))) "Clear FR NE flag") (define-pmacro (clear-ne-flag-all name op ope is_float attr profile comment) (dni name (comment) - ((UNIT I01) (FR500-MAJOR I-6) (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) @@ -5789,10 +7005,10 @@ ) (clear-ne-flag-all clrga OP_0A OPE1_01 0 NA - ((fr500 (unit u-clrgr))) + ((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))) + ((fr500 (unit u-clrfr)) (fr550 (unit u-clrfr))) "Clear FR NE flag ALL") (define-pmacro (commit-semantics target_index is_float) @@ -5802,11 +7018,11 @@ (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))) + ((fr500 (unit u-commit)) (fr550 (unit u-commit))) ) ) @@ -5816,11 +7032,11 @@ (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))) + ((fr500 (unit u-commit)) (fr550 (unit u-commit))) ) ) @@ -5834,16 +7050,16 @@ (.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 - ((MACH simple,tomcat,fr500,frv)) + ((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 - ((MACH simple,tomcat,fr500,frv)) + ((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)) @@ -5860,9 +7076,9 @@ (.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))) ) ) @@ -5879,10 +7095,10 @@ (+ 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))) ) ) @@ -5894,12 +7110,12 @@ name op ope conv mode src targ comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -5910,13 +7126,13 @@ name op ope conv mode src targ comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -5924,15 +7140,15 @@ (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) (MACH simple,tomcat,fr500,frv)) + FRj FRk FMALL + ((FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv)) ((fr500 (unit u-fr2fr))) "Move Single Float") (register-transfer fmovd OP_7A OPE1_02 ; TODO -- unit doesn't handle extra register FRdoublej FRdoublek FM01 ((FR500-MAJOR F-1) (MACH frv)) - ((fr500 (unit u-fr2fr))) + ((fr500 (unit u-fr2fr)) (fr550 (unit u-fr2fr))) "Move Double Float") (dni fdmovs @@ -5947,10 +7163,10 @@ ((fr500 (unit u-fr2fr))) ) -(conditional-register-transfer cfmovs OP_6C OPE4_0 FRj FRk FM01 - ((FR500-MAJOR F-1) - (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) @@ -5960,11 +7176,11 @@ (.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 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 @@ -5980,12 +7196,12 @@ (dni cfnegs "Conditional floating point negate, single" - ((UNIT FMALL) (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) @@ -5995,11 +7211,11 @@ (.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 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 @@ -6015,21 +7231,21 @@ (dni cfabss "Conditional floating point absolute value, single" - ((UNIT FMALL) (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 @@ -6067,47 +7283,48 @@ (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 pipe attr operation op ope comment) (dni name (comment) - (.splice (UNIT pipe) (MACH simple,tomcat,fr500,frv) (.unsplice attr)) + (.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 FMALL ((FR500-MAJOR F-2)) add OP_79 OPE1_06 "add single float") -(float-binary-op-s fsubs FMALL ((FR500-MAJOR F-2)) sub OP_79 OPE1_07 "sub single float") -(float-binary-op-s fmuls FM01 ((FR500-MAJOR F-3)) mul OP_79 OPE1_08 "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) @@ -6129,7 +7346,7 @@ (define-pmacro (conditional-float-binary-op name pipe attr operation op ope profile comment) (dni name (comment) - (.splice (UNIT pipe) (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) @@ -6139,23 +7356,23 @@ ) ) -(conditional-float-binary-op cfadds FMALL ((FR500-MAJOR F-2)) add OP_6D OPE4_0 - ((fr500 (unit u-float-arith))) +(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)) sub OP_6D OPE4_1 - ((fr500 (unit u-float-arith))) +(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)) mul OP_6E OPE4_0 - ((fr500 (unit u-float-arith))) +(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)) div OP_6E OPE4_1 - ((fr500 (unit u-float-div))) +(conditional-float-binary-op cfdivs FM01 ((FR500-MAJOR F-4) (FR550-MAJOR F-3)) div OP_6E OPE4_1 + ((fr500 (unit u-float-div)) (fr550 (unit u-float-div))) "cond div single") (define-pmacro (ne-float-binary-op name pipe attr operation op ope profile comment) (dni name (comment) - (.splice (UNIT pipe) (MACH simple,tomcat,fr500,frv) + (.splice (UNIT pipe) (MACH simple,tomcat,fr500,fr550,frv) (.unsplice attr)) (.str name "$pack $FRi,$FRj,$FRk") (+ pack FRk op FRi ope FRj) @@ -6166,17 +7383,17 @@ ) ) -(ne-float-binary-op nfadds FMALL ((FR500-MAJOR F-2)) add OP_79 OPE1_26 - ((fr500 (unit u-float-arith))) +(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)) sub OP_79 OPE1_27 - ((fr500 (unit u-float-arith))) +(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)) mul OP_79 OPE1_28 - ((fr500 (unit u-float-arith))) +(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)) div OP_79 OPE1_29 - ((fr500 (unit u-float-div))) +(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) @@ -6196,11 +7413,11 @@ (dni fcmps "compare single float" - ((UNIT FMALL) (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 @@ -6214,24 +7431,24 @@ (dni cfcmps "Conditional compare single, float" - ((UNIT FMALL) (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 FMALL) (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) @@ -6325,11 +7542,11 @@ 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))) ) ) @@ -6395,12 +7612,12 @@ (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))) ) ) @@ -6409,11 +7626,15 @@ (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 @@ -6434,7 +7655,7 @@ (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 () @@ -6443,7 +7664,7 @@ (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))) ) ) @@ -6460,30 +7681,30 @@ (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 ((FR500-MAJOR F-6) (MACH simple,tomcat,fr500,frv)) add add OP_79 OPE1_16 "dual add, single") -(float-dual-arith fdsubs ((FR500-MAJOR F-6) (MACH simple,tomcat,fr500,frv)) sub sub OP_79 OPE1_17 "dual sub, single") -(float-dual-arith fdmuls ((FR500-MAJOR F-7) (MACH simple,tomcat,fr500,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) (MACH simple,tomcat,fr500,frv)) add sub OP_79 OPE1_1E "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 () @@ -6491,7 +7712,7 @@ (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 attr oper1 oper2 op ope comment) @@ -6506,15 +7727,15 @@ (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 ((FR500-MAJOR F-6) (MACH simple,tomcat,fr500,frv)) add add OP_79 OPE1_36 "ne dual add, single") -(ne-float-dual-arith nfdsubs ((FR500-MAJOR F-6) (MACH simple,tomcat,fr500,frv)) sub sub OP_79 OPE1_37 "ne dual sub, single") -(ne-float-dual-arith nfdmuls ((FR500-MAJOR F-7) (MACH simple,tomcat,fr500,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) (MACH simple,tomcat,fr500,frv)) add sub OP_79 OPE1_3E "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" @@ -6537,25 +7758,30 @@ (dni mhsetlos "Media set lower signed 12 bits" - ((UNIT FMALL) (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 FMALL) (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 FMALL) (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 () @@ -6563,7 +7789,8 @@ (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) @@ -6577,11 +7804,13 @@ (define-pmacro (media-set-5 name hilo op ope comment) (dni name (comment) - ((UNIT FMALL) (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))))) ) ) @@ -6590,7 +7819,8 @@ (dni mhdseth "Media dual set halfword upper 5 bits" - ((UNIT FMALL) (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 () @@ -6598,18 +7828,20 @@ (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 FMALL) (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))) ) ) @@ -6620,13 +7852,14 @@ (define-pmacro (conditional-media-logic name operation op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -6636,34 +7869,37 @@ (dni mnot ("mnot") - ((UNIT FMALL) (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 FMALL) (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))) ) ) @@ -6673,47 +7909,50 @@ (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 ; @@ -6723,7 +7962,8 @@ (dni mdcutssi "Media dual cut with signed saturation" - ((UNIT FMLOW) (MACH fr400) (FR400-MAJOR M-2)) + ((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) @@ -6736,7 +7976,10 @@ (c-call SI "@cpu@_media_cut_ss" (nextreg h-acc40S ACC40Si 1) s6))))) ((fr400 (unit u-media-4-acc-dual - (out FRintk FRintkeven)))) + (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 @@ -6751,18 +7994,20 @@ (dni maveh "Media dual average" - ((UNIT FMALL) (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 () @@ -6778,19 +8023,23 @@ ) (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 FMLOW) (MACH fr400) (FR400-MAJOR M-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) @@ -6803,15 +8052,20 @@ (and s6 #x1f))))) ((fr400 (unit u-media-3-quad (in FRinti FRintieven) - (out FRintk FRintkeven)))) + (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 FMLOW) (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)) @@ -6826,12 +8080,14 @@ (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 FMLOW) (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)) @@ -6844,7 +8100,8 @@ (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) @@ -6857,20 +8114,22 @@ (dni msaths "Media dual saturation signed" - ((UNIT FMALL) (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 FMALL) (MACH fr400) (FR400-MAJOR M-1)) + ((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) @@ -6889,7 +8148,12 @@ ((fr400 (unit u-media-1-quad (in FRinti FRintieven) (in FRintj FRintjeven) - (out FRintk FRintkeven)))) + (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) @@ -6900,21 +8164,23 @@ (dni msathu "Media dual saturation unsigned" - ((UNIT FMALL) (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 FMALL) (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) @@ -6925,8 +8191,8 @@ (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))) ) ) @@ -6958,7 +8224,8 @@ (dni mabshs "Media dual absolute value, halfword" - ((UNIT FMALL) (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)) @@ -6966,17 +8233,28 @@ (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)) ) @@ -6994,12 +8272,13 @@ (define-pmacro (media-dual-arith-sat name operation mode max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -7013,13 +8292,14 @@ name operation mode max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -7059,7 +8339,8 @@ (define-pmacro (media-quad-arith-sat name operation mode max min op ope comment) (dni name (comment) - ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-2)) + ((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) @@ -7067,10 +8348,14 @@ (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)))) + (out FRintk FRintkeven))) (fr550 (unit u-media-quad))) ) ) @@ -7084,7 +8369,8 @@ name operation mode max min op ope comment) (dni name (comment) - ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-2) CONDITIONAL) + ((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)) @@ -7093,10 +8379,14 @@ (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)))) + (out FRintk FRintkeven))) (fr550 (unit u-media-quad))) ) ) @@ -7106,18 +8396,109 @@ (conditional-media-quad-arith-sat cmqsubhss sub HI 32767 -32768 OP_73 OPE4_2 "Conditional Media quad sub signed with saturation") (conditional-media-quad-arith-sat cmqsubhus sub UHI 65535 0 OP_73 OPE4_3 "Conditional Media quad sub unsigned with saturation") +;; Return A if |A| > |B| and B is positive. Return -A if |A| > |B| and +;; B is negative, saturating 0x8000 as 0x7fff. Return 0 otherwise. +(define-pmacro (media-low-clear-semantics a b) + (cond HI + ((le UHI (abs a) (abs b)) 0) + ((le HI 0 b) a) + ((eq HI a -32768) 32767) + (else (neg a)))) + +;; Return A if -|B| < A < |B|. Return -B if A <= -|B|, saturating 0x8000 +;; as 0x7fff. Return B if A >= |B|. +(define-pmacro (media-scope-limit-semantics a b) + (cond HI + ((andif (gt HI b -32768) + (ge HI a (abs b))) b) + ((gt HI a (neg (abs b))) a) + ((eq HI b -32768) 32767) + (else (neg b)))) + +(define-pmacro (media-quad-limit name operation op ope comment) + (dni name + comment + ((UNIT FM0) (MACH fr450) (FR450-MAJOR M-2)) + (.str name "$pack $FRintieven,$FRintjeven,$FRintkeven") + (+ pack FRintkeven op FRintieven ope FRintjeven) + (if (orif (register-unaligned FRintieven 2) + (orif (register-unaligned FRintjeven 2) + (register-unaligned FRintkeven 2))) + (c-call VOID "@cpu@_media_register_not_aligned") + (sequence ((HI a1) (HI a2) (HI a3) (HI a4) + (HI b1) (HI b2) (HI b3) (HI b4)) + ; hack to get FRintkeven referenced as a target + ; for profiling + (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven)) + (extract-hilo FRintieven 0 FRintjeven 0 a1 a2 b1 b2) + (extract-hilo FRintieven 1 FRintjeven 1 a3 a4 b3 b4) + (set (halfword hi FRintkeven 0) (operation a1 b1)) + (set (halfword lo FRintkeven 0) (operation a2 b2)) + (set (halfword hi FRintkeven 1) (operation a3 b3)) + (set (halfword lo FRintkeven 1) (operation a4 b4)))) + ((fr450 (unit u-media-1-quad + (in FRinti FRintieven) + (in FRintj FRintjeven) + (out FRintk FRintkeven)))) + ) +) + +(media-quad-limit mqlclrhs media-low-clear-semantics OP_78 OPE1_10 + "Media quad low clear") +(media-quad-limit mqlmths media-scope-limit-semantics OP_78 OPE1_14 + "Media quad scope limitation") + +(define-pmacro (media-quad-shift name operation op ope comment) + (dni name + (comment) + ((UNIT FM0) (MACH fr450) (FR450-MAJOR M-2)) + (.str name "$pack $FRintieven,$u6,$FRintkeven") + (+ pack FRintkeven op FRintieven ope u6) + (if (orif (register-unaligned FRintieven 2) + (register-unaligned FRintkeven 2)) + (c-call VOID "@cpu@_media_register_not_aligned") + (sequence () + ; hack to get these referenced for profiling + (set FRintieven (c-raw-call SI "frv_ref_SI" FRintieven)) + (set FRintkeven (c-raw-call SI "frv_ref_SI" FRintkeven)) + (set (halfword hi FRintkeven 0) + (operation HI (halfword hi FRintieven 0) + (and u6 #xf))) + (set (halfword lo FRintkeven 0) + (operation HI (halfword lo FRintieven 0) + (and u6 #xf))) + (set (halfword hi FRintkeven 1) + (operation HI (halfword hi FRintieven 1) + (and u6 #xf))) + (set (halfword lo FRintkeven 1) + (operation HI (halfword lo FRintieven 1) + (and u6 #xf))))) + ((fr450 (unit u-media-3-quad + (in FRinti FRintieven) + (in FRintj FRintieven) + (out FRintk FRintkeven)))) + ) +) + +(media-quad-shift mqsllhi sll OP_78 OPE1_11 "Media quad left shift") +(media-quad-shift mqsrahi sra OP_78 OPE1_13 "Media quad right shift") + (define-pmacro (media-acc-arith-sat name operation mode max min op ope comment) (dni name (comment) - ((UNIT FMALL) (MACH fr400) (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))) ) ) @@ -7130,25 +8511,29 @@ comment) (dni name (comment) - ((UNIT MDUALACC) (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))) ) ) @@ -7159,70 +8544,79 @@ (dni masaccs "Media add and subtract signed accumulator with saturation" - ((UNIT FMALL) (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 MDUALACC) (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) @@ -7230,26 +8624,28 @@ ) (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 FMALL) (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))) ) ) @@ -7263,13 +8659,14 @@ name mode conv rhs1 rhs2 op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -7277,40 +8674,45 @@ (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 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)))))) + (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk)) + (if (register-unaligned ACC40Sk 4) + (c-call VOID "@cpu@_media_acc_not_aligned") + (if (orif (register-unaligned FRintieven 2) + (register-unaligned FRintjeven 2)) + (c-call VOID "@cpu@_media_register_not_aligned") + (if cond + (sequence ((mode argihi) (mode argilo) + (mode argjhi) (mode argjlo)) + (extract-hilo FRintieven 0 FRintjeven 0 + argihi argilo argjhi argjlo) + (media-multiply-semantics conv argihi rhs1 ACC40Sk) + (media-multiply-semantics conv argilo rhs2 + (nextreg h-acc40S ACC40Sk 1)) + (extract-hilo FRintieven 1 FRintjeven 1 + argihi argilo argjhi argjlo) + (media-multiply-semantics conv argihi rhs1 + (nextreg h-acc40S ACC40Sk 2)) + (media-multiply-semantics conv argilo rhs2 + (nextreg h-acc40S ACC40Sk 3))))))) ) (define-pmacro (media-quad-multiply name mode conv rhs1 rhs2 op ope comment) (dni name (comment) - ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2) PRESERVE-OVF) + ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) + (FR400-MAJOR M-2) (FR450-MAJOR M-4) PRESERVE-OVF) (.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk") (+ pack ACC40Sk op FRintieven ope FRintjeven) (media-quad-multiply-semantics 1 mode conv rhs1 rhs2) ((fr400 (unit u-media-2-quad (in FRinti FRintieven) (in FRintj FRintjeven))) + (fr450 (unit u-media-2-quad + (in FRinti FRintieven) + (in FRintj FRintjeven))) (fr500 (unit u-media-quad-mul (in FRinti FRintieven) - (in FRintj FRintjeven)))) + (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad))) ) ) @@ -7324,7 +8726,8 @@ name mode conv rhs1 rhs2 op ope comment) (dni name (comment) - ((UNIT FMALL) (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 $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond") (+ pack ACC40Sk op FRintieven CCi cond ope FRintjeven) @@ -7332,9 +8735,12 @@ ((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)))) + (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad))) ) ) @@ -7350,30 +8756,32 @@ (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 FMALL) (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))) ) ) @@ -7401,13 +8809,14 @@ name mode conv addop rhw res max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -7423,47 +8832,52 @@ (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 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)))))) + (if (c-call SI "@cpu@_check_acc_range" (index-of res)) + (if (register-unaligned res 4) + (c-call VOID "@cpu@_media_acc_not_aligned") + (if (orif (register-unaligned FRintieven 2) + (register-unaligned FRintjeven 2)) + (c-call VOID "@cpu@_media_register_not_aligned") + (if cond + (sequence ((mode argihi) (mode argilo) + (mode argjhi) (mode argjlo)) + (extract-hilo FRintieven 0 FRintjeven 0 + argihi argilo argjhi argjlo) + (media-multiply-acc-semantics conv argihi addop argjhi + res + max min (msr-sie-acci)) + (media-multiply-acc-semantics conv argilo addop argjlo + (nextreg rhw res 1) + max min (msr-sie-acci-1)) + (extract-hilo FRintieven 1 FRintjeven 1 + argihi argilo argjhi argjlo) + (media-multiply-acc-semantics conv argihi addop argjhi + (nextreg rhw res 2) + max min (msr-sie-acci-2)) + (media-multiply-acc-semantics conv argilo addop argjlo + (nextreg rhw res 3) + max min + (msr-sie-acci-3))))))) ) (define-pmacro (media-quad-multiply-acc name mode conv addop rhw res max min op ope comment) (dni name (comment) - ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2)) + ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) + (FR400-MAJOR M-2) (FR450-MAJOR M-4)) (.str name "$pack $FRintieven,$FRintjeven,$" res) (+ pack res op FRintieven ope FRintjeven) (media-quad-multiply-acc-semantics 1 mode conv addop rhw res max min) ((fr400 (unit u-media-2-quad (in FRinti FRintieven) (in FRintj FRintjeven))) + (fr450 (unit u-media-2-quad + (in FRinti FRintieven) + (in FRintj FRintjeven))) (fr500 (unit u-media-quad-mul (in FRinti FRintieven) - (in FRintj FRintjeven)))) + (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad))) ) ) @@ -7481,7 +8895,8 @@ name mode conv addop rhw res max min op ope comment) (dni name (comment) - ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2) CONDITIONAL) + ((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)) @@ -7489,9 +8904,12 @@ ((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)))) + (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad))) ) ) @@ -7507,45 +8925,51 @@ (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 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)))))) + (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 MDUALACC) (MACH fr400) (FR400-MAJOR M-2)) + ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4) + (FR400-MAJOR M-2) (FR450-MAJOR M-4)) (.str name "$pack $FRintieven,$FRintjeven,$" res) (+ pack res op FRintieven ope FRintjeven) (media-quad-multiply-cross-acc-semantics 1 mode conv addop rhw res max min) ((fr400 (unit u-media-2-quad (in FRinti FRintieven) - (in FRintj FRintjeven)))) + (in FRintj FRintjeven))) + (fr450 (unit u-media-2-quad + (in FRinti FRintieven) + (in FRintj FRintjeven))) + (fr550 (unit u-media-4-quad))) ) ) @@ -7556,45 +8980,51 @@ (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 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)))))) + (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 MDUALACC) (MACH fr400) (FR400-MAJOR M-2)) + ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4) + (FR400-MAJOR M-2) (FR450-MAJOR M-4)) (.str name "$pack $FRintieven,$FRintjeven,$" res) (+ pack res op FRintieven ope FRintjeven) (media-quad-cross-multiply-cross-acc-semantics 1 mode conv addop rhw res max min) ((fr400 (unit u-media-2-quad (in FRinti FRintieven) - (in FRintj FRintjeven)))) + (in FRintj FRintjeven))) + (fr450 (unit u-media-2-quad + (in FRinti FRintieven) + (in FRintj FRintjeven))) + (fr550 (unit u-media-4-quad))) ) ) @@ -7605,45 +9035,51 @@ (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 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)))))) + (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 MDUALACC) (MACH fr400) (FR400-MAJOR M-2)) + ((UNIT FMALL) (MACH fr400,fr450,fr550) (FR550-MAJOR M-4) + (FR400-MAJOR M-2) (FR450-MAJOR M-4)) (.str name "$pack $FRintieven,$FRintjeven,$" res) (+ pack res op FRintieven ope FRintjeven) (media-quad-cross-multiply-acc-semantics 1 mode conv addop rhw res max min) ((fr400 (unit u-media-2-quad (in FRinti FRintieven) - (in FRintj FRintjeven)))) + (in FRintj FRintjeven))) + (fr450 (unit u-media-2-quad + (in FRinti FRintieven) + (in FRintj FRintjeven))) + (fr550 (unit u-media-4-quad))) ) ) @@ -7671,29 +9107,32 @@ ) (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 FMALL) (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))) ) ) @@ -7701,12 +9140,13 @@ name mode conv rhs1 rhs2 max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -7734,13 +9174,14 @@ name mode conv rhs1 rhs2 max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -7748,13 +9189,14 @@ name mode conv rhs1 rhs2 max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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))) ) ) @@ -7782,32 +9224,37 @@ name mode conv rhs1 rhs2 max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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)) (.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk") (+ pack ACC40Sk op FRintieven ope FRintjeven) - (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))))) + (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)))) + (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad))) ) ) @@ -7815,32 +9262,37 @@ name mode conv rhs1 rhs2 max min op ope comment) (dni name (comment) - ((UNIT FMALL) (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)) (.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk") (+ pack ACC40Sk op FRintieven ope FRintjeven) - (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))))) + (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)))) + (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad))) ) ) @@ -7882,22 +9334,24 @@ (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) @@ -7918,41 +9372,51 @@ (dni mexpdhd "Media expand halfword to double" - ((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)) "mexpdhd$pack $FRinti,$u6,$FRintkeven" (+ pack FRintkeven OP_7B FRinti OPE1_33 u6) (media-expand-halfword-to-double-semantics 1) ((fr400 (unit u-media-dual-expand - (out FRintk FRintkeven))) + (out FRintk FRintkeven))) + (fr450 (unit u-media-dual-expand + (out FRintk FRintkeven))) (fr500 (unit u-media-dual-expand - (out FRintk FRintkeven)))) + (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) + ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) + (FR400-MAJOR M-2) (FR450-MAJOR M-2) CONDITIONAL) "cmexpdhd$pack $FRinti,$u6,$FRintkeven,$CCi,$cond" (+ pack FRintkeven OP_76 FRinti CCi cond OPE4_3 u6) (media-expand-halfword-to-double-semantics (eq CCi (or cond 2))) ((fr400 (unit u-media-dual-expand (out FRintk FRintkeven))) + (fr450 (unit u-media-dual-expand + (out FRintk FRintkeven))) (fr500 (unit u-media-dual-expand - (out FRintk FRintkeven)))) + (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)) + ((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) @@ -7970,10 +9434,15 @@ (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)))) + (out FRintk FRintkeven))) + (fr550 (unit u-media-quad))) ) (define-pmacro (media-unpack src soff targ toff) @@ -7986,7 +9455,8 @@ (dni munpackh "Media halfword unpack" - ((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)) "munpackh$pack $FRinti,$FRintkeven" (+ pack FRintkeven OP_7B FRinti OPE1_35 (FRj-null)) (if (register-unaligned FRintkeven 2) @@ -7998,8 +9468,11 @@ (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)))) + (out FRintk FRintkeven))) + (fr550 (unit u-media-dual-expand))) ) (dni mdunpackh @@ -8035,7 +9508,8 @@ (dni mbtoh "Media convert byte to halfword" - ((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)) "mbtoh$pack $FRintj,$FRintkeven" (+ pack FRintkeven OP_7B (FRi-null) OPE1_38 FRintj) (sequence () @@ -8045,13 +9519,17 @@ (mbtoh-semantics 1)) ((fr400 (unit u-media-dual-expand (out FRintk FRintkeven))) + (fr450 (unit u-media-dual-expand + (out FRintk FRintkeven))) (fr500 (unit u-media-dual-btoh - (out FRintk FRintkeven)))) + (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) + ((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 () @@ -8061,8 +9539,12 @@ (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)))) + (out FRintk FRintkeven))) + (fr550 (unit u-media-dual-expand + (in FRinti FRintj)))) ) (define-pmacro (mhtob-semantics cond) @@ -8078,7 +9560,8 @@ (dni mhtob "Media convert halfword to byte" - ((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)) "mhtob$pack $FRintjeven,$FRintk" (+ pack FRintk OP_7B (FRi-null) OPE1_39 FRintjeven) (sequence () @@ -8088,13 +9571,18 @@ (mhtob-semantics 1)) ((fr400 (unit u-media-dual-htob (in FRintj FRintjeven))) + (fr450 (unit u-media-dual-htob + (in FRintj FRintjeven))) (fr500 (unit u-media-dual-htob - (in FRintj FRintjeven)))) + (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) + ((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 () @@ -8104,8 +9592,12 @@ (mhtob-semantics (eq CCi (or cond 2)))) ((fr400 (unit u-media-dual-htob (in FRintj FRintjeven))) + (fr450 (unit u-media-dual-htob + (in FRintj FRintjeven))) (fr500 (unit u-media-dual-htob - (in FRintj FRintjeven)))) + (in FRintj FRintjeven))) + (fr550 (unit u-media-3-dual + (in FRinti FRintjeven)))) ) (define-pmacro (mbtohe-semantics cond) @@ -8152,7 +9644,8 @@ ; Media NOP ; A special case of mclracc (dni mnop "Media nop" - ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1)) + ((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) @@ -8162,67 +9655,73 @@ ; mclracc with #A==0 (dni mclracc-0 "Media clear accumulator(s)" - ((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)) "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)) - (fr500 (unit u-media))) + ((fr400 (unit u-media-4)) (fr450 (unit u-media-4)) + (fr500 (unit u-media)) (fr550 (unit u-media-3-mclracc))) ) ; mclracc with #A==1 (dni mclracc-1 "Media clear accumulator(s)" - ((UNIT MCLRACC-1) (FR500-MAJOR M-6) (FR400-MAJOR M-2)) + ((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)) - (fr500 (unit u-media))) + ((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)) (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)) - (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-wtacc (in ACC40Sk ACCGk)))) ) (define-pmacro (media-cop num op) @@ -8245,7 +9744,7 @@ ; On the other hand spending a little time in the decoder is often worth it. ; (dnmi nop "nop" - ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1)) + ((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)) ) @@ -8253,7 +9752,7 @@ ; Floating point NOP (dni fnop "Floating point nop" - ((UNIT FMALL) (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) @@ -8262,37 +9761,43 @@ ; 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 IALL) (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 IALL) (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 IALL) (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 IALL) (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 IALL) (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) )