On 12/07/2012 08:44 PM, Mike Frysinger wrote:
The current x86_64 asm code does not work for x32 ABIs, so disable it until someone can fix it. Simply deleting the q suffix is not enough.* src/longlong.h: Check for __ILP32__ for x86_64 targets. --- src/longlong.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/longlong.h b/src/longlong.h index f2b2c49..baf001c 100644 --- a/src/longlong.h +++ b/src/longlong.h @@ -1006,7 +1006,7 @@ extern UWtype __MPN(udiv_qrnnd) (UWtype *, UWtype, UWtype, UWtype); #endif #endif /* 80x86 */ -#if defined (__amd64__) && W_TYPE_SIZE == 64 +#if defined (__amd64__) && W_TYPE_SIZE == 64 && !defined (__ILP32__) #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addq %5,%q1\n\tadcq %3,%q0" \ : "=r" (sh), "=&r" (sl) \
I think we may go for something more general here, as we're having all sorts of problems in this area. http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=history;f=src/longlong.h It seems that we need _LP64 defined, to enable W_TYPE_SIZE == 64 code safely. thanks, Pádraig.
