[rs6000] Add support for signed overflow arithmetic
Eric Botcazou
ebotcazou@adacore.com
Mon Oct 24 21:03:00 GMT 2016
> It's better than the generic branch sequence below, or yours. It still
> sucks, obviously.
OK, I thought you were talking about the double-width result. The non-branch
sequence I posted is the generic non-branch sequence (that Ada was using).
> Let's see. Completely untested. Inputs in regs 3 and 4, output in reg 3.
> 32-bit code all the way.
>
> add:
> eqv 9,3,4
> add 3,3,4
> xor 4,3,4
> and. 4,9,4
> blt <overflow>
>
> sub:
> xor 9,3,4
> sub 3,3,4
> eqv 4,3,4
> and. 4,9,4
> blt <overflow>
These ones (if correct) are quite better than the generic code!
> neg:
> neg 3,3
> xoris. 9,3,0x8000
> beq <overflow>
>
> mul:
> mulhw 9,3,4
> mullw 3,3,4
> srawi 4,9,31
> cmpw 4,9
> bne <overflow>
These ones are essentially equivalent to the generic code.
--
Eric Botcazou
More information about the Gcc-patches
mailing list