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 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; }