Commit e3be1b32 by Richard Kenner

(truncdfsf2...

(truncdfsf2, extendsfdf2, floatsidf2, fix_truncdfsi2): Allow register
parameters, required by gcc to generate correct code.

From-SVN: r10203
parent 7e476021
...@@ -718,11 +718,24 @@ ...@@ -718,11 +718,24 @@
;;- truncation instructions ;;- truncation instructions
(define_insn "truncdfsf2" (define_insn "truncdfsf2"
[(set (match_operand:SF 0 "memory_operand" "=R,Q") [(set (match_operand:SF 0 "general_operand" "=r,R,Q")
(float_truncate:SF (match_operand:DF 1 "register_operand" "a,a")))] (float_truncate:SF (match_operand:DF 1 "register_operand" "a,a,a")))]
"TARGET_FPU" "TARGET_FPU"
"stcdf %1, %0" "* if (which_alternative ==0)
[(set_attr "length" "1,2")]) {
output_asm_insn(\"stcdf %1, -(sp)\", operands);
output_asm_insn(\"mov (sp)+, %0\", operands);
operands[0] = gen_rtx(REG, HImode, REGNO (operands[0])+1);
output_asm_insn(\"mov (sp)+, %0\", operands);
return \"\";
}
else if (which_alternative == 1)
return \"stcdf %1, %0\";
else
return \"stcdf %1, %0\";
"
[(set_attr "length" "3,1,2")])
(define_expand "truncsihi2" (define_expand "truncsihi2"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "general_operand" "=g")
...@@ -758,11 +771,14 @@ ...@@ -758,11 +771,14 @@
;;- sign extension instructions ;;- sign extension instructions
(define_insn "extendsfdf2" (define_insn "extendsfdf2"
[(set (match_operand:DF 0 "register_operand" "=a,a") [(set (match_operand:DF 0 "register_operand" "=a,a,a")
(float_extend:SF (match_operand:SF 1 "memory_operand" "R,Q")))] (float_extend:SF (match_operand:SF 1 "general_operand" "r,R,Q")))]
"TARGET_FPU" "TARGET_FPU"
"ldcfd %1, %0" "@
[(set_attr "length" "1,2")]) mov %1, -(sp)\;ldcfd (sp)+,%0
ldcfd %1, %0
ldcfd %1, %0"
[(set_attr "length" "2,1,2")])
;; does movb sign extend in register-to-register move? ;; does movb sign extend in register-to-register move?
(define_insn "extendqihi2" (define_insn "extendqihi2"
...@@ -887,11 +903,29 @@ ...@@ -887,11 +903,29 @@
;; what do pdp library routines do to fpu mode ? ;; what do pdp library routines do to fpu mode ?
(define_insn "floatsidf2" (define_insn "floatsidf2"
[(set (match_operand:DF 0 "register_operand" "=a,a") [(set (match_operand:DF 0 "register_operand" "=a,a,a")
(float:DF (match_operand:SI 1 "memory_operand" "R,Q")))] (float:DF (match_operand:SI 1 "general_operand" "r,R,Q")))]
"TARGET_FPU" "TARGET_FPU"
"setl\;ldcld %1, %0\;seti" "* if (which_alternative ==0)
[(set_attr "length" "3,4")]) {
rtx latehalf[2];
latehalf[0] = NULL;
latehalf[1] = gen_rtx(REG, HImode, REGNO (operands[0])+1);
output_asm_insn(\"mov %1, -(sp)\", latehalf);
output_asm_insn(\"mov %1, -(sp)\", operands);
output_asm_insn(\"setl\", operands);
output_asm_insn(\"ldcld (sp)+, %0\", operands);
output_asm_insn(\"seti\", operands);
return \"\";
}
else if (which_alternative == 1)
return \"setl\;ldcld %1, %0\;seti\";
else
return \"setl\;ldcld %1, %0\;seti\";
"
[(set_attr "length" "5,3,4")])
(define_insn "floathidf2" (define_insn "floathidf2"
[(set (match_operand:DF 0 "register_operand" "=a,a") [(set (match_operand:DF 0 "register_operand" "=a,a")
...@@ -902,11 +936,25 @@ ...@@ -902,11 +936,25 @@
;; cut float to int ;; cut float to int
(define_insn "fix_truncdfsi2" (define_insn "fix_truncdfsi2"
[(set (match_operand:SI 0 "memory_operand" "=R,Q") [(set (match_operand:SI 0 "general_operand" "=r,R,Q")
(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "a,a"))))] (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "a,a,a"))))]
"TARGET_FPU" "TARGET_FPU"
"setl\;stcdl %1, %0\;seti" "* if (which_alternative ==0)
[(set_attr "length" "3,4")]) {
output_asm_insn(\"setl\", operands);
output_asm_insn(\"stcdl %1, -(sp)\", operands);
output_asm_insn(\"seti\", operands);
output_asm_insn(\"mov (sp)+, %0\", operands);
operands[0] = gen_rtx(REG, HImode, REGNO (operands[0])+1);
output_asm_insn(\"mov (sp)+, %0\", operands);
return \"\";
}
else if (which_alternative == 1)
return \"setl\;stcdl %1, %0\;seti\";
else
return \"setl\;stcdl %1, %0\;seti\";
"
[(set_attr "length" "5,3,4")])
(define_insn "fix_truncdfhi2" (define_insn "fix_truncdfhi2"
[(set (match_operand:HI 0 "general_operand" "=rR,Q") [(set (match_operand:HI 0 "general_operand" "=rR,Q")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment