Re: Ping #2: [Patch,AVR] Light-weight DImode implementation.
2011/12/15 Georg-Johann Lay a...@gjlay.de: http://gcc.gnu.org/ml/gcc-patches/2011-12/msg00471.html Georg-Johann Lay wrote: Georg-Johann Lay wrote: Denis Chertykov wrote: The only question that remains is what the -m64 option should be like? [ ] Omit it altogether [ ] Leave it as is (off per default) [ ] Set it on per default As soon as the direction is clear, I'll post a follow-up patch to add the missing bits like, e.g., documentation for the new switch. I'll leave the decision to Denis, but I'm for omitting it. I will also defer to Denis, but I'd rather avoid having another option, if we can. Keep it simple for the users. It might also be a hidden option like -morder2 and on per default. Such thing is nice for developers to play :-) I'm agree with Richard. I'm for omitting it. Denis. Here is a combined patch if that is more convenient for review. The variable avr_have_dimode that was originally set in avr.opt is still there but always set to true in avr.c. Option -m64 is omitted and thus avr.opt is unchanged. Passed without regressions. Ok? Johann gcc/ * config/avr/avr-dimode.md: New file. * config/avr/avr.md: Include it. (adjust_len): Add alternatives: plus64, compare64. (HIDI): Remove code iterator. (code_stdname): New code attribute. (rotx, rotsmode): Remove DI from interators. (rotlmode3, *rotwmode, *rotbmode): Use HISI instead of HIDI as code iterator. * config/avr/avr-protos.h (avr_have_dimode): New. (avr_out_plus64, avr_out_compare64): New. * config/avr/avr.c (avr_out_compare): Handle DImode. (avr_have_dimode): New variable definition and initialization. (avr_out_compare64, avr_out_plus64): New functions. (avr_out_plus_1): Use simplify_unary_operation to negate xval. (adjust_insn_length): Handle ADJUST_LEN_COMPARE64, ADJUST_LEN_PLUS64. (avr_compare_pattern): Skip DImode comparisons. libgcc/ * config/avr/t-avr (LIB1ASMFUNCS): Add _adddi3, _adddi3_s8, _subdi3, _cmpdi2, _cmpdi2_s8, _rotldi3. * config/avr/lib1funcs.S (__adddi3, __adddi3_s8, __subdi3, __cmpdi2, __cmpdi2_s8, __rotldi3): New functions. Approved. Denis.
Re: Ping #2: [Patch,AVR] Light-weight DImode implementation.
http://gcc.gnu.org/ml/gcc-patches/2011-12/msg00471.html Georg-Johann Lay wrote: Georg-Johann Lay wrote: Denis Chertykov wrote: The only question that remains is what the -m64 option should be like? [ ] Omit it altogether [ ] Leave it as is (off per default) [ ] Set it on per default As soon as the direction is clear, I'll post a follow-up patch to add the missing bits like, e.g., documentation for the new switch. I'll leave the decision to Denis, but I'm for omitting it. I will also defer to Denis, but I'd rather avoid having another option, if we can. Keep it simple for the users. It might also be a hidden option like -morder2 and on per default. Such thing is nice for developers to play :-) I'm agree with Richard. I'm for omitting it. Denis. Here is a combined patch if that is more convenient for review. The variable avr_have_dimode that was originally set in avr.opt is still there but always set to true in avr.c. Option -m64 is omitted and thus avr.opt is unchanged. Passed without regressions. Ok? Johann gcc/ * config/avr/avr-dimode.md: New file. * config/avr/avr.md: Include it. (adjust_len): Add alternatives: plus64, compare64. (HIDI): Remove code iterator. (code_stdname): New code attribute. (rotx, rotsmode): Remove DI from interators. (rotlmode3, *rotwmode, *rotbmode): Use HISI instead of HIDI as code iterator. * config/avr/avr-protos.h (avr_have_dimode): New. (avr_out_plus64, avr_out_compare64): New. * config/avr/avr.c (avr_out_compare): Handle DImode. (avr_have_dimode): New variable definition and initialization. (avr_out_compare64, avr_out_plus64): New functions. (avr_out_plus_1): Use simplify_unary_operation to negate xval. (adjust_insn_length): Handle ADJUST_LEN_COMPARE64, ADJUST_LEN_PLUS64. (avr_compare_pattern): Skip DImode comparisons. libgcc/ * config/avr/t-avr (LIB1ASMFUNCS): Add _adddi3, _adddi3_s8, _subdi3, _cmpdi2, _cmpdi2_s8, _rotldi3. * config/avr/lib1funcs.S (__adddi3, __adddi3_s8, __subdi3, __cmpdi2, __cmpdi2_s8, __rotldi3): New functions.