This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/54222] [avr] Implement fixed-point support


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54222

--- Comment #6 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2012-09-15 15:52:35 UTC ---
Author: gjl
Date: Sat Sep 15 15:52:28 2012
New Revision: 191345

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=191345
Log:
gcc/
    PR target/54222
    * config/avr/avr-fixed.md (ALL2S, ALL4S, ALL24S, ALL124S,
    ALL124U): New mode iterators.
    (<code_stdname><mode>3): New insns for SS_PLUS, SS_MINUS.
    (<code_stdname><mode>3): New insns for US_PLUS, US_MINUS.
    (usneg<mode>2): New insns.
    (<code_stdname><mode>2): New expanders for SS_NEG, SS_ABS.
    (*<code_stdname><mode>2): New insns for SS_NEG, SS_ABS.
    * config/avr/avr-dimode.md (ALL8U, ALL8S): New mode iterators.
    (avr_out_plus64, avr_out_minus64): Use avr_out_plus instead.
    (<code_stdname><mode>3): New expanders for SS_PLUS, SS_MINUS.
    (<code_stdname><mode>3): New expanders for US_PLUS, US_MINUS.
    (<code_stdname><mode>3_insn): New insns.
    (<code_stdname><mode>3_const_insn): New insns.
    * config/avr/avr.md (cc): Add: plus. Remove: out_plus,
    out_plus_noclobber, minus.
    (length): Add: plus.  Remove: out_plus, out_plus_noclobber,
    plus64, minus, minus64.
    (abelian): New code_attr.
    (code_stdname): Handle: ss_plus, ss_minus, ss_neg, ss_abs,
    us_plus, us_minus, us_neg.
    (*add<mode>3, add<mode>3_clobber, add<mode>3, addpsi3, sub<mode>3):
    Use avr_out_plus to output.
    * config/avr/avr-protos.h (avr_out_plus): Change prototype.
    (avr_out_plus_noclobber, avr_out_minus): Remove.
    (avr_out_plus64, avr_out_minus64): Remove.
    * config/avr/avr.c (avr_out_plus_1): Add new default arguments
    code_sat, sign.  Saturate after operation if code_sat != UNKNOWN.
    (avr_out_plus_symbol): New static function.
    (avr_out_plus): Rewrite.
    (adjust_insn_length): Handle: ADJUST_LEN_PLUS.  Remove handling
    of: ADJUST_LEN_OUT_PLUS, ADJUST_LEN_PLUS64, ADJUST_LEN_MINUS, 
    ADJUST_LEN_MINUS64, ADJUST_LEN_OUT_PLUS_NOCLOBBER.
    (notice_update_cc): Handle: CC_PLUS.  Remove handling of: CC_MINUS,
    CC_OUT_PLUS, CC_OUT_PLUS_NOCLOBBER
    (avr_out_plus_noclobber, avr_out_minus): Remove.
    (avr_out_plus64, avr_out_minus64): Remove.
    (avr_print_operand): Print raw REGNO if 'r' is used with REG.

libgcc/
    PR target/54222
    * config/avr/lib1funcs-fixed.S (__ssneg_2, __ssabs_2, __ssneg_4,
    __ssabs_4, __clr_8, __ssneg_8, __ssabs_8,
    __usadd_8, __ussub_8, __ssadd_8, __sssub_8): New functions.
    (__divsa3): Use __negsi2 to negate r_quoL.
    * config/avr/lib1funcs.S (FALIAS): New macro.
    (__divmodsi4): Break out and use __divmodsi4_neg1 as...
    (__negsi2): ...this new function.
    * config/avr/t-avr (LIB1ASMFUNCS): Add _negsi2, _clr_8,
    _ssneg_2, _ssneg_4, _ssneg_8, _ssabs_2, _ssabs_4,
    _ssabs_8, _ssadd_8, _sssub_8, _usadd_8, _ussub_8.
    (LIB2FUNCS_EXCLUDE): Fix typo for _add _sub.
    Add: _ssadd*, _sssub*, _ssneg*, _ssabs* for signed fixed modes.
    Add: _usadd*, _ussub*, _usneg* for unsigned fixed modes.

gcc/testsuite/
    PR target/54222
    * gcc.target/avr/torture/fix-types.h: New.
    * gcc.target/avr/torture/vals-hr.def: New.
    * gcc.target/avr/torture/vals-r.def: New.
    * gcc.target/avr/torture/vals-k.def: New.
    * gcc.target/avr/torture/vals-ur.def: New.
    * gcc.target/avr/torture/vals-uk.def: New.
    * gcc.target/avr/torture/vals-uhr.def: New.
    * gcc.target/avr/torture/vals-llk.def: New.
    * gcc.target/avr/torture/vals-ullk.def: New.
    * gcc.target/avr/torture/sat-hr-plus-minus.c: New.
    * gcc.target/avr/torture/sat-r-plus-minus.c: New.
    * gcc.target/avr/torture/sat-k-plus-minus.c: New.
    * gcc.target/avr/torture/sat-ur-plus-minus.c: New.
    * gcc.target/avr/torture/sat-uk-plus-minus.c: New.
    * gcc.target/avr/torture/sat-uhr-plus-minus.c: New.
    * gcc.target/avr/torture/sat-llk-plus-minus.c: New.
    * gcc.target/avr/torture/sat-ullk-plus-minus.c: New.


Added:
    trunk/gcc/testsuite/gcc.target/avr/torture/fix-types.h
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-hr-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-k-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-llk-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-r-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-uhr-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-uk-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-ullk-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/sat-ur-plus-minus.c
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-hr.def
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-k.def
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-llk.def
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-r.def
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-uhr.def
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-uk.def
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-ullk.def
    trunk/gcc/testsuite/gcc.target/avr/torture/vals-ur.def
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/avr/avr-dimode.md
    trunk/gcc/config/avr/avr-fixed.md
    trunk/gcc/config/avr/avr-protos.h
    trunk/gcc/config/avr/avr.c
    trunk/gcc/config/avr/avr.md
    trunk/gcc/testsuite/ChangeLog
    trunk/libgcc/ChangeLog
    trunk/libgcc/config/avr/lib1funcs-fixed.S
    trunk/libgcc/config/avr/lib1funcs.S
    trunk/libgcc/config/avr/t-avr


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]