diff options
Diffstat (limited to 'gcc/config/arm/arm.c')
| -rw-r--r-- | gcc/config/arm/arm.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index ae37fc7..1ea9e27 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -10181,7 +10181,7 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code, { rtx op0 = XEXP (x, 0); - if (GET_CODE (op0) == NEG) + if (GET_CODE (op0) == NEG && !flag_rounding_math) op0 = XEXP (op0, 0); if (speed_p) @@ -10255,6 +10255,13 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code, if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT && (mode == SFmode || !TARGET_VFP_SINGLE)) { + if (GET_CODE (XEXP (x, 0)) == MULT) + { + /* VNMUL. */ + *cost = rtx_cost (XEXP (x, 0), mode, NEG, 0, speed_p); + return true; + } + if (speed_p) *cost += extra_cost->fp[mode != SFmode].neg; |
