diff options
| author | matt <matt@NetBSD.org> | 2001-12-24 01:56:55 +0000 |
|---|---|---|
| committer | matt <matt@NetBSD.org> | 2001-12-24 01:56:55 +0000 |
| commit | 46cf0c15438f56aeb3170bcf510dc2e5f129085d (patch) | |
| tree | 0466f474547ec346ce3f4a8978bd1224a57a5275 /gnu | |
| parent | c9073b0a26b9f440df3f344075ec04b8f829475a (diff) | |
Incorporate some gcc3.0 vax.md changes
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/dist/toolchain/gcc/config/vax/vax.md | 338 |
1 files changed, 171 insertions, 167 deletions
diff --git a/gnu/dist/toolchain/gcc/config/vax/vax.md b/gnu/dist/toolchain/gcc/config/vax/vax.md index 0d7931dba8d..ffa5e4302de 100644 --- a/gnu/dist/toolchain/gcc/config/vax/vax.md +++ b/gnu/dist/toolchain/gcc/config/vax/vax.md @@ -135,20 +135,20 @@ ;; patterns need to be recognized. ;; -- Ken Raeburn (Raeburn@Watch.COM) 24 August 1991. -(define_insn "sltu" - [(set (match_operand:SI 0 "general_operand" "=ro") - (ltu (cc0) (const_int 0)))] - "" - "clrl %0\;adwc $0,%0") +;;(define_insn "sltu" +;; [(set (match_operand:SI 0 "nonimmediate_operand" "=ro") +;; (ltu (cc0) (const_int 0)))] +;; "" +;; "clrl %0\;adwc $0,%0") -(define_insn "sgeu" - [(set (match_operand:SI 0 "general_operand" "=ro") - (geu (cc0) (const_int 0)))] - "" - "movl $1,%0\;sbwc $0,%0") +;;(define_insn "sgeu" +;; [(set (match_operand:SI 0 "nonimmediate_operand" "=ro") +;; (geu (cc0) (const_int 0)))] +;; "" +;; "movl $1,%0\;sbwc $0,%0") (define_insn "movdf" - [(set (match_operand:DF 0 "general_operand" "=g,g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g") (match_operand:DF 1 "general_operand" "G,gF"))] "" "@ @@ -156,7 +156,7 @@ mov%# %1,%0") (define_insn "movsf" - [(set (match_operand:SF 0 "general_operand" "=g,g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g") (match_operand:SF 1 "general_operand" "G,gF"))] "" "@ @@ -171,7 +171,7 @@ ;; "movh %1,%0") (define_insn "movdi" - [(set (match_operand:DI 0 "general_operand" "=g,g") + [(set (match_operand:DI 0 "nonimmediate_operand" "=g,g") (match_operand:DI 1 "general_operand" "I,g"))] "" "@ @@ -196,7 +196,7 @@ ;; "addl3 $63,#,dst" but this is slower than movzbl and takes as much space. (define_expand "movsi" - [(set (match_operand:SI 0 "general_operand" "") + [(set (match_operand:SI 0 "nonimmediate_operand" "") (match_operand:SI 1 "general_operand" ""))] "" " @@ -220,7 +220,7 @@ }") (define_insn "movgensi" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (match_operand:SI 1 "general_operand" "g"))] "" "* @@ -265,7 +265,7 @@ }") (define_insn "movhi" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (match_operand:HI 1 "general_operand" "g"))] "" "* @@ -298,7 +298,7 @@ }") (define_insn "movstricthi" - [(set (strict_low_part (match_operand:HI 0 "register_operand" "=g")) + [(set (strict_low_part (match_operand:HI 0 "register_operand" "+g")) (match_operand:HI 1 "general_operand" "g"))] "" "* @@ -319,7 +319,7 @@ }") (define_insn "movqi" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (match_operand:QI 1 "general_operand" "g"))] "" "* @@ -348,7 +348,7 @@ }") (define_insn "movstrictqi" - [(set (strict_low_part (match_operand:QI 0 "register_operand" "=g")) + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+g")) (match_operand:QI 1 "general_operand" "g"))] "" "* @@ -382,8 +382,8 @@ ;; that anything generated as this insn will be recognized as one ;; and that it won't successfully combine with anything. (define_insn "movstrhi1" - [(set (match_operand:BLK 0 "general_operand" "=g") - (match_operand:BLK 1 "general_operand" "g")) + [(set (match_operand:BLK 0 "memory_operand" "=m") + (match_operand:BLK 1 "memory_operand" "m")) (use (match_operand:HI 2 "general_operand" "g")) (clobber (reg:SI 0)) (clobber (reg:SI 1)) @@ -397,67 +397,67 @@ ;; Extension and truncation insns. (define_insn "truncsiqi2" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (truncate:QI (match_operand:SI 1 "nonimmediate_operand" "g")))] "" "cvtlb %1,%0") (define_insn "truncsihi2" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (truncate:HI (match_operand:SI 1 "nonimmediate_operand" "g")))] "" "cvtlw %1,%0") (define_insn "trunchiqi2" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (truncate:QI (match_operand:HI 1 "nonimmediate_operand" "g")))] "" "cvtwb %1,%0") (define_insn "extendhisi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))] "" "cvtwl %1,%0") (define_insn "extendqihi2" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))] "" "cvtbw %1,%0") (define_insn "extendqisi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))] "" "cvtbl %1,%0") (define_insn "extendsfdf2" - [(set (match_operand:DF 0 "general_operand" "=g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g") (float_extend:DF (match_operand:SF 1 "general_operand" "gF")))] "" "cvtf%# %1,%0") (define_insn "truncdfsf2" - [(set (match_operand:SF 0 "general_operand" "=g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g") (float_truncate:SF (match_operand:DF 1 "general_operand" "gF")))] "" "cvt%#f %1,%0") (define_insn "zero_extendhisi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))] "" "movzwl %1,%0") (define_insn "zero_extendqihi2" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))] "" "movzbw %1,%0") (define_insn "zero_extendqisi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))] "" "movzbl %1,%0") @@ -465,37 +465,37 @@ ;; Fix-to-float conversion insns. (define_insn "floatsisf2" - [(set (match_operand:SF 0 "general_operand" "=g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g") (float:SF (match_operand:SI 1 "nonimmediate_operand" "g")))] "" "cvtlf %1,%0") (define_insn "floatsidf2" - [(set (match_operand:DF 0 "general_operand" "=g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g") (float:DF (match_operand:SI 1 "nonimmediate_operand" "g")))] "" "cvtl%# %1,%0") (define_insn "floathisf2" - [(set (match_operand:SF 0 "general_operand" "=g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g") (float:SF (match_operand:HI 1 "nonimmediate_operand" "g")))] "" "cvtwf %1,%0") (define_insn "floathidf2" - [(set (match_operand:DF 0 "general_operand" "=g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g") (float:DF (match_operand:HI 1 "nonimmediate_operand" "g")))] "" "cvtw%# %1,%0") (define_insn "floatqisf2" - [(set (match_operand:SF 0 "general_operand" "=g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g") (float:SF (match_operand:QI 1 "nonimmediate_operand" "g")))] "" "cvtbf %1,%0") (define_insn "floatqidf2" - [(set (match_operand:DF 0 "general_operand" "=g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g") (float:DF (match_operand:QI 1 "nonimmediate_operand" "g")))] "" "cvtb%# %1,%0") @@ -503,37 +503,37 @@ ;; Float-to-fix conversion insns. (define_insn "fix_truncsfqi2" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (fix:QI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))] "" "cvtfb %1,%0") (define_insn "fix_truncsfhi2" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (fix:HI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))] "" "cvtfw %1,%0") (define_insn "fix_truncsfsi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))] "" "cvtfl %1,%0") (define_insn "fix_truncdfqi2" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (fix:QI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))] "" "cvt%#b %1,%0") (define_insn "fix_truncdfhi2" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (fix:HI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))] "" "cvt%#w %1,%0") (define_insn "fix_truncdfsi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))] "" "cvt%#l %1,%0") @@ -541,7 +541,7 @@ ;;- All kinds of add instructions. (define_insn "adddf3" - [(set (match_operand:DF 0 "general_operand" "=g,g,g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g,g") (plus:DF (match_operand:DF 1 "general_operand" "0,gF,gF") (match_operand:DF 2 "general_operand" "gF,0,gF")))] "" @@ -551,7 +551,7 @@ add%#3 %1,%2,%0") (define_insn "addsf3" - [(set (match_operand:SF 0 "general_operand" "=g,g,g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g,g") (plus:SF (match_operand:SF 1 "general_operand" "0,gF,gF") (match_operand:SF 2 "general_operand" "gF,0,gF")))] "" @@ -574,7 +574,7 @@ (define_insn "addsi3" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (plus:SI (match_operand:SI 1 "general_operand" "g") (match_operand:SI 2 "general_operand" "g")))] "" @@ -626,7 +626,7 @@ }") (define_insn "addhi3" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (plus:HI (match_operand:HI 1 "general_operand" "g") (match_operand:HI 2 "general_operand" "g")))] "" @@ -652,7 +652,7 @@ }") (define_insn "addqi3" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (plus:QI (match_operand:QI 1 "general_operand" "g") (match_operand:QI 2 "general_operand" "g")))] "" @@ -679,7 +679,7 @@ ;; The add-with-carry (adwc) instruction only accepts two operands. (define_insn "adddi3" - [(set (match_operand:DI 0 "general_operand" "=ro>,ro>") + [(set (match_operand:DI 0 "nonimmediate_operand" "=ro>,ro>") (plus:DI (match_operand:DI 1 "general_operand" "%0,ro>") (match_operand:DI 2 "general_operand" "Fro,F")))] "" @@ -724,7 +724,7 @@ ;;- All kinds of subtract instructions. (define_insn "subdf3" - [(set (match_operand:DF 0 "general_operand" "=g,g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g") (minus:DF (match_operand:DF 1 "general_operand" "0,gF") (match_operand:DF 2 "general_operand" "gF,gF")))] "" @@ -733,7 +733,7 @@ sub%#3 %2,%1,%0") (define_insn "subsf3" - [(set (match_operand:SF 0 "general_operand" "=g,g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g") (minus:SF (match_operand:SF 1 "general_operand" "0,gF") (match_operand:SF 2 "general_operand" "gF,gF")))] "" @@ -742,7 +742,7 @@ subf3 %2,%1,%0") (define_insn "subsi3" - [(set (match_operand:SI 0 "general_operand" "=g,g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g") (minus:SI (match_operand:SI 1 "general_operand" "0,g") (match_operand:SI 2 "general_operand" "g,g")))] "" @@ -751,7 +751,7 @@ subl3 %2,%1,%0") (define_insn "subhi3" - [(set (match_operand:HI 0 "general_operand" "=g,g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g") (minus:HI (match_operand:HI 1 "general_operand" "0,g") (match_operand:HI 2 "general_operand" "g,g")))] "" @@ -760,7 +760,7 @@ subw3 %2,%1,%0") (define_insn "subqi3" - [(set (match_operand:QI 0 "general_operand" "=g,g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g") (minus:QI (match_operand:QI 1 "general_operand" "0,g") (match_operand:QI 2 "general_operand" "g,g")))] "" @@ -770,7 +770,7 @@ ;; The subtract-with-carry (sbwc) instruction only takes two operands. (define_insn "subdi3" - [(set (match_operand:DI 0 "general_operand" "=or>,or>") + [(set (match_operand:DI 0 "nonimmediate_operand" "=or>,or>") (minus:DI (match_operand:DI 1 "general_operand" "0,or>") (match_operand:DI 2 "general_operand" "For,F")))] "" @@ -815,7 +815,7 @@ ;;- Multiply instructions. (define_insn "muldf3" - [(set (match_operand:DF 0 "general_operand" "=g,g,g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g,g") (mult:DF (match_operand:DF 1 "general_operand" "0,gF,gF") (match_operand:DF 2 "general_operand" "gF,0,gF")))] "" @@ -825,7 +825,7 @@ mul%#3 %1,%2,%0") (define_insn "mulsf3" - [(set (match_operand:SF 0 "general_operand" "=g,g,g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g,g") (mult:SF (match_operand:SF 1 "general_operand" "0,gF,gF") (match_operand:SF 2 "general_operand" "gF,0,gF")))] "" @@ -835,7 +835,7 @@ mulf3 %1,%2,%0") (define_insn "mulsi3" - [(set (match_operand:SI 0 "general_operand" "=g,g,g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g") (mult:SI (match_operand:SI 1 "general_operand" "0,g,g") (match_operand:SI 2 "general_operand" "g,0,g")))] "" @@ -845,7 +845,7 @@ mull3 %1,%2,%0") (define_insn "mulhi3" - [(set (match_operand:HI 0 "general_operand" "=g,g,") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,") (mult:HI (match_operand:HI 1 "general_operand" "0,g,g") (match_operand:HI 2 "general_operand" "g,0,g")))] "" @@ -855,7 +855,7 @@ mulw3 %1,%2,%0") (define_insn "mulqi3" - [(set (match_operand:QI 0 "general_operand" "=g,g,g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g") (mult:QI (match_operand:QI 1 "general_operand" "0,g,g") (match_operand:QI 2 "general_operand" "g,0,g")))] "" @@ -865,7 +865,7 @@ mulb3 %1,%2,%0") (define_insn "mulsidi3" - [(set (match_operand:DI 0 "general_operand" "=g") + [(set (match_operand:DI 0 "nonimmediate_operand" "=g") (mult:DI (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "g")) (sign_extend:DI @@ -874,7 +874,7 @@ "emul %1,%2,$0,%0") (define_insn "" - [(set (match_operand:DI 0 "general_operand" "=g") + [(set (match_operand:DI 0 "nonimmediate_operand" "=g") (plus:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "g")) @@ -886,7 +886,7 @@ ;; 'F' constraint means type CONST_DOUBLE (define_insn "" - [(set (match_operand:DI 0 "general_operand" "=g") + [(set (match_operand:DI 0 "nonimmediate_operand" "=g") (plus:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "g")) @@ -905,7 +905,7 @@ ;;- Divide instructions. (define_insn "divdf3" - [(set (match_operand:DF 0 "general_operand" "=g,g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g") (div:DF (match_operand:DF 1 "general_operand" "0,gF") (match_operand:DF 2 "general_operand" "gF,gF")))] "" @@ -914,7 +914,7 @@ div%#3 %2,%1,%0") (define_insn "divsf3" - [(set (match_operand:SF 0 "general_operand" "=g,g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g") (div:SF (match_operand:SF 1 "general_operand" "0,gF") (match_operand:SF 2 "general_operand" "gF,gF")))] "" @@ -923,7 +923,7 @@ divf3 %2,%1,%0") (define_insn "divsi3" - [(set (match_operand:SI 0 "general_operand" "=g,g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g") (div:SI (match_operand:SI 1 "general_operand" "0,g") (match_operand:SI 2 "general_operand" "g,g")))] "" @@ -932,7 +932,7 @@ divl3 %2,%1,%0") (define_insn "divhi3" - [(set (match_operand:HI 0 "general_operand" "=g,g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g") (div:HI (match_operand:HI 1 "general_operand" "0,g") (match_operand:HI 2 "general_operand" "g,g")))] "" @@ -941,7 +941,7 @@ divw3 %2,%1,%0") (define_insn "divqi3" - [(set (match_operand:QI 0 "general_operand" "=g,g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g") (div:QI (match_operand:QI 1 "general_operand" "0,g") (match_operand:QI 2 "general_operand" "g,g")))] "" @@ -963,7 +963,7 @@ ;; Bit-and on the vax is done with a clear-bits insn. (define_expand "andsi3" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (and:SI (not:SI (match_operand:SI 1 "general_operand" "g")) (match_operand:SI 2 "general_operand" "g")))] "" @@ -986,7 +986,7 @@ }") (define_expand "andhi3" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (and:HI (not:HI (match_operand:HI 1 "general_operand" "g")) (match_operand:HI 2 "general_operand" "g")))] "" @@ -1008,7 +1008,7 @@ }") (define_expand "andqi3" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (and:QI (not:QI (match_operand:QI 1 "general_operand" "g")) (match_operand:QI 2 "general_operand" "g")))] "" @@ -1030,7 +1030,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g,g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g") (and:SI (not:SI (match_operand:SI 1 "general_operand" "g,g")) (match_operand:SI 2 "general_operand" "0,g")))] "" @@ -1039,7 +1039,7 @@ bicl3 %1,%2,%0") (define_insn "" - [(set (match_operand:HI 0 "general_operand" "=g,g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g") (and:HI (not:HI (match_operand:HI 1 "general_operand" "g,g")) (match_operand:HI 2 "general_operand" "0,g")))] "" @@ -1048,7 +1048,7 @@ bicw3 %1,%2,%0") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=g,g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g") (and:QI (not:QI (match_operand:QI 1 "general_operand" "g,g")) (match_operand:QI 2 "general_operand" "0,g")))] "" @@ -1062,7 +1062,7 @@ ;; opportunities in combine.c. (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g,g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g") (and:SI (match_operand:SI 1 "general_operand" "0,g") (match_operand:SI 2 "const_int_operand" "n,n")))] "" @@ -1071,7 +1071,7 @@ bicl3 %N2,%1,%0") (define_insn "" - [(set (match_operand:HI 0 "general_operand" "=g,g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g") (and:HI (match_operand:HI 1 "general_operand" "0,g") (match_operand:HI 2 "const_int_operand" "n,n")))] "" @@ -1080,7 +1080,7 @@ bicw3 %H2,%1,%0") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=g,g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g") (and:QI (match_operand:QI 1 "general_operand" "0,g") (match_operand:QI 2 "const_int_operand" "n,n")))] "" @@ -1091,7 +1091,7 @@ ;;- Bit set instructions. (define_insn "iorsi3" - [(set (match_operand:SI 0 "general_operand" "=g,g,g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g") (ior:SI (match_operand:SI 1 "general_operand" "0,g,g") (match_operand:SI 2 "general_operand" "g,0,g")))] "" @@ -1101,7 +1101,7 @@ bisl3 %2,%1,%0") (define_insn "iorhi3" - [(set (match_operand:HI 0 "general_operand" "=g,g,g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,g") (ior:HI (match_operand:HI 1 "general_operand" "0,g,g") (match_operand:HI 2 "general_operand" "g,0,g")))] "" @@ -1111,7 +1111,7 @@ bisw3 %2,%1,%0") (define_insn "iorqi3" - [(set (match_operand:QI 0 "general_operand" "=g,g,g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g") (ior:QI (match_operand:QI 1 "general_operand" "0,g,g") (match_operand:QI 2 "general_operand" "g,0,g")))] "" @@ -1123,7 +1123,7 @@ ;;- xor instructions. (define_insn "xorsi3" - [(set (match_operand:SI 0 "general_operand" "=g,g,g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g") (xor:SI (match_operand:SI 1 "general_operand" "0,g,g") (match_operand:SI 2 "general_operand" "g,0,g")))] "" @@ -1133,7 +1133,7 @@ xorl3 %2,%1,%0") (define_insn "xorhi3" - [(set (match_operand:HI 0 "general_operand" "=g,g,g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,g") (xor:HI (match_operand:HI 1 "general_operand" "0,g,g") (match_operand:HI 2 "general_operand" "g,0,g")))] "" @@ -1143,7 +1143,7 @@ xorw3 %2,%1,%0") (define_insn "xorqi3" - [(set (match_operand:QI 0 "general_operand" "=g,g,g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g") (xor:QI (match_operand:QI 1 "general_operand" "0,g,g") (match_operand:QI 2 "general_operand" "g,0,g")))] "" @@ -1153,49 +1153,49 @@ xorb3 %2,%1,%0") (define_insn "negdf2" - [(set (match_operand:DF 0 "general_operand" "=g") + [(set (match_operand:DF 0 "nonimmediate_operand" "=g") (neg:DF (match_operand:DF 1 "general_operand" "gF")))] "" "mneg%# %1,%0") (define_insn "negsf2" - [(set (match_operand:SF 0 "general_operand" "=g") + [(set (match_operand:SF 0 "nonimmediate_operand" "=g") (neg:SF (match_operand:SF 1 "general_operand" "gF")))] "" "mnegf %1,%0") (define_insn "negsi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (neg:SI (match_operand:SI 1 "general_operand" "g")))] "" "mnegl %1,%0") (define_insn "neghi2" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (neg:HI (match_operand:HI 1 "general_operand" "g")))] "" "mnegw %1,%0") (define_insn "negqi2" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (neg:QI (match_operand:QI 1 "general_operand" "g")))] "" "mnegb %1,%0") (define_insn "one_cmplsi2" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (not:SI (match_operand:SI 1 "general_operand" "g")))] "" "mcoml %1,%0") (define_insn "one_cmplhi2" - [(set (match_operand:HI 0 "general_operand" "=g") + [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (not:HI (match_operand:HI 1 "general_operand" "g")))] "" "mcomw %1,%0") (define_insn "one_cmplqi2" - [(set (match_operand:QI 0 "general_operand" "=g") + [(set (match_operand:QI 0 "nonimmediate_operand" "=g") (not:QI (match_operand:QI 1 "general_operand" "g")))] "" "mcomb %1,%0") @@ -1206,32 +1206,32 @@ ;; prevents converting shifts to ZERO_EXTRACTs with negative positions, ;; which isn't valid. (define_expand "ashrsi3" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (ashiftrt:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "general_operand" "g")))] "" " { if (GET_CODE (operands[2]) != CONST_INT) - operands[2] = gen_rtx (NEG, QImode, negate_rtx (QImode, operands[2])); + operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2])); }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (ashiftrt:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "const_int_operand" "n")))] "" "ashl $%n2,%1,%0") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (ashiftrt:SI (match_operand:SI 1 "general_operand" "g") (neg:QI (match_operand:QI 2 "general_operand" "g"))))] "" "ashl %2,%1,%0") (define_insn "ashlsi3" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (ashift:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "general_operand" "g")))] "" @@ -1255,24 +1255,24 @@ ;; Arithmetic right shift on the vax works by negating the shift count. (define_expand "ashrdi3" - [(set (match_operand:DI 0 "general_operand" "=g") + [(set (match_operand:DI 0 "nonimmediate_operand" "=g") (ashiftrt:DI (match_operand:DI 1 "general_operand" "g") (match_operand:QI 2 "general_operand" "g")))] "" " { - operands[2] = gen_rtx (NEG, QImode, negate_rtx (QImode, operands[2])); + operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2])); }") (define_insn "ashldi3" - [(set (match_operand:DI 0 "general_operand" "=g") + [(set (match_operand:DI 0 "nonimmediate_operand" "=g") (ashift:DI (match_operand:DI 1 "general_operand" "g") (match_operand:QI 2 "general_operand" "g")))] "" "ashq %2,%1,%0") (define_insn "" - [(set (match_operand:DI 0 "general_operand" "=g") + [(set (match_operand:DI 0 "nonimmediate_operand" "=g") (ashiftrt:DI (match_operand:DI 1 "general_operand" "g") (neg:QI (match_operand:QI 2 "general_operand" "g"))))] "" @@ -1287,7 +1287,7 @@ [(set (match_dup 3) (minus:QI (const_int 32) (match_dup 4))) - (set (match_operand:SI 0 "general_operand" "=g") + (set (match_operand:SI 0 "nonimmediate_operand" "=g") (zero_extract:SI (match_operand:SI 1 "register_operand" "r") (match_dup 3) (match_operand:SI 2 "register_operand" "g")))] @@ -1300,32 +1300,32 @@ ;; Rotate right on the vax works by negating the shift count. (define_expand "rotrsi3" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (rotatert:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "general_operand" "g")))] "" " { if (GET_CODE (operands[2]) != CONST_INT) - operands[2] = gen_rtx (NEG, QImode, negate_rtx (QImode, operands[2])); + operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2])); }") (define_insn "rotlsi3" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (rotate:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "general_operand" "g")))] "" "rotl %2,%1,%0") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (rotatert:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "const_int_operand" "n")))] "" "rotl %R2,%1,%0") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (rotatert:SI (match_operand:SI 1 "general_operand" "g") (neg:QI (match_operand:QI 2 "general_operand" "g"))))] "" @@ -1333,7 +1333,7 @@ ;This insn is probably slower than a multiply and an add. ;(define_insn "" -; [(set (match_operand:SI 0 "general_operand" "=g") +; [(set (match_operand:SI 0 "nonimmediate_operand" "=g") ; (mult:SI (plus:SI (match_operand:SI 1 "general_operand" "g") ; (match_operand:SI 2 "general_operand" "g")) ; (match_operand:SI 3 "general_operand" "g")))] @@ -1372,7 +1372,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=&g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=&g") (zero_extract:SI (match_operand:SI 1 "register_operand" "ro") (match_operand:QI 2 "const_int_operand" "n") (match_operand:SI 3 "const_int_operand" "n")))] @@ -1397,7 +1397,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (sign_extract:SI (match_operand:SI 1 "register_operand" "ro") (match_operand:QI 2 "const_int_operand" "n") (match_operand:SI 3 "const_int_operand" "n")))] @@ -1449,7 +1449,7 @@ ;; anyway, we can't allow immediate values for the primary source operand. (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (sign_extract:SI (match_operand:SI 1 "register_operand" "ro") (match_operand:QI 2 "general_operand" "g") (match_operand:SI 3 "general_operand" "g")))] @@ -1466,7 +1466,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (zero_extract:SI (match_operand:SI 1 "register_operand" "ro") (match_operand:QI 2 "general_operand" "g") (match_operand:SI 3 "general_operand" "g")))] @@ -1512,7 +1512,7 @@ "cmpzv %2,%1,%0,%3") (define_insn "extv" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (sign_extract:SI (match_operand:QI 1 "memory_operand" "m") (match_operand:QI 2 "general_operand" "g") (match_operand:SI 3 "general_operand" "g")))] @@ -1541,7 +1541,7 @@ "") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (zero_extract:SI (match_operand:QI 1 "memory_operand" "m") (match_operand:QI 2 "general_operand" "g") (match_operand:SI 3 "general_operand" "g")))] @@ -1864,63 +1864,66 @@ ;; It is used in the call instruction as a byte, but in the addl2 as ;; a word. Since the only time we actually use it in the call instruction ;; is when it is a constant, SImode (for addl2) is the proper mode. -(define_insn "call_pop" +(define_expand "call_pop" + [(parallel [(call (match_operand:QI 0 "memory_operand" "") + (match_operand:SI 1 "const_int_operand" "")) + (set (reg:SI 14) + (plus:SI (reg:SI 14) + (match_operand:SI 3 "immediate_operand" "")))])] + "" + " +{ + if (INTVAL (operands[1]) > 255 * 4) + abort (); + operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4); +}") + +(define_insn "*call_pop" [(call (match_operand:QI 0 "memory_operand" "m") (match_operand:SI 1 "const_int_operand" "n")) (set (reg:SI 14) (plus:SI (reg:SI 14) - (match_operand:SI 3 "immediate_operand" "i")))] + (match_operand:SI 2 "immediate_operand" "i")))] "" - "* - if (INTVAL (operands[1]) > 255 * 4) - /* Vax `calls' really uses only one byte of #args, so pop explicitly. */ - return \"calls $0,%0\;addl2 %1,sp\"; - operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4); - return \"calls %1,%0\"; -") + "calls %1,%0") -(define_insn "call_value_pop" - [(set (match_operand 0 "" "=g") +(define_expand "call_value_pop" + [(parallel [(set (match_operand 0 "" "") + (call (match_operand:QI 1 "memory_operand" "") + (match_operand:SI 2 "const_int_operand" ""))) + (set (reg:SI 14) + (plus:SI (reg:SI 14) + (match_operand:SI 4 "immediate_operand" "")))])] + "" + " +{ + if (INTVAL (operands[2]) > 255 * 4) + abort (); + operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4); +}") + +(define_insn "*call_value_pop" + [(set (match_operand 0 "" "") (call (match_operand:QI 1 "memory_operand" "m") (match_operand:SI 2 "const_int_operand" "n"))) (set (reg:SI 14) (plus:SI (reg:SI 14) - (match_operand:SI 4 "immediate_operand" "i")))] + (match_operand:SI 3 "immediate_operand" "i")))] "" - "* - if (INTVAL (operands[2]) > 255 * 4) - /* Vax `calls' really uses only one byte of #args, so pop explicitly. */ - return \"calls $0,%1\;addl2 %2,sp\"; - operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4); - return \"calls %2,%1\"; -") + "calls %2,%1") -;; Define another set of these for the case of functions with no -;; operands. In that case, combine may simplify the adjustment of sp. -(define_insn "" +;; Define another set of these for the case of functions with no operands. +;; These will allow the optimizers to do a slightly better job. +(define_insn "call" [(call (match_operand:QI 0 "memory_operand" "m") - (match_operand:SI 1 "const_int_operand" "n")) - (set (reg:SI 14) (reg:SI 14))] + (const_int 0))] "" - "* - if (INTVAL (operands[1]) > 255 * 4) - /* Vax `calls' really uses only one byte of #args, so pop explicitly. */ - return \"calls $0,%0\;addl2 %1,sp\"; - operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4); - return \"calls %1,%0\"; -") + "calls $0,%0") -(define_insn "" - [(set (match_operand 0 "" "=g") +(define_insn "call_value" + [(set (match_operand 0 "" "") (call (match_operand:QI 1 "memory_operand" "m") - (match_operand:SI 2 "const_int_operand" "n"))) - (set (reg:SI 14) (reg:SI 14))] + (const_int 0)))] "" - "* - if (INTVAL (operands[2]) > 255 * 4) - /* Vax `calls' really uses only one byte of #args, so pop explicitly. */ - return \"calls $0,%1\;addl2 %2,sp\"; - operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4); - return \"calls %2,%1\"; -") + "calls $0,%1") ;; Call subroutine returning any type. @@ -1973,7 +1976,7 @@ ;; If you are tempted to try `g', please don't--it's not worth ;; the risk we will reopen the same bug. (define_insn "indirect_jump" - [(set (pc) (match_operand:SI 0 "general_operand" "r"))] + [(set (pc) (match_operand:SI 0 "register_operand" "r"))] "" "jmp (%0)") @@ -2027,7 +2030,7 @@ (mult:SI (minus:SI (match_dup 0) (const_int 0)) (const_int 2))))) - (label_ref:SI (match_operand 3 "" ""))) + (label_ref:SI (match_operand 2 "" ""))) (pc)))] "" "casel %0,$0,%1") @@ -2041,7 +2044,7 @@ ;; because < matches any autodecrement, not just a push. (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (match_operand:QI 1 "address_operand" "p"))] "" "* @@ -2053,7 +2056,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (match_operand:HI 1 "address_operand" "p"))] "" "* @@ -2065,7 +2068,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (match_operand:SI 1 "address_operand" "p"))] "" "* @@ -2077,7 +2080,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (match_operand:DI 1 "address_operand" "p"))] "" "* @@ -2089,7 +2092,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (match_operand:SF 1 "address_operand" "p"))] "" "* @@ -2101,7 +2104,7 @@ }") (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=g") + [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (match_operand:DF 1 "address_operand" "p"))] "" "* @@ -2126,7 +2129,7 @@ ;; above sequences to before attempting to recognize the new insn. (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=ro") + [(set (match_operand:SI 0 "nonimmediate_operand" "=ro") (and:SI (ashiftrt:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "const_int_operand" "n")) (match_operand:SI 3 "const_int_operand" "n")))] @@ -2148,13 +2151,14 @@ ;; optimized away. (define_insn "" - [(set (match_operand:SI 0 "general_operand" "=ro") + [(set (match_operand:SI 0 "nonimmediate_operand" "=ro") (and:SI (ashift:SI (match_operand:SI 1 "general_operand" "g") (match_operand:QI 2 "const_int_operand" "n")) (match_operand:SI 3 "const_int_operand" "n")))] "" "* { - operands[3] = GEN_INT (INTVAL (operands[3]) & ~((1 << INTVAL (operands[2])) - 1)); + operands[3] + = GEN_INT (INTVAL (operands[3]) & ~((1 << INTVAL (operands[2])) - 1)); return \"rotl %2,%1,%0\;bicl2 %N3,%0\"; }") |
