Subject: bug#13118: [PATCH] factor: disable longlong.h logic for x32 builds

From: Pádraig Brady <[email-masked]>
Date: Fri, 07 Dec 2012 20:55:15 +0000

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.