approaches to carry-flag modelling in RTL

Paulo J. Matos paulo@matos-sorge.com
Mon Oct 31 12:01:00 GMT 2011


On 29/10/11 18:33, Peter Bigot wrote:
> On Sat, Oct 29, 2011 at 10:58 AM, Richard Henderson<rth@redhat.com>  wrote:
>> On 10/29/2011 05:41 AM, Peter Bigot wrote:
>>> It seems cc0 should probably still be preferred for CISC-style
>>> architectures like the MSP430.  I'll give that approach a try.
>>
>> I think that's somewhat unfair.  Take a close look at the RX and
>> mn10300 ports -- they're what I would call the most up-to-date
>> of the cisc-y ports.
>
>
> Using CC_MODE in this case certainly appears much more complicated
> than using cc0.  Do you believe the effort required to get it right would be
> justified?  Where would the win come from?
>

I can provide you with some insight here. We have a somewhat cisc-y 
port. I converted from cc0 to REG_CC based on the technique used in RX 
and MN10300.

Cons:
* Conversion took 2 weeks and increased the size of the backend due to 
the duplication of <rule> and <rule_flags>;
* My somewhat wierd backend has strange sizes so I ended up having to 
modify core GCC in some parts: to set CC_MODE size and to enable moves 
clobbering flags;
* Some rules are not much harder to read;
* compare-elim.c doesn't work 100% since pass assumes rules have 
register as destination. If yours have a memory operand, elimination 
won't succeed;

Pros:
* 0.7% code size reduction;
* Hoping that future GCC versions will ease the use of a pseudo 
FLAGS_REG, improve compare-elim and boost code size reduction further.

Some colleagues said the change probably didn't make sense. I am still 
slightly hopeful in the longer term to show them otherwise.

Cheers,

-- 
PMatos



More information about the Gcc mailing list