PowerPC does not recognize add32() as an "add with carry" operation so use inline assembler instead.
Signed-off-by: Joakim Tjernlund <joakim.tjernl...@transmode.se> --- lib/checksum.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/lib/checksum.c b/lib/checksum.c index bf70cab..cd0fefd 100644 --- a/lib/checksum.c +++ b/lib/checksum.c @@ -21,7 +21,16 @@ add16(u16 sum, u16 x) u16 z = sum + x; return z + (z < sum); } - +#ifdef __powerpc__ +static +u32 +add32(u32 sum, u32 x) +{ + /* add and set carry; add carry */ + asm ("addc %0, %0, %1; addze %0, %0": "+r"(sum): "r" (x): "xer"); + return sum; +} +#else static u32 add32(u32 sum, u32 x) { @@ -30,6 +39,7 @@ add32(u32 sum, u32 x) z++; return z; } +#endif static u16 ipsum_calc_block(u16 *x, unsigned len, u16 sum) -- 1.6.4.4