The following from integer.cpp in Crypto++ 5.0 chokes, complaining
about not being able to find a register in class `GENERAL_REGS' while
reloading `asm'
__attribute__((regparm(3))) word PentiumOptimized::Add(word *C, const word *A, const
word *B, unsigned int N)
{
assert (N%2 == 0);
register word carry, temp;
__asm__ __volatile__(
"push %%ebp;"
"sub %3, %2;"
"xor %0, %0;"
"sub %4, %0;"
"lea (%1,%4,4), %1;"
"sar $1, %0;"
"jz 1f;"
"0:;"
"mov 0(%3), %4;"
"mov 4(%3), %%ebp;"
"mov (%1,%0,8), %5;"
"lea 8(%3), %3;"
"adc %5, %4;"
"mov 4(%1,%0,8), %5;"
"adc %5, %%ebp;"
"inc %0;"
"mov %4, -8(%3, %2);"
"mov %%ebp, -4(%3, %2);"
"jnz 0b;"
"1:;"
"adc $0, %0;"
"pop %%ebp;"
: "=aSD" (carry), "+r" (B), "+r" (C), "+r" (A), "+r" (N), "=r" (temp)
: : "cc", "memory");
return carry;
}
Any suggestions other than conditonalising this code for gcc < 3.2?
--
Stephen
They that can give up essential liberty to obtain a little temporary
safety deserve neither liberty nor safety -- Benjamin Franklin %