Portable "add with carry" loop for arbitrary precision arithmetic
Tom St Denis
tstdenis@ellipticsemi.com
Mon Jun 23 10:55:00 GMT 2008
Alexander Konovalenko wrote:
> There is an "add with carry" instruction on some architectures which
> enables efficient implementation of arbitrary precision (bignum)
> integer addition. Is it possible to make gcc generate efficient
> machine code from pure C or C++ code for bignum addition on those
> architectures?
>
> It looks like the popular libraries like GMP and CLN use hand-coded
> assembly for that. I wonder if gcc can help rewrite that kind of code
> in a more portable way.
>
GCC will use them in most cases. For example,
extern unsigned long long a, b, c;
int main(void)
{
c = a + b;
return 0;
}
Produces this with "-O3 -fomit-frame-pointer"
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ecx
movl a, %eax
movl a+4, %edx
addl b, %eax
adcl b+4, %edx
movl %eax, c
xorl %eax, %eax
movl %edx, c+4
popl %ecx
leal -4(%ecx), %esp
ret
Tom
More information about the Gcc-help
mailing list