pdp11.md: Change output operands to disallow immediate operands.

* config/pdp11/pdp11.md: Change output operands to disallow
immediate operands.
* config/pdp11/predicates.md (float_nonimm_operand): New.

From-SVN: r166108
This commit is contained in:
Paul Koning 2010-10-31 10:16:22 -04:00
parent b034e301bb
commit 166208c2ae
2 changed files with 58 additions and 51 deletions

View File

@ -282,7 +282,7 @@
;; Move instructions
(define_insn "movdi"
[(set (match_operand:DI 0 "general_operand" "=g,rm,o")
[(set (match_operand:DI 0 "nonimmediate_operand" "=g,rm,o")
(match_operand:DI 1 "general_operand" "m,r,a"))]
""
"* return output_move_quad (operands);"
@ -290,7 +290,7 @@
[(set_attr "length" "32,32,32")])
(define_insn "movsi"
[(set (match_operand:SI 0 "general_operand" "=r,r,r,rm,m")
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,rm,m")
(match_operand:SI 1 "general_operand" "rN,IJ,K,m,r"))]
""
"* return output_move_double (operands);"
@ -299,7 +299,7 @@
[(set_attr "length" "4,6,8,16,16")])
(define_insn "movhi"
[(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(match_operand:HI 1 "general_operand" "rRN,Qi,rRN,Qi"))]
""
"*
@ -312,7 +312,7 @@
[(set_attr "length" "2,4,4,6")])
(define_insn "movqi"
[(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:QI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(match_operand:QI 1 "general_operand" "rRN,Qi,rRN,Qi"))]
""
"*
@ -325,7 +325,7 @@
[(set_attr "length" "2,4,4,6")])
(define_insn "movdf"
[(set (match_operand:DF 0 "float_operand" "=a,fR,a,Q,g")
[(set (match_operand:DF 0 "float_nonimm_operand" "=a,fR,a,Q,g")
(match_operand:DF 1 "float_operand" "fFR,a,Q,a,g"))]
"TARGET_FPU"
"* if (which_alternative ==0 || which_alternative == 2)
@ -338,7 +338,7 @@
[(set_attr "length" "2,2,10,10,32")])
(define_insn "movsf"
[(set (match_operand:SF 0 "float_operand" "=a,fR,a,Q,g")
[(set (match_operand:SF 0 "float_nonimm_operand" "=a,fR,a,Q,g")
(match_operand:SF 1 "float_operand" "fFR,a,Q,a,g"))]
"TARGET_FPU"
"* if (which_alternative ==0 || which_alternative == 2)
@ -396,7 +396,7 @@
;;- truncation instructions
(define_insn "truncdfsf2"
[(set (match_operand:SF 0 "general_operand" "=f,R,Q")
[(set (match_operand:SF 0 "float_nonimm_operand" "=f,R,Q")
(float_truncate:SF (match_operand:DF 1 "register_operand" "f,a,a")))]
"TARGET_FPU"
"* if (which_alternative ==0)
@ -412,7 +412,7 @@
(define_expand "truncsihi2"
[(set (match_operand:HI 0 "general_operand" "=g")
[(set (match_operand:HI 0 "nonimmediate_operand" "=g")
(subreg:HI
(match_operand:SI 1 "general_operand" "or")
0))]
@ -423,7 +423,7 @@
;;- zero extension instructions
(define_insn "zero_extendqihi2"
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(zero_extend:HI (match_operand:QI 1 "general_operand" "0,0")))]
""
"bic $0177400, %0"
@ -446,7 +446,7 @@
(define_insn "extendsfdf2"
[(set (match_operand:DF 0 "register_operand" "=f,a,a")
(float_extend:DF (match_operand:SF 1 "general_operand" "f,R,Q")))]
(float_extend:DF (match_operand:SF 1 "float_operand" "f,R,Q")))]
"TARGET_FPU"
"@
/* nothing */
@ -485,13 +485,13 @@
;; unconditionally, and then match dependent on CPU type:
(define_expand "extendhisi2"
[(set (match_operand:SI 0 "general_operand" "=g")
[(set (match_operand:SI 0 "nonimmediate_operand" "=g")
(sign_extend:SI (match_operand:HI 1 "general_operand" "g")))]
""
"")
(define_insn "" ; "extendhisi2"
[(set (match_operand:SI 0 "general_operand" "=o,<,r")
[(set (match_operand:SI 0 "nonimmediate_operand" "=o,<,r")
(sign_extend:SI (match_operand:HI 1 "general_operand" "g,g,g")))]
"TARGET_40_PLUS"
"*
@ -610,7 +610,7 @@
;; cut float to int
(define_insn "fix_truncdfsi2"
[(set (match_operand:SI 0 "general_operand" "=r,R,Q")
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,R,Q")
(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "a,a,a"))))]
"TARGET_FPU"
"* if (which_alternative ==0)
@ -631,7 +631,7 @@
[(set_attr "length" "10,6,8")])
(define_insn "fix_truncdfhi2"
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(fix:HI (fix:DF (match_operand:DF 1 "register_operand" "a,a"))))]
"TARGET_FPU"
"{stcdi|movfi} %1, %0"
@ -650,7 +650,7 @@
[(set_attr "length" "2,4,10")])
(define_insn "addsi3"
[(set (match_operand:SI 0 "general_operand" "=r,r,o,o,r,r,r,o,o,o")
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,o,o,r,r,r,o,o,o")
(plus:SI (match_operand:SI 1 "general_operand" "%0,0,0,0,0,0,0,0,0,0")
(match_operand:SI 2 "general_operand" "r,o,r,o,I,J,K,I,J,K")))]
""
@ -700,7 +700,7 @@
[(set_attr "length" "6,10,12,16,6,2,10,10,6,16")])
(define_insn "addhi3"
[(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0")
(match_operand:HI 2 "general_operand" "rRLM,Qi,rRLM,Qi")))]
""
@ -719,7 +719,7 @@
[(set_attr "length" "2,4,4,6")])
(define_insn "addqi3"
[(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:QI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(plus:QI (match_operand:QI 1 "general_operand" "%0,0,0,0")
(match_operand:QI 2 "general_operand" "rRLM,Qi,rRLM,Qi")))]
""
@ -752,7 +752,7 @@
[(set_attr "length" "2,4")])
(define_insn "subsi3"
[(set (match_operand:SI 0 "general_operand" "=r,r,o,o")
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,o,o")
(minus:SI (match_operand:SI 1 "general_operand" "0,0,0,0")
(match_operand:SI 2 "general_operand" "r,o,r,o")))]
""
@ -786,7 +786,7 @@
[(set_attr "length" "6,10,12,16")])
(define_insn "subhi3"
[(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(minus:HI (match_operand:HI 1 "general_operand" "0,0,0,0")
(match_operand:HI 2 "general_operand" "rR,Qi,rR,Qi")))]
""
@ -799,7 +799,7 @@
[(set_attr "length" "2,4,4,6")])
(define_insn "subqi3"
[(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:QI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(minus:QI (match_operand:QI 1 "general_operand" "0,0,0,0")
(match_operand:QI 2 "general_operand" "rR,Qi,rR,Qi")))]
""
@ -815,7 +815,7 @@
;; Bit-and on the pdp (like on the VAX) is done with a clear-bits insn.
(define_expand "and<mode>3"
[(set (match_operand:PDPint 0 "general_operand" "")
[(set (match_operand:PDPint 0 "nonimmediate_operand" "")
(and:PDPint (not:PDPint (match_operand:PDPint 1 "general_operand" ""))
(match_operand:PDPint 2 "general_operand" "")))]
""
@ -841,7 +841,7 @@
}")
(define_insn "*bic<mode>"
[(set (match_operand:PDPint 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:PDPint 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(and:PDPint
(not: PDPint (match_operand:PDPint 1 "general_operand" "rR,Qi,rR,Qi"))
(match_operand:PDPint 2 "general_operand" "0,0,0,0")))]
@ -851,7 +851,7 @@
;;- Bit set (inclusive or) instructions
(define_insn "iorsi3"
[(set (match_operand:SI 0 "general_operand" "=r,r,o,o,r,r,r,o,o,o")
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,o,o,r,r,r,o,o,o")
(ior:SI (match_operand:SI 1 "general_operand" "%0,0,0,0,0,0,0,0,0,0")
(match_operand:SI 2 "general_operand" "r,o,r,o,I,J,K,I,J,K")))]
""
@ -899,7 +899,7 @@
[(set_attr "length" "4,8,8,12,4,4,8,6,6,12")])
(define_insn "iorhi3"
[(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(ior:HI (match_operand:HI 1 "general_operand" "%0,0,0,0")
(match_operand:HI 2 "general_operand" "rR,Qi,rR,Qi")))]
""
@ -907,7 +907,7 @@
[(set_attr "length" "2,4,4,6")])
(define_insn "iorqi3"
[(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")
[(set (match_operand:QI 0 "nonimmediate_operand" "=rR,rR,Q,Q")
(ior:QI (match_operand:QI 1 "general_operand" "%0,0,0,0")
(match_operand:QI 2 "general_operand" "rR,Qi,rR,Qi")))]
""
@ -934,15 +934,13 @@
output_asm_insn (\"xor %2, %0\", operands);
output_asm_insn (\"xor %2, %0\", lateoperands);
return \"\";
}
return \"\";
}"
[(set_attr "length" "4")])
(define_insn "xorhi3"
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(xor:HI (match_operand:HI 1 "general_operand" "%0,0")
(match_operand:HI 2 "register_operand" "r,r")))]
"TARGET_40_PLUS"
@ -952,14 +950,14 @@
;;- one complement instructions
(define_insn "one_cmplhi2"
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(not:HI (match_operand:HI 1 "general_operand" "0,0")))]
""
"com %0"
[(set_attr "length" "2,4")])
(define_insn "one_cmplqi2"
[(set (match_operand:QI 0 "general_operand" "=rR,rR")
[(set (match_operand:QI 0 "nonimmediate_operand" "=rR,rR")
(not:QI (match_operand:QI 1 "general_operand" "0,g")))]
""
"@
@ -991,7 +989,7 @@
;; asl
(define_insn ""
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(ashift:HI (match_operand:HI 1 "general_operand" "0,0")
(const_int 1)))]
""
@ -1004,7 +1002,7 @@
;; asr
(define_insn ""
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(ashift:HI (match_operand:HI 1 "general_operand" "0,0")
(const_int -1)))]
""
@ -1013,7 +1011,7 @@
;; lsr
(define_insn ""
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(lshiftrt:HI (match_operand:HI 1 "general_operand" "0,0")
(const_int 1)))]
""
@ -1047,7 +1045,7 @@
;; shift by one cheap - so let's do that, if
;; space doesn't matter
(define_insn ""
[(set (match_operand:HI 0 "general_operand" "=r")
[(set (match_operand:HI 0 "nonimmediate_operand" "=r")
(ashift:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:HI 2 "expand_shift_operand" "O")))]
"! optimize_size"
@ -1068,7 +1066,7 @@
;; aslb
(define_insn ""
[(set (match_operand:QI 0 "general_operand" "=r,o")
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,o")
(ashift:QI (match_operand:QI 1 "general_operand" "0,0")
(match_operand:HI 2 "const_int_operand" "n,n")))]
""
@ -1090,7 +1088,7 @@
;;; asr
;(define_insn ""
; [(set (match_operand:HI 0 "general_operand" "=rR,Q")
; [(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
; (ashiftrt:HI (match_operand:HI 1 "general_operand" "0,0")
; (const_int 1)))]
; ""
@ -1099,7 +1097,7 @@
;; asrb
(define_insn ""
[(set (match_operand:QI 0 "general_operand" "=r,o")
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,o")
(ashiftrt:QI (match_operand:QI 1 "general_operand" "0,0")
(match_operand:HI 2 "const_int_operand" "n,n")))]
""
@ -1170,14 +1168,14 @@
;; absolute
(define_insn "absdf2"
[(set (match_operand:DF 0 "general_operand" "=fR,Q")
[(set (match_operand:DF 0 "nonimmediate_operand" "=fR,Q")
(abs:DF (match_operand:DF 1 "general_operand" "0,0")))]
"TARGET_FPU"
"{absd|absf} %0"
[(set_attr "length" "2,4")])
(define_insn "abshi2"
[(set (match_operand:HI 0 "general_operand" "=r,o")
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,o")
(abs:HI (match_operand:HI 1 "general_operand" "0,0")))]
"TARGET_ABSHI_BUILTIN"
"*
@ -1204,7 +1202,7 @@
; -- just a thought - don't have time to check
;
;(define_expand "abshi2"
; [(match_operand:HI 0 "general_operand" "")
; [(match_operand:HI 0 "nonimmediate_operand" "")
; (match_operand:HI 1 "general_operand" "")]
; ""
; "
@ -1234,7 +1232,7 @@
;; negate insns
(define_insn "negdf2"
[(set (match_operand:DF 0 "general_operand" "=fR,Q")
[(set (match_operand:DF 0 "float_nonimm_operand" "=fR,Q")
(neg:DF (match_operand:DF 1 "register_operand" "0,0")))]
"TARGET_FPU"
"{negd|negf} %0"
@ -1264,14 +1262,14 @@
[(set_attr "length" "10")])
(define_insn "neghi2"
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
[(set (match_operand:HI 0 "nonimmediate_operand" "=rR,Q")
(neg:HI (match_operand:HI 1 "general_operand" "0,0")))]
""
"neg %0"
[(set_attr "length" "2,4")])
(define_insn "negqi2"
[(set (match_operand:QI 0 "general_operand" "=rR,Q")
[(set (match_operand:QI 0 "nonimmediate_operand" "=rR,Q")
(neg:QI (match_operand:QI 1 "general_operand" "0,0")))]
""
"negb %0"
@ -1358,7 +1356,7 @@
(define_insn "muldf3"
[(set (match_operand:DF 0 "register_operand" "=a,a,a")
(mult:DF (match_operand:DF 1 "register_operand" "%0,0,0")
(match_operand:DF 2 "general_operand" "fR,Q,F")))]
(match_operand:DF 2 "float_operand" "fR,Q,F")))]
"TARGET_FPU"
"{muld|mulf} %2, %0"
[(set_attr "length" "2,4,10")])
@ -1372,7 +1370,7 @@
(define_insn "mulhi3"
[(set (match_operand:HI 0 "register_operand" "=d,d") ; multiply regs
(mult:HI (match_operand:HI 1 "register_operand" "%0,0")
(match_operand:HI 2 "general_operand" "rR,Qi")))]
(match_operand:HI 2 "float_operand" "rR,Qi")))]
"TARGET_40_PLUS"
"mul %2, %0"
[(set_attr "length" "2,4")])
@ -1380,7 +1378,7 @@
;; 32 bit result
(define_expand "mulhisi3"
[(set (match_dup 3)
(match_operand:HI 1 "general_operand" "g,g"))
(match_operand:HI 1 "nonimmediate_operand" "g,g"))
(set (match_operand:SI 0 "register_operand" "=r,r") ; even numbered!
(mult:SI (truncate:HI
(match_dup 0))
@ -1426,7 +1424,7 @@
"")
(define_insn ""
[(set (subreg:HI (match_operand:SI 0 "general_operand" "=r") 0)
[(set (subreg:HI (match_operand:SI 0 "register_operand" "=r") 0)
(div:HI (match_operand:SI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))]
"TARGET_40_PLUS"
@ -1443,7 +1441,7 @@
"")
(define_insn ""
[(set (subreg:HI (match_operand:SI 0 "general_operand" "=r") 2)
[(set (subreg:HI (match_operand:SI 0 "register_operand" "=r") 2)
(mod:HI (match_operand:SI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))]
"TARGET_40_PLUS"
@ -1465,7 +1463,7 @@
; "")
;
;(define_insn ""
; [(set (subreg:HI (match_operand:SI 0 "general_operand" "=r") 0)
; [(set (subreg:HI (match_operand:SI 0 "register_operand" "=r") 0)
; (div:HI (match_operand:SI 1 "general_operand" "0")
; (match_operand:HI 2 "general_operand" "g")))
; (set (subreg:HI (match_dup 0) 2)

View File

@ -36,7 +36,7 @@
return (abs (sh) > 1 && abs (sh) <= 4);
})
;; Accept anything general-operand accepts, except that registers must
;; Accept anything general_operand accepts, except that registers must
;; be FPU registers.
(define_predicate "float_operand"
(if_then_else (match_code "reg")
@ -44,3 +44,12 @@
(match_test "REGNO_REG_CLASS (REGNO (op)) == LOAD_FPU_REGS")
(match_test "REGNO_REG_CLASS (REGNO (op)) == NO_LOAD_FPU_REGS"))
(match_test "general_operand (op, mode)")))
;; Accept anything nonimmediate_operand accepts, except that registers must
;; be FPU registers.
(define_predicate "float_nonimm_operand"
(if_then_else (match_code "reg")
(ior
(match_test "REGNO_REG_CLASS (REGNO (op)) == LOAD_FPU_REGS")
(match_test "REGNO_REG_CLASS (REGNO (op)) == NO_LOAD_FPU_REGS"))
(match_test "nonimmediate_operand (op, mode)")))