diff mbox

[AVR] Light-weight DImode implementation.

Message ID 4ED76383.8010306@gjlay.de
State New
Headers show

Commit Message

Georg-Johann Lay Dec. 1, 2011, 11:22 a.m. UTC
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.

So here is a follow-up patch atop
http://gcc.gnu.org/ml/gcc-patches/2011-11/msg02136.html
to remove the -m64 option.

The variable avr_have_dimode is still there but set always to true in avr.c and
avr.opt remains unchanged.

Ok?

gcc/
	* config/avr/avr-dimode.md: New file.
	* config/avr/avr.md: Include it.
	(adjust_len): Add plus64, compare64.
	(HIDI): Remove code iterator.
	(code_stdname): New code attribute.
	(rotx, rotsmode): Remove DI.
	(rotl<mode>3, *rotw<mode>, *rotb<mode>): 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.
diff mbox

Patch

diff --git a/config/avr/avr-protos.h b/config/avr/avr-protos.h
index fd00a4e..a95e611 100644
--- a/config/avr/avr-protos.h
+++ b/config/avr/avr-protos.h
@@ -132,6 +132,8 @@  extern bool avr_xload_libgcc_p (enum machine_mode);
 extern void asm_output_float (FILE *file, REAL_VALUE_TYPE n);
 #endif
 
+extern bool avr_have_dimode;
+
 /* From avr-log.c */
 
 #define avr_edump (avr_log_set_caller_e (__FUNCTION__))
diff --git a/config/avr/avr.c b/config/avr/avr.c
index 551d7c6..1806ac8 100644
--- a/config/avr/avr.c
+++ b/config/avr/avr.c
@@ -145,6 +145,9 @@  static const char * const progmem_section_prefix[6] =
     ".progmem5.data"
   };
 
+/* Condition for insns/expanders from avr-dimode.md.  */
+bool avr_have_dimode = true;
+
 /* To track if code will use .bss and/or .data.  */
 bool avr_need_clear_bss_p = false;
 bool avr_need_copy_data_p = false;
diff --git a/config/avr/avr.opt b/config/avr/avr.opt
index eaa8df5..bb9c90e 100644
--- a/config/avr/avr.opt
+++ b/config/avr/avr.opt
@@ -77,7 +77,3 @@  When accessing RAM, use X as imposed by the hardware, i.e. just use pre-decremen
 mbranch-cost=
 Target Report RejectNegative Joined UInteger Var(avr_branch_cost) Init(0)
 Set the cost of a branch instruction.  Default value is 0.
-
-m64
-Target Report Var(avr_have_dimode) Init(0)
-Experimental.