Joakim Tjernlund/Transmode wrote on 2010/04/23 16:14:58:
Hello!
But you can't get rid of: z + (z < sum) which is the real bottleneck. Perhaps this doesn't cost much on high end CPUs but it sure does on embedded CPUs
Why should it be? It can be compiled as a sequence of "add with carry" instructions, can't it?
Yes, but have you seen gcc do that? I havn't, perhaps gcc has become smarter recently?
Jocke
Just tried this and it didn't with gcc 3.4.3 on PowerPC Some arch does not have an add with carry insn(MIPS?) Jocke unsigned long add32(unsigned long sum, unsigned long x) { unsigned long z = sum + x; return z + (z < sum); } /* gcc -O3 -S gives: .file "addc.c" .gnu_attribute 4, 2 .gnu_attribute 8, 1 .section ".text" .align 2 .globl add32 .type add32, @function