add hppa-only patch from upstream; build was broken, reported by landry@

This commit is contained in:
sthen 2012-12-10 15:01:56 +00:00
parent c35abdb887
commit 544646f481

View File

@ -0,0 +1,28 @@
$OpenBSD: patch-src_longlong_h,v 1.1 2012/12/10 15:01:56 sthen Exp $
http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=da1329e7
* src/longlong.h: Restrict some HPPA assembly variants to PA RISC V2.0.
Note we also avoid this assembly for ilp32 runtimes, since even though
the assembly is accepted there, it's not safe as the context can get
clobbered between the 'add' and 'add,dc'.
This fixes a compile failure with newer HPPA systems with default
GCC CPU options.
--- src/longlong.h.orig Mon Dec 10 14:59:53 2012
+++ src/longlong.h Mon Dec 10 15:00:25 2012
@@ -679,7 +679,13 @@ extern UWtype __MPN(udiv_qrnnd) (UWtype *, UWtype, UWt
/* These macros are for ABI=2.0w. In ABI=2.0n they can't be used, since GCC
(3.2) puts longlong into two adjacent 32-bit registers. Presumably this
is just a case of no direct support for 2.0n but treating it like 1.0. */
-#if defined (__hppa) && W_TYPE_SIZE == 64 && ! defined (_LONG_LONG_LIMB)
+#if defined (__hppa) && W_TYPE_SIZE == 64 && ! defined (_LONG_LONG_LIMB) \
+ && defined (_PA_RISC2_0) && defined (_LP64)
+/* Note the _PA_RISC2_0 above is to exclude this code from GCC with
+ default -march options which doesn't support these instructions.
+ Also the width check for 'long' is to avoid ilp32 runtimes where
+ GNU/Linux and narrow HP-UX kernels are known to have issues with
+ clobbering of context between the add and add,dc instructions. */
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
__asm__ ("add%I5 %5,%r4,%1\n\tadd,dc %r2,%r3,%0" \
: "=r" (sh), "=&r" (sl) \