Re: Portable "add with carry" loop for arbitrary precision arithmetic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux