re PR target/57516 ([avr] Incorrect fixed-point rounding result in the overflow case)
gcc/ PR target/57516 * config/avr/avr-fixed.md (round<mode>3_const): Turn expander to insn. * config/avr/avr.md (adjust_len): Add `round'. * config/avr/avr-protos.h (avr_out_round): New prototype. (avr_out_plus): Add `out_label' argument. * config/avr/avr.c (avr_out_plus_1): Add `out_label' argument. (avr_out_plus): Pass down `out_label' to avr_out_plus_1. Handle the case where `insn' is just a pattern. (avr_out_bitop): Handle the case where `insn' is just a pattern. (avr_out_round): New function. (avr_adjust_insn_length): Handle ADJUST_LEN_ROUND. libgcc/ PR target/57516 * config/avr/lib1funcs-fixed.S (__roundqq3, __rounduqq3) (__round_s2_const, __round_u2_const) (__round_s4_const, __round_u4_const, __round_x8): Saturate result if addition result cannot be represented. gcc/testsuite/ PR target/57516 * gcc.target/avr/torture/builtins-4-roundfx.c (test2hr, test2k): Adjust to corrected rounding. From-SVN: r201051
Showing
- gcc/ChangeLog 14 additions, 0 deletionsgcc/ChangeLog
- gcc/config/avr/avr-fixed.md 10 additions, 41 deletionsgcc/config/avr/avr-fixed.md
- gcc/config/avr/avr-protos.h 2 additions, 1 deletiongcc/config/avr/avr-protos.h
- gcc/config/avr/avr.c 88 additions, 16 deletionsgcc/config/avr/avr.c
- gcc/config/avr/avr.md 1 addition, 1 deletiongcc/config/avr/avr.md
- gcc/testsuite/ChangeLog 6 additions, 0 deletionsgcc/testsuite/ChangeLog
- gcc/testsuite/gcc.target/avr/torture/builtins-4-roundfx.c 12 additions, 9 deletionsgcc/testsuite/gcc.target/avr/torture/builtins-4-roundfx.c
- libgcc/ChangeLog 8 additions, 0 deletionslibgcc/ChangeLog
- libgcc/config/avr/lib1funcs-fixed.S 26 additions, 21 deletionslibgcc/config/avr/lib1funcs-fixed.S
Loading
Please register or sign in to comment