This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]