This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[patch] Add fr550 support for frv.cpu and frv.opc
- From: Dave Brolley <brolley at redhat dot com>
- To: cgen at sources dot redhat dot com
- Cc: binutils at sources dot redhat dot com, gdb-patches at sources dot redhat dot com
- Date: Mon, 06 Oct 2003 17:14:00 -0400
- Subject: [patch] Add fr550 support for frv.cpu and frv.opc
- Organization: Red Hat Canada, Ltd
The attached patch adds fr550 support to the CGEN implementation of the
frv architecture.
ok to commit?
Dave
2003-10-06 Dave Brolley <brolley@redhat.com>
* gen-all-doc: Add fr550.
2003-10-06 Dave Brolley <brolley@redhat.com>
* frv.cpu, frv.opc: Add support for fr550.
Index: cgen/gen-all-doc
===================================================================
RCS file: /cvs/src/src/cgen/gen-all-doc,v
retrieving revision 1.4
diff -c -p -r1.4 gen-all-doc
*** cgen/gen-all-doc 8 Jul 2003 16:23:56 -0000 1.4
--- cgen/gen-all-doc 6 Oct 2003 20:12:38 -0000
*************** export cgendir=`pwd`
*** 49,54 ****
--- 49,57 ----
make html ARCH=$a MACHS="fr500" INSN_FILE_NAME=frv-2-insn.html
mv frv.html frv-2.html
mv frv-insn.html frv-2-insn.html
+ make html ARCH=$a MACHS="fr550" INSN_FILE_NAME=frv-3-insn.html
+ mv frv.html frv-3.html
+ mv frv-insn.html frv-3-insn.html
;;
*)
make html ARCH=$a
Index: cpu/frv.cpu
===================================================================
RCS file: /cvs/src/src/cpu/frv.cpu,v
retrieving revision 1.13
diff -c -p -r1.13 frv.cpu
*** cpu/frv.cpu 24 Sep 2003 19:04:54 -0000 1.13
--- cpu/frv.cpu 6 Oct 2003 20:12:38 -0000
***************
*** 28,34 ****
(name frv) ; name of cpu architecture
(comment "Fujitsu FRV")
(insn-lsb0? #t)
! (machs frv fr500 fr400 tomcat simple)
(isas frv)
)
--- 28,34 ----
(name frv) ; name of cpu architecture
(comment "Fujitsu FRV")
(insn-lsb0? #t)
! (machs frv fr550 fr500 fr400 tomcat simple)
(isas frv)
)
***************
*** 38,44 ****
; 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.
)
; Cpu family definitions.
--- 38,44 ----
; Initial bitnumbers to decode insns by.
(decode-assist (24 23 22 21 20 19 18))
(liw-insns 1) ; The frv fetches up to 1 insns at a time.
! (parallel-insns 8) ; The frv executes up to 8 insns at a time.
)
; Cpu family definitions.
***************
*** 77,82 ****
--- 77,504 ----
)
)
+ ; 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)
***************
*** 961,968 ****
; 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
B0 B1 B01
C
MULT-DIV ; multiply/division slotted differently on different machines
--- 1383,1390 ----
; Keep the '01' variant immediately after the '1' variant in each unit.
; Keep the 'ALL' variations immediately after the last numbered variant in each unit.
(values NIL
! I0 I1 I01 I2 I3 IALL
! FM0 FM1 FM01 FM2 FM3 FMALL FMLOW
B0 B1 B01
C
MULT-DIV ; multiply/division slotted differently on different machines
***************
*** 1005,1010 ****
--- 1427,1447 ----
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)
***************
*** 1610,1616 ****
(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)
(neear0 352) (neear1 353) (neear2 354) (neear3 355)
(neear4 356) (neear5 357) (neear6 358) (neear7 359)
--- 2047,2053 ----
(hsr56 72) (hsr57 73) (hsr58 74) (hsr59 75)
(hsr60 76) (hsr61 77) (hsr62 78) (hsr63 79)
! (ccr 256) (cccr 263) (lr 272) (lcr 273) (iacc0h 280) (iacc0l 281) (isr 288)
(neear0 352) (neear1 353) (neear2 354) (neear3 355)
(neear4 356) (neear5 357) (neear6 358) (neear7 359)
***************
*** 1955,1960 ****
--- 2392,2399 ----
(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,2068 ****
--- 2502,2532 ----
(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))
+ (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)
;
***************
*** 2506,2517 ****
(define-pmacro (int-logic-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
)
--- 2970,2981 ----
(define-pmacro (int-logic-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 2523,2539 ****
(dni not
("not")
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
(dni sdiv
"signed division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"sdiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_00 GRi (ICCi_1-null) OPE2_0E GRj)
(sequence ()
--- 2987,3003 ----
(dni not
("not")
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-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)) (fr550 (unit u-integer)))
)
(dni sdiv
"signed division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1))
"sdiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_00 GRi (ICCi_1-null) OPE2_0E GRj)
(sequence ()
***************
*** 2541,2553 ****
GRi GRj (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)))
)
(dni nsdiv
"non excepting signed division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) NON-EXCEPTING
! (MACH simple,tomcat,fr500,frv))
"nsdiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_01 GRi (ICCi_1-null) OPE2_0E GRj)
(sequence ()
--- 3005,3017 ----
GRi GRj (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(dni nsdiv
"non excepting signed division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
! (MACH simple,tomcat,fr500,fr550,frv))
"nsdiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_01 GRi (ICCi_1-null) OPE2_0E GRj)
(sequence ()
***************
*** 2555,2566 ****
GRi GRj (index-of GRk) 1)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)))
)
(dni udiv
"unsigned division reg/reg"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"udiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_00 GRi (ICCi_1-null) OPE2_0F GRj)
(sequence ()
--- 3019,3030 ----
GRi GRj (index-of GRk) 1)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(dni udiv
"unsigned division reg/reg"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1))
"udiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_00 GRi (ICCi_1-null) OPE2_0F GRj)
(sequence ()
***************
*** 2568,2580 ****
GRi GRj (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)))
)
(dni nudiv
"non excepting unsigned division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) NON-EXCEPTING
! (MACH simple,tomcat,fr500,frv))
"nudiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_01 GRi (ICCi_1-null) OPE2_0F GRj)
(sequence ()
--- 3032,3044 ----
GRi GRj (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(dni nudiv
"non excepting unsigned division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
! (MACH simple,tomcat,fr500,fr550,frv))
"nudiv$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_01 GRi (ICCi_1-null) OPE2_0F GRj)
(sequence ()
***************
*** 2582,2588 ****
GRi GRj (index-of GRk) 1)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)))
)
; Multiplication
--- 3046,3052 ----
GRi GRj (index-of GRk) 1)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
; Multiplication
***************
*** 2590,2616 ****
(define-pmacro (multiply-r-r name signop op ope comment)
(dni name
(comment)
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-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)))
)
)
(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")
(define-pmacro (int-shift-r-r name op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
)
--- 3054,3131 ----
(define-pmacro (multiply-r-r name signop op ope comment)
(dni name
(comment)
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1))
(.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)) (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 MULT-DIV) (FR400-MAJOR I-1) (MACH fr400))
+ (.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)))
+ )
+ )
+
+ (iacc-multiply-r-r smu set OP_46 OPE1_05 "Signed multiply reg/reg/iacc")
+ (iacc-multiply-r-r smass add OP_46 OPE1_06 "Signed multiply/add reg/reg/iacc")
+ (iacc-multiply-r-r smsss sub OP_46 OPE1_07 "Signed multiply/sub reg/reg/iacc")
+
(define-pmacro (int-shift-r-r name op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 2618,2623 ****
--- 3133,3156 ----
(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) (FR400-MAJOR I-1) (MACH fr400))
+ "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 IALL) (FR400-MAJOR I-1) (MACH fr400))
+ "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,2638 ****
(dni scan
"scan"
! ((UNIT SCAN) (FR500-MAJOR I-1) (FR400-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)))
)
; Format: conditional INT, Logic, Shift r-r
--- 3160,3171 ----
(dni scan
"scan"
! ((UNIT SCAN) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-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)) (fr550 (unit u-integer)))
)
; Format: conditional INT, Logic, Shift r-r
***************
*** 2640,2652 ****
(define-pmacro (conditional-int-logic name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
)
--- 3173,3185 ----
(define-pmacro (conditional-int-logic name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1) 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)) (fr550 (unit u-integer)))
)
)
***************
*** 2658,2686 ****
(dni cnot
"conditional not"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
(dni csmul
"conditional signed multiply"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-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)))
)
(dni csdiv
"conditional signed division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-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))
--- 3191,3219 ----
(dni cnot
"conditional not"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-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)) (fr550 (unit u-integer)))
)
(dni csmul
"conditional signed multiply"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-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)) (fr550 (unit u-imul)))
)
(dni csdiv
"conditional signed division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-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))
***************
*** 2689,2700 ****
GRi GRj (index-of GRk) 0)
(clobber GRk)))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)))
)
(dni cudiv
"conditional unsigned division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-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))
--- 3222,3233 ----
GRi GRj (index-of GRk) 0)
(clobber GRk)))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(dni cudiv
"conditional unsigned division"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1) CONDITIONAL)
"cudiv$pack $GRi,$GRj,$GRk,$CCi,$cond"
(+ pack GRk OP_59 GRi CCi cond OPE4_3 GRj)
(if (eq CCi (or cond 2))
***************
*** 2703,2721 ****
GRi GRj (index-of GRk) 0)
(clobber GRk)))
((fr400 (unit u-idiv))
! (fr500 (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)
(.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)))
)
)
--- 3236,3254 ----
GRi GRj (index-of GRk) 0)
(clobber GRk)))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(define-pmacro (conditional-shift name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1) 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)) (fr550 (unit u-integer)))
)
)
***************
*** 2725,2737 ****
(dni cscan
"conditional scan"
! ((UNIT SCAN) (FR500-MAJOR I-1) (FR400-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)))
)
; Format: INT, Logic, Shift, cc r-r
--- 3258,3270 ----
(dni cscan
"conditional scan"
! ((UNIT SCAN) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-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)) (fr550 (unit u-integer)))
)
; Format: INT, Logic, Shift, cc r-r
***************
*** 2752,2763 ****
(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))
(.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)))
)
)
--- 3285,3296 ----
(define-pmacro (int-arith-cc-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 2774,2785 ****
(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))
(.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)))
)
)
--- 3307,3318 ----
(define-pmacro (int-logic-cc-r-r name op ope comment)
(dni (.sym name cc)
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 2801,2812 ****
(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))
(.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)))
)
)
--- 3334,3345 ----
(define-pmacro (int-shift-cc-r-r name l-r op ope comment)
(dni (.sym name cc)
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 2827,2838 ****
(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))
(.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)))
)
)
--- 3360,3371 ----
(define-pmacro (multiply-cc-r-r name signop op ope comment)
(dni name
(comment)
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-imul)))
)
)
***************
*** 2845,2858 ****
(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)
(.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)))
)
)
--- 3378,3391 ----
(define-pmacro (conditional-int-arith-cc name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1) 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)) (fr550 (unit u-integer)))
)
)
***************
*** 2861,2887 ****
(dni csmulcc
"conditional signed multiply and set condition code"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-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)))
)
(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)
(.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)))
)
)
--- 3394,3420 ----
(dni csmulcc
"conditional signed multiply and set condition code"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-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)) (fr550 (unit u-imul)))
)
(define-pmacro (conditional-int-logic-cc name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1) 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)) (fr550 (unit u-integer)))
)
)
***************
*** 2892,2905 ****
(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)
(.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)))
)
)
--- 3425,3438 ----
(define-pmacro (conditional-int-shift-cc name l-r op ope comment)
(dni (.sym c name cc)
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1) 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)) (fr550 (unit u-integer)))
)
)
***************
*** 2912,2923 ****
(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))
(.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)))
)
)
--- 3445,3456 ----
(define-pmacro (int-arith-x-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 2927,2933 ****
(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))
(.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 ope GRj)
(sequence ((WI tmp) (QI cc))
--- 3460,3466 ----
(define-pmacro (int-arith-x-cc-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 ope GRj)
(sequence ((WI tmp) (QI cc))
***************
*** 2939,2962 ****
(set GRk tmp)
(set ICCi_1 cc))
((fr400 (unit u-integer))
! (fr500 (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")
; 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))
(.str name "$pack $GRi,$s12,$GRk")
(+ pack GRk op GRi s12)
(set GRk (operation GRi s12))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)))
)
)
--- 3472,3521 ----
(set GRk tmp)
(set ICCi_1 cc))
((fr400 (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) (FR400-MAJOR I-1) (MACH fr400))
+ (.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)))
+ )
+ )
+
+ (int-arith-ss-r-r addss add OP_46 OPE1_00 "add reg/reg, with saturation")
+ (int-arith-ss-r-r subss sub OP_46 OPE1_01 "sub reg/reg, with saturation")
; Format: INT, Logic, Shift r-simm
;
(define-pmacro (int-logic-r-simm name operation op comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$s12,$GRk")
(+ pack GRk op GRi s12)
(set GRk (operation GRi s12))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)
)
***************
*** 2968,2974 ****
(dni sdivi
"signed division reg/immed"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"sdivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_1E GRi s12)
(sequence ()
--- 3527,3533 ----
(dni sdivi
"signed division reg/immed"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1))
"sdivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_1E GRi s12)
(sequence ()
***************
*** 2976,2988 ****
GRi s12 (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (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))
"nsdivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_2E GRi s12)
(sequence ()
--- 3535,3547 ----
GRi s12 (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(dni nsdivi
"non excepting signed division reg/immed"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
! (MACH simple,tomcat,fr500,fr550,frv))
"nsdivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_2E GRi s12)
(sequence ()
***************
*** 2990,3001 ****
GRi s12 (index-of GRk) 1)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)))
)
(dni udivi
"unsigned division reg/immed"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"udivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_1F GRi s12)
(sequence ()
--- 3549,3560 ----
GRi s12 (index-of GRk) 1)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(dni udivi
"unsigned division reg/immed"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1))
"udivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_1F GRi s12)
(sequence ()
***************
*** 3003,3015 ****
GRi s12 (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (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))
"nudivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_2F GRi s12)
(sequence ()
--- 3562,3574 ----
GRi s12 (index-of GRk) 0)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (unit u-idiv)) (fr550 (unit u-idiv)))
)
(dni nudivi
"non excepting unsigned division reg/immed"
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) NON-EXCEPTING
! (MACH simple,tomcat,fr500,fr550,frv))
"nudivi$pack $GRi,$s12,$GRk"
(+ pack GRk OP_2F GRi s12)
(sequence ()
***************
*** 3017,3034 ****
GRi s12 (index-of GRk) 1)
(clobber GRk))
((fr400 (unit u-idiv))
! (fr500 (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))
(.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)))
)
)
--- 3576,3593 ----
GRi s12 (index-of GRk) 1)
(clobber GRk))
((fr400 (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) (FR550-MAJOR I-2) (FR400-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)) (fr550 (unit u-imul)))
)
)
***************
*** 3038,3049 ****
(define-pmacro (int-shift-r-simm name op comment)
(dni (.sym name i)
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
)
--- 3597,3608 ----
(define-pmacro (int-shift-r-simm name op comment)
(dni (.sym name i)
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 3053,3064 ****
(dni scani
"scan immediate"
! ((UNIT SCAN) (FR500-MAJOR I-1) (FR400-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)))
)
; Format: INT, Logic, Shift cc r-simm
--- 3612,3623 ----
(dni scani
"scan immediate"
! ((UNIT SCAN) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-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)) (fr550 (unit u-integer)))
)
; Format: INT, Logic, Shift cc r-simm
***************
*** 3066,3072 ****
(define-pmacro (int-arith-cc-r-simm name operation op comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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))
--- 3625,3631 ----
(define-pmacro (int-arith-cc-r-simm name operation op comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((BI tmp) (QI cc) (SI result))
***************
*** 3080,3086 ****
(set GRk result)
(set ICCi_1 cc))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)))
)
)
--- 3639,3645 ----
(set GRk result)
(set ICCi_1 cc))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)
)
***************
*** 3090,3096 ****
(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))
(.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((SI tmp))
--- 3649,3655 ----
(define-pmacro (int-logic-cc-r-simm name op comment)
(dni (.sym name icc)
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((SI tmp))
***************
*** 3098,3104 ****
(set GRk tmp)
(set-z-and-n ICCi_1 tmp))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)))
)
)
--- 3657,3663 ----
(set GRk tmp)
(set-z-and-n ICCi_1 tmp))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)
)
***************
*** 3109,3120 ****
(define-pmacro (multiply-cc-r-simm name signop op comment)
(dni name
(comment)
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-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)))
)
)
--- 3668,3679 ----
(define-pmacro (multiply-cc-r-simm name signop op comment)
(dni name
(comment)
! ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR550-MAJOR I-2) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-imul)))
)
)
***************
*** 3124,3130 ****
(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))
(.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((WI shift) (SI tmp) (QI cc))
--- 3683,3689 ----
(define-pmacro (int-shift-cc-r-simm name l-r op comment)
(dni (.sym name icc)
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((WI shift) (SI tmp) (QI cc))
***************
*** 3136,3142 ****
(set-z-and-n cc tmp)
(set ICCi_1 cc))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)))
)
)
--- 3695,3701 ----
(set-z-and-n cc tmp)
(set ICCi_1 cc))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)
)
***************
*** 3147,3158 ****
(define-pmacro (int-arith-x-r-simm name operation op comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
)
--- 3706,3717 ----
(define-pmacro (int-arith-x-r-simm name operation op comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.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)) (fr550 (unit u-integer)))
)
)
***************
*** 3162,3168 ****
(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))
(.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((WI tmp) (QI cc))
--- 3721,3727 ----
(define-pmacro (int-arith-x-cc-r-simm name operation op comment)
(dni name
(comment)
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((WI tmp) (QI cc))
***************
*** 3174,3180 ****
(set GRk tmp)
(set ICCi_1 cc))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)))
)
)
--- 3733,3739 ----
(set GRk tmp)
(set ICCi_1 cc))
((fr400 (unit u-integer))
! (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)
)
***************
*** 3185,3191 ****
(dni cmpb
"Compare bytes"
! ((UNIT IALL) (FR400-MAJOR I-1) (MACH fr400))
"cmpb$pack $GRi,$GRj,$ICCi_1"
(+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0C GRj)
(sequence ((QI cc))
--- 3744,3750 ----
(dni cmpb
"Compare bytes"
! ((UNIT IALL) (FR400-MAJOR I-1) (FR550-MAJOR I-1) (MACH fr400,fr550))
"cmpb$pack $GRi,$GRj,$ICCi_1"
(+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0C GRj)
(sequence ((QI cc))
***************
*** 3194,3205 ****
(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)))
)
(dni cmpba
"OR of Compare bytes"
! ((UNIT IALL) (FR400-MAJOR I-1) (MACH fr400))
"cmpba$pack $GRi,$GRj,$ICCi_1"
(+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0D GRj)
(sequence ((QI cc))
--- 3753,3764 ----
(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)) (fr550 (unit u-integer)))
)
(dni cmpba
"OR of Compare bytes"
! ((UNIT IALL) (FR400-MAJOR I-1) (FR550-MAJOR I-1) (MACH fr400,fr550))
"cmpba$pack $GRi,$GRj,$ICCi_1"
(+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0D GRj)
(sequence ((QI cc))
***************
*** 3212,3261 ****
(eq (and GRi #x000000ff)
(and GRj #x000000ff))))))
(set ICCi_1 cc))
! ((fr400 (unit u-integer)))
)
; Format: Load immediate
;
(dni setlo
"set low order bits"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
(dni sethi
"set high order bits"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
(dni setlos
"set low order bits and extend sign"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR400-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)))
)
(define-pmacro (load-gr-r name mode op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2))
(.str name "$pack @($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)))
)
)
--- 3771,3820 ----
(eq (and GRi #x000000ff)
(and GRj #x000000ff))))))
(set ICCi_1 cc))
! ((fr400 (unit u-integer)) (fr550 (unit u-integer)))
)
; Format: Load immediate
;
(dni setlo
"set low order bits"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
"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)) (fr550 (unit u-set-hilo)))
)
(dni sethi
"set high order bits"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
"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)) (fr550 (unit u-set-hilo)))
)
(dni setlos
"set low order bits and extend sign"
! ((UNIT IALL) (FR500-MAJOR I-1) (FR550-MAJOR I-1) (FR400-MAJOR I-1))
"setlos$pack $slo16,$GRk"
(+ pack GRk OP_3F (misc-null-4) s16)
(set GRk s16)
((fr400 (unit u-integer))
! (fr500 (unit u-integer)) (fr550 (unit u-integer)))
)
(define-pmacro (load-gr-r name mode op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2))
(.str name "$pack @($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)) (fr550 (unit u-gr-load)))
)
)
***************
*** 3268,3279 ****
(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)
(.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)))
)
)
--- 3827,3838 ----
(define-pmacro (load-fr-r name mode op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) 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)) (fr550 (unit u-fr-load)))
)
)
***************
*** 3316,3330 ****
(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))
(.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)))
)
)
--- 3875,3889 ----
(define-pmacro (ne-load-gr-r name mode op ope size comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$GRj),$GRk")
(+ pack GRk op GRi ope GRj)
(ne-load-semantics GRi (index-of GRj) GRk 0 size 0
(set GRk
(c-call mode (.str "@cpu@_read_mem_" mode)
pc (add GRi GRj))))
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
)
)
***************
*** 3337,3351 ****
(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))
(.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)))
)
)
--- 3896,3910 ----
(define-pmacro (ne-load-fr-r name mode op ope size comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$GRj),$FRintk")
(+ pack FRintk op GRi ope GRj)
(ne-load-semantics GRi (index-of GRj) FRintk 0 size 1
(set FRintk
(c-call mode (.str "@cpu@_read_mem_" mode)
pc (add GRi GRj))))
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
)
)
***************
*** 3367,3373 ****
name not_gr mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
(.str name "$pack @($GRi,$GRj),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi ope GRj)
(sequence ((WI address))
--- 3926,3932 ----
name not_gr mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
(.str name "$pack @($GRi,$GRj),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi ope GRj)
(sequence ((WI address))
***************
*** 3377,3386 ****
)
(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")
(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")
(load-double-r-r lddc 1 DI OP_02 OPE1_0E CPR (MACH frv) ()
"Load coprocessor double")
--- 3936,3945 ----
)
(load-double-r-r ldd 0 DI OP_02 OPE1_05 GR NA
! ((fr400 (unit u-gr-load)) (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
"Load double word")
(load-double-r-r lddf 1 DF OP_02 OPE1_0B FR FR-ACCESS
! ((fr400 (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")
***************
*** 3390,3397 ****
comment)
(dni name
(comment)
! ((UNIT LOAD) (FR500-MAJOR I-2) NON-EXCEPTING attr
! (MACH simple,tomcat,fr500,frv))
(.str name "$pack @($GRi,$GRj),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi ope GRj)
(sequence ((WI address))
--- 3949,3956 ----
comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING attr
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$GRj),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi ope GRj)
(sequence ((WI address))
***************
*** 3405,3413 ****
)
(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")
(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")
; Semantics for a load-quad insn
;
--- 3964,3972 ----
)
(ne-load-double-r-r nldd 0 DI OP_02 OPE1_25 GR (ne-DI-size) 0 NA
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load double word")
(ne-load-double-r-r nlddf 1 DF OP_02 OPE1_2B FR (ne-DI-size) 1 FR-ACCESS
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load double float")
; Semantics for a load-quad insn
;
***************
*** 3471,3482 ****
(define-pmacro (load-gr-u name mode op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-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)))
)
)
--- 4030,4041 ----
(define-pmacro (load-gr-u name mode op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2))
(.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)) (fr550 (unit u-gr-load)))
)
)
***************
*** 3489,3500 ****
(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))
(.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)))
)
)
--- 4048,4059 ----
(define-pmacro (ne-load-gr-u name mode op ope size comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$GRj),$GRk")
(+ pack GRk op GRi ope GRj)
(ne-load-semantics GRi (index-of GRj) GRk 0 size 0 (load-gr-u-semantics mode))
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
)
)
***************
*** 3516,3527 ****
(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)
(.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)))
)
)
--- 4075,4086 ----
(define-pmacro (load-fr-u name mode op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) 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)) (fr550 (unit u-fr-load)))
)
)
***************
*** 3545,3557 ****
(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))
(.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)))
)
)
--- 4104,4116 ----
(define-pmacro (ne-load-non-gr-u name mode op ope regtype size comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$GRj),$" regtype "k")
(+ pack (.sym regtype k) op GRi ope GRj)
(ne-load-semantics GRi (index-of GRj) (.sym regtype k) 0 size 1
(load-non-gr-u-semantics mode regtype))
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
)
)
***************
*** 3571,3582 ****
(define-pmacro (load-double-gr-u name op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-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)))
)
)
--- 4130,4141 ----
(define-pmacro (load-double-gr-u name op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2))
(.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)) (fr550 (unit u-gr-load)))
)
)
***************
*** 3585,3597 ****
(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))
(.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)))
)
)
--- 4144,4156 ----
(define-pmacro (ne-load-double-gr-u name op ope size comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$GRj),$GRdoublek")
(+ pack GRdoublek op GRi ope GRj)
(ne-load-semantics GRi (index-of GRj) GRdoublek 0 size 0
(load-double-gr-u-semantics))
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
)
)
***************
*** 3609,3615 ****
name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-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)
--- 4168,4174 ----
name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) 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,3624 ****
)
(load-double-non-gr-u lddfu DF OP_02 OPE1_1B FR FR-ACCESS
! ((fr400 (unit u-fr-load)) (fr500 (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")
--- 4177,4183 ----
)
(load-double-non-gr-u lddfu DF OP_02 OPE1_1B FR FR-ACCESS
! ((fr400 (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,3638 ****
(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))
(.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)))
)
)
--- 4185,4197 ----
(define-pmacro (ne-load-double-non-gr-u name mode op ope regtype size comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING FR-ACCESS
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$GRj),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi ope GRj)
(ne-load-semantics GRi (index-of GRj) (.sym regtype doublek) 0 size 1
(load-double-non-gr-u-semantics mode regtype))
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
)
)
***************
*** 3716,3722 ****
(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)
(.str name "$pack @($GRi,$d12),$" regtype "k")
(+ pack (.sym regtype k) op GRi d12)
(set (.sym regtype k)
--- 4275,4281 ----
(define-pmacro (load-r-simm name mode op regtype attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
(.str name "$pack @($GRi,$d12),$" regtype "k")
(+ pack (.sym regtype k) op GRi d12)
(set (.sym regtype k)
***************
*** 3726,3762 ****
)
(load-r-simm ldsbi QI OP_30 GR NA
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"Load signed half")
(load-r-simm ldi SI OP_32 GR NA
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"Load unsigned byte")
(load-r-simm lduhi UHI OP_36 GR NA
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"Load byte float")
(load-r-simm ldhfi UHI OP_39 FRint FR-ACCESS
! ((fr400 (unit u-fr-load)) (fr500 (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)))
"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))
(.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
--- 4285,4321 ----
)
(load-r-simm ldsbi QI OP_30 GR NA
! ((fr400 (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)) (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)) (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)) (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)) (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)) (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)) (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)) (fr550 (unit u-fr-load)))
"Load word float")
(define-pmacro (ne-load-r-simm
name mode op regtype size is_float attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING attr
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$d12),$" regtype "k")
(+ pack (.sym regtype k) op GRi d12)
(ne-load-semantics GRi -1 (.sym regtype k) d12 size is_float
***************
*** 3768,3795 ****
)
(ne-load-r-simm nldsbi QI OP_40 GR (ne-QI-size) 0 NA
! ((fr500 (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")
(ne-load-r-simm nldshi HI OP_42 GR (ne-HI-size) 0 NA
! ((fr500 (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")
(ne-load-r-simm nldi SI OP_44 GR (ne-SI-size) 0 NA
! ((fr500 (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")
(ne-load-r-simm nldhfi UHI OP_49 FRint (ne-UHI-size) 1 FR-ACCESS
! ((fr500 (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")
(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)
(.str name "$pack @($GRi,$d12),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi d12)
(sequence ((WI address))
--- 4327,4354 ----
)
(ne-load-r-simm nldsbi QI OP_40 GR (ne-QI-size) 0 NA
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load signed byte")
(ne-load-r-simm nldubi UQI OP_41 GR (ne-UQI-size) 0 NA
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load unsigned byte")
(ne-load-r-simm nldshi HI OP_42 GR (ne-HI-size) 0 NA
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load signed half")
(ne-load-r-simm nlduhi UHI OP_43 GR (ne-UHI-size) 0 NA
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load unsigned half")
(ne-load-r-simm nldi SI OP_44 GR (ne-SI-size) 0 NA
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load word")
(ne-load-r-simm nldbfi UQI OP_48 FRint (ne-UQI-size) 1 FR-ACCESS
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load byte float")
(ne-load-r-simm nldhfi UHI OP_49 FRint (ne-UHI-size) 1 FR-ACCESS
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load half float")
(ne-load-r-simm nldfi SI OP_4A FRint (ne-SI-size) 1 FR-ACCESS
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load word float")
(define-pmacro (load-double-r-simm
name not_gr mode op regtype attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) attr)
(.str name "$pack @($GRi,$d12),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi d12)
(sequence ((WI address))
***************
*** 3799,3816 ****
)
(load-double-r-simm lddi 0 DI OP_33 GR NA
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"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))
(.str name "$pack @($GRi,$d12),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi d12)
(sequence ((WI address))
--- 4358,4375 ----
)
(load-double-r-simm lddi 0 DI OP_33 GR NA
! ((fr400 (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)) (fr550 (unit u-fr-load)))
"Load double float")
(define-pmacro (ne-load-double-r-simm
name not_gr mode op regtype size is_float attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) NON-EXCEPTING attr
! (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack @($GRi,$d12),$" regtype "doublek")
(+ pack (.sym regtype doublek) op GRi d12)
(sequence ((WI address))
***************
*** 3824,3832 ****
)
(ne-load-double-r-simm nlddi 0 DI OP_45 GR (ne-DI-size) 0 NA
! ((fr500 (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")
(define-pmacro (load-quad-r-simm name op regtype attr profile comment)
(dni name
--- 4383,4391 ----
)
(ne-load-double-r-simm nlddi 0 DI OP_45 GR (ne-DI-size) 0 NA
! ((fr500 (unit u-gr-load)) (fr550 (unit u-gr-load))) "Load double word")
(ne-load-double-r-simm nlddfi 1 DF OP_4B FR (ne-DI-size) 1 FR-ACCESS
! ((fr500 (unit u-fr-load)) (fr550 (unit u-fr-load))) "Load double float")
(define-pmacro (load-quad-r-simm name op regtype attr profile comment)
(dni name
***************
*** 3865,3871 ****
(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)
(.str name "$pack $" reg "k,@($GRi,$GRj)")
(+ pack (.sym reg k) op GRi ope GRj)
(c-call VOID (.str "@cpu@_write_mem_" mode)
--- 4424,4430 ----
(define-pmacro (store-r-r name mode op ope reg attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) 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,3897 ****
)
(store-r-r stb QI OP_03 OPE1_00 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store unsigned half")
(store-r-r st SI OP_03 OPE1_02 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"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)))
"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)))
"Store word float")
(store-r-r stc SI OP_03 OPE1_25 CPR (MACH frv) () "Store coprocessor word")
--- 4434,4456 ----
)
(store-r-r stb QI OP_03 OPE1_00 GR NA
! ((fr400 (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)) (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)) (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)) (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)) (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)) (fr550 (unit u-fr-store)))
"Store word float")
(store-r-r stc SI OP_03 OPE1_25 CPR (MACH frv) () "Store coprocessor word")
***************
*** 3938,3944 ****
(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)
(sequence ((WI address))
--- 4497,4503 ----
(define-pmacro (store-double-r-r name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
***************
*** 3948,3957 ****
)
(store-double-r-r std DI OP_03 OPE1_03 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store double float")
(store-double-r-r stdc DI OP_03 OPE1_26 CPR (MACH frv)
--- 4507,4516 ----
)
(store-double-r-r std DI OP_03 OPE1_03 GR NA
! ((fr400 (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)) (fr550 (unit u-fr-store)))
"Store double float")
(store-double-r-r stdc DI OP_03 OPE1_26 CPR (MACH frv)
***************
*** 4028,4034 ****
(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)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((UWI address))
--- 4587,4593 ----
(define-pmacro (store-r-r-u name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((UWI address))
***************
*** 4041,4063 ****
)
(store-r-r-u stbu QI OP_03 OPE1_10 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"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)))
"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)))
"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)))
"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)))
"Store word float, update index")
(store-r-r-u stcu SI OP_03 OPE1_2D CPR (MACH frv) ()
--- 4600,4622 ----
)
(store-r-r-u stbu QI OP_03 OPE1_10 GR NA
! ((fr400 (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)) (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)) (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)) (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)) (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)) (fr550 (unit u-fr-store)))
"Store word float, update index")
(store-r-r-u stcu SI OP_03 OPE1_2D CPR (MACH frv) ()
***************
*** 4067,4073 ****
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)
(sequence ((WI address))
--- 4626,4632 ----
name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
***************
*** 4078,4087 ****
)
(store-double-r-r-u stdu DI OP_03 OPE1_13 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"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")
--- 4637,4646 ----
)
(store-double-r-r-u stdu DI OP_03 OPE1_13 GR NA
! ((fr400 (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)) (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,4117 ****
(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)
(.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))
--- 4670,4676 ----
(define-pmacro (conditional-load name mode op ope regtype profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) 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,4157 ****
)
(conditional-load cldsb QI OP_5E OPE4_0 GR
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"Load unsigned byte")
(conditional-load cldsh HI OP_5E OPE4_2 GR
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"Load unsigned half")
(conditional-load cld SI OP_5F OPE4_0 GR
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"Load byte float")
(conditional-load cldhf UHI OP_60 OPE4_1 FRint
! ((fr400 (unit u-fr-load)) (fr500 (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)))
"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)
(.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))
--- 4681,4716 ----
)
(conditional-load cldsb QI OP_5E OPE4_0 GR
! ((fr400 (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)) (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)) (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)) (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)) (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)) (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)) (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)) (fr550 (unit u-fr-load)))
"Load word float")
(define-pmacro (conditional-load-double
name not_gr mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) 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,4171 ****
)
(conditional-load-double cldd 0 DI OP_5F OPE4_1 GR NA
! ((fr400 (unit u-gr-load)) (fr500 (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)))
"Load double float")
(dni cldq
--- 4721,4730 ----
)
(conditional-load-double cldd 0 DI OP_5F OPE4_1 GR NA
! ((fr400 (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)) (fr550 (unit u-fr-load)))
"Load double float")
(dni cldq
***************
*** 4182,4188 ****
(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)
(.str name "$pack @($GRi,$GRj),$GRk,$CCi,$cond")
(+ pack GRk op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
--- 4741,4747 ----
(define-pmacro (conditional-load-gr-u name mode op ope comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) CONDITIONAL)
(.str name "$pack @($GRi,$GRj),$GRk,$CCi,$cond")
(+ pack GRk op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
***************
*** 4194,4200 ****
(if (ne (index-of GRi) (index-of GRk))
(set GRi address))))
((fr400 (unit u-gr-load))
! (fr500 (unit u-gr-load)))
)
)
--- 4753,4759 ----
(if (ne (index-of GRi) (index-of GRk))
(set GRi address))))
((fr400 (unit u-gr-load))
! (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
)
)
***************
*** 4207,4213 ****
(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)
(.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))
--- 4766,4772 ----
(define-pmacro (conditional-load-non-gr-u name mode op ope regtype comment)
(dni name
(comment)
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) 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))
***************
*** 4218,4224 ****
pc address))
(set GRi address)))
((fr400 (unit u-fr-load))
! (fr500 (unit u-fr-load)))
)
)
--- 4777,4783 ----
pc address))
(set GRi address)))
((fr400 (unit u-fr-load))
! (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
)
)
***************
*** 4229,4235 ****
(dni clddu
"Load double word, update"
! ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-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))
--- 4788,4794 ----
(dni clddu
"Load double word, update"
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-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))
***************
*** 4238,4249 ****
(if (ne (index-of GRi) (index-of GRdoublek))
(set GRi address))))
((fr400 (unit u-gr-load))
! (fr500 (unit u-gr-load)))
)
(dni clddfu
"Load double float, update"
! ((UNIT LOAD) (FR500-MAJOR I-2) (FR400-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))
--- 4797,4808 ----
(if (ne (index-of GRi) (index-of GRdoublek))
(set GRi address))))
((fr400 (unit u-gr-load))
! (fr500 (unit u-gr-load)) (fr550 (unit u-gr-load)))
)
(dni clddfu
"Load double float, update"
! ((UNIT LOAD) (FR550-MAJOR I-3) (FR500-MAJOR I-2) (FR400-MAJOR I-2) 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))
***************
*** 4251,4257 ****
(load-double-semantics 1 DF FR address GRj)
(set GRi address)))
((fr400 (unit u-fr-load))
! (fr500 (unit u-fr-load)))
)
(dni cldqu
--- 4810,4816 ----
(load-double-semantics 1 DF FR address GRj)
(set GRi address)))
((fr400 (unit u-fr-load))
! (fr500 (unit u-fr-load)) (fr550 (unit u-fr-load)))
)
(dni cldqu
***************
*** 4270,4276 ****
(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)
(.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))
--- 4829,4835 ----
(define-pmacro (conditional-store name mode op ope regtype profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) 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,4310 ****
)
(conditional-store cstb QI OP_64 OPE4_0 GR
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store unsigned half")
(conditional-store cst SI OP_64 OPE4_2 GR
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store byte float")
(conditional-store csthf HI OP_66 OPE4_1 FRint
! ((fr400 (unit u-fr-store)) (fr500 (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)))
"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)
(if (eq CCi (or cond 2))
--- 4840,4869 ----
)
(conditional-store cstb QI OP_64 OPE4_0 GR
! ((fr400 (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)) (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)) (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)) (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)) (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)) (fr550 (unit u-fr-store)))
"Store word float")
(define-pmacro (conditional-store-double
name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) 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))
***************
*** 4315,4324 ****
)
(conditional-store-double cstd DI OP_64 OPE4_3 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store double float")
(dni cstq
--- 4874,4883 ----
)
(conditional-store-double cstd DI OP_64 OPE4_3 GR NA
! ((fr400 (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)) (fr550 (unit u-fr-store)))
"Store double float")
(dni cstq
***************
*** 4336,4342 ****
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)
(if (eq CCi (or cond 2))
--- 4895,4901 ----
name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) 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,4379 ****
)
(conditional-store-u cstbu QI OP_67 OPE4_0 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"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)))
"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)))
"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)))
"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)))
"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)
(if (eq CCi (or cond 2))
--- 4909,4938 ----
)
(conditional-store-u cstbu QI OP_67 OPE4_0 GR NA
! ((fr400 (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)) (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)) (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)) (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)) (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)) (fr550 (unit u-fr-store)))
"Store word float, update index")
(define-pmacro (conditional-store-double-u
name mode op ope regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) 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))
***************
*** 4386,4401 ****
(conditional-store-double-u cstdu DI OP_67 OPE4_3 GR NA
((fr400 (unit u-gr-store))
! (fr500 (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)))
"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)
(.str name "$pack $" regtype "k,@($GRi,$d12)")
(+ pack (.sym regtype k) op GRi d12)
(c-call VOID (.str "@cpu@_write_mem_" mode)
--- 4945,4961 ----
(conditional-store-double-u cstdu DI OP_67 OPE4_3 GR NA
((fr400 (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)) (fr550 (unit u-fr-store)))
"Store double float, update index")
(define-pmacro (store-r-simm name mode op regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$d12)")
(+ pack (.sym regtype k) op GRi d12)
(c-call VOID (.str "@cpu@_write_mem_" mode)
***************
*** 4405,4433 ****
)
(store-r-simm stbi QI OP_50 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store unsigned half")
(store-r-simm sti SI OP_52 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store byte float")
(store-r-simm sthfi HI OP_4F FRint FR-ACCESS
! ((fr400 (unit u-fr-store)) (fr500 (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)))
"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)
(sequence ((WI address))
--- 4965,4993 ----
)
(store-r-simm stbi QI OP_50 GR NA
! ((fr400 (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)) (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)) (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)) (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)) (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)) (fr550 (unit u-fr-store)))
"Store word float")
(define-pmacro (store-double-r-simm name mode op regtype attr profile comment)
(dni name
(comment)
! ((UNIT STORE) (FR550-MAJOR I-4) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$d12)")
(+ pack (.sym regtype k) op GRi d12)
(sequence ((WI address))
***************
*** 4437,4446 ****
)
(store-double-r-simm stdi DI OP_53 GR NA
! ((fr400 (unit u-gr-store)) (fr500 (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)))
"Store double float")
(define-pmacro (store-quad-r-simm name op regtype attr profile comment)
--- 4997,5008 ----
)
(store-double-r-simm stdi DI OP_53 GR NA
! ((fr400 (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)) (fr550 (unit u-fr-store)))
"Store double float")
(define-pmacro (store-quad-r-simm name op regtype attr profile comment)
***************
*** 4464,4502 ****
(sequence ((WI tmp) (WI address))
(set tmp arg)
(set address (add base offset))
(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))
"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)))
)
(dni "swapi"
"Swap contents of memory with GR"
! ((UNIT C) (FR500-MAJOR C-2) (FR400-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)))
)
(dni cswap
"Conditionally swap contents of memory with GR"
! ((UNIT C) (FR500-MAJOR C-2) (FR400-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)))
)
(define-pmacro (register-transfer
--- 5026,5065 ----
(sequence ((WI tmp) (WI address))
(set tmp arg)
(set address (add base offset))
+ (c-call VOID "@cpu@_check_swap_address" address)
(set arg (c-call WI "@cpu@_read_mem_WI" pc address))
(c-call VOID "@cpu@_write_mem_WI" pc address tmp))
)
(dni swap
"Swap contents of memory with GR"
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2))
"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)) (fr550 (unit u-swap)))
)
(dni "swapi"
"Swap contents of memory with GR"
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2))
("swapi$pack @($GRi,$d12),$GRk")
(+ pack GRk OP_4D GRi d12)
(swap-semantics GRi d12 GRk)
((fr400 (unit u-swap))
! (fr500 (unit u-swap)) (fr550 (unit u-swap)))
)
(dni cswap
"Conditionally swap contents of memory with GR"
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2) 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)) (fr550 (unit u-swap)))
)
(define-pmacro (register-transfer
***************
*** 4513,4525 ****
(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)))
"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)))
"transfer fr to gr")
(define-pmacro (nextreg hw r offset) (reg hw (add (index-of r) offset)))
--- 5076,5088 ----
(register-transfer movgf OP_03 OPE1_15
GRj FRintk I0
! ((FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-MAJOR I-4) FR-ACCESS)
! ((fr400 (unit u-gr2fr)) (fr500 (unit u-gr2fr)) (fr550 (unit u-gr2fr)))
"transfer gr to fr")
(register-transfer movfg OP_03 OPE1_0D
FRintk GRj I0
! ((FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-MAJOR I-4) FR-ACCESS)
! ((fr400 (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,4549 ****
(dni movgfd
"move GR for FR double"
! ((UNIT I0) (FR500-MAJOR I-4) (FR400-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)))
)
(define-pmacro (register-transfer-double-to-gr-semantics cond)
--- 5100,5112 ----
(dni movgfd
"move GR for FR double"
! ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-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)) (fr550 (unit u-gr2fr)))
)
(define-pmacro (register-transfer-double-to-gr-semantics cond)
***************
*** 4555,4567 ****
(dni movfgd
"move FR for GR double"
! ((UNIT I0) (FR500-MAJOR I-4) (FR400-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)))
)
(dni movgfq
--- 5118,5130 ----
(dni movfgd
"move FR for GR double"
! ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-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)) (fr550 (unit u-fr2gr)))
)
(dni movgfq
***************
*** 4617,4663 ****
)
(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)))
"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)))
"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)
"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)))
)
(dni cmovfgd
"Conditional move FR to GR double"
! ((UNIT I0) (FR500-MAJOR I-4) (FR400-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)))
)
(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))
(.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)))
)
)
--- 5180,5226 ----
)
(conditional-register-transfer cmovgf OP_69 OPE4_0 GRj FRintk I0
! ((FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-MAJOR I-4))
! ((fr400 (unit u-gr2fr)) (fr500 (unit u-gr2fr)) (fr550 (unit u-gr2fr)))
"transfer gr to fr")
(conditional-register-transfer cmovfg OP_69 OPE4_2 FRintk GRj I0
! ((FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-MAJOR I-4))
! ((fr400 (unit u-fr2gr)) (fr500 (unit u-fr2gr)) (fr550 (unit u-fr2gr)))
"transfer fr to gr")
(dni cmovgfd
"Conditional move GR to FR double"
! ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-MAJOR I-4) 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)) (fr550 (unit u-gr2fr)))
)
(dni cmovfgd
"Conditional move FR to GR double"
! ((UNIT I0) (FR500-MAJOR I-4) (FR550-MAJOR I-5) (FR400-MAJOR I-4) 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)) (fr550 (unit u-fr2gr)))
)
(define-pmacro (register-transfer-spr
name op ope reg_src reg_targ unitname comment)
(dni name
(comment)
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2))
(.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)) (fr550 (unit unitname)))
)
)
***************
*** 4703,4709 ****
(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))
(.str (.sym prefix cc) "$pack $ICCi_2,$hint,$label16")
(+ pack (.sym ICC_ cc) ICCi_2 op hint label16)
(sequence ()
--- 5266,5272 ----
(define-pmacro (conditional-branch-i prefix cc op cond comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1) (FR400-MAJOR B-1))
(.str (.sym prefix cc) "$pack $ICCi_2,$hint,$label16")
(+ pack (.sym ICC_ cc) ICCi_2 op hint label16)
(sequence ()
***************
*** 4711,4740 ****
(if (cond ICCi_2)
(set pc label16)))
((fr400 (unit u-branch))
! (fr500 (unit u-branch)))
)
)
(dni bra
"integer branch equal"
! ((UNIT B01) (FR500-MAJOR B-1) (FR400-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)))
)
(dni bno
"integer branch never"
! ((UNIT B01) (FR500-MAJOR B-1) (FR400-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)))
)
(conditional-branch-i b eq OP_06 Ieq "integer branch equal")
--- 5274,5303 ----
(if (cond ICCi_2)
(set pc label16)))
((fr400 (unit u-branch))
! (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)
)
(dni bra
"integer branch equal"
! ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1) (FR400-MAJOR B-1))
"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)) (fr550 (unit u-branch)))
)
(dni bno
"integer branch never"
! ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1) (FR400-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)) (fr550 (unit u-branch)))
)
(conditional-branch-i b eq OP_06 Ieq "integer branch equal")
***************
*** 4755,4791 ****
(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)
(.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)))
)
)
(dni fbra
"float branch equal"
! ((UNIT B01) (FR500-MAJOR B-1) (FR400-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)))
)
(dni fbno
"float branch never"
! ((UNIT B01) (FR500-MAJOR B-1) (FR400-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)))
)
(conditional-branch-f fb ne OP_07 Fne "float branch not equal")
--- 5318,5354 ----
(define-pmacro (conditional-branch-f prefix cc op cond comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1) (FR400-MAJOR B-1) 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)) (fr550 (unit u-branch)))
)
)
(dni fbra
"float branch equal"
! ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1) (FR400-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)) (fr550 (unit u-branch)))
)
(dni fbno
"float branch never"
! ((UNIT B01) (FR500-MAJOR B-1) (FR550-MAJOR B-1) (FR400-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)) (fr550 (unit u-branch)))
)
(conditional-branch-f fb ne OP_07 Fne "float branch not equal")
***************
*** 4817,4836 ****
(dni bctrlr
"LCR conditional branch to lr"
! ((UNIT B0) (FR500-MAJOR B-2) (FR400-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)))
)
(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)
(.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))
--- 5380,5399 ----
(dni bctrlr
"LCR conditional branch to lr"
! ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2) (FR400-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)) (fr550 (unit u-branch)))
)
(define-pmacro (conditional-branch-cclr prefix cc i-f op ope cond attr comment)
(dni (.sym prefix cc lr)
(comment)
! ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3) (FR400-MAJOR B-3) 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))
***************
*** 4838,4867 ****
(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)))
)
)
(dni bralr
"integer cclr branch always"
! ((UNIT B01) (FR500-MAJOR B-3) (FR400-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)))
)
(dni bnolr
"integer cclr branch never"
! ((UNIT B01) (FR500-MAJOR B-3) (FR400-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)))
)
(conditional-branch-cclr b eq I OP_0E OPE3_02 Ieq NA "integer cclr branch equal")
--- 5401,5430 ----
(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)) (fr550 (unit u-branch)))
)
)
(dni bralr
"integer cclr branch always"
! ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3) (FR400-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)) (fr550 (unit u-branch)))
)
(dni bnolr
"integer cclr branch never"
! ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3) (FR400-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)) (fr550 (unit u-branch)))
)
(conditional-branch-cclr b eq I OP_0E OPE3_02 Ieq NA "integer cclr branch equal")
***************
*** 4881,4904 ****
(dni fbralr
"float cclr branch always"
! ((UNIT B01) (FR500-MAJOR B-3) (FR400-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)))
)
(dni fbnolr
"float cclr branch never"
! ((UNIT B01) (FR500-MAJOR B-3) (FR400-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)))
)
(conditional-branch-cclr fb eq F OP_0E OPE3_06 Feq FR-ACCESS "float cclr branch equal")
--- 5444,5467 ----
(dni fbralr
"float cclr branch always"
! ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3) (FR400-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)) (fr550 (unit u-branch)))
)
(dni fbnolr
"float cclr branch never"
! ((UNIT B01) (FR500-MAJOR B-3) (FR550-MAJOR B-3) (FR400-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)) (fr550 (unit u-branch)))
)
(conditional-branch-cclr fb eq F OP_0E OPE3_06 Feq FR-ACCESS "float cclr branch equal")
***************
*** 4919,4957 ****
(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)
(.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)))
)
)
(dni bcralr
"integer ctrlr branch always"
! ((UNIT B0) (FR500-MAJOR B-2) (FR400-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)))
)
(dni bcnolr
"integer ctrlr branch never"
! ((UNIT B0) (FR500-MAJOR B-2) (FR400-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)))
)
(conditional-branch-ctrlr bc eq I OP_0E OPE3_03 Ieq NA "integer ctrlr branch equal")
--- 5482,5520 ----
(define-pmacro (conditional-branch-ctrlr prefix cc i-f op ope cond attr comment)
(dni (.sym prefix cc lr)
(comment)
! ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2) (FR400-MAJOR B-2) 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)) (fr550 (unit u-branch)))
)
)
(dni bcralr
"integer ctrlr branch always"
! ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2) (FR400-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)) (fr550 (unit u-branch)))
)
(dni bcnolr
"integer ctrlr branch never"
! ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2) (FR400-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)) (fr550 (unit u-branch)))
)
(conditional-branch-ctrlr bc eq I OP_0E OPE3_03 Ieq NA "integer ctrlr branch equal")
***************
*** 4971,4996 ****
(dni fcbralr
"float ctrlr branch always"
! ((UNIT B0) (FR500-MAJOR B-2) (FR400-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)))
)
(dni fcbnolr
"float ctrlr branch never"
! ((UNIT B0) (FR500-MAJOR B-2) (FR400-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)))
)
(conditional-branch-ctrlr fcb eq F OP_0E OPE3_07 Feq FR-ACCESS "float cclr branch equal")
--- 5534,5559 ----
(dni fcbralr
"float ctrlr branch always"
! ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2) (FR400-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)) (fr550 (unit u-branch)))
)
(dni fcbnolr
"float ctrlr branch never"
! ((UNIT B0) (FR500-MAJOR B-2) (FR550-MAJOR B-2) (FR400-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)) (fr550 (unit u-branch)))
)
(conditional-branch-ctrlr fcb eq F OP_0E OPE3_07 Feq FR-ACCESS "float cclr branch equal")
***************
*** 5019,5030 ****
(dni jmpl
"jump and link"
! ((UNIT I0) (FR500-MAJOR I-5) (FR400-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)))
)
(dni calll
--- 5582,5593 ----
(dni jmpl
"jump and link"
! ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6) (FR400-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)) (fr550 (unit u-branch)))
)
(dni calll
***************
*** 5039,5050 ****
(dni jmpil
"jump immediate and link"
! ((UNIT I0) (FR500-MAJOR I-5) (FR400-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)))
)
(dni callil
--- 5602,5613 ----
(dni jmpil
"jump immediate and link"
! ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6) (FR400-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)) (fr550 (unit u-branch)))
)
(dni callil
***************
*** 5059,5065 ****
(dni call
"call and link"
! ((UNIT B0) (FR500-MAJOR B-4) (FR400-MAJOR B-4))
"call$pack $label24"
(+ pack OP_0F label24)
(sequence ()
--- 5622,5628 ----
(dni call
"call and link"
! ((UNIT B0) (FR500-MAJOR B-4) (FR550-MAJOR B-4) (FR400-MAJOR B-4))
"call$pack $label24"
(+ pack OP_0F label24)
(sequence ()
***************
*** 5067,5078 ****
(set pc label24)
(c-call VOID "@cpu@_model_branch" pc #x2)) ; hint branch taken
((fr400 (unit u-branch))
! (fr500 (unit u-branch)))
)
(dni rett
"return from trap"
! ((UNIT C) (FR500-MAJOR C-2) (FR400-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
--- 5630,5641 ----
(set pc label24)
(c-call VOID "@cpu@_model_branch" pc #x2)) ; hint branch taken
((fr400 (unit u-branch))
! (fr500 (unit u-branch)) (fr550 (unit u-branch)))
)
(dni rett
"return from trap"
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2) PRIVILEGED)
"rett$pack $debug"
(+ pack (misc-null-1) debug OP_05 (rs-null) (s12-null))
; frv_rett handles operating vs user mode
***************
*** 5123,5155 ****
(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)
(.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)))
)
)
(dni tra
"integer trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(dni tno
"integer trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(trap-r t eq I OP_04 OPE4_0 Ieq NA "integer trap equal")
--- 5686,5718 ----
(define-pmacro (trap-r prefix cc i-f op ope cond attr comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-MAJOR C-1) 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)) (fr550 (unit u-trap)))
)
)
(dni tra
"integer trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-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)) (fr550 (unit u-trap)))
)
(dni tno
"integer trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-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)) (fr550 (unit u-trap)))
)
(trap-r t eq I OP_04 OPE4_0 Ieq NA "integer trap equal")
***************
*** 5169,5190 ****
(dni ftra
"float trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(dni ftno
"flost trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(trap-r ft ne F OP_04 OPE4_1 Fne FR-ACCESS "float trap not equal")
--- 5732,5753 ----
(dni ftra
"float trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-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)) (fr550 (unit u-trap)))
)
(dni ftno
"flost trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-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)) (fr550 (unit u-trap)))
)
(trap-r ft ne F OP_04 OPE4_1 Fne FR-ACCESS "float trap not equal")
***************
*** 5205,5237 ****
(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)
(.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)))
)
)
(dni tira
"integer trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(dni tino
"integer trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(trap-immed ti eq I OP_1C Ieq NA "integer trap equal")
--- 5768,5800 ----
(define-pmacro (trap-immed prefix cc i-f op cond attr comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-MAJOR C-1) 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)) (fr550 (unit u-trap)))
)
)
(dni tira
"integer trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-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)) (fr550 (unit u-trap)))
)
(dni tino
"integer trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-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)) (fr550 (unit u-trap)))
)
(trap-immed ti eq I OP_1C Ieq NA "integer trap equal")
***************
*** 5251,5272 ****
(dni ftira
"float trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(dni ftino
"float trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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)))
)
(trap-immed fti ne F OP_1D Fne FR-ACCESS "float trap not equal")
--- 5814,5835 ----
(dni ftira
"float trap always"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-MAJOR C-1) FR-ACCESS)
"ftira$pack $GRi,$s12"
(+ pack FCC_ra (ICCi_2-null) OP_1D GRi s12)
(trap-semantics (const BI 1) GRi s12)
((fr400 (unit u-trap))
! (fr500 (unit u-trap)) (fr550 (unit u-trap)))
)
(dni ftino
"float trap never"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-MAJOR C-1) 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)) (fr550 (unit u-trap)))
)
(trap-immed fti ne F OP_1D Fne FR-ACCESS "float trap not equal")
***************
*** 5286,5292 ****
(dni break
"break trap"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-MAJOR C-1))
"break$pack"
(+ pack (rd-null) OP_04 (rs-null) (misc-null-3) OPE4_3 (GRj-null))
(sequence ()
--- 5849,5855 ----
(dni break
"break trap"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-MAJOR C-1))
"break$pack"
(+ pack (rd-null) OP_04 (rs-null) (misc-null-3) OPE4_3 (GRj-null))
(sequence ()
***************
*** 5314,5320 ****
(dni mtrap
"media trap"
! ((UNIT C) (FR500-MAJOR C-1) (FR400-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")
--- 5877,5883 ----
(dni mtrap
"media trap"
! ((UNIT C) (FR500-MAJOR C-1) (FR550-MAJOR C-1) (FR400-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,5330 ****
(define-pmacro (condition-code-logic name operation ope comment)
(dni name
(comment)
! ((UNIT B01) (FR500-MAJOR B-6) (FR400-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))
--- 5887,5893 ----
(define-pmacro (condition-code-logic name operation ope comment)
(dni name
(comment)
! ((UNIT B01) (FR500-MAJOR B-6) (FR550-MAJOR B-6) (FR400-MAJOR B-6))
(.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,5363 ****
(dni notcr
("not cccr register")
! ((UNIT B01) (FR500-MAJOR B-6) (FR400-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))
--- 5920,5926 ----
(dni notcr
("not cccr register")
! ((UNIT B01) (FR500-MAJOR B-6) (FR550-MAJOR B-6) (FR400-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,5403 ****
(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))
(.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)))
)
)
(dni ckra
"check integer cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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)))
)
(dni ckno
"check integer cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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)))
)
(check-int-condition-code ck eq OP_08 Ieq "check integer cc equal")
--- 5934,5966 ----
(define-pmacro (check-int-condition-code prefix cc op cond comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5))
(.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)) (fr550 (unit u-check)))
)
)
(dni ckra
"check integer cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-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)) (fr550 (unit u-check)))
)
(dni ckno
"check integer cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-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)) (fr550 (unit u-check)))
)
(check-int-condition-code ck eq OP_08 Ieq "check integer cc equal")
***************
*** 5418,5450 ****
(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)
(.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)))
)
)
(dni fckra
"check float cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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)))
)
(dni fckno
"check float cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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)))
)
(check-float-condition-code fck ne OP_09 Fne "check float cc not equal")
--- 5981,6013 ----
(define-pmacro (check-float-condition-code prefix cc op cond comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5) 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)) (fr550 (unit u-check)))
)
)
(dni fckra
"check float cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-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)) (fr550 (unit u-check)))
)
(dni fckno
"check float cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-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)) (fr550 (unit u-check)))
)
(check-float-condition-code fck ne OP_09 Fne "check float cc not equal")
***************
*** 5465,5471 ****
(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)
(.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)
--- 6028,6034 ----
(define-pmacro (conditional-check-int-condition-code prefix cc op ope test comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5) 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)
***************
*** 5473,5485 ****
(check-semantics (test ICCi_3) CRj_int)
(set CRj_int (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)))
)
)
(dni cckra
"conditional check integer cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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))
--- 6036,6048 ----
(check-semantics (test ICCi_3) CRj_int)
(set CRj_int (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)) (fr550 (unit u-check)))
)
)
(dni cckra
"conditional check integer cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5) 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))
***************
*** 5487,5498 ****
(check-semantics (const BI 1) CRj_int)
(set CRj_int (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)))
)
(dni cckno
"conditional check integer cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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))
--- 6050,6061 ----
(check-semantics (const BI 1) CRj_int)
(set CRj_int (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)) (fr550 (unit u-check)))
)
(dni cckno
"conditional check integer cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5) 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))
***************
*** 5500,5506 ****
(check-semantics (const BI 0) CRj_int)
(set CRj_int (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)))
)
(conditional-check-int-condition-code cck eq OP_6A OPE4_0 Ieq "check integer cc equal")
--- 6063,6069 ----
(check-semantics (const BI 0) CRj_int)
(set CRj_int (cr-undefined)))
((fr400 (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,5527 ****
(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)
(.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)
--- 6084,6090 ----
(define-pmacro (conditional-check-float-condition-code prefix cc op ope test comment)
(dni (.sym prefix cc)
(comment)
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5) 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)
***************
*** 5529,5541 ****
(check-semantics (test FCCi_3) CRj_float)
(set CRj_float (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)))
)
)
(dni cfckra
"conditional check float cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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))
--- 6092,6104 ----
(check-semantics (test FCCi_3) CRj_float)
(set CRj_float (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)) (fr550 (unit u-check)))
)
)
(dni cfckra
"conditional check float cc always"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5) 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))
***************
*** 5543,5554 ****
(check-semantics (const BI 1) CRj_float)
(set CRj_float (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)))
)
(dni cfckno
"conditional check float cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR400-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))
--- 6106,6117 ----
(check-semantics (const BI 1) CRj_float)
(set CRj_float (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)) (fr550 (unit u-check)))
)
(dni cfckno
"conditional check float cc never"
! ((UNIT B01) (FR500-MAJOR B-5) (FR550-MAJOR B-5) (FR400-MAJOR B-5) 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))
***************
*** 5556,5562 ****
(check-semantics (const BI 0) CRj_float)
(set CRj_float (cr-undefined)))
((fr400 (unit u-check))
! (fr500 (unit u-check)))
)
(conditional-check-float-condition-code cfck ne OP_6A OPE4_1 Fne "check float cc not equal")
--- 6119,6125 ----
(check-semantics (const BI 0) CRj_float)
(set CRj_float (cr-undefined)))
((fr400 (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,5588 ****
(dni cjmpl
"conditional jump and link"
! ((UNIT I0) (FR500-MAJOR I-5) (FR400-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)))
)
(dni ccalll
--- 6139,6151 ----
(dni cjmpl
"conditional jump and link"
! ((UNIT I0) (FR500-MAJOR I-5) (FR550-MAJOR I-6) (FR400-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)) (fr550 (unit u-branch)))
)
(dni ccalll
***************
*** 5599,5605 ****
(define-pmacro (cache-invalidate name cache all op ope profile comment)
(dni name
(comment)
! ((UNIT C) (FR500-MAJOR C-2) (FR400-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)
--- 6162,6168 ----
(define-pmacro (cache-invalidate name cache all op ope profile comment)
(dni name
(comment)
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2))
(.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,5623 ****
)
(cache-invalidate ici insn 0 OP_03 OPE1_38
! ((fr400 (unit u-ici)) (fr500 (unit u-ici)))
"invalidate insn cache")
(cache-invalidate dci data 0 OP_03 OPE1_3C
! ((fr400 (unit u-dci)) (fr500 (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))
(.str name "$pack @($GRi,$GRj),$ae")
(+ pack (misc-null-1) ae op GRi ope GRj)
(if (eq ae 0)
--- 6171,6186 ----
)
(cache-invalidate ici insn 0 OP_03 OPE1_38
! ((fr400 (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)) (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) (FR550-MAJOR C-2) (MACH fr400,fr550))
(.str name "$pack @($GRi,$GRj),$ae")
(+ pack (misc-null-1) ae op GRi ope GRj)
(if (eq ae 0)
***************
*** 5628,5658 ****
)
(cache-invalidate-entry icei insn OP_03 OPE1_39
! ((fr400 (unit u-ici)))
"invalidate insn cache entry")
(cache-invalidate-entry dcei data OP_03 OPE1_3A
! ((fr400 (unit u-dci)))
"invalidate data cache entry")
(dni dcf
"Data cache flush"
! ((UNIT C) (FR500-MAJOR C-2) (FR400-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)))
)
(dni dcef
"Data cache entry flush"
! ((UNIT C) (FR400-MAJOR C-2) (MACH fr400))
"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)))
)
(define-pmacro (write-TLB name insn op ope comment)
--- 6191,6221 ----
)
(cache-invalidate-entry icei insn OP_03 OPE1_39
! ((fr400 (unit u-ici)) (fr550 (unit u-ici)))
"invalidate insn cache entry")
(cache-invalidate-entry dcei data OP_03 OPE1_3A
! ((fr400 (unit u-dci)) (fr550 (unit u-dci)))
"invalidate data cache entry")
(dni dcf
"Data cache flush"
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2))
"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)) (fr550 (unit u-dcf)))
)
(dni dcef
"Data cache entry flush"
! ((UNIT C) (FR400-MAJOR C-2) (FR550-MAJOR C-2) (MACH fr400,fr550))
"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)) (fr550 (unit u-dcf)))
)
(define-pmacro (write-TLB name insn op ope comment)
***************
*** 5694,5710 ****
)
)
! (cache-preload icpl insn C () OP_03 OPE1_30
! ((fr400 (unit u-icpl)) (fr500 (unit u-icpl)))
"preload insn cache")
! (cache-preload dcpl data DCPL () OP_03 OPE1_34
! ((fr400 (unit u-dcpl)) (fr500 (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))
(.str name "$pack $GRi")
(+ pack (rd-null) op GRi ope (GRj-null))
(c-call VOID (.str "@cpu@_" cache "_cache_unlock") GRi)
--- 6257,6273 ----
)
)
! (cache-preload icpl insn C ((FR550-MAJOR C-2)) OP_03 OPE1_30
! ((fr400 (unit u-icpl)) (fr500 (unit u-icpl)) (fr550 (unit u-icpl)))
"preload insn cache")
! (cache-preload dcpl data DCPL ((FR550-MAJOR I-8)) OP_03 OPE1_34
! ((fr400 (unit u-dcpl)) (fr500 (unit u-dcpl)) (fr550 (unit u-dcpl)))
"preload data cache")
(define-pmacro (cache-unlock name cache op ope profile comment)
(dni name
(comment)
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2))
(.str name "$pack $GRi")
(+ pack (rd-null) op GRi ope (GRj-null))
(c-call VOID (.str "@cpu@_" cache "_cache_unlock") GRi)
***************
*** 5713,5728 ****
)
(cache-unlock icul insn OP_03 OPE1_31
! ((fr400 (unit u-icul)) (fr500 (unit u-icul)))
"unlock insn cache")
(cache-unlock dcul data OP_03 OPE1_35
! ((fr400 (unit u-dcul)) (fr500 (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))
(.str insn "$pack")
(+ pack (rd-null) op (rs-null) ope (GRj-null))
(nop) ; sufficient implementation
--- 6276,6291 ----
)
(cache-unlock icul insn OP_03 OPE1_31
! ((fr400 (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)) (fr550 (unit u-dcul)))
"unlock data cache")
(define-pmacro (barrier name insn op ope profile comment)
(dni name
(comment)
! ((UNIT C) (FR500-MAJOR C-2) (FR550-MAJOR C-2) (FR400-MAJOR C-2))
(.str insn "$pack")
(+ pack (rd-null) op (rs-null) ope (GRj-null))
(nop) ; sufficient implementation
***************
*** 5759,5765 ****
(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)
(.str name "$pack $" reg "k")
(+ pack (.sym reg k) op (rs-null) ope (GRj-null))
(sequence ()
--- 6322,6328 ----
(define-pmacro (clear-ne-flag-r name op ope reg is_float attr profile comment)
(dni name
(comment)
! ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH simple,tomcat,fr500,fr550,frv) attr)
(.str name "$pack $" reg "k")
(+ pack (.sym reg k) op (rs-null) ope (GRj-null))
(sequence ()
***************
*** 5771,5786 ****
)
(clear-ne-flag-r clrgr OP_0A OPE1_00 GR 0 NA
! ((fr500 (unit u-clrgr)))
"Clear GR NE flag")
(clear-ne-flag-r clrfr OP_0A OPE1_02 FR 1 FR-ACCESS
! ((fr500 (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)
(.str name "$pack")
(+ pack (rd-null) op (rs-null) ope (GRj-null))
(clear-ne-flag-semantics -1 is_float)
--- 6334,6349 ----
)
(clear-ne-flag-r clrgr OP_0A OPE1_00 GR 0 NA
! ((fr500 (unit u-clrgr)) (fr550 (unit u-clrgr)))
"Clear GR NE flag")
(clear-ne-flag-r clrfr OP_0A OPE1_02 FR 1 FR-ACCESS
! ((fr500 (unit u-clrfr)) (fr550 (unit u-clrfr)))
"Clear FR NE flag")
(define-pmacro (clear-ne-flag-all name op ope is_float attr profile comment)
(dni name
(comment)
! ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH simple,tomcat,fr500,fr550,frv) attr)
(.str name "$pack")
(+ pack (rd-null) op (rs-null) ope (GRj-null))
(clear-ne-flag-semantics -1 is_float)
***************
*** 5789,5798 ****
)
(clear-ne-flag-all clrga OP_0A OPE1_01 0 NA
! ((fr500 (unit u-clrgr)))
"Clear GR NE flag ALL")
(clear-ne-flag-all clrfa OP_0A OPE1_03 1 FR-ACCESS
! ((fr500 (unit u-clrfr)))
"Clear FR NE flag ALL")
(define-pmacro (commit-semantics target_index is_float)
--- 6352,6361 ----
)
(clear-ne-flag-all clrga OP_0A OPE1_01 0 NA
! ((fr500 (unit u-clrgr)) (fr550 (unit u-clrgr)))
"Clear GR NE flag ALL")
(clear-ne-flag-all clrfa OP_0A OPE1_03 1 FR-ACCESS
! ((fr500 (unit u-clrfr)) (fr550 (unit u-clrfr)))
"Clear FR NE flag ALL")
(define-pmacro (commit-semantics target_index is_float)
***************
*** 5802,5812 ****
(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)
(.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)))
)
)
--- 6365,6375 ----
(define-pmacro (commit-r name op ope reg is_float attr comment)
(dni name
(comment)
! ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH frv,fr500,fr550) attr)
(.str name "$pack $" reg "k")
(+ pack (.sym reg k) op (rs-null) ope (GRj-null))
(commit-semantics (index-of (.sym reg k)) is_float)
! ((fr500 (unit u-commit)) (fr550 (unit u-commit)))
)
)
***************
*** 5816,5826 ****
(define-pmacro (commit name op ope is_float attr comment)
(dni name
(comment)
! ((UNIT I01) (FR500-MAJOR I-6) (MACH frv,fr500) attr)
(.str name "$pack")
(+ pack (rd-null) op (rs-null) ope (GRj-null))
(commit-semantics -1 is_float)
! ((fr500 (unit u-commit)))
)
)
--- 6379,6389 ----
(define-pmacro (commit name op ope is_float attr comment)
(dni name
(comment)
! ((UNIT I01) (FR500-MAJOR I-6) (FR550-MAJOR I-7) (MACH frv,fr500,fr550) attr)
(.str name "$pack")
(+ pack (rd-null) op (rs-null) ope (GRj-null))
(commit-semantics -1 is_float)
! ((fr500 (unit u-commit)) (fr550 (unit u-commit)))
)
)
***************
*** 5835,5849 ****
(.str name "$pack $" src ",$" targ)
(+ pack targ op (rs-null) ope src)
(set targ (conv mode src))
! ((fr500 (unit u-float-convert)))
)
)
(floating-point-conversion fitos OP_79 OPE1_00 float SF FRintj FRk
! ((MACH simple,tomcat,fr500,frv))
"Convert Integer to Single")
(floating-point-conversion fstoi OP_79 OPE1_01 fix SI FRj FRintk
! ((MACH simple,tomcat,fr500,frv))
"Convert Single to Integer")
(floating-point-conversion fitod OP_7A OPE1_00 float DF FRintj FRdoublek
((MACH frv))
--- 6398,6412 ----
(.str name "$pack $" src ",$" targ)
(+ pack targ op (rs-null) ope src)
(set targ (conv mode src))
! ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
)
)
(floating-point-conversion fitos OP_79 OPE1_00 float SF FRintj FRk
! ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
"Convert Integer to Single")
(floating-point-conversion fstoi OP_79 OPE1_01 fix SI FRj FRintk
! ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
"Convert Single to Integer")
(floating-point-conversion fitod OP_7A OPE1_00 float DF FRintj FRdoublek
((MACH frv))
***************
*** 5894,5905 ****
name op ope conv mode src targ comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,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)))
)
)
--- 6457,6468 ----
name op ope conv mode src targ comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack $" src ",$" targ ",$CCi,$cond")
(+ pack targ op (rs-null) CCi cond ope src)
(if (eq CCi (or cond 2))
(set targ (conv mode src)))
! ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
)
)
***************
*** 5910,5922 ****
name op ope conv mode src targ comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,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)))
)
)
--- 6473,6485 ----
name op ope conv mode src targ comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack $" src ",$" targ)
(+ pack targ op (rs-null) ope src)
(sequence ()
(c-call VOID "@cpu@_set_ne_index" (index-of targ))
(set targ (conv mode src)))
! ((fr500 (unit u-float-convert)) (fr550 (unit u-float-convert)))
)
)
***************
*** 5925,5938 ****
(register-transfer fmovs OP_79 OPE1_02
FRj FRk FM01
! ((FR500-MAJOR F-1) (MACH simple,tomcat,fr500,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)))
"Move Double Float")
(dni fdmovs
--- 6488,6501 ----
(register-transfer fmovs OP_79 OPE1_02
FRj FRk FM01
! ((FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
((fr500 (unit u-fr2fr)))
"Move Single Float")
(register-transfer fmovd OP_7A OPE1_02
; TODO -- unit doesn't handle extra register
FRdoublej FRdoublek FM01
((FR500-MAJOR F-1) (MACH frv))
! ((fr500 (unit u-fr2fr)) (fr550 (unit u-fr2fr)))
"Move Double Float")
(dni fdmovs
***************
*** 5948,5956 ****
)
(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 move Single Float")
(define-pmacro (floating-point-neg name src targ op ope attr comment)
--- 6511,6519 ----
)
(conditional-register-transfer cfmovs OP_6C OPE4_0 FRj FRk FM01
! ((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,5970 ****
(.str name "$pack $" src ",$" targ)
(+ pack src op (rs-null) ope targ)
(set targ (neg src))
! ((fr500 (unit u-float-arith)))
)
)
! (floating-point-neg fnegs FRj FRk OP_79 OPE1_03 ((MACH simple,tomcat,fr500,frv)) "Floating point negate, single")
(floating-point-neg fnegd FRdoublej FRdoublek OP_7A OPE1_03 ((MACH frv)) "Floating point negate, double")
(dni fdnegs
--- 6523,6533 ----
(.str name "$pack $" src ",$" targ)
(+ pack src op (rs-null) ope targ)
(set targ (neg src))
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
)
)
! (floating-point-neg fnegs FRj FRk OP_79 OPE1_03 ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv)) "Floating point negate, single")
(floating-point-neg fnegd FRdoublej FRdoublek OP_7A OPE1_03 ((MACH frv)) "Floating point negate, double")
(dni fdnegs
***************
*** 5980,5991 ****
(dni cfnegs
"Conditional floating point negate, single"
! ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,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)))
)
(define-pmacro (float-abs name src targ op ope attr comment)
--- 6543,6554 ----
(dni cfnegs
"Conditional floating point negate, single"
! ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
"cfnegs$pack $FRj,$FRk,$CCi,$cond"
(+ pack FRj OP_6C (rs-null) CCi cond OPE4_1 FRk)
(if (eq CCi (or cond 2))
(set FRk (neg FRj)))
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
)
(define-pmacro (float-abs name src targ op ope attr comment)
***************
*** 5995,6005 ****
(.str name "$pack $" src ",$" targ )
(+ pack targ op (rs-null) ope src)
(set targ (abs src))
! ((fr500 (unit u-float-arith)))
)
)
! (float-abs fabss FRj FRk OP_79 OPE1_04 ((MACH simple,tomcat,fr500,frv)) "Float absolute value, single")
(float-abs fabsd FRdoublej FRdoublek OP_7A OPE1_04 ((MACH frv)) "Float absolute value, double")
(dni fdabss
--- 6558,6568 ----
(.str name "$pack $" src ",$" targ )
(+ pack targ op (rs-null) ope src)
(set targ (abs src))
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
)
)
! (float-abs fabss FRj FRk OP_79 OPE1_04 ((FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv)) "Float absolute value, single")
(float-abs fabsd FRdoublej FRdoublek OP_7A OPE1_04 ((MACH frv)) "Float absolute value, double")
(dni fdabss
***************
*** 6015,6035 ****
(dni cfabss
"Conditional floating point absolute value, single"
! ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,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)))
)
(dni fsqrts
"Square root single"
! ((UNIT FM01) (FR500-MAJOR F-4) (MACH simple,tomcat,fr500,frv))
"fsqrts$pack $FRj,$FRk"
(+ pack FRk OP_79 (rs-null) OPE1_05 FRj)
(set FRk (sqrt SF FRj))
! ((fr500 (unit u-float-sqrt)))
)
(dni fdsqrts
--- 6578,6598 ----
(dni cfabss
"Conditional floating point absolute value, single"
! ((UNIT FMALL) (FR500-MAJOR F-1) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
"cfabss$pack $FRj,$FRk,$CCi,$cond"
(+ pack FRj OP_6C (rs-null) CCi cond OPE4_2 FRk)
(if (eq CCi (or cond 2))
(set FRk (abs FRj)))
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
)
(dni fsqrts
"Square root single"
! ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
"fsqrts$pack $FRj,$FRk"
(+ pack FRk OP_79 (rs-null) OPE1_05 FRj)
(set FRk (sqrt SF FRj))
! ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
)
(dni fdsqrts
***************
*** 6067,6113 ****
(dni cfsqrts
"Conditional square root single"
! ((UNIT FM01) (FR500-MAJOR F-4) (MACH simple,tomcat,fr500,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)))
)
(dni nfsqrts
"Non exception square root, single"
! ((UNIT FM01) (FR500-MAJOR F-4) (MACH simple,tomcat,fr500,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)))
)
(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))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
(set FRk (operation FRi FRj))
! ((fr500 (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")
(dni fdivs
"div single float"
! ((UNIT FM01) (FR500-MAJOR F-4) (MACH simple,tomcat,fr500,frv))
"fdivs$pack $FRi,$FRj,$FRk"
(+ pack FRk OP_79 FRi OPE1_09 FRj)
(set FRk (div FRi FRj))
! ((fr500 (unit u-float-div)))
)
(define-pmacro (float-binary-op-d name operation op ope major comment)
--- 6630,6677 ----
(dni cfsqrts
"Conditional square root single"
! ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
"cfsqrts$pack $FRj,$FRk,$CCi,$cond"
(+ pack FRk OP_6E (rs-null) CCi cond OPE4_2 FRj)
(if (eq CCi (or cond 2))
(set FRk (sqrt SF FRj)))
! ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
)
(dni nfsqrts
"Non exception square root, single"
! ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
"nfsqrts$pack $FRj,$FRk"
(+ pack FRk OP_79 (rs-null) OPE1_25 FRj)
(sequence ()
(c-call VOID "@cpu@_set_ne_index" (index-of FRk))
(set FRk (sqrt SF FRj)))
! ((fr500 (unit u-float-sqrt)) (fr550 (unit u-float-sqrt)))
)
(define-pmacro (float-binary-op-s name pipe attr operation op ope comment)
(dni name
(comment)
! (.splice (UNIT pipe) (MACH simple,tomcat,fr500,fr550,frv) (.unsplice attr))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
(set FRk (operation FRi FRj))
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
)
)
! (float-binary-op-s fadds FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) add OP_79 OPE1_06 "add single float")
! (float-binary-op-s fsubs FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) sub OP_79 OPE1_07 "sub single float")
! (float-binary-op-s fmuls FM01 ((FR500-MAJOR F-3) (FR550-MAJOR F-3)) mul OP_79 OPE1_08 "mul single float")
(dni fdivs
"div single float"
! ((UNIT FM01) (FR500-MAJOR F-4) (FR550-MAJOR F-3) (MACH simple,tomcat,fr500,fr550,frv))
"fdivs$pack $FRi,$FRj,$FRk"
(+ pack FRk OP_79 FRi OPE1_09 FRj)
(set FRk (div FRi FRj))
! ((fr500 (unit u-float-div))
! (fr550 (unit u-float-div)))
)
(define-pmacro (float-binary-op-d name operation op ope major comment)
***************
*** 6129,6135 ****
(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)
(.unsplice attr))
(.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
(+ pack FRk op FRi CCi cond ope FRj)
--- 6693,6699 ----
(define-pmacro (conditional-float-binary-op name pipe attr operation op ope profile comment)
(dni name
(comment)
! (.splice (UNIT pipe) (MACH simple,tomcat,fr500,fr550,frv)
(.unsplice attr))
(.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
(+ pack FRk op FRi CCi cond ope FRj)
***************
*** 6139,6161 ****
)
)
! (conditional-float-binary-op cfadds FMALL ((FR500-MAJOR F-2)) add OP_6D OPE4_0
! ((fr500 (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)))
"cond sub single")
! (conditional-float-binary-op cfmuls FM01 ((FR500-MAJOR F-3)) mul OP_6E OPE4_0
! ((fr500 (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)))
"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)
(.unsplice attr))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
--- 6703,6725 ----
)
)
! (conditional-float-binary-op cfadds FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) add OP_6D OPE4_0
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
"cond add single")
! (conditional-float-binary-op cfsubs FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) sub OP_6D OPE4_1
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
"cond sub single")
! (conditional-float-binary-op cfmuls FM01 ((FR500-MAJOR F-3) (FR550-MAJOR F-3)) mul OP_6E OPE4_0
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
"cond mul single")
! (conditional-float-binary-op cfdivs FM01 ((FR500-MAJOR F-4) (FR550-MAJOR F-3)) div OP_6E OPE4_1
! ((fr500 (unit u-float-div)) (fr550 (unit u-float-div)))
"cond div single")
(define-pmacro (ne-float-binary-op name pipe attr operation op ope profile comment)
(dni name
(comment)
! (.splice (UNIT pipe) (MACH simple,tomcat,fr500,fr550,frv)
(.unsplice attr))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
***************
*** 6166,6182 ****
)
)
! (ne-float-binary-op nfadds FMALL ((FR500-MAJOR F-2)) add OP_79 OPE1_26
! ((fr500 (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 sub single")
! (ne-float-binary-op nfmuls FM01 ((FR500-MAJOR F-3)) mul OP_79 OPE1_28
! ((fr500 (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 div single")
(define-pmacro (fcc-eq) 8)
--- 6730,6746 ----
)
)
! (ne-float-binary-op nfadds FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) add OP_79 OPE1_26
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
"ne add single")
! (ne-float-binary-op nfsubs FMALL ((FR500-MAJOR F-2) (FR550-MAJOR F-2)) sub OP_79 OPE1_27
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
"ne sub single")
! (ne-float-binary-op nfmuls FM01 ((FR500-MAJOR F-3) (FR550-MAJOR F-3)) mul OP_79 OPE1_28
! ((fr500 (unit u-float-arith)) (fr550 (unit u-float-arith)))
"ne mul single")
! (ne-float-binary-op nfdivs FM01 ((FR500-MAJOR F-4) (FR550-MAJOR F-3)) div OP_79 OPE1_29
! ((fr500 (unit u-float-div)) (fr550 (unit u-float-div)))
"ne div single")
(define-pmacro (fcc-eq) 8)
***************
*** 6196,6206 ****
(dni fcmps
"compare single float"
! ((UNIT FMALL) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,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)))
)
(dni fcmpd
--- 6760,6770 ----
(dni fcmps
"compare single float"
! ((UNIT FMALL) (FR500-MAJOR F-2) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
"fcmps$pack $FRi,$FRj,$FCCi_2"
(+ pack (cond-null) FCCi_2 OP_79 FRi OPE1_0A FRj)
(compare-and-set-fcc FRi FRj FCCi_2)
! ((fr500 (unit u-float-compare)) (fr550 (unit u-float-compare)))
)
(dni fcmpd
***************
*** 6214,6237 ****
(dni cfcmps
"Conditional compare single, float"
! ((UNIT FMALL) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,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)))
)
(dni fdcmps
"float dual compare single"
! ((UNIT FMALL) (FR500-MAJOR F-6) (MACH simple,tomcat,fr500,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)))
)
(define-pmacro (float-mul-with-add name add_sub arg1 arg2 targ op ope comment)
--- 6778,6801 ----
(dni cfcmps
"Conditional compare single, float"
! ((UNIT FMALL) (FR500-MAJOR F-2) (FR550-MAJOR F-2) (MACH simple,tomcat,fr500,fr550,frv))
"cfcmps$pack $FRi,$FRj,$FCCi_2,$CCi,$cond"
(+ pack (cond-null) FCCi_2 OP_6D FRi CCi cond OPE4_2 FRj)
(if (eq CCi (or cond 2))
(compare-and-set-fcc FRi FRj FCCi_2))
! ((fr500 (unit u-float-compare)) (fr550 (unit u-float-compare)))
)
(dni fdcmps
"float dual compare single"
! ((UNIT FMALL) (FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
"fdcmps$pack $FRi,$FRj,$FCCi_2"
(+ pack (cond-null) FCCi_2 OP_79 FRi OPE1_1A FRj)
(sequence ()
(compare-and-set-fcc FRi FRj FCCi_2)
(compare-and-set-fcc (nextreg h-fr FRi 1) (nextreg h-fr FRj 1)
(nextreg h-fccr FCCi_2 1)))
! ((fr500 (unit u-float-dual-compare)) (fr550 (unit u-float-dual-compare)))
)
(define-pmacro (float-mul-with-add name add_sub arg1 arg2 targ op ope comment)
***************
*** 6325,6335 ****
name add_sub arg1 arg2 targ op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR F-5) (MACH simple,tomcat,fr500,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)))
)
)
--- 6889,6899 ----
name add_sub arg1 arg2 targ op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR F-5) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack $" arg1 ",$" arg2 ",$" targ)
(+ pack targ op arg1 ope arg2)
(float-parallel-mul-add-semantics 1 add_sub arg1 arg2 targ)
! ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)
)
***************
*** 6395,6406 ****
(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))
(.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)))
)
)
--- 6959,6970 ----
(define-pmacro (conditional-float-parallel-mul-add name add_sub op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR F-5) (FR550-MAJOR F-4) CONDITIONAL (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
(+ pack FRk op FRi CCi cond ope FRj)
(float-parallel-mul-add-semantics (eq CCi (or cond 2))
add_sub FRi FRj FRk)
! ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)
)
***************
*** 6434,6440 ****
(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))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
(sequence ()
--- 6998,7004 ----
(define-pmacro (ne-float-parallel-mul-add name add_sub op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR F-5) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
(sequence ()
***************
*** 6443,6449 ****
(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)))
)
)
--- 7007,7013 ----
(c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
(set (nextreg h-fr FRk 1)
(add_sub (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))))
! ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)
)
***************
*** 6460,6489 ****
(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)))
)
)
! (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")
(dni fdmulcs
"Float dual cross multiply single"
! ((UNIT FM01) (FR500-MAJOR F-7) (MACH simple,tomcat,fr500,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)))
)
(dni nfdmulcs
"NE float dual cross multiply single"
! ((UNIT FM01) (FR500-MAJOR F-7) (MACH simple,tomcat,fr500,frv))
"nfdmulcs$pack $FRi,$FRj,$FRk"
(+ pack FRk OP_79 FRi OPE1_3F FRj)
(sequence ()
--- 7024,7053 ----
(set FRk (oper1 FRi FRj))
(set (nextreg h-fr FRk 1)
(oper2 (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))))
! ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)
)
! (float-dual-arith fdadds ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add add OP_79 OPE1_16 "dual add, single")
! (float-dual-arith fdsubs ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) sub sub OP_79 OPE1_17 "dual sub, single")
! (float-dual-arith fdmuls ((FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) mul mul OP_79 OPE1_18 "dual mul, single")
! (float-dual-arith fddivs ((FR500-MAJOR F-7) (MACH frv)) div div OP_79 OPE1_19 "dual div,single")
! (float-dual-arith fdsads ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add sub OP_79 OPE1_1E "dual add/sub, single")
(dni fdmulcs
"Float dual cross multiply single"
! ((UNIT FM01) (FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
"fdmulcs$pack $FRi,$FRj,$FRk"
(+ pack FRk OP_79 FRi OPE1_1F FRj)
(sequence ()
(set FRk (mul FRi (nextreg h-fr FRj 1)))
(set (nextreg h-fr FRk 1) (mul (nextreg h-fr FRi 1) FRj)))
! ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)
(dni nfdmulcs
"NE float dual cross multiply single"
! ((UNIT FM01) (FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv))
"nfdmulcs$pack $FRi,$FRj,$FRk"
(+ pack FRk OP_79 FRi OPE1_3F FRj)
(sequence ()
***************
*** 6491,6497 ****
(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)))
)
(define-pmacro (ne-float-dual-arith name attr oper1 oper2 op ope comment)
--- 7055,7061 ----
(set FRk (mul FRi (nextreg h-fr FRj 1)))
(c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
(set (nextreg h-fr FRk 1) (mul (nextreg h-fr FRi 1) FRj)))
! ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)
(define-pmacro (ne-float-dual-arith name attr oper1 oper2 op ope comment)
***************
*** 6506,6520 ****
(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)))
)
)
! (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")
(dni nfdcmps
"non-excepting dual float compare"
--- 7070,7084 ----
(c-call VOID "@cpu@_set_ne_index" (add (index-of FRk) 1))
(set (nextreg h-fr FRk 1)
(oper2 (nextreg h-fr FRi 1) (nextreg h-fr FRj 1))))
! ((fr500 (unit u-float-dual-arith)) (fr550 (unit u-float-dual-arith)))
)
)
! (ne-float-dual-arith nfdadds ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add add OP_79 OPE1_36 "ne dual add, single")
! (ne-float-dual-arith nfdsubs ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) sub sub OP_79 OPE1_37 "ne dual sub, single")
! (ne-float-dual-arith nfdmuls ((FR500-MAJOR F-7) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) mul mul OP_79 OPE1_38 "ne dual mul, single")
! (ne-float-dual-arith nfddivs ((FR500-MAJOR F-7) (MACH frv)) div div OP_79 OPE1_39 "ne dual div,single")
! (ne-float-dual-arith nfdsads ((FR500-MAJOR F-6) (FR550-MAJOR F-4) (MACH simple,tomcat,fr500,fr550,frv)) add sub OP_79 OPE1_3E "ne dual add/sub, single")
(dni nfdcmps
"non-excepting dual float compare"
***************
*** 6537,6561 ****
(dni mhsetlos
"Media set lower signed 12 bits"
! ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhsetlos$pack $u12,$FRklo"
(+ pack FRklo OP_78 OPE1_20 u12)
(set FRklo u12)
! ((fr400 (unit u-media-hilo)))
)
(dni mhsethis
"Media set upper signed 12 bits"
! ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhsethis$pack $u12,$FRkhi"
(+ pack FRkhi OP_78 OPE1_22 u12)
(set FRkhi u12)
! ((fr400 (unit u-media-hilo)))
)
(dni mhdsets
"Media dual set halfword signed 12 bits"
! ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhdsets$pack $u12,$FRintk"
(+ pack FRintk OP_78 OPE1_24 u12)
(sequence ()
--- 7101,7125 ----
(dni mhsetlos
"Media set lower signed 12 bits"
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-5) (FR400-MAJOR M-1))
"mhsetlos$pack $u12,$FRklo"
(+ pack FRklo OP_78 OPE1_20 u12)
(set FRklo u12)
! ((fr400 (unit u-media-hilo)) (fr550 (unit u-media-set (out FRintk FRklo))))
)
(dni mhsethis
"Media set upper signed 12 bits"
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-5) (FR400-MAJOR M-1))
"mhsethis$pack $u12,$FRkhi"
(+ pack FRkhi OP_78 OPE1_22 u12)
(set FRkhi u12)
! ((fr400 (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,fr550) (FR550-MAJOR M-5) (FR400-MAJOR M-1))
"mhdsets$pack $u12,$FRintk"
(+ pack FRintk OP_78 OPE1_24 u12)
(sequence ()
***************
*** 6563,6569 ****
(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)))
)
(define-pmacro (set-5-semantics target value)
--- 7127,7133 ----
(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)) (fr550 (unit u-media-set)))
)
(define-pmacro (set-5-semantics target value)
***************
*** 6577,6587 ****
(define-pmacro (media-set-5 name hilo op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (MACH fr400) (FR400-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)))
)
)
--- 7141,7151 ----
(define-pmacro (media-set-5 name hilo op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-5) (FR400-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)) (fr550 (unit u-media-set (out FRintk (.sym FRk hilo)))))
)
)
***************
*** 6590,6596 ****
(dni mhdseth
"Media dual set halfword upper 5 bits"
! ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhdseth$pack $s5,$FRintk"
(+ pack FRintk OP_78 (FRi-null) OPE1_25 (misc-null-11) s5)
(sequence ()
--- 7154,7160 ----
(dni mhdseth
"Media dual set halfword upper 5 bits"
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-5) (FR400-MAJOR M-1))
"mhdseth$pack $s5,$FRintk"
(+ pack FRintk OP_78 (FRi-null) OPE1_25 (misc-null-11) s5)
(sequence ()
***************
*** 6598,6615 ****
(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)))
)
(define-pmacro (media-logic-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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)))
)
)
--- 7162,7179 ----
(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)) (fr550 (unit u-media-set)))
)
(define-pmacro (media-logic-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-MAJOR M-1))
(.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)) (fr550 (unit u-media)))
)
)
***************
*** 6620,6632 ****
(define-pmacro (conditional-media-logic name operation op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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)))
)
)
--- 7184,7196 ----
(define-pmacro (conditional-media-logic name operation op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-MAJOR M-1) 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)) (fr550 (unit u-media)))
)
)
***************
*** 6636,6669 ****
(dni mnot
("mnot")
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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)))
)
(dni cmnot
("cmnot")
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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)))
)
(define-pmacro (media-rotate-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-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)))
)
)
--- 7200,7233 ----
(dni mnot
("mnot")
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-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)) (fr550 (unit u-media)))
)
(dni cmnot
("cmnot")
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-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)) (fr550 (unit u-media)))
)
(define-pmacro (media-rotate-r-r name operation op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
(.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)) (fr550 (unit u-media)))
)
)
***************
*** 6673,6684 ****
(define-pmacro (media-cut-r-r name arg op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-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)))
)
)
--- 7237,7248 ----
(define-pmacro (media-cut-r-r name arg op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
(.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)) (fr550 (unit u-media)))
)
)
***************
*** 6688,6699 ****
(define-pmacro (media-cut-acc name arg op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
(.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)))
)
)
--- 7252,7263 ----
(define-pmacro (media-cut-acc name arg op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
(.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)) (fr550 (unit u-media-3-acc)))
)
)
***************
*** 6703,6714 ****
(define-pmacro (media-cut-acc-ss name arg op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
(.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)))
)
)
--- 7267,7278 ----
(define-pmacro (media-cut-acc-ss name arg op ope comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
(.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)) (fr550 (unit u-media-3-acc)))
)
)
***************
*** 6723,6729 ****
(dni mdcutssi
"Media dual cut with signed saturation"
! ((UNIT FMLOW) (MACH fr400) (FR400-MAJOR M-2))
"mdcutssi$pack $ACC40Si,$s6,$FRintkeven"
(+ pack FRintkeven OP_78 ACC40Si OPE1_0E s6)
(if (register-unaligned ACC40Si 2)
--- 7287,7293 ----
(dni mdcutssi
"Media dual cut with signed saturation"
! ((UNIT FMLOW) (MACH fr400,fr550) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"mdcutssi$pack $ACC40Si,$s6,$FRintkeven"
(+ pack FRintkeven OP_78 ACC40Si OPE1_0E s6)
(if (register-unaligned ACC40Si 2)
***************
*** 6736,6742 ****
(c-call SI "@cpu@_media_cut_ss"
(nextreg h-acc40S ACC40Si 1) s6)))))
((fr400 (unit u-media-4-acc-dual
! (out FRintk FRintkeven))))
)
; The (add (xxxx) (mul arg 0)) is a hack to get a reference to arg generated
--- 7300,7306 ----
(c-call SI "@cpu@_media_cut_ss"
(nextreg h-acc40S ACC40Si 1) s6)))))
((fr400 (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,6768 ****
(dni maveh
"Media dual average"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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)))
)
(define-pmacro (media-dual-shift name operation op ope profile comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$u6,$FRintk")
(+ pack FRintk op FRinti ope u6)
(sequence ()
--- 7315,7332 ----
(dni maveh
"Media dual average"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-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)) (fr550 (unit u-media)))
)
(define-pmacro (media-dual-shift name operation op ope profile comment)
(dni name
(comment)
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$u6,$FRintk")
(+ pack FRintk op FRinti ope u6)
(sequence ()
***************
*** 6778,6796 ****
)
(media-dual-shift msllhi sll OP_7B OPE1_09
! ((fr400 (unit u-media-3)) (fr500 (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)))
"Media dual shift right logical")
(media-dual-shift msrahi sra OP_7B OPE1_0B
! ((fr400 (unit u-media-6)) (fr500 (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))
(.str name "$pack $FRintieven,$s6,$FRintkeven")
(+ pack FRintkeven op FRintieven ope s6)
(if (orif (register-unaligned FRintieven 2)
--- 7342,7360 ----
)
(media-dual-shift msllhi sll OP_7B OPE1_09
! ((fr400 (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)) (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)) (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,fr550) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$s6,$FRintkeven")
(+ pack FRintkeven op FRintieven ope s6)
(if (orif (register-unaligned FRintieven 2)
***************
*** 6803,6817 ****
(and s6 #x1f)))))
((fr400 (unit u-media-3-quad
(in FRinti FRintieven)
! (out FRintk FRintkeven))))
)
)
(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))
"mcplhi$pack $FRinti,$u6,$FRintk"
(+ pack FRintk OP_78 FRinti OPE1_0C u6)
(sequence ((HI arg1) (HI arg2) (HI shift))
--- 7367,7381 ----
(and s6 #x1f)))))
((fr400 (unit u-media-3-quad
(in FRinti FRintieven)
! (out FRintk FRintkeven))) (fr550 (unit u-media-quad)))
)
)
(media-dual-word-rotate-r-r mdrotli rol OP_78 OPE1_0B "rotate left reg/reg")
(dni mcplhi
! "Media bit concatenate, halfword"
! ((UNIT FMLOW) (MACH fr400,fr550) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"mcplhi$pack $FRinti,$u6,$FRintk"
(+ pack FRintk OP_78 FRinti OPE1_0C u6)
(sequence ((HI arg1) (HI arg2) (HI shift))
***************
*** 6826,6837 ****
(sub 15 shift)))
(set arg1 (or HI arg1 arg2))))
(set (halfword hi FRintk 0) arg1))
! ((fr400 (unit u-media-3-dual)))
)
(dni mcpli
! "Media dual couple, word"
! ((UNIT FMLOW) (MACH fr400) (FR400-MAJOR M-2))
"mcpli$pack $FRinti,$u6,$FRintk"
(+ pack FRintk OP_78 FRinti OPE1_0D u6)
(sequence ((SI tmp) (SI shift))
--- 7390,7401 ----
(sub 15 shift)))
(set arg1 (or HI arg1 arg2))))
(set (halfword hi FRintk 0) arg1))
! ((fr400 (unit u-media-3-dual)) (fr550 (unit u-media-3-dual)))
)
(dni mcpli
! "Media bit concatenate, word"
! ((UNIT FMLOW) (MACH fr400,fr550) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"mcpli$pack $FRinti,$u6,$FRintk"
(+ pack FRintk OP_78 FRinti OPE1_0D u6)
(sequence ((SI tmp) (SI shift))
***************
*** 6844,6850 ****
(sub 31 shift)))
(set tmp (or tmp tmp1))))
(set FRintk tmp))
! ((fr400 (unit u-media-3-dual)))
)
(define-pmacro (saturate arg max min result)
--- 7408,7414 ----
(sub 31 shift)))
(set tmp (or tmp tmp1))))
(set FRintk tmp))
! ((fr400 (unit u-media-3-dual)) (fr550 (unit u-media-3-dual)))
)
(define-pmacro (saturate arg max min result)
***************
*** 6857,6863 ****
(dni msaths
"Media dual saturation signed"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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))
--- 7421,7427 ----
(dni msaths
"Media dual saturation signed"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-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))
***************
*** 6865,6876 ****
(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)))
)
(dni mqsaths
"Media quad saturation signed"
! ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mqsaths$pack $FRintieven,$FRintjeven,$FRintkeven"
(+ pack FRintkeven OP_78 FRintieven OPE1_0F FRintjeven)
(if (orif (register-unaligned FRintieven 2)
--- 7429,7440 ----
(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)) (fr550 (unit u-media)))
)
(dni mqsaths
"Media quad saturation signed"
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-2) (FR400-MAJOR M-1))
"mqsaths$pack $FRintieven,$FRintjeven,$FRintkeven"
(+ pack FRintkeven OP_78 FRintieven OPE1_0F FRintjeven)
(if (orif (register-unaligned FRintieven 2)
***************
*** 6889,6895 ****
((fr400 (unit u-media-1-quad
(in FRinti FRintieven)
(in FRintj FRintjeven)
! (out FRintk FRintkeven))))
)
(define-pmacro (saturate-unsigned arg max result)
--- 7453,7459 ----
((fr400 (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,6906 ****
(dni msathu
"Media dual saturation unsigned"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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))
--- 7464,7470 ----
(dni msathu
"Media dual saturation unsigned"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-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))
***************
*** 6908,6920 ****
(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)))
)
(define-pmacro (media-dual-compare name mode op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$FRintj,$FCCk")
(+ pack (cond-null) FCCk op FRinti ope FRintj)
(if (register-unaligned FCCk 2)
--- 7472,7484 ----
(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)) (fr550 (unit u-media)))
)
(define-pmacro (media-dual-compare name mode op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$FRintj,$FCCk")
(+ pack (cond-null) FCCk op FRinti ope FRintj)
(if (register-unaligned FCCk 2)
***************
*** 6926,6932 ****
(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)))
)
)
--- 7490,7496 ----
(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)) (fr550 (unit u-media)))
)
)
***************
*** 6958,6964 ****
(dni mabshs
"Media dual absolute value, halfword"
! ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mabshs$pack $FRintj,$FRintk"
(+ pack FRintk OP_78 (FRi-null) OPE1_0A FRintj)
(sequence ((HI arghi) (HI arglo))
--- 7522,7528 ----
(dni mabshs
"Media dual absolute value, halfword"
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-2) (FR400-MAJOR M-1))
"mabshs$pack $FRintj,$FRintk"
(+ pack FRintk OP_78 (FRi-null) OPE1_0A FRintj)
(sequence ((HI arghi) (HI arglo))
***************
*** 6970,6976 ****
(halfword hi FRintk 0))
(saturate-v (abs arglo) 32767 -32768 (msr-sie-fri-lo)
(halfword lo FRintk 0)))
! ((fr400 (unit u-media-1)))
)
(define-pmacro (media-arith-sat-semantics
--- 7534,7540 ----
(halfword hi FRintk 0))
(saturate-v (abs arglo) 32767 -32768 (msr-sie-fri-lo)
(halfword lo FRintk 0)))
! ((fr400 (unit u-media-1)) (fr550 (unit u-media)))
)
(define-pmacro (media-arith-sat-semantics
***************
*** 6994,7005 ****
(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))
(.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)))
)
)
--- 7558,7569 ----
(define-pmacro (media-dual-arith-sat name operation mode max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-MAJOR M-1))
(.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)) (fr550 (unit u-media)))
)
)
***************
*** 7013,7025 ****
name operation mode max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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)))
)
)
--- 7577,7589 ----
name operation mode max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-MAJOR M-1) 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)) (fr550 (unit u-media)))
)
)
***************
*** 7059,7065 ****
(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))
(.str name "$pack $FRintieven,$FRintjeven,$FRintkeven")
(+ pack FRintkeven op FRintieven ope FRintjeven)
(media-quad-arith-sat-semantics 1 operation mode max min)
--- 7623,7629 ----
(define-pmacro (media-quad-arith-sat name operation mode max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$FRintkeven")
(+ pack FRintkeven op FRintieven ope FRintjeven)
(media-quad-arith-sat-semantics 1 operation mode max min)
***************
*** 7070,7076 ****
(fr500 (unit u-media-quad-arith
(in FRinti FRintieven)
(in FRintj FRintjeven)
! (out FRintk FRintkeven))))
)
)
--- 7634,7640 ----
(fr500 (unit u-media-quad-arith
(in FRinti FRintieven)
(in FRintj FRintjeven)
! (out FRintk FRintkeven))) (fr550 (unit u-media-quad)))
)
)
***************
*** 7084,7090 ****
name operation mode max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-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))
--- 7648,7654 ----
name operation mode max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-2) (FR400-MAJOR M-2) 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))
***************
*** 7096,7102 ****
(fr500 (unit u-media-quad-arith
(in FRinti FRintieven)
(in FRintj FRintjeven)
! (out FRintk FRintkeven))))
)
)
--- 7660,7666 ----
(fr500 (unit u-media-quad-arith
(in FRinti FRintieven)
(in FRintj FRintjeven)
! (out FRintk FRintkeven))) (fr550 (unit u-media-quad)))
)
)
***************
*** 7109,7123 ****
(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))
(.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)))
)
)
--- 7673,7689 ----
(define-pmacro (media-acc-arith-sat name operation mode max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-4) (FR400-MAJOR M-1))
(.str name "$pack $ACC40Si,$ACC40Sk")
(+ pack ACC40Sk op ACC40Si ope (ACCj-null))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Si 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (media-arith-sat-semantics operation ACC40Si
! (nextreg h-acc40S ACC40Si 1)
! ACC40Sk mode max min (msr-sie-acci)))))
! ((fr400 (unit u-media-2-acc)) (fr550 (unit u-media-4-acc)))
)
)
***************
*** 7130,7154 ****
comment)
(dni name
(comment)
! ((UNIT MDUALACC) (MACH fr400) (FR400-MAJOR M-2))
(.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)))
)
)
--- 7696,7722 ----
comment)
(dni name
(comment)
! ((UNIT MDUALACC) (MACH fr400,fr550) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
(.str name "$pack $ACC40Si,$ACC40Sk")
(+ pack ACC40Sk op ACC40Si ope (ACCj-null))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Si 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (register-unaligned ACC40Sk 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (sequence ()
! (media-arith-sat-semantics operation ACC40Si
! (nextreg h-acc40S ACC40Si 1)
! ACC40Sk mode max min
! (msr-sie-acci))
! (media-arith-sat-semantics operation
! (nextreg h-acc40S ACC40Si 2)
! (nextreg h-acc40S ACC40Si 3)
! (nextreg h-acc40S ACC40Sk 1)
! mode max min
! (msr-sie-acci-1)))))))
! ((fr400 (unit u-media-2-acc-dual)) (fr550 (unit u-media-4-acc-dual)))
)
)
***************
*** 7159,7228 ****
(dni masaccs
"Media add and subtract signed accumulator with saturation"
! ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"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)))
)
(dni mdasaccs
"Media add and subtract signed accumulator with saturation"
! ((UNIT MDUALACC) (MACH fr400) (FR400-MAJOR M-2))
"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)))
)
(define-pmacro (media-multiply-semantics conv arg1 arg2 res)
--- 7727,7800 ----
(dni masaccs
"Media add and subtract signed accumulator with saturation"
! ((UNIT FMALL) (MACH fr400,fr550) (FR550-MAJOR M-4) (FR400-MAJOR M-1))
"masaccs$pack $ACC40Si,$ACC40Sk"
(+ pack ACC40Sk OP_78 ACC40Si OPE1_08 (ACCj-null))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Si 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (register-unaligned ACC40Sk 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (sequence ()
! (media-arith-sat-semantics add ACC40Si
! (nextreg h-acc40S ACC40Si 1)
! ACC40Sk DI
! #x7fffffffff
! (inv DI #x7fffffffff)
! (msr-sie-acci))
! (media-arith-sat-semantics sub ACC40Si
! (nextreg h-acc40S ACC40Si 1)
! (nextreg h-acc40S ACC40Sk 1)
! DI
! #x7fffffffff
! (inv DI #x7fffffffff)
! (msr-sie-acci-1)))))))
! ((fr400 (unit u-media-2-add-sub)) (fr550 (unit u-media-4-add-sub)))
)
(dni mdasaccs
"Media add and subtract signed accumulator with saturation"
! ((UNIT MDUALACC) (MACH fr400,fr550) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
"mdasaccs$pack $ACC40Si,$ACC40Sk"
(+ pack ACC40Sk OP_78 ACC40Si OPE1_09 (ACCj-null))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Si))
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Si 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (register-unaligned ACC40Sk 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (sequence ()
! (media-arith-sat-semantics add ACC40Si
! (nextreg h-acc40S ACC40Si 1)
! ACC40Sk DI
! #x7fffffffff
! (inv DI #x7fffffffff)
! (msr-sie-acci))
! (media-arith-sat-semantics sub ACC40Si
! (nextreg h-acc40S ACC40Si 1)
! (nextreg h-acc40S ACC40Sk 1)
! DI
! #x7fffffffff
! (inv DI #x7fffffffff)
! (msr-sie-acci-1))
! (media-arith-sat-semantics add
! (nextreg h-acc40S ACC40Si 2)
! (nextreg h-acc40S ACC40Si 3)
! (nextreg h-acc40S ACC40Sk 2)
! DI
! #x7fffffffff
! (inv DI #x7fffffffff)
! (msr-sie-acci-2))
! (media-arith-sat-semantics sub
! (nextreg h-acc40S ACC40Si 2)
! (nextreg h-acc40S ACC40Si 3)
! (nextreg h-acc40S ACC40Sk 3)
! DI
! #x7fffffffff
! (inv DI #x7fffffffff)
! (msr-sie-acci-3)))))))
! ((fr400 (unit u-media-2-add-sub-dual)) (fr550 (unit u-media-4-add-sub-dual)))
)
(define-pmacro (media-multiply-semantics conv arg1 arg2 res)
***************
*** 7230,7255 ****
)
(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)))))
)
(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)
(.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)))
)
)
--- 7802,7828 ----
)
(define-pmacro (media-dual-multiply-semantics cond mode conv rhs1 rhs2)
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Sk 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if cond
! (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
! (extract-hilo FRinti 0 FRintj 0
! argihi argilo argjhi argjlo)
! (media-multiply-semantics conv argihi rhs1 ACC40Sk)
! (media-multiply-semantics conv argilo rhs2
! (nextreg h-acc40S ACC40Sk 1))))))
)
(define-pmacro (media-dual-multiply name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1) 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)) (fr550 (unit u-media-4)))
)
)
***************
*** 7263,7275 ****
name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1)
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)))
)
)
--- 7836,7848 ----
name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1)
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)) (fr550 (unit u-media-4)))
)
)
***************
*** 7277,7307 ****
(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))))))
)
(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)
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
(+ pack ACC40Sk op FRintieven ope FRintjeven)
(media-quad-multiply-semantics 1 mode conv rhs1 rhs2)
--- 7850,7881 ----
(conditional-media-dual-multiply cmmulhu UHI zext argjhi argjlo OP_72 OPE4_1 "Conditional Media dual multiply unsigned")
(define-pmacro (media-quad-multiply-semantics cond mode conv rhs1 rhs2)
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Sk 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (orif (register-unaligned FRintieven 2)
! (register-unaligned FRintjeven 2))
! (c-call VOID "@cpu@_media_register_not_aligned")
! (if cond
! (sequence ((mode argihi) (mode argilo)
! (mode argjhi) (mode argjlo))
! (extract-hilo FRintieven 0 FRintjeven 0
! argihi argilo argjhi argjlo)
! (media-multiply-semantics conv argihi rhs1 ACC40Sk)
! (media-multiply-semantics conv argilo rhs2
! (nextreg h-acc40S ACC40Sk 1))
! (extract-hilo FRintieven 1 FRintjeven 1
! argihi argilo argjhi argjlo)
! (media-multiply-semantics conv argihi rhs1
! (nextreg h-acc40S ACC40Sk 2))
! (media-multiply-semantics conv argilo rhs2
! (nextreg h-acc40S ACC40Sk 3)))))))
)
(define-pmacro (media-quad-multiply name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-2) PRESERVE-OVF)
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
(+ pack ACC40Sk op FRintieven ope FRintjeven)
(media-quad-multiply-semantics 1 mode conv rhs1 rhs2)
***************
*** 7310,7316 ****
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))))
)
)
--- 7884,7890 ----
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7324,7330 ****
name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2)
PRESERVE-OVF CONDITIONAL)
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond")
(+ pack ACC40Sk op FRintieven CCi cond ope FRintjeven)
--- 7898,7904 ----
name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-2)
PRESERVE-OVF CONDITIONAL)
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond")
(+ pack ACC40Sk op FRintieven CCi cond ope FRintjeven)
***************
*** 7334,7340 ****
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))))
)
)
--- 7908,7914 ----
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7350,7379 ****
(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)))))
)
(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))
(.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)))
)
)
--- 7924,7954 ----
(define-pmacro (media-dual-multiply-acc-semantics
cond mode conv addop rhw res max min)
! (if (c-call SI "@cpu@_check_acc_range" (index-of res))
! (if (register-unaligned res 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if cond
! (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
! (extract-hilo FRinti 0 FRintj 0
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjhi
! res
! max min (msr-sie-acci))
! (media-multiply-acc-semantics conv argilo addop argjlo
! (nextreg rhw res 1)
! max min (msr-sie-acci-1))))))
)
(define-pmacro (media-dual-multiply-acc
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1))
(.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)) (fr550 (unit u-media-4)))
)
)
***************
*** 7401,7413 ****
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)
(.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)))
)
)
--- 7976,7988 ----
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1) 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)) (fr550 (unit u-media-4)))
)
)
***************
*** 7423,7460 ****
(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))))))
)
(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))
(.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)
--- 7998,8036 ----
(define-pmacro (media-quad-multiply-acc-semantics
cond mode conv addop rhw res max min)
! (if (c-call SI "@cpu@_check_acc_range" (index-of res))
! (if (register-unaligned res 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (orif (register-unaligned FRintieven 2)
! (register-unaligned FRintjeven 2))
! (c-call VOID "@cpu@_media_register_not_aligned")
! (if cond
! (sequence ((mode argihi) (mode argilo)
! (mode argjhi) (mode argjlo))
! (extract-hilo FRintieven 0 FRintjeven 0
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjhi
! res
! max min (msr-sie-acci))
! (media-multiply-acc-semantics conv argilo addop argjlo
! (nextreg rhw res 1)
! max min (msr-sie-acci-1))
! (extract-hilo FRintieven 1 FRintjeven 1
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjhi
! (nextreg rhw res 2)
! max min (msr-sie-acci-2))
! (media-multiply-acc-semantics conv argilo addop argjlo
! (nextreg rhw res 3)
! max min
! (msr-sie-acci-3)))))))
)
(define-pmacro (media-quad-multiply-acc
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
(.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)
***************
*** 7463,7469 ****
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))))
)
)
--- 8039,8045 ----
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7481,7487 ****
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)
(.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))
--- 8057,8063 ----
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-2) 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))
***************
*** 7491,7497 ****
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))))
)
)
--- 8067,8073 ----
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-mul
(in FRinti FRintieven)
! (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7507,7551 ****
(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))))))
)
(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))
(.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))))
)
)
--- 8083,8128 ----
(define-pmacro (media-quad-multiply-cross-acc-semantics
cond mode conv addop rhw res max min)
! (if (c-call SI "@cpu@_check_acc_range" (index-of res))
! (if (register-unaligned res 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (orif (register-unaligned FRintieven 2)
! (register-unaligned FRintjeven 2))
! (c-call VOID "@cpu@_media_register_not_aligned")
! (if cond
! (sequence ((mode argihi) (mode argilo)
! (mode argjhi) (mode argjlo))
! (extract-hilo FRintieven 0 FRintjeven 0
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjhi
! (nextreg rhw res 2)
! max min (msr-sie-acci-2))
! (media-multiply-acc-semantics conv argilo addop argjlo
! (nextreg rhw res 3)
! max min (msr-sie-acci-3))
! (extract-hilo FRintieven 1 FRintjeven 1
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjhi
! res
! max min (msr-sie-acci))
! (media-multiply-acc-semantics conv argilo addop argjlo
! (nextreg rhw res 1)
! max min
! (msr-sie-acci-1)))))))
)
(define-pmacro (media-quad-multiply-cross-acc
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
! ((UNIT MDUALACC) (MACH fr400,fr550) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
(.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))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7556,7600 ****
(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))))))
)
(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))
(.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))))
)
)
--- 8133,8178 ----
(define-pmacro (media-quad-cross-multiply-cross-acc-semantics
cond mode conv addop rhw res max min)
! (if (c-call SI "@cpu@_check_acc_range" (index-of res))
! (if (register-unaligned res 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (orif (register-unaligned FRintieven 2)
! (register-unaligned FRintjeven 2))
! (c-call VOID "@cpu@_media_register_not_aligned")
! (if cond
! (sequence ((mode argihi) (mode argilo)
! (mode argjhi) (mode argjlo))
! (extract-hilo FRintieven 0 FRintjeven 0
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjlo
! (nextreg rhw res 2)
! max min (msr-sie-acci-2))
! (media-multiply-acc-semantics conv argilo addop argjhi
! (nextreg rhw res 3)
! max min (msr-sie-acci-3))
! (extract-hilo FRintieven 1 FRintjeven 1
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjlo
! res
! max min (msr-sie-acci))
! (media-multiply-acc-semantics conv argilo addop argjhi
! (nextreg rhw res 1)
! max min
! (msr-sie-acci-1)))))))
)
(define-pmacro (media-quad-cross-multiply-cross-acc
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
! ((UNIT MDUALACC) (MACH fr400,fr550) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
(.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))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7605,7649 ****
(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))))))
)
(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))
(.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))))
)
)
--- 8183,8228 ----
(define-pmacro (media-quad-cross-multiply-acc-semantics
cond mode conv addop rhw res max min)
! (if (c-call SI "@cpu@_check_acc_range" (index-of res))
! (if (register-unaligned res 4)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (orif (register-unaligned FRintieven 2)
! (register-unaligned FRintjeven 2))
! (c-call VOID "@cpu@_media_register_not_aligned")
! (if cond
! (sequence ((mode argihi) (mode argilo)
! (mode argjhi) (mode argjlo))
! (extract-hilo FRintieven 0 FRintjeven 0
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjlo
! res
! max min (msr-sie-acci))
! (media-multiply-acc-semantics conv argilo addop argjhi
! (nextreg rhw res 1)
! max min (msr-sie-acci-1))
! (extract-hilo FRintieven 1 FRintjeven 1
! argihi argilo argjhi argjlo)
! (media-multiply-acc-semantics conv argihi addop argjlo
! (nextreg rhw res 2)
! max min (msr-sie-acci-2))
! (media-multiply-acc-semantics conv argilo addop argjhi
! (nextreg rhw res 3)
! max min
! (msr-sie-acci-3)))))))
)
(define-pmacro (media-quad-cross-multiply-acc
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
! ((UNIT MDUALACC) (MACH fr400,fr550) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
(.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))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7671,7699 ****
)
(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)))
)
(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)))
)
(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))
(.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)))
)
)
--- 8250,8280 ----
)
(define-pmacro (media-dual-complex-semantics mode conv rhs1 rhs2 max min)
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
! (extract-hilo FRinti 0 FRintj 0 argihi argilo argjhi argjlo)
! (media-complex-semantics conv argihi rhs1 argilo rhs2 ACC40Sk
! max min (msr-sie-acci))))
)
(define-pmacro (media-dual-complex-semantics-i mode conv rhs1 rhs2 max min)
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (sequence ((mode argihi) (mode argilo) (mode argjhi) (mode argjlo))
! (extract-hilo FRinti 0 FRintj 0 argihi argilo argjhi argjlo)
! (media-complex-semantics-i conv argihi rhs1 argilo rhs2 ACC40Sk
! max min (msr-sie-acci))))
)
(define-pmacro (media-dual-complex
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1))
(.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-dual-mul)) (fr550 (unit u-media-4)))
)
)
***************
*** 7701,7712 ****
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
(.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)))
)
)
--- 8282,8293 ----
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1))
(.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)) (fr550 (unit u-media-4)))
)
)
***************
*** 7734,7746 ****
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1) 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)))
)
)
--- 8315,8327 ----
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1) 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-dual-mul)) (fr550 (unit u-media-4)))
)
)
***************
*** 7748,7760 ****
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1) 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)))
)
)
--- 8329,8341 ----
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-1) 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)) (fr550 (unit u-media-4)))
)
)
***************
*** 7782,7813 ****
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
(.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)))))
((fr400 (unit u-media-2-quad
(in FRinti FRintieven)
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-complex
(in FRinti FRintieven)
! (in FRintj FRintjeven))))
)
)
--- 8363,8395 ----
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
(+ pack ACC40Sk op FRintieven ope FRintjeven)
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Sk 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (orif (register-unaligned FRintieven 2)
! (register-unaligned FRintjeven 2))
! (c-call VOID "@cpu@_media_register_not_aligned")
! (sequence ((mode argihi) (mode argilo)
! (mode argjhi) (mode argjlo))
! (extract-hilo FRintieven 0 FRintjeven 0
! argihi argilo argjhi argjlo)
! (media-complex-semantics conv argihi rhs1 argilo rhs2
! ACC40Sk
! max min (msr-sie-acci))
! (extract-hilo FRintieven 1 FRintjeven 1
! argihi argilo argjhi argjlo)
! (media-complex-semantics conv argihi rhs1 argilo rhs2
! (nextreg h-acc40S ACC40Sk 1)
! max min (msr-sie-acci-1))))))
((fr400 (unit u-media-2-quad
(in FRinti FRintieven)
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-complex
(in FRinti FRintieven)
! (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7815,7846 ****
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
(.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)))))
((fr400 (unit u-media-2-quad
(in FRinti FRintieven)
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-complex
(in FRinti FRintieven)
! (in FRintj FRintjeven))))
)
)
--- 8397,8429 ----
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
! ((UNIT FMALL) (FR500-MAJOR M-4) (FR550-MAJOR M-4) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
(+ pack ACC40Sk op FRintieven ope FRintjeven)
! (if (c-call SI "@cpu@_check_acc_range" (index-of ACC40Sk))
! (if (register-unaligned ACC40Sk 2)
! (c-call VOID "@cpu@_media_acc_not_aligned")
! (if (orif (register-unaligned FRintieven 2)
! (register-unaligned FRintjeven 2))
! (c-call VOID "@cpu@_media_register_not_aligned")
! (sequence ((mode argihi) (mode argilo)
! (mode argjhi) (mode argjlo))
! (extract-hilo FRintieven 0 FRintjeven 0
! argihi argilo argjhi argjlo)
! (media-complex-semantics-i conv argihi rhs1 argilo rhs2
! ACC40Sk
! max min (msr-sie-acci))
! (extract-hilo FRintieven 1 FRintjeven 1
! argihi argilo argjhi argjlo)
! (media-complex-semantics-i conv argihi rhs1 argilo rhs2
! (nextreg h-acc40S ACC40Sk 1)
! max min (msr-sie-acci-1))))))
((fr400 (unit u-media-2-quad
(in FRinti FRintieven)
(in FRintj FRintjeven)))
(fr500 (unit u-media-quad-complex
(in FRinti FRintieven)
! (in FRintj FRintjeven))) (fr550 (unit u-media-4-quad)))
)
)
***************
*** 7882,7903 ****
(dni mexpdhw
"Media expand halfword to word"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-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)))
)
(dni cmexpdhw
"Conditional media expand halfword to word"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-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)))
)
(define-pmacro (media-expand-halfword-to-double-semantics cond)
--- 8465,8486 ----
(dni mexpdhw
"Media expand halfword to word"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-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)) (fr550 (unit u-media)))
)
(dni cmexpdhw
"Conditional media expand halfword to word"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1) 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)) (fr550 (unit u-media)))
)
(define-pmacro (media-expand-halfword-to-double-semantics cond)
***************
*** 7918,7958 ****
(dni mexpdhd
"Media expand halfword to double"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-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)))
(fr500 (unit u-media-dual-expand
! (out FRintk FRintkeven))))
)
(dni cmexpdhd
"Conditional media expand halfword to double"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-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)))
(fr500 (unit u-media-dual-expand
! (out FRintk FRintkeven))))
)
(dni mpackh
"Media halfword pack"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-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)))
)
(dni mdpackh
"Media dual pack"
! ((UNIT FM01) (FR500-MAJOR M-5) (FR400-MAJOR M-2))
"mdpackh$pack $FRintieven,$FRintjeven,$FRintkeven"
(+ pack FRintkeven OP_7B FRintieven OPE1_36 FRintjeven)
(if (orif (register-unaligned FRintieven 2)
--- 8501,8541 ----
(dni mexpdhd
"Media expand halfword to double"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-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)))
(fr500 (unit u-media-dual-expand
! (out FRintk FRintkeven))) (fr550 (unit u-media-dual-expand)))
)
(dni cmexpdhd
"Conditional media expand halfword to double"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-2) 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)))
(fr500 (unit u-media-dual-expand
! (out FRintk FRintkeven))) (fr550 (unit u-media-dual-expand)))
)
(dni mpackh
"Media halfword pack"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
"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)) (fr550 (unit u-media)))
)
(dni mdpackh
"Media dual pack"
! ((UNIT FM01) (FR500-MAJOR M-5) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"mdpackh$pack $FRintieven,$FRintjeven,$FRintkeven"
(+ pack FRintkeven OP_7B FRintieven OPE1_36 FRintjeven)
(if (orif (register-unaligned FRintieven 2)
***************
*** 7973,7979 ****
(fr500 (unit u-media-quad-arith
(in FRinti FRintieven)
(in FRintj FRintjeven)
! (out FRintk FRintkeven))))
)
(define-pmacro (media-unpack src soff targ toff)
--- 8556,8562 ----
(fr500 (unit u-media-quad-arith
(in FRinti FRintieven)
(in FRintj FRintjeven)
! (out FRintk FRintkeven))) (fr550 (unit u-media-quad)))
)
(define-pmacro (media-unpack src soff targ toff)
***************
*** 7986,7992 ****
(dni munpackh
"Media halfword unpack"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-2))
"munpackh$pack $FRinti,$FRintkeven"
(+ pack FRintkeven OP_7B FRinti OPE1_35 (FRj-null))
(if (register-unaligned FRintkeven 2)
--- 8569,8575 ----
(dni munpackh
"Media halfword unpack"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"munpackh$pack $FRinti,$FRintkeven"
(+ pack FRintkeven OP_7B FRinti OPE1_35 (FRj-null))
(if (register-unaligned FRintkeven 2)
***************
*** 7999,8005 ****
((fr400 (unit u-media-dual-expand
(out FRintk FRintkeven)))
(fr500 (unit u-media-dual-expand
! (out FRintk FRintkeven))))
)
(dni mdunpackh
--- 8582,8588 ----
((fr400 (unit u-media-dual-expand
(out FRintk FRintkeven)))
(fr500 (unit u-media-dual-expand
! (out FRintk FRintkeven))) (fr550 (unit u-media-dual-expand)))
)
(dni mdunpackh
***************
*** 8035,8041 ****
(dni mbtoh
"Media convert byte to halfword"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-2))
"mbtoh$pack $FRintj,$FRintkeven"
(+ pack FRintkeven OP_7B (FRi-null) OPE1_38 FRintj)
(sequence ()
--- 8618,8624 ----
(dni mbtoh
"Media convert byte to halfword"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"mbtoh$pack $FRintj,$FRintkeven"
(+ pack FRintkeven OP_7B (FRi-null) OPE1_38 FRintj)
(sequence ()
***************
*** 8046,8057 ****
((fr400 (unit u-media-dual-expand
(out FRintk FRintkeven)))
(fr500 (unit u-media-dual-btoh
! (out FRintk FRintkeven))))
)
(dni cmbtoh
"Conditional media convert byte to halfword"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-2) CONDITIONAL)
"cmbtoh$pack $FRintj,$FRintkeven,$CCi,$cond"
(+ pack FRintkeven OP_77 (FRi-null) CCi cond OPE4_0 FRintj)
(sequence ()
--- 8629,8640 ----
((fr400 (unit u-media-dual-expand
(out FRintk FRintkeven)))
(fr500 (unit u-media-dual-btoh
! (out FRintk FRintkeven))) (fr550 (unit u-media-dual-expand)))
)
(dni cmbtoh
"Conditional media convert byte to halfword"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-2) CONDITIONAL)
"cmbtoh$pack $FRintj,$FRintkeven,$CCi,$cond"
(+ pack FRintkeven OP_77 (FRi-null) CCi cond OPE4_0 FRintj)
(sequence ()
***************
*** 8062,8068 ****
((fr400 (unit u-media-dual-expand
(out FRintk FRintkeven)))
(fr500 (unit u-media-dual-btoh
! (out FRintk FRintkeven))))
)
(define-pmacro (mhtob-semantics cond)
--- 8645,8651 ----
((fr400 (unit u-media-dual-expand
(out FRintk FRintkeven)))
(fr500 (unit u-media-dual-btoh
! (out FRintk FRintkeven))) (fr550 (unit u-media-dual-expand (in FRinti FRintj))))
)
(define-pmacro (mhtob-semantics cond)
***************
*** 8078,8084 ****
(dni mhtob
"Media convert halfword to byte"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-2))
"mhtob$pack $FRintjeven,$FRintk"
(+ pack FRintk OP_7B (FRi-null) OPE1_39 FRintjeven)
(sequence ()
--- 8661,8667 ----
(dni mhtob
"Media convert halfword to byte"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"mhtob$pack $FRintjeven,$FRintk"
(+ pack FRintk OP_7B (FRi-null) OPE1_39 FRintjeven)
(sequence ()
***************
*** 8089,8100 ****
((fr400 (unit u-media-dual-htob
(in FRintj FRintjeven)))
(fr500 (unit u-media-dual-htob
! (in FRintj FRintjeven))))
)
(dni cmhtob
"Conditional media convert halfword to byte"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-2) CONDITIONAL)
"cmhtob$pack $FRintjeven,$FRintk,$CCi,$cond"
(+ pack FRintk OP_77 (FRi-null) CCi cond OPE4_1 FRintjeven)
(sequence ()
--- 8672,8683 ----
((fr400 (unit u-media-dual-htob
(in FRintj FRintjeven)))
(fr500 (unit u-media-dual-htob
! (in FRintj FRintjeven))) (fr550 (unit u-media-3-dual (in FRinti FRintjeven))))
)
(dni cmhtob
"Conditional media convert halfword to byte"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-2) CONDITIONAL)
"cmhtob$pack $FRintjeven,$FRintk,$CCi,$cond"
(+ pack FRintk OP_77 (FRi-null) CCi cond OPE4_1 FRintjeven)
(sequence ()
***************
*** 8105,8111 ****
((fr400 (unit u-media-dual-htob
(in FRintj FRintjeven)))
(fr500 (unit u-media-dual-htob
! (in FRintj FRintjeven))))
)
(define-pmacro (mbtohe-semantics cond)
--- 8688,8694 ----
((fr400 (unit u-media-dual-htob
(in FRintj FRintjeven)))
(fr500 (unit u-media-dual-htob
! (in FRintj FRintjeven))) (fr550 (unit u-media-3-dual (in FRinti FRintjeven))))
)
(define-pmacro (mbtohe-semantics cond)
***************
*** 8152,8158 ****
; Media NOP
; A special case of mclracc
(dni mnop "Media nop"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
"mnop$pack"
(+ pack (f-ACC40Sk 63) OP_7B (f-A 1) (misc-null-10) OPE1_3B (FRj-null))
(nop)
--- 8735,8741 ----
; Media NOP
; A special case of mclracc
(dni mnop "Media nop"
! ((UNIT FMALL) (FR500-MAJOR M-1) (FR550-MAJOR M-1) (FR400-MAJOR M-1))
"mnop$pack"
(+ pack (f-ACC40Sk 63) OP_7B (f-A 1) (misc-null-10) OPE1_3B (FRj-null))
(nop)
***************
*** 8162,8220 ****
; mclracc with #A==0
(dni mclracc-0
"Media clear accumulator(s)"
! ((UNIT FM01) (FR500-MAJOR M-3) (FR400-MAJOR M-1))
"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)))
)
; mclracc with #A==1
(dni mclracc-1
"Media clear accumulator(s)"
! ((UNIT MCLRACC-1) (FR500-MAJOR M-6) (FR400-MAJOR M-2))
"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)))
)
(dni mrdacc
"Media read accumulator"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
"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)))
)
(dni mrdaccg
"Media read accumulator guard"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR400-MAJOR M-1))
"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)))
)
(dni mwtacc
"Media write accumulator"
! ((UNIT FM01) (FR500-MAJOR M-3) (FR400-MAJOR M-1))
"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)))
)
(dni mwtaccg
"Media write accumulator guard"
! ((UNIT FM01) (FR500-MAJOR M-3) (FR400-MAJOR M-1))
"mwtaccg$pack $FRinti,$ACCGk"
(+ pack ACCGk OP_7B FRinti OPE1_3F (FRj-null))
(sequence ()
--- 8745,8803 ----
; mclracc with #A==0
(dni mclracc-0
"Media clear accumulator(s)"
! ((UNIT FM01) (FR500-MAJOR M-3) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
"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)) (fr550 (unit u-media-3-mclracc)))
)
; mclracc with #A==1
(dni mclracc-1
"Media clear accumulator(s)"
! ((UNIT MCLRACC-1) (FR500-MAJOR M-6) (FR550-MAJOR M-3) (FR400-MAJOR M-2))
"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)) (fr550 (unit u-media-3-mclracc)))
)
(dni mrdacc
"Media read accumulator"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
"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)) (fr550 (unit u-media-3-acc)))
)
(dni mrdaccg
"Media read accumulator guard"
! ((UNIT FM01) (FR500-MAJOR M-2) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
"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)) (fr550 (unit u-media-3-acc (in ACC40Si ACCGi))))
)
(dni mwtacc
"Media write accumulator"
! ((UNIT FM01) (FR500-MAJOR M-3) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
"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)) (fr550 (unit u-media-3-wtacc)))
)
(dni mwtaccg
"Media write accumulator guard"
! ((UNIT FM01) (FR500-MAJOR M-3) (FR550-MAJOR M-3) (FR400-MAJOR M-1))
"mwtaccg$pack $FRinti,$ACCGk"
(+ pack ACCGk OP_7B FRinti OPE1_3F (FRj-null))
(sequence ()
***************
*** 8222,8228 ****
(c-raw-call VOID "frv_ref_SI" ACCGk)
(set ACCGk FRinti))
((fr400 (unit u-media-4-accg))
! (fr500 (unit u-media)))
)
(define-pmacro (media-cop num op)
--- 8805,8811 ----
(c-raw-call VOID "frv_ref_SI" ACCGk)
(set ACCGk FRinti))
((fr400 (unit u-media-4-accg))
! (fr500 (unit u-media)) (fr550 (unit u-media-3-wtacc (in ACC40Sk ACCGk))))
)
(define-pmacro (media-cop num op)
***************
*** 8253,8259 ****
; Floating point NOP
(dni fnop
"Floating point nop"
! ((UNIT FMALL) (FR500-MAJOR F-8) (MACH simple,tomcat,fr500,frv))
"fnop$pack"
(+ pack (rd-null) OP_79 (FRi-null) OPE1_0D (FRj-null))
(nop)
--- 8836,8842 ----
; Floating point NOP
(dni fnop
"Floating point nop"
! ((UNIT FMALL) (FR500-MAJOR F-8) (FR550-MAJOR F-1) (MACH simple,tomcat,fr500,fr550,frv))
"fnop$pack"
(+ pack (rd-null) OP_79 (FRi-null) OPE1_0D (FRj-null))
(nop)
Index: cpu/frv.opc
===================================================================
RCS file: /cvs/src/src/cpu/frv.opc,v
retrieving revision 1.3
diff -c -p -r1.3 frv.opc
*** cpu/frv.opc 3 Sep 2003 23:03:45 -0000 1.3
--- cpu/frv.opc 6 Oct 2003 20:12:39 -0000
***************
*** 1,6 ****
/* Fujitsu FRV opcode support, for GNU Binutils. -*- C -*-
! Copyright 2003 Free Software Foundation, Inc.
Contributed by Red Hat Inc; developed under contract from Fujitsu.
--- 1,6 ----
/* Fujitsu FRV opcode support, for GNU Binutils. -*- C -*-
! Copyright 2000, 2001, 2003 Free Software Foundation, Inc.
Contributed by Red Hat Inc; developed under contract from Fujitsu.
***************
*** 49,55 ****
#define CGEN_VERBOSE_ASSEMBLER_ERRORS
/* Vliw support. */
! #define FRV_VLIW_SIZE 4 /* fr500 has largest vliw size of 4. */
typedef CGEN_ATTR_VALUE_TYPE VLIW_COMBO[FRV_VLIW_SIZE];
typedef struct
--- 49,56 ----
#define CGEN_VERBOSE_ASSEMBLER_ERRORS
/* Vliw support. */
! #define FRV_VLIW_SIZE 8 /* fr550 has largest vliw size of 8. */
! #define PAD_VLIW_COMBO ,UNIT_NIL,UNIT_NIL,UNIT_NIL,UNIT_NIL
typedef CGEN_ATTR_VALUE_TYPE VLIW_COMBO[FRV_VLIW_SIZE];
typedef struct
*************** typedef struct
*** 61,66 ****
--- 62,68 ----
CGEN_ATTR_VALUE_TYPE *unit_mapping;
VLIW_COMBO *current_vliw;
CGEN_ATTR_VALUE_TYPE major[FRV_VLIW_SIZE];
+ const CGEN_INSN* insn[FRV_VLIW_SIZE];
} FRV_VLIW;
int frv_is_branch_major PARAMS ((CGEN_ATTR_VALUE_TYPE, unsigned long));
*************** int spr_valid PARAMS ((long));
*** 76,81 ****
--- 78,84 ----
/* -- opc.c */
#include "elf/frv.h"
+ #include <stdio.h>
static int match_unit
PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE, CGEN_ATTR_VALUE_TYPE));
*************** static int fr400_check_insn_major_constr
*** 89,96 ****
PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE));
static int fr500_check_insn_major_constraints
PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE));
static int check_insn_major_constraints
! PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE));
int
frv_is_branch_major (CGEN_ATTR_VALUE_TYPE major, unsigned long mach)
--- 92,101 ----
PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE));
static int fr500_check_insn_major_constraints
PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE));
+ static int fr550_check_insn_major_constraints
+ PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE, const CGEN_INSN *));
static int check_insn_major_constraints
! PARAMS ((FRV_VLIW *, CGEN_ATTR_VALUE_TYPE, const CGEN_INSN *));
int
frv_is_branch_major (CGEN_ATTR_VALUE_TYPE major, unsigned long mach)
*************** frv_is_media_insn (const CGEN_INSN *insn
*** 190,221 ****
static VLIW_COMBO fr400_allowed_vliw[] =
{
/* slot0 slot1 slot2 slot3 */
! { UNIT_I0, UNIT_I1, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_B0, UNIT_NIL, UNIT_NIL },
! { UNIT_FM0, UNIT_FM1, UNIT_NIL, UNIT_NIL },
! { UNIT_FM0, UNIT_B0, UNIT_NIL, UNIT_NIL },
! { UNIT_B0, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_C, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL }
};
/* This table represents the allowable packing for vliw insns for the fr500.
Subsets of any given row are also allowed. */
static VLIW_COMBO fr500_allowed_vliw[] =
{
/* slot0 slot1 slot2 slot3 */
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_B0 },
! { UNIT_I0, UNIT_FM0, UNIT_FM1, UNIT_B0 },
! { UNIT_I0, UNIT_FM0, UNIT_B0, UNIT_B1 },
! { UNIT_I0, UNIT_I1, UNIT_B0, UNIT_B1 },
! { UNIT_I0, UNIT_B0, UNIT_B1, UNIT_NIL },
! { UNIT_FM0, UNIT_FM1, UNIT_B0, UNIT_B1 },
! { UNIT_FM0, UNIT_B0, UNIT_B1, UNIT_NIL },
! { UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL },
! { UNIT_C, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL }
};
/* Some insns are assigned specialized implementation units which map to
--- 195,263 ----
static VLIW_COMBO fr400_allowed_vliw[] =
{
/* slot0 slot1 slot2 slot3 */
! { UNIT_I0, UNIT_I1, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_I0, UNIT_FM0, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_I0, UNIT_B0, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_FM0, UNIT_FM1, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_FM0, UNIT_B0, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_B0, UNIT_NIL, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_C, UNIT_NIL, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO }
};
/* This table represents the allowable packing for vliw insns for the fr500.
+ The fr500 has only 4 vliw slots. Represent this by not allowing any insns
+ in the extra slots.
Subsets of any given row are also allowed. */
static VLIW_COMBO fr500_allowed_vliw[] =
{
/* slot0 slot1 slot2 slot3 */
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1 PAD_VLIW_COMBO },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_B0 PAD_VLIW_COMBO },
! { UNIT_I0, UNIT_FM0, UNIT_FM1, UNIT_B0 PAD_VLIW_COMBO },
! { UNIT_I0, UNIT_FM0, UNIT_B0, UNIT_B1 PAD_VLIW_COMBO },
! { UNIT_I0, UNIT_I1, UNIT_B0, UNIT_B1 PAD_VLIW_COMBO },
! { UNIT_I0, UNIT_B0, UNIT_B1, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_FM0, UNIT_FM1, UNIT_B0, UNIT_B1 PAD_VLIW_COMBO },
! { UNIT_FM0, UNIT_B0, UNIT_B1, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_C, UNIT_NIL, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO },
! { UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL PAD_VLIW_COMBO }
! };
!
! /* This table represents the allowable packing for vliw insns for the fr550.
! Subsets of any given row are also allowed. */
! static VLIW_COMBO fr550_allowed_vliw[] =
! {
! /* slot0 slot1 slot2 slot3 slot4 slot5 slot6 slot7 */
! { UNIT_I0, UNIT_I1, UNIT_I2, UNIT_I3, UNIT_B0, UNIT_B1 , UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_I1, UNIT_I2, UNIT_B0, UNIT_B1 , UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_I1, UNIT_B0, UNIT_B1 , UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_B0, UNIT_B1 , UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_I2, UNIT_FM2, UNIT_I3, UNIT_FM3 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_I2, UNIT_FM2, UNIT_I3, UNIT_B0 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_I2, UNIT_FM2, UNIT_FM3, UNIT_B0 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_I2, UNIT_FM2, UNIT_B0, UNIT_B1 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_I2, UNIT_I3, UNIT_B0, UNIT_B1 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_I2, UNIT_B0, UNIT_B1, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_FM2, UNIT_FM3, UNIT_B0, UNIT_B1 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_FM2, UNIT_FM3, UNIT_B0, UNIT_B1 },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_FM2, UNIT_B0, UNIT_B1, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_FM1, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_I2, UNIT_I3, UNIT_B0, UNIT_B1, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_I2, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_I1, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_FM1, UNIT_FM2, UNIT_FM3, UNIT_B0, UNIT_B1, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_FM1, UNIT_FM2, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_FM1, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_I0, UNIT_FM0, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_C, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_FM0, UNIT_FM1, UNIT_FM2, UNIT_FM3, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL },
! { UNIT_FM0, UNIT_FM1, UNIT_FM2, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_FM0, UNIT_FM1, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_FM0, UNIT_B0, UNIT_B1, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL },
! { UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL, UNIT_NIL }
};
/* Some insns are assigned specialized implementation units which map to
*************** static CGEN_ATTR_VALUE_TYPE fr400_unit_m
*** 228,237 ****
--- 270,283 ----
/* I0 */ UNIT_I0,
/* I1 */ UNIT_I1,
/* I01 */ UNIT_I01,
+ /* I2 */ UNIT_NIL, /* no I2 or I3 unit */
+ /* I3 */ UNIT_NIL,
/* IALL */ UNIT_I01, /* only I0 and I1 units */
/* FM0 */ UNIT_FM0,
/* FM1 */ UNIT_FM1,
/* FM01 */ UNIT_FM01,
+ /* FM2 */ UNIT_NIL, /* no F2 or M2 units */
+ /* FM3 */ UNIT_NIL, /* no F3 or M3 units */
/* FMALL */ UNIT_FM01,/* Only F0,F1,M0,M1 units */
/* FMLOW */ UNIT_FM0, /* Only F0,M0 units */
/* B0 */ UNIT_B0, /* branches only in B0 unit. */
*************** static CGEN_ATTR_VALUE_TYPE fr500_unit_m
*** 254,263 ****
--- 300,313 ----
/* I0 */ UNIT_I0,
/* I1 */ UNIT_I1,
/* I01 */ UNIT_I01,
+ /* I2 */ UNIT_NIL, /* no I2 or I3 unit */
+ /* I3 */ UNIT_NIL,
/* IALL */ UNIT_I01, /* only I0 and I1 units */
/* FM0 */ UNIT_FM0,
/* FM1 */ UNIT_FM1,
/* FM01 */ UNIT_FM01,
+ /* FM2 */ UNIT_NIL, /* no F2 or M2 units */
+ /* FM3 */ UNIT_NIL, /* no F3 or M2 units */
/* FMALL */ UNIT_FM01,/* Only F0,F1,M0,M1 units */
/* FMLOW */ UNIT_FM0, /* Only F0,M0 units */
/* B0 */ UNIT_B0,
*************** static CGEN_ATTR_VALUE_TYPE fr500_unit_m
*** 273,278 ****
--- 323,358 ----
/* MCLRACC-1*/ UNIT_FM01 /* mclracc,A==1 in FM0 or FM1 unit. */
};
+ static CGEN_ATTR_VALUE_TYPE fr550_unit_mapping[] =
+ {
+ /* unit in insn actual unit */
+ /* NIL */ UNIT_NIL,
+ /* I0 */ UNIT_I0,
+ /* I1 */ UNIT_I1,
+ /* I01 */ UNIT_I01,
+ /* I2 */ UNIT_I2,
+ /* I3 */ UNIT_I3,
+ /* IALL */ UNIT_IALL,
+ /* FM0 */ UNIT_FM0,
+ /* FM1 */ UNIT_FM1,
+ /* FM01 */ UNIT_FM01,
+ /* FM2 */ UNIT_FM2,
+ /* FM3 */ UNIT_FM3,
+ /* FMALL */ UNIT_FMALL,
+ /* FMLOW */ UNIT_FM01, /* Only F0,F1,M0,M1 units */
+ /* B0 */ UNIT_B0,
+ /* B1 */ UNIT_B1,
+ /* B01 */ UNIT_B01,
+ /* C */ UNIT_C,
+ /* MULT-DIV */ UNIT_I01, /* multiply and divide in I0 or I1 unit. */
+ /* LOAD */ UNIT_I01, /* load in I0 or I1 unit. */
+ /* STORE */ UNIT_I01, /* store in I0 or I1 unit. */
+ /* SCAN */ UNIT_IALL, /* scan in any integer unit. */
+ /* DCPL */ UNIT_I0, /* dcpl only in I0 unit. */
+ /* MDUALACC */ UNIT_FMALL,/* media dual acc insn in all media units */
+ /* MCLRACC-1*/ UNIT_FM01 /* mclracc,A==1 in FM0 or FM1 unit. */
+ };
+
void
frv_vliw_reset (FRV_VLIW *vliw, unsigned long mach, unsigned long elf_flags)
{
*************** frv_vliw_reset (FRV_VLIW *vliw, unsigned
*** 287,292 ****
--- 367,376 ----
vliw->current_vliw = fr400_allowed_vliw;
vliw->unit_mapping = fr400_unit_mapping;
break;
+ case bfd_mach_fr550:
+ vliw->current_vliw = fr550_allowed_vliw;
+ vliw->unit_mapping = fr550_unit_mapping;
+ break;
default:
vliw->current_vliw = fr500_allowed_vliw;
vliw->unit_mapping = fr500_unit_mapping;
*************** match_unit (FRV_VLIW *vliw,
*** 319,324 ****
--- 403,415 ----
if (unit1 - unit2 <= 2)
return 1;
break;
+ case UNIT_IALL:
+ case UNIT_FMALL:
+ /* The ALL versions of these units are within 5 enums of the 0, 1, 2 or 3
+ versions. */
+ if (unit1 - unit2 <= 5)
+ return 1;
+ break;
default:
break;
}
*************** add_next_to_vliw (FRV_VLIW *vliw, CGEN_A
*** 353,359 ****
VLIW_COMBO *potential;
if (next <= 0)
! abort (); /* Should never happen */
/* The table is sorted by units allowed within slots, so vliws with
identical starting sequences are together. */
--- 444,454 ----
VLIW_COMBO *potential;
if (next <= 0)
! {
! fprintf (stderr, "frv-opc.c line %d: bad vliw->next_slot value.\n",
! __LINE__);
! abort (); /* Should never happen */
! }
/* The table is sorted by units allowed within slots, so vliws with
identical starting sequences are together. */
*************** fr400_check_insn_major_constraints (
*** 408,413 ****
--- 503,625 ----
}
static int
+ find_unit_in_vliw (
+ FRV_VLIW *vliw, CGEN_ATTR_VALUE_TYPE unit
+ )
+ {
+ int i;
+ for (i = 0; i < vliw->next_slot; ++i)
+ if (CGEN_INSN_ATTR_VALUE (vliw->insn[i], CGEN_INSN_UNIT) == unit)
+ return 1;
+
+ return 0; /* not found */
+ }
+
+ static int
+ find_major_in_slot (
+ FRV_VLIW *vliw, CGEN_ATTR_VALUE_TYPE major, CGEN_ATTR_VALUE_TYPE slot
+ )
+ {
+ int i;
+
+ for (i = 0; i < vliw->next_slot; ++i)
+ if (vliw->major[i] == major && (*vliw->current_vliw)[i] == slot)
+ return 1;
+
+ return 0;
+ }
+
+ static int
+ fr550_find_media_in_vliw (FRV_VLIW *vliw)
+ {
+ int i;
+
+ for (i = 0; i < vliw->next_slot; ++i)
+ {
+ if (vliw->major[i] < FR550_MAJOR_M_1 || vliw->major[i] > FR550_MAJOR_M_5)
+ continue;
+
+ /* Found a media insn, however, MNOP and MCLRACC don't count. */
+ if (CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_MNOP
+ || CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_MCLRACC_0
+ || CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_MCLRACC_1)
+ continue;
+
+ return 1; /* found one */
+ }
+
+ return 0;
+ }
+
+ static int
+ fr550_find_float_in_vliw (FRV_VLIW *vliw)
+ {
+ int i;
+
+ for (i = 0; i < vliw->next_slot; ++i)
+ {
+ if (vliw->major[i] < FR550_MAJOR_F_1 || vliw->major[i] > FR550_MAJOR_F_4)
+ continue;
+
+ /* Found a floating point insn, however, FNOP doesn't count. */
+ if (CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_FNOP)
+ continue;
+
+ return 1; /* found one */
+ }
+
+ return 0;
+ }
+
+ static int
+ fr550_check_insn_major_constraints (
+ FRV_VLIW *vliw, CGEN_ATTR_VALUE_TYPE major, const CGEN_INSN *insn
+ )
+ {
+ CGEN_ATTR_VALUE_TYPE unit;
+ CGEN_ATTR_VALUE_TYPE slot = (*vliw->current_vliw)[vliw->next_slot];
+ switch (slot)
+ {
+ case UNIT_I2:
+ /* If it's a store, then there must be another store in I1 */
+ unit = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_UNIT);
+ if (unit == UNIT_STORE)
+ return find_unit_in_vliw (vliw, UNIT_STORE);
+ break;
+ case UNIT_FM2:
+ case UNIT_FM3:
+ /* Floating point insns other than FNOP in slot f2 or f3 cannot coexist with
+ media insns. */
+ if (major >= FR550_MAJOR_F_1 && major <= FR550_MAJOR_F_4
+ && CGEN_INSN_NUM (insn) != FRV_INSN_FNOP)
+ return ! fr550_find_media_in_vliw (vliw);
+ /* Media insns other than MNOP in slot m2 or m3 cannot coexist with
+ floating point insns. */
+ if (major >= FR550_MAJOR_M_1 && major <= FR550_MAJOR_M_5
+ && CGEN_INSN_NUM (insn) != FRV_INSN_MNOP)
+ return ! fr550_find_float_in_vliw (vliw);
+ /* F-2 in slot f2 or f3 cannot coexist with F-2 or F-4 in slot f1 or f2
+ respectively.
+ */
+ if (major == FR550_MAJOR_F_2)
+ return ! find_major_in_slot (vliw, FR550_MAJOR_F_2, slot - (UNIT_FM2 - UNIT_FM0))
+ && ! find_major_in_slot (vliw, FR550_MAJOR_F_4, slot - (UNIT_FM2 - UNIT_FM0));
+ /* M-2 or M-5 in slot m2 or m3 cannot coexist with M-2 in slot m1 or m2
+ respectively. */
+ if (major == FR550_MAJOR_M_2 || major == FR550_MAJOR_M_5)
+ return ! find_major_in_slot (vliw, FR550_MAJOR_M_2, slot - (UNIT_FM2 - UNIT_FM0));
+ /* M-4 in slot m2 or m3 cannot coexist with M-4 in slot m1 or m2
+ respectively. */
+ if (major == FR550_MAJOR_M_4)
+ return ! find_major_in_slot (vliw, FR550_MAJOR_M_4, slot - (UNIT_FM2 - UNIT_FM0));
+ break;
+ default:
+ break;
+ }
+ return 1; /* all ok */
+ }
+
+ static int
fr500_check_insn_major_constraints (
FRV_VLIW *vliw, CGEN_ATTR_VALUE_TYPE major
)
*************** fr500_check_insn_major_constraints (
*** 508,513 ****
--- 720,727 ----
&& ! find_major_in_vliw (vliw, FR500_MAJOR_F_6)
&& ! find_major_in_vliw (vliw, FR500_MAJOR_F_7);
default:
+ fprintf (stderr, "frv-opc.c, line %d: bad major code, aborting.\n",
+ __LINE__);
abort ();
break;
}
*************** fr500_check_insn_major_constraints (
*** 516,522 ****
static int
check_insn_major_constraints (
! FRV_VLIW *vliw, CGEN_ATTR_VALUE_TYPE major
)
{
int rc;
--- 730,736 ----
static int
check_insn_major_constraints (
! FRV_VLIW *vliw, CGEN_ATTR_VALUE_TYPE major, const CGEN_INSN *insn
)
{
int rc;
*************** check_insn_major_constraints (
*** 525,530 ****
--- 739,747 ----
case bfd_mach_fr400:
rc = fr400_check_insn_major_constraints (vliw, major);
break;
+ case bfd_mach_fr550:
+ rc = fr550_check_insn_major_constraints (vliw, major, insn);
+ break;
default:
rc = fr500_check_insn_major_constraints (vliw, major);
break;
*************** frv_vliw_add_insn (FRV_VLIW *vliw, const
*** 551,563 ****
unit = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_UNIT);
if (unit == UNIT_NIL)
! abort (); /* no UNIT specified for this insn in frv.cpu */
switch (vliw->mach)
{
case bfd_mach_fr400:
major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR400_MAJOR);
break;
default:
major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR500_MAJOR);
break;
--- 768,787 ----
unit = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_UNIT);
if (unit == UNIT_NIL)
! {
! fprintf (stderr, "frv-opc.c line %d: bad insn unit.\n",
! __LINE__);
! abort (); /* no UNIT specified for this insn in frv.cpu */
! }
switch (vliw->mach)
{
case bfd_mach_fr400:
major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR400_MAJOR);
break;
+ case bfd_mach_fr550:
+ major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR550_MAJOR);
+ break;
default:
major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR500_MAJOR);
break;
*************** frv_vliw_add_insn (FRV_VLIW *vliw, const
*** 569,574 ****
--- 793,799 ----
while (! match_unit (vliw, unit, (*vliw->current_vliw)[0]))
++vliw->current_vliw;
vliw->major[0] = major;
+ vliw->insn[0] = insn;
vliw->next_slot = 1;
return 0;
}
*************** frv_vliw_add_insn (FRV_VLIW *vliw, const
*** 579,588 ****
if (! (vliw->elf_flags & EF_FRV_NOPACK))
{
new_vliw = add_next_to_vliw (vliw, unit);
! if (new_vliw && check_insn_major_constraints (vliw, major))
{
vliw->current_vliw = new_vliw;
vliw->major[index] = major;
vliw->next_slot++;
return 0;
}
--- 804,814 ----
if (! (vliw->elf_flags & EF_FRV_NOPACK))
{
new_vliw = add_next_to_vliw (vliw, unit);
! if (new_vliw && check_insn_major_constraints (vliw, major, insn))
{
vliw->current_vliw = new_vliw;
vliw->major[index] = major;
+ vliw->insn[index] = insn;
vliw->next_slot++;
return 0;
}