On Fri, Aug 3, 2012 at 10:02 AM, Richard Guenther
<richard.guent...@gmail.com> wrote:
> On Fri, Aug 3, 2012 at 9:24 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>> On Fri, Aug 3, 2012 at 8:40 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>>
>>> We can implement atomic_fetch_sub with atomic_fetch_add and inverted
>>> operand 2. However, we have to prevent overflows with negation, so
>>> only const_int operand 2 is allowed in the expander.
>
> Why do you need to prevent overflows?

Because we change (x)sub to (x)add, so for SImode operation - without
overflow check -

sub 0x80000000, %eax

gets changed to

add 0x80000000, %eax.

The same reasoning goes for dynamic negation: for neg %eax,%eax value
0x80000000 stays the same, but we have changed (x)sub to an (x)add in
the code stream.

Uros.

Reply via email to