Fix constraints in 68HC11/HC12 port

From-SVN: r38927
This commit is contained in:
Stephane Carrez 2001-01-11 23:13:52 +01:00 committed by Stephane Carrez
parent d395676671
commit 76028b1f3b
2 changed files with 97 additions and 73 deletions

View File

@ -1,3 +1,20 @@
2001-01-11 Stephane Carrez <Stephane.Carrez@worldnet.fr>
* config/m68hc11/m68hc11.md (cmphi_1): Make sure reloading
in S_REGS does not occur because not all sources are possible
when a S_REGS is a destination (sometimes needs a clobber).
(movqi_const0, zero_extendhisi2, zero_extendqisi2): Likewise.
(zero_extendhidi2, extendqisi2, extendqihi2, extendhisi2): Likewise.
(anddi3, iordi3, xordi3, negqi2, one_cmplhi2, one_cmplqi2: Likewise.
(ashldi3_const32, ashldi3_const1, ashlsi3_const16): Likewise.
(ashlsi3_const1, ashlhi3_2, ashlqi3_const1, ashrhi3): Likewise.
(ashrqi3_const1, lshrdi3_const32, lshrdi3_const63): Likewise.
(lshrdi_const1, lshrsi3_const16): Likewise.
(*addhi3, lshrsi3_const1, lshrqi3_const1): Likewise.
(*movhi_68hc12, *movqi_68hc12): Likewise.
(movstrictqi): Make sure reloading in D_REGS as a destination
does not happen.
2001-01-11 Neil Booth <neil@daikokuya.demon.co.uk>
* cppspec.c (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -MQ.

View File

@ -285,9 +285,9 @@
(define_insn "cmphi_1"
[(set (cc0)
(compare (match_operand:HI 0 "tst_operand"
"dxy,?xy,d,dxy,dxy,dxy")
"xy,d,?xy,d,dxy,dxy,dxy")
(match_operand:HI 1 "cmp_operand"
"i,m,m,?*d*A,?u,!*w")))]
"i,i,m,m,?*d*A,?u,!*w")))]
""
"*
{
@ -458,8 +458,8 @@
"")
(define_insn "movstrictqi"
[(set (strict_low_part (match_operand:QI 0 "non_push_operand" "+mu,+d,+d"))
(match_operand:QI 1 "general_operand" "d,dim,u"))]
[(set (strict_low_part (match_operand:QI 0 "non_push_operand" "+mu,+!d"))
(match_operand:QI 1 "general_operand" "d,imu"))]
""
"#")
@ -652,8 +652,8 @@
clr\\t%b0\\n\\tclr\\t%h0")
(define_insn "*movhi_68hc12"
[(set (match_operand:HI 0 "nonimmediate_operand" "=dAwuU,dAwu,m")
(match_operand:HI 1 "general_operand" "ruUi,m,dAwu"))]
[(set (match_operand:HI 0 "nonimmediate_operand" "=U,dAw,U,U,m,!u")
(match_operand:HI 1 "general_operand" "U,rim,dAwi,!u,dAw,riU"))]
"TARGET_M6812"
"*
{
@ -680,12 +680,13 @@
;; This should be ok since this is not the (strict_low_part) set.
;;
(define_insn "movqi_const0"
[(set (match_operand:QI 0 "non_push_operand" "=d,!um,*A,!*q")
[(set (match_operand:QI 0 "non_push_operand" "=d,m,!u,*A,!*q")
(const_int 0))]
""
"@
clrb
clr\\t%b0
clr\\t%b0
ld%0\\t#0
clr%0")
@ -769,7 +770,7 @@
}")
(define_insn "*movqi_68hc12"
[(set (match_operand:QI 0 "nonimmediate_operand" "=d*AuU*q,d*A*q,d*A*q,m,m")
[(set (match_operand:QI 0 "nonimmediate_operand" "=d*AuU*q,d*A*qu,d*A*q,m,m")
(match_operand:QI 1 "general_operand" "rui*q,U,m,d*q,!A"))]
"TARGET_M6812"
"*
@ -841,7 +842,7 @@
[(set (match_operand:DI 0 "nonimmediate_operand" "=m,!u,m,!u")
(zero_extend:DI
(match_operand:QI 1 "nonimmediate_operand" "m,dmu,*B,*B")))
(clobber (match_scratch:HI 2 "=&d,&dB,&dB,&dB"))]
(clobber (match_scratch:HI 2 "=&d,&dB,&d,&dB"))]
""
"#")
@ -935,10 +936,10 @@
}")
(define_insn "zero_extendhidi2"
[(set (match_operand:DI 0 "non_push_operand" "=m,m,m,!u,!u")
[(set (match_operand:DI 0 "non_push_operand" "=m,m,m,m,!u,!u")
(zero_extend:DI
(match_operand:HI 1 "nonimmediate_operand" "m,dA,!u,dmA,!u")))
(clobber (match_scratch:HI 2 "=&d,&dB,&dB,&dB,&dB"))]
(match_operand:HI 1 "nonimmediate_operand" "m,d,A,!u,dmA,!u")))
(clobber (match_scratch:HI 2 "=&d,&B,&d,&dB,&dB,&dB"))]
""
"#")
@ -1008,10 +1009,10 @@
;; because it's less efficient.
;;
(define_insn "zero_extendhisi2"
[(set (match_operand:SI 0 "non_push_operand" "=D,mu,m,m,!u,!u")
[(set (match_operand:SI 0 "non_push_operand" "=D,m,u,m,m,!u,!u")
(zero_extend:SI
(match_operand:HI 1 "nonimmediate_operand" "dAmu,dA,m,!u,m,!u")))
(clobber (match_scratch:HI 2 "=X,X,&d,&dB,&dB,&dB"))]
(match_operand:HI 1 "nonimmediate_operand" "dAmu,dA,dA,m,!u,m,!u")))
(clobber (match_scratch:HI 2 "=X,X,X,&d,&dB,&dB,&dB"))]
""
"#")
@ -1037,9 +1038,9 @@
}")
(define_insn "zero_extendqisi2"
[(set (match_operand:SI 0 "non_push_operand" "=D,mu")
[(set (match_operand:SI 0 "non_push_operand" "=D,m,u")
(zero_extend:SI
(match_operand:QI 1 "nonimmediate_operand" "dxymu,dxy")))]
(match_operand:QI 1 "nonimmediate_operand" "dxymu,dxy,dxy")))]
""
"#")
@ -1168,8 +1169,8 @@
;;--------------------------------------------------------------------
(define_insn "extendqisi2"
[(set (match_operand:SI 0 "nonimmediate_operand" "=D,mu")
(sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dmux,d")))]
[(set (match_operand:SI 0 "nonimmediate_operand" "=D,m,u")
(sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dmux,d,d")))]
""
"*
{
@ -1259,8 +1260,8 @@
(define_insn "extendqihi2"
[(set (match_operand:HI 0 "non_push_operand" "=d,u*x*ym")
(sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "dum,0")))]
[(set (match_operand:HI 0 "non_push_operand" "=d,*x*ym,u")
(sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "dum,0,0")))]
""
"*
{
@ -1921,7 +1922,7 @@
"")
(define_insn "*addhi3"
[(set (match_operand:HI 0 "hard_reg_operand" "=dA,d,!A,d*A,!d,!w")
[(set (match_operand:HI 0 "hard_reg_operand" "=A,d,!A,d*A,!d,!w")
(plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0,0,0")
(match_operand:HI 2 "general_operand" "N,i,I,umi*A*d,!*d*w,i")))]
"TARGET_M6811"
@ -2555,10 +2556,10 @@
;;--------------------------------------------------------------------
(define_insn "anddi3"
[(set (match_operand:DI 0 "reg_or_some_mem_operand" "=mu")
(and:DI (match_operand:DI 1 "reg_or_some_mem_operand" "%imu")
(match_operand:DI 2 "general_operand" "imu")))
(clobber (match_scratch:HI 3 "=d"))]
[(set (match_operand:DI 0 "reg_or_some_mem_operand" "=m,u")
(and:DI (match_operand:DI 1 "reg_or_some_mem_operand" "%imu,imu")
(match_operand:DI 2 "general_operand" "imu,imu")))
(clobber (match_scratch:HI 3 "=d,d"))]
""
"#")
@ -2709,10 +2710,10 @@
;;--------------------------------------------------------------------
(define_insn "iordi3"
[(set (match_operand:DI 0 "reg_or_some_mem_operand" "=mu")
(ior:DI (match_operand:DI 1 "reg_or_some_mem_operand" "%imu")
(match_operand:DI 2 "general_operand" "imu")))
(clobber (match_scratch:HI 3 "=d"))]
[(set (match_operand:DI 0 "reg_or_some_mem_operand" "=m,u")
(ior:DI (match_operand:DI 1 "reg_or_some_mem_operand" "%imu,imu")
(match_operand:DI 2 "general_operand" "imu,imu")))
(clobber (match_scratch:HI 3 "=d,d"))]
""
"#")
@ -2803,10 +2804,10 @@
;;--------------------------------------------------------------------
(define_insn "xordi3"
[(set (match_operand:DI 0 "reg_or_some_mem_operand" "=mu")
(xor:DI (match_operand:DI 1 "reg_or_some_mem_operand" "%imu")
(match_operand:DI 2 "general_operand" "imu")))
(clobber (match_scratch:HI 3 "=d"))]
[(set (match_operand:DI 0 "reg_or_some_mem_operand" "=m,u")
(xor:DI (match_operand:DI 1 "reg_or_some_mem_operand" "%imu,imu")
(match_operand:DI 2 "general_operand" "imu,imu")))
(clobber (match_scratch:HI 3 "=d,d"))]
""
"#")
@ -3478,12 +3479,13 @@
xgd%0\\n\\tcoma\\n\\tcomb\\n\\txgd%0\\n\\tin%0")
(define_insn "negqi2"
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,!um,!*A")
(neg:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0")))]
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,m,!u,!*A")
(neg:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0,0")))]
""
"@
negb
neg\\t%b0
neg\\t%b0
#")
;;
@ -3504,21 +3506,23 @@
"bsr\\t___one_cmplsi2")
(define_insn "one_cmplhi2"
[(set (match_operand:HI 0 "non_push_operand" "=d,!um,*A")
(not:HI (match_operand:HI 1 "general_operand" "0,0,0")))]
[(set (match_operand:HI 0 "non_push_operand" "=d,m,!u,*A")
(not:HI (match_operand:HI 1 "general_operand" "0,0,0,0")))]
""
"@
comb\\n\\tcoma
com\\t%b0\\n\\tcom\\t%h0
com\\t%b0\\n\\tcom\\t%h0
#")
(define_insn "one_cmplqi2"
[(set (match_operand:QI 0 "non_push_operand" "=d,!um,!*A")
(not:QI (match_operand:QI 1 "general_operand" "0,0,0")))]
[(set (match_operand:QI 0 "non_push_operand" "=d,m,!u,!*A")
(not:QI (match_operand:QI 1 "general_operand" "0,0,0,0")))]
""
"@
comb
com\\t%b0
com\\t%b0
#")
(define_split /* "*one_cmplsi2" */
@ -3569,10 +3573,10 @@
}")
(define_insn "*ashldi3_const32"
[(set (match_operand:DI 0 "nonimmediate_operand" "=<,um")
(ashift:DI (match_operand:DI 1 "general_operand" "umi,umi")
[(set (match_operand:DI 0 "nonimmediate_operand" "=<,m,u")
(ashift:DI (match_operand:DI 1 "general_operand" "umi,umi,umi")
(const_int 32)))
(clobber (match_scratch:HI 2 "=A,d"))]
(clobber (match_scratch:HI 2 "=A,d,d"))]
""
"#")
@ -3601,10 +3605,10 @@
DONE;")
(define_insn "*ashldi3_const1"
[(set (match_operand:DI 0 "non_push_operand" "=um")
(ashift:DI (match_operand:DI 1 "general_operand" "umi")
[(set (match_operand:DI 0 "non_push_operand" "=m,m,u")
(ashift:DI (match_operand:DI 1 "general_operand" "mi,u,umi")
(const_int 1)))
(clobber (match_scratch:HI 2 "=d"))]
(clobber (match_scratch:HI 2 "=d,d,d"))]
""
"#")
@ -3739,10 +3743,10 @@
operands[3] = m68hc11_gen_lowpart (HImode, operands[1]);")
(define_insn "*ashlsi3_const16"
[(set (match_operand:SI 0 "nonimmediate_operand" "=D,*um")
(ashift:SI (match_operand:SI 1 "general_operand" "Duim,D")
[(set (match_operand:SI 0 "nonimmediate_operand" "=D,m,*u")
(ashift:SI (match_operand:SI 1 "general_operand" "Duim,D,D")
(const_int 16)))
(clobber (match_scratch:HI 2 "=X,X"))]
(clobber (match_scratch:HI 2 "=X,X,X"))]
""
"#")
@ -3767,10 +3771,10 @@
"")
(define_insn "*ashlsi3_const1"
[(set (match_operand:SI 0 "non_push_operand" "=D,D,*um,?*um")
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0,*um,0,*um")
[(set (match_operand:SI 0 "non_push_operand" "=D,D,m,!*u,?*um")
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0,*um,0,0,*um")
(const_int 1)))
(clobber (match_scratch:HI 2 "=X,X,&d,&d"))]
(clobber (match_scratch:HI 2 "=X,X,&d,&d,&d"))]
""
"*
{
@ -3973,13 +3977,14 @@
"")
(define_insn "*ashlqi3_const1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,!um,!*q,!*A")
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0,0")
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,m,!u,!*q,!*A")
(ashift:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0,0,0")
(const_int 1)))]
""
"@
aslb
asl\\t%b0
asl\\t%b0
asl%0
#")
@ -4268,13 +4273,14 @@
"")
(define_insn "*ashrqi3_const1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,!um,!*q,!*A")
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0,0")
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,m,!u,!*q,!*A")
(ashiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0,0,0")
(const_int 1)))]
""
"@
asrb
asr\\t%b0
asr\\t%b0
asr%0
#")
@ -4346,10 +4352,10 @@
}")
(define_insn "*lshrdi3_const32"
[(set (match_operand:DI 0 "nonimmediate_operand" "=<,um")
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi,umi")
[(set (match_operand:DI 0 "nonimmediate_operand" "=<,m,u")
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi,umi,umi")
(const_int 32)))
(clobber (match_scratch:HI 2 "=A,d"))]
(clobber (match_scratch:HI 2 "=A,d,d"))]
""
"#")
@ -4368,10 +4374,10 @@
DONE;")
(define_insn "*lshrdi3_const63"
[(set (match_operand:DI 0 "nonimmediate_operand" "=um")
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
[(set (match_operand:DI 0 "nonimmediate_operand" "=m,u")
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi,umi")
(match_operand:DI 2 "const_int_operand" "")))
(clobber (match_scratch:HI 3 "=d"))]
(clobber (match_scratch:HI 3 "=d,d"))]
"INTVAL (operands[2]) >= 48"
"#")
@ -4428,10 +4434,10 @@
operands[6] = m68hc11_gen_lowpart (HImode, operands[6]);")
(define_insn "*lshrdi_const1"
[(set (match_operand:DI 0 "non_push_operand" "=um")
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
[(set (match_operand:DI 0 "non_push_operand" "=m,u")
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi,umi")
(const_int 1)))
(clobber (match_scratch:HI 2 "=d"))]
(clobber (match_scratch:HI 2 "=d,d"))]
""
"#")
@ -4497,20 +4503,20 @@
operands[3] = m68hc11_gen_highpart (HImode, operands[1]);")
(define_insn "*lshrsi3_const16"
[(set (match_operand:SI 0 "non_push_operand" "=D,D,um")
(lshiftrt:SI (match_operand:SI 1 "general_operand" "uim,0,D")
[(set (match_operand:SI 0 "non_push_operand" "=D,D,m,u")
(lshiftrt:SI (match_operand:SI 1 "general_operand" "uim,0,D,D")
(const_int 16)))
(clobber (match_scratch:HI 2 "=X,X,X"))]
(clobber (match_scratch:HI 2 "=X,X,X,X"))]
""
"#
xgdx\\n\\tldx\\t#0
#")
(define_insn "*lshrsi3_const1"
[(set (match_operand:SI 0 "non_push_operand" "=D,*um")
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "D*um,*um")
[(set (match_operand:SI 0 "non_push_operand" "=D,m,*u")
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "D*um,*um,*um")
(const_int 1)))
(clobber (match_scratch:HI 2 "=X,&d"))]
(clobber (match_scratch:HI 2 "=X,&d,&d"))]
""
"*
{
@ -4745,13 +4751,14 @@
"")
(define_insn "*lshrqi3_const1"
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,!um,!*q,!*A")
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0,0")
[(set (match_operand:QI 0 "nonimmediate_operand" "=d,m,!u,!*q,!*A")
(lshiftrt:QI (match_operand:QI 1 "nonimmediate_operand" "0,0,0,0,0")
(const_int 1)))]
""
"@
lsrb
lsr\\t%b0
lsr\\t%b0
lsr%0
#")