This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: splitting add instructions
On 07/19/2011 08:57 AM, Paulo J. Matos wrote:
> On 19/07/11 16:41, Richard Henderson wrote:
>> (or fails to set the flags in a way that
>> is useful for the comparison).
>
> I am not sure I understand the above. Could you give an example where
> certain flags might be set but are not useful for comparison?
You pasted one before -- the RX definition of ABS.
The instruction description of the O flag for ABS reads:
# The flag is set if src before the operation was 80000000h; otherwise it is cleared.
The upshot is that the entire flags register is set as if
the operation was "0 - src", i.e.
(compare:CC (const_int 0) (reg:SI src))
However, the comparison that we're actually going to try
to generate is
(compare:CC (abs:SI (reg:SI src)) (const_int 0))
Which is of course not the same thing. However, if we can
ignore the O flag for a given comparison, then we can still
usefully make use of some of the flags. E.g. the Z flag in
testing for (in)equality against zero.
The other very common case is subtract, where the flags are
set as if the comparison is
(compare:CC input1 input2)
whereas the comparison that we generate is
(compare:CC output 0)
Have a look at all the uses of rx_match_ccmode in rx.md.
r~