diff options
Diffstat (limited to 'gcc/config/rs6000/rs6000.c')
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index c589118a797..539446ce45f 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -32904,10 +32904,19 @@ rs6000_emit_swsqrt (rtx dst, rtx src, bool recip) if (!recip) { rtx zero = force_reg (mode, CONST0_RTX (mode)); - rtx target = emit_conditional_move (e, GT, src, zero, mode, - e, zero, mode, 0); - if (target != e) - emit_move_insn (e, target); + + if (mode == SFmode) + { + rtx target = emit_conditional_move (e, GT, src, zero, mode, + e, zero, mode, 0); + if (target != e) + emit_move_insn (e, target); + } + else + { + rtx cond = gen_rtx_GT (VOIDmode, e, zero); + rs6000_emit_vector_cond_expr (e, e, zero, cond, src, zero); + } } /* g = sqrt estimate. */ |