2011/7/6 Georg-Johann Lay <a...@gjlay.de>:
> Denis Chertykov wrote:
>> 2011/7/6 Georg-Johann Lay <a...@gjlay.de>:
>>> For loading a 32-bit constant in a register, there is room for
>>> improvement:
>>>
>>> * SF can be handled the same way as SI and therefore the patch
>>>  adds a peep2 to produce a *reload_insf analogon to *reload_insi.
>>>
>>> * If the destination register overlaps NO_LD_REGS, values already
>>>  loaded into some other byte can be reused by a simple MOV.
>>>  This is helpful then moving values like, e.g. -2, -100 etc. because
>>>  all high bytes are 0xff.
>>>
>>> * 0.0f can be directly moved to memory.
>>>
>>> * The mov insns contain "!d" constraint. I see no reason to make "d"
>>>  expensive and discourage use of d-regs.  A "*d" to hide is better
>>>  because it does it neither puts additional pressure on "d" nor
>>>  discourages "d".
>>>
>>
>> I would like to have a real code examples.
>>
>> Denis.
>
> Hi Denis.
>
> Attached you find a small C file and the asm that is generated by new
> and old versions (-Os -mmcu=atmega88 -S -dp).
>
> I took away some regs as potential clobbers (or -fno-peephole2) to
> show the effect of high register pressure.  Bit even if a clobber was
> available you can see that the new version is smarter in reusing
> values, e.g. note the loading of -1L to r22-r25.

I have asked about example of *d instead of !d.
Just svn GCC with *d vs svn GCC !d.


Denis.

Reply via email to