diff options
author | Roger Sayle <roger@eyesopen.com> | 2005-03-15 20:43:12 +0000 |
---|---|---|
committer | Roger Sayle <roger@eyesopen.com> | 2005-03-15 20:43:12 +0000 |
commit | e2c106987449334872d5afebad076a9ad7b14b95 (patch) | |
tree | 50db29a106e66fe59df101fa54e16ae8c18b2d72 /gcc/optabs.c | |
parent | 00a9e61bf12bfc7a7e15f64939c3549728c16277 (diff) |
* real.c (c4x_single_format, c4x_extended_format): Provide values
for signbit_ro for c4x's single and extended floating point formats.
* optabs.c (expand_copysign): Use the floating point format's
signbit_ro for expanding via expand_copysign_absneg, and it's
signbit_rw field for expanding via expand_copysign_bit.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@96530 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r-- | gcc/optabs.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index d41a234de6b..a28042a80aa 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -2865,7 +2865,6 @@ expand_copysign (rtx op0, rtx op1, rtx target) { enum machine_mode mode = GET_MODE (op0); const struct real_format *fmt; - int bitpos; bool op0_is_abs; rtx temp; @@ -2882,10 +2881,6 @@ expand_copysign (rtx op0, rtx op1, rtx target) if (fmt == NULL || !fmt->has_signed_zero) return NULL_RTX; - bitpos = fmt->signbit_rw; - if (bitpos < 0) - return NULL_RTX; - op0_is_abs = false; if (GET_CODE (op0) == CONST_DOUBLE) { @@ -2894,17 +2889,21 @@ expand_copysign (rtx op0, rtx op1, rtx target) op0_is_abs = true; } - if (GET_CODE (op0) == CONST_DOUBLE - || (neg_optab->handlers[mode].insn_code != CODE_FOR_nothing - && abs_optab->handlers[mode].insn_code != CODE_FOR_nothing)) + if (fmt->signbit_ro >= 0 + && (GET_CODE (op0) == CONST_DOUBLE + || (neg_optab->handlers[mode].insn_code != CODE_FOR_nothing + && abs_optab->handlers[mode].insn_code != CODE_FOR_nothing))) { temp = expand_copysign_absneg (mode, op0, op1, target, - bitpos, op0_is_abs); + fmt->signbit_ro, op0_is_abs); if (temp) return temp; } - return expand_copysign_bit (mode, op0, op1, target, bitpos, op0_is_abs); + if (fmt->signbit_rw < 0) + return NULL_RTX; + return expand_copysign_bit (mode, op0, op1, target, + fmt->signbit_rw, op0_is_abs); } /* Generate an instruction whose insn-code is INSN_CODE, |