summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authormatt <matt@NetBSD.org>2001-12-24 01:56:55 +0000
committermatt <matt@NetBSD.org>2001-12-24 01:56:55 +0000
commit46cf0c15438f56aeb3170bcf510dc2e5f129085d (patch)
tree0466f474547ec346ce3f4a8978bd1224a57a5275 /gnu
parentc9073b0a26b9f440df3f344075ec04b8f829475a (diff)
Incorporate some gcc3.0 vax.md changes
Diffstat (limited to 'gnu')
-rw-r--r--gnu/dist/toolchain/gcc/config/vax/vax.md338
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\";
}")