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.