Commit 208c89ce by Michael Meissner

Move xor of input into insn doing int->double conversion.

From-SVN: r12324
parent 5aae9091
...@@ -3549,16 +3549,14 @@ ...@@ -3549,16 +3549,14 @@
(float:DF (match_operand:SI 1 "gpc_reg_operand" ""))) (float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
(use (match_dup 2)) (use (match_dup 2))
(use (match_dup 3)) (use (match_dup 3))
(clobber (match_dup 4))
(clobber (reg:DF 76))])] (clobber (reg:DF 76))])]
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT" "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
" "
{ {
rtx low = gen_reg_rtx (SImode);
operands[2] = force_reg (SImode, GEN_INT (0x43300000)); operands[2] = force_reg (SImode, GEN_INT (0x43300000));
operands[3] = force_reg (DFmode, rs6000_float_const (\"4503601774854144\", DFmode)); operands[3] = force_reg (DFmode, rs6000_float_const (\"4503601774854144\", DFmode));
operands[4] = gen_reg_rtx (SImode);
emit_insn (gen_xorsi3 (low, operands[1], GEN_INT (0x80000000)));
operands[1] = low;
}") }")
(define_insn "*floatsidf2_internal" (define_insn "*floatsidf2_internal"
...@@ -3566,32 +3564,41 @@ ...@@ -3566,32 +3564,41 @@
(float:DF (match_operand:SI 1 "gpc_reg_operand" "r"))) (float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))
(use (match_operand:SI 2 "gpc_reg_operand" "r")) (use (match_operand:SI 2 "gpc_reg_operand" "r"))
(use (match_operand:DF 3 "gpc_reg_operand" "f")) (use (match_operand:DF 3 "gpc_reg_operand" "f"))
(clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
(clobber (reg:DF 76))] (clobber (reg:DF 76))]
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT" "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
"#" "#"
[(set_attr "length" "16")]) [(set_attr "length" "20")])
(define_split (define_split
[(set (match_operand:DF 0 "gpc_reg_operand" "") [(set (match_operand:DF 0 "gpc_reg_operand" "")
(float:DF (match_operand:SI 1 "gpc_reg_operand" ""))) (float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
(use (match_operand:SI 2 "gpc_reg_operand" "")) (use (match_operand:SI 2 "gpc_reg_operand" ""))
(use (match_operand:DF 3 "gpc_reg_operand" "")) (use (match_operand:DF 3 "gpc_reg_operand" ""))
(clobber (match_operand:SI 4 "gpc_reg_operand" ""))
(clobber (reg:DF 76))] (clobber (reg:DF 76))]
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT" "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
[(set (match_dup 4) [(set (match_dup 4)
(unspec [(match_dup 1) ;; low word (xor:SI (match_dup 1)
(match_dup 5)))
(set (match_dup 6)
(unspec [(match_dup 4) ;; low word
(reg:SI 1)] 11)) (reg:SI 1)] 11))
(set (match_dup 4) (set (match_dup 6)
(unspec [(match_dup 2) ;; high word (unspec [(match_dup 2) ;; high word
(reg:SI 1) (reg:SI 1)
(match_dup 4)] 12)) (match_dup 6)] 12))
(set (match_dup 0) (set (match_dup 0)
(unspec [(match_dup 4) (unspec [(match_dup 6)
(reg:SI 1)] 13)) (reg:SI 1)] 13))
(set (match_dup 0) (set (match_dup 0)
(minus:DF (match_dup 0) (minus:DF (match_dup 0)
(match_dup 3)))] (match_dup 3)))]
"operands[4] = gen_rtx (REG, DFmode, FPMEM_REGNUM);") "
{
operands[5] = GEN_INT (0x80000000);
operands[6] = gen_rtx (REG, DFmode, FPMEM_REGNUM);
}")
(define_expand "floatunssidf2" (define_expand "floatunssidf2"
[(parallel [(set (match_operand:DF 0 "gpc_reg_operand" "") [(parallel [(set (match_operand:DF 0 "gpc_reg_operand" "")
......
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