re PR target/35944 (wrong result for MOD with kind=10 for some array argument values)
PR target/35944 * config/i386/i386.md (fmodxf3): Copy operand 1 and operand 2 into temporary registers. Change operand predicate to general_operand. (remainderxf3): Ditto. From-SVN: r134348
This commit is contained in:
parent
e544c850ff
commit
17c340e049
|
@ -1,3 +1,10 @@
|
||||||
|
2008-04-16 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
|
PR target/35944
|
||||||
|
* config/i386/i386.md (fmodxf3): Copy operand 1 and operand 2 into
|
||||||
|
temporary registers. Change operand predicate to general_operand.
|
||||||
|
(remainderxf3): Ditto.
|
||||||
|
|
||||||
2008-04-16 Richard Guenther <rguenther@suse.de>
|
2008-04-16 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
* Makefile.in (tree-affine.o): Add $(FLAGS_H) dependency.
|
* Makefile.in (tree-affine.o): Add $(FLAGS_H) dependency.
|
||||||
|
@ -51,9 +58,9 @@
|
||||||
sjlj_build_landing_pads, finish_eh_generation,
|
sjlj_build_landing_pads, finish_eh_generation,
|
||||||
remove_exception_handler_label, remove_eh_handler,
|
remove_exception_handler_label, remove_eh_handler,
|
||||||
maybe_remove_eh_handler, add_reachable_handler,
|
maybe_remove_eh_handler, add_reachable_handler,
|
||||||
reachable_handlers, expand_builtin_eh_return,
|
reachable_handlers, expand_builtin_eh_return, expand_eh_return,
|
||||||
expand_eh_return, add_action_record, collect_one_action_chain,
|
add_action_record, collect_one_action_chain, add_call_site,
|
||||||
add_call_site, convert_to_eh_region_ranges, sjlj_size_of_call_site_table,
|
convert_to_eh_region_ranges, sjlj_size_of_call_site_table,
|
||||||
sjlj_output_call_site_table, output_function_exception_table,
|
sjlj_output_call_site_table, output_function_exception_table,
|
||||||
* except.h (note_current_region_may_contain_throw): Remove
|
* except.h (note_current_region_may_contain_throw): Remove
|
||||||
(get_exception_pointer, get_exception_filter): Do not take struct
|
(get_exception_pointer, get_exception_filter): Do not take struct
|
||||||
|
|
|
@ -16434,28 +16434,24 @@
|
||||||
|
|
||||||
(define_expand "fmodxf3"
|
(define_expand "fmodxf3"
|
||||||
[(use (match_operand:XF 0 "register_operand" ""))
|
[(use (match_operand:XF 0 "register_operand" ""))
|
||||||
(use (match_operand:XF 1 "register_operand" ""))
|
(use (match_operand:XF 1 "general_operand" ""))
|
||||||
(use (match_operand:XF 2 "register_operand" ""))]
|
(use (match_operand:XF 2 "general_operand" ""))]
|
||||||
"TARGET_USE_FANCY_MATH_387"
|
"TARGET_USE_FANCY_MATH_387"
|
||||||
{
|
{
|
||||||
rtx label = gen_label_rtx ();
|
rtx label = gen_label_rtx ();
|
||||||
|
|
||||||
rtx op2;
|
rtx op1 = gen_reg_rtx (XFmode);
|
||||||
|
rtx op2 = gen_reg_rtx (XFmode);
|
||||||
|
|
||||||
if (rtx_equal_p (operands[1], operands[2]))
|
emit_move_insn (op1, operands[1]);
|
||||||
{
|
|
||||||
op2 = gen_reg_rtx (XFmode);
|
|
||||||
emit_move_insn (op2, operands[2]);
|
emit_move_insn (op2, operands[2]);
|
||||||
}
|
|
||||||
else
|
|
||||||
op2 = operands[2];
|
|
||||||
|
|
||||||
emit_label (label);
|
emit_label (label);
|
||||||
emit_insn (gen_fpremxf4_i387 (operands[1], op2, operands[1], op2));
|
emit_insn (gen_fpremxf4_i387 (op1, op2, op1, op2));
|
||||||
ix86_emit_fp_unordered_jump (label);
|
ix86_emit_fp_unordered_jump (label);
|
||||||
LABEL_NUSES (label) = 1;
|
LABEL_NUSES (label) = 1;
|
||||||
|
|
||||||
emit_move_insn (operands[0], operands[1]);
|
emit_move_insn (operands[0], op1);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -16506,28 +16502,24 @@
|
||||||
|
|
||||||
(define_expand "remainderxf3"
|
(define_expand "remainderxf3"
|
||||||
[(use (match_operand:XF 0 "register_operand" ""))
|
[(use (match_operand:XF 0 "register_operand" ""))
|
||||||
(use (match_operand:XF 1 "register_operand" ""))
|
(use (match_operand:XF 1 "general_operand" ""))
|
||||||
(use (match_operand:XF 2 "register_operand" ""))]
|
(use (match_operand:XF 2 "general_operand" ""))]
|
||||||
"TARGET_USE_FANCY_MATH_387"
|
"TARGET_USE_FANCY_MATH_387"
|
||||||
{
|
{
|
||||||
rtx label = gen_label_rtx ();
|
rtx label = gen_label_rtx ();
|
||||||
|
|
||||||
rtx op2;
|
rtx op1 = gen_reg_rtx (XFmode);
|
||||||
|
rtx op2 = gen_reg_rtx (XFmode);
|
||||||
|
|
||||||
if (rtx_equal_p (operands[1], operands[2]))
|
emit_move_insn (op1, operands[1]);
|
||||||
{
|
|
||||||
op2 = gen_reg_rtx (XFmode);
|
|
||||||
emit_move_insn (op2, operands[2]);
|
emit_move_insn (op2, operands[2]);
|
||||||
}
|
|
||||||
else
|
|
||||||
op2 = operands[2];
|
|
||||||
|
|
||||||
emit_label (label);
|
emit_label (label);
|
||||||
emit_insn (gen_fprem1xf4_i387 (operands[1], op2, operands[1], op2));
|
emit_insn (gen_fprem1xf4_i387 (op1, op2, op1, op2));
|
||||||
ix86_emit_fp_unordered_jump (label);
|
ix86_emit_fp_unordered_jump (label);
|
||||||
LABEL_NUSES (label) = 1;
|
LABEL_NUSES (label) = 1;
|
||||||
|
|
||||||
emit_move_insn (operands[0], operands[1]);
|
emit_move_insn (operands[0], op1);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue