diff options
Diffstat (limited to 'gcc/config/rs6000/rs6000.md')
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 58 |
1 files changed, 3 insertions, 55 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index b3fdd97461c..132fb3c1ef7 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -5339,16 +5339,9 @@ (fix:SI (match_operand:DF 1 "gpc_reg_operand" ""))) (clobber (match_dup 2)) (clobber (match_dup 3))])] - "TARGET_HARD_FLOAT" + "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT" " { - if (! TARGET_POWER2 && ! TARGET_POWERPC) - { - emit_insn (gen_trunc_call (operands[0], operands[1], - gen_rtx_SYMBOL_REF (Pmode, RS6000_ITRUNC))); - DONE; - } - operands[2] = gen_reg_rtx (DImode); operands[3] = assign_stack_temp (DImode, GET_MODE_SIZE (DImode), 0); }") @@ -5358,7 +5351,7 @@ (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f"))) (clobber (match_operand:DI 2 "gpc_reg_operand" "=f")) (clobber (match_operand:DI 3 "memory_operand" "=o"))] - "TARGET_HARD_FLOAT" + "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT" "#" [(set_attr "length" "16")]) @@ -5367,7 +5360,7 @@ (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f"))) (clobber (match_operand:DI 2 "gpc_reg_operand" "")) (clobber (match_operand:DI 3 "offsettable_mem_operand" ""))] - "TARGET_HARD_FLOAT" + "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT" [(set (match_operand:SI 0 "gpc_reg_operand" "") (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f"))) (clobber (match_operand:DI 2 "gpc_reg_operand" "")) @@ -5387,51 +5380,6 @@ DONE; }") -(define_expand "fixuns_truncdfsi2" - [(set (match_operand:SI 0 "gpc_reg_operand" "") - (unsigned_fix:SI (match_operand:DF 1 "gpc_reg_operand" "")))] - "! TARGET_POWER2 && ! TARGET_POWERPC && TARGET_HARD_FLOAT" - " -{ - emit_insn (gen_trunc_call (operands[0], operands[1], - gen_rtx_SYMBOL_REF (Pmode, RS6000_UITRUNC))); - DONE; -}") - -(define_expand "trunc_call" - [(parallel [(set (match_operand:SI 0 "" "") - (fix:SI (match_operand:DF 1 "" ""))) - (use (match_operand:SI 2 "" ""))])] - "TARGET_HARD_FLOAT" - " -{ - rtx insns = gen_trunc_call_rtl (operands[0], operands[1], operands[2]); - rtx first = XVECEXP (insns, 0, 0); - rtx last = XVECEXP (insns, 0, XVECLEN (insns, 0) - 1); - - REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last, - REG_NOTES (first)); - REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first, REG_NOTES (last)); - - emit_insn (insns); - DONE; -}") - -(define_expand "trunc_call_rtl" - [(set (reg:DF 33) (match_operand:DF 1 "gpc_reg_operand" "")) - (use (reg:DF 33)) - (parallel [(set (reg:SI 3) - (call (mem:SI (match_operand 2 "" "")) (const_int 0))) - (use (const_int 0)) - (clobber (scratch:SI))]) - (set (match_operand:SI 0 "gpc_reg_operand" "") - (reg:SI 3))] - "TARGET_HARD_FLOAT" - " -{ - rs6000_trunc_used = 1; -}") - ; Here, we use (set (reg) (unspec:DI [(fix:SI ...)] 10)) ; rather than (set (subreg:SI (reg)) (fix:SI ...)) ; because the first makes it clear that operand 0 is not live |