mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2025-04-15 15:06:36 +00:00
patches: add patches for gmp
This changeset adds official patches published on gmp website. Signed-off-by: Kirill K. Smirnov <kirill.k.smirnov@gmail.com>
This commit is contained in:
parent
5a88b7fd2a
commit
bcb6b03df9
@ -0,0 +1,33 @@
|
||||
diff --git a/mpz/remove.c b/mpz/remove.c
|
||||
--- a/mpz/remove.c
|
||||
+++ b/mpz/remove.c
|
||||
@@ -23,7 +23,7 @@
|
||||
unsigned long int
|
||||
mpz_remove (mpz_ptr dest, mpz_srcptr src, mpz_srcptr f)
|
||||
{
|
||||
- mpz_t fpow[40]; /* inexhaustible...until year 2020 or so */
|
||||
+ mpz_t fpow[GMP_LIMB_BITS]; /* Really MP_SIZE_T_BITS */
|
||||
mpz_t x, rem;
|
||||
unsigned long int pwr;
|
||||
int p;
|
||||
@@ -69,7 +69,7 @@
|
||||
mpz_set (dest, x);
|
||||
}
|
||||
|
||||
- pwr = (1 << p) - 1;
|
||||
+ pwr = (1L << p) - 1;
|
||||
|
||||
mpz_clear (fpow[p]);
|
||||
|
||||
diff --git a/mpz/remove.c b/mpz/remove.c
|
||||
--- a/mpz/remove.c
|
||||
+++ b/mpz/remove.c
|
||||
@@ -80,7 +80,7 @@
|
||||
mpz_tdiv_qr (x, rem, dest, fpow[p]);
|
||||
if (SIZ (rem) == 0)
|
||||
{
|
||||
- pwr += 1 << p;
|
||||
+ pwr += 1L << p;
|
||||
mpz_set (dest, x);
|
||||
}
|
||||
mpz_clear (fpow[p]);
|
31
patches/gmp/4.3.0/110-unbounded-alloc.patch
Normal file
31
patches/gmp/4.3.0/110-unbounded-alloc.patch
Normal file
@ -0,0 +1,31 @@
|
||||
diff --git a/mpn/generic/toom44_mul.c b/mpn/generic/toom44_mul.c
|
||||
--- a/mpn/generic/toom44_mul.c
|
||||
+++ b/mpn/generic/toom44_mul.c
|
||||
@@ -116,17 +116,16 @@
|
||||
|
||||
TMP_MARK;
|
||||
|
||||
- as1 = TMP_SALLOC_LIMBS (n + 1);
|
||||
- asm1 = TMP_SALLOC_LIMBS (n + 1);
|
||||
- as2 = TMP_SALLOC_LIMBS (n + 1);
|
||||
- ash = TMP_SALLOC_LIMBS (n + 1);
|
||||
- asmh = TMP_SALLOC_LIMBS (n + 1);
|
||||
-
|
||||
- bs1 = TMP_SALLOC_LIMBS (n + 1);
|
||||
- bsm1 = TMP_SALLOC_LIMBS (n + 1);
|
||||
- bs2 = TMP_SALLOC_LIMBS (n + 1);
|
||||
- bsh = TMP_SALLOC_LIMBS (n + 1);
|
||||
- bsmh = TMP_SALLOC_LIMBS (n + 1);
|
||||
+ as1 = TMP_ALLOC_LIMBS (10 * n + 10);
|
||||
+ asm1 = as1 + n + 1;
|
||||
+ as2 = asm1 + n + 1;
|
||||
+ ash = as2 + n + 1;
|
||||
+ asmh = ash + n + 1;
|
||||
+ bs1 = asmh + n + 1;
|
||||
+ bsm1 = bs1 + n + 1;
|
||||
+ bs2 = bsm1 + n + 1;
|
||||
+ bsh = bs2 + n + 1;
|
||||
+ bsmh = bsh + n + 1;
|
||||
|
||||
gp = pp;
|
||||
hp = pp + n + 1;
|
@ -0,0 +1,38 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1310730221 -7200
|
||||
# Node ID 538dfce27f410b910d5e2f011119269e224d16a3
|
||||
# Parent 03ed209dd7efd4f4fff0ce297bb3a8f7e7ba2366
|
||||
(mpn_dcpi1_bdiv_q): Get mpn_sub_1 size argument right.
|
||||
|
||||
diff -r 03ed209dd7ef -r 538dfce27f41 mpn/generic/dcpi1_bdiv_q.c
|
||||
--- a/mpn/generic/dcpi1_bdiv_q.c Thu Jun 16 12:22:24 2011 +0200
|
||||
+++ b/mpn/generic/dcpi1_bdiv_q.c Fri Jul 15 13:43:41 2011 +0200
|
||||
@@ -7,7 +7,7 @@
|
||||
SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST
|
||||
GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE.
|
||||
|
||||
-Copyright 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||
+Copyright 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include "gmp-impl.h"
|
||||
|
||||
|
||||
-
|
||||
mp_size_t
|
||||
mpn_dcpi1_bdiv_q_n_itch (mp_size_t n)
|
||||
{
|
||||
@@ -130,7 +129,7 @@
|
||||
qn = nn - qn;
|
||||
while (qn > dn)
|
||||
{
|
||||
- mpn_sub_1 (np + dn, np + dn, qn, cy);
|
||||
+ mpn_sub_1 (np + dn, np + dn, qn - dn, cy);
|
||||
cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, dn, dinv, tp);
|
||||
qp += dn;
|
||||
np += dn;
|
||||
|
77
patches/gmp/5.0.1/120-fix-r0-clobbering-issue.patch
Normal file
77
patches/gmp/5.0.1/120-fix-r0-clobbering-issue.patch
Normal file
@ -0,0 +1,77 @@
|
||||
Removed ChangeLog part
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1342891151 -7200
|
||||
# Node ID 829215e83ff1db3cd00e510a737092df691442d5
|
||||
# Parent 816c18dbd492050ef8892e91602d9e758abc2988
|
||||
Fix r0 clobbering issue with "large" code affecting elf+darwin PIC.
|
||||
|
||||
diff -r 816c18dbd492 -r 829215e83ff1 mpn/powerpc32/vmx/mod_34lsub1.asm
|
||||
--- a/mpn/powerpc32/vmx/mod_34lsub1.asm Tue Jun 19 15:02:48 2012 +0200
|
||||
+++ b/mpn/powerpc32/vmx/mod_34lsub1.asm Sat Jul 21 19:19:11 2012 +0200
|
||||
@@ -1,6 +1,7 @@
|
||||
dnl PowerPC-32 mpn_mod_34lsub1 -- mpn remainder mod 2^24-1.
|
||||
|
||||
-dnl Copyright 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
+dnl Copyright 2002, 2003, 2005, 2006, 2007, 2012 Free Software Foundation,
|
||||
+dnl Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
|
||||
@@ -135,15 +136,15 @@
|
||||
|
||||
andi. r7, up, 15
|
||||
vxor a0, v0, v0
|
||||
- lis r0, 0xaaaa
|
||||
+ lis r9, 0xaaaa
|
||||
vxor a1, v0, v0
|
||||
- ori r0, r0, 0xaaab
|
||||
+ ori r9, r9, 0xaaab
|
||||
vxor a2, v0, v0
|
||||
li r5, 16
|
||||
vxor c0, v0, v0
|
||||
li r6, 32
|
||||
vxor c1, v0, v0
|
||||
- LEAL( r11, cnsts)
|
||||
+ LEAL( r11, cnsts) C CAUTION clobbers r0 for elf, darwin
|
||||
vxor c2, v0, v0
|
||||
vxor z, v0, v0
|
||||
|
||||
@@ -158,7 +159,7 @@
|
||||
vsldoi a2, z, a2, 12
|
||||
|
||||
addi n, n, 9
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
@@ -174,7 +175,7 @@
|
||||
vsldoi a1, z, a1, 8
|
||||
|
||||
addi n, n, 6
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
@@ -188,7 +189,7 @@
|
||||
vsldoi a0, z, a0, 4
|
||||
|
||||
addi n, n, 3
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
@@ -197,7 +198,7 @@
|
||||
b L(0)
|
||||
|
||||
L(aligned16):
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
|
@ -0,0 +1,38 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1310730221 -7200
|
||||
# Node ID 538dfce27f410b910d5e2f011119269e224d16a3
|
||||
# Parent 03ed209dd7efd4f4fff0ce297bb3a8f7e7ba2366
|
||||
(mpn_dcpi1_bdiv_q): Get mpn_sub_1 size argument right.
|
||||
|
||||
diff -r 03ed209dd7ef -r 538dfce27f41 mpn/generic/dcpi1_bdiv_q.c
|
||||
--- a/mpn/generic/dcpi1_bdiv_q.c Thu Jun 16 12:22:24 2011 +0200
|
||||
+++ b/mpn/generic/dcpi1_bdiv_q.c Fri Jul 15 13:43:41 2011 +0200
|
||||
@@ -7,7 +7,7 @@
|
||||
SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST
|
||||
GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE.
|
||||
|
||||
-Copyright 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||
+Copyright 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include "gmp-impl.h"
|
||||
|
||||
|
||||
-
|
||||
mp_size_t
|
||||
mpn_dcpi1_bdiv_q_n_itch (mp_size_t n)
|
||||
{
|
||||
@@ -130,7 +129,7 @@
|
||||
qn = nn - qn;
|
||||
while (qn > dn)
|
||||
{
|
||||
- mpn_sub_1 (np + dn, np + dn, qn, cy);
|
||||
+ mpn_sub_1 (np + dn, np + dn, qn - dn, cy);
|
||||
cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, dn, dinv, tp);
|
||||
qp += dn;
|
||||
np += dn;
|
||||
|
77
patches/gmp/5.0.2/120-fix-r0-clobbering-issue.patch
Normal file
77
patches/gmp/5.0.2/120-fix-r0-clobbering-issue.patch
Normal file
@ -0,0 +1,77 @@
|
||||
Removed ChangeLog part
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1342891151 -7200
|
||||
# Node ID 829215e83ff1db3cd00e510a737092df691442d5
|
||||
# Parent 816c18dbd492050ef8892e91602d9e758abc2988
|
||||
Fix r0 clobbering issue with "large" code affecting elf+darwin PIC.
|
||||
|
||||
diff -r 816c18dbd492 -r 829215e83ff1 mpn/powerpc32/vmx/mod_34lsub1.asm
|
||||
--- a/mpn/powerpc32/vmx/mod_34lsub1.asm Tue Jun 19 15:02:48 2012 +0200
|
||||
+++ b/mpn/powerpc32/vmx/mod_34lsub1.asm Sat Jul 21 19:19:11 2012 +0200
|
||||
@@ -1,6 +1,7 @@
|
||||
dnl PowerPC-32 mpn_mod_34lsub1 -- mpn remainder mod 2^24-1.
|
||||
|
||||
-dnl Copyright 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
+dnl Copyright 2002, 2003, 2005, 2006, 2007, 2012 Free Software Foundation,
|
||||
+dnl Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
|
||||
@@ -135,15 +136,15 @@
|
||||
|
||||
andi. r7, up, 15
|
||||
vxor a0, v0, v0
|
||||
- lis r0, 0xaaaa
|
||||
+ lis r9, 0xaaaa
|
||||
vxor a1, v0, v0
|
||||
- ori r0, r0, 0xaaab
|
||||
+ ori r9, r9, 0xaaab
|
||||
vxor a2, v0, v0
|
||||
li r5, 16
|
||||
vxor c0, v0, v0
|
||||
li r6, 32
|
||||
vxor c1, v0, v0
|
||||
- LEAL( r11, cnsts)
|
||||
+ LEAL( r11, cnsts) C CAUTION clobbers r0 for elf, darwin
|
||||
vxor c2, v0, v0
|
||||
vxor z, v0, v0
|
||||
|
||||
@@ -158,7 +159,7 @@
|
||||
vsldoi a2, z, a2, 12
|
||||
|
||||
addi n, n, 9
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
@@ -174,7 +175,7 @@
|
||||
vsldoi a1, z, a1, 8
|
||||
|
||||
addi n, n, 6
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
@@ -188,7 +189,7 @@
|
||||
vsldoi a0, z, a0, 4
|
||||
|
||||
addi n, n, 3
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
@@ -197,7 +198,7 @@
|
||||
b L(0)
|
||||
|
||||
L(aligned16):
|
||||
- mulhwu r0, n, r0
|
||||
+ mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
|
21
patches/gmp/5.1.1/100-fix-bulldozer-piledriver.patch
Normal file
21
patches/gmp/5.1.1/100-fix-bulldozer-piledriver.patch
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1368052461 -7200
|
||||
# Node ID 11fbd825bc45385d00b69c30bd7566acee11f0d2
|
||||
# Parent bd4c950486ab4c161ea69b91c25150719c3cb700
|
||||
Fix typo.
|
||||
|
||||
diff -r bd4c950486ab -r 11fbd825bc45 mpn/x86_64/bd1/mul_1.asm
|
||||
--- a/mpn/x86_64/bd1/mul_1.asm Thu May 02 18:20:37 2013 +0200
|
||||
+++ b/mpn/x86_64/bd1/mul_1.asm Thu May 09 00:34:21 2013 +0200
|
||||
@@ -53,7 +53,7 @@
|
||||
IFDOS(` define(`v0', ``%r9'') ') dnl
|
||||
IFDOS(` define(`r9', ``rdi'') ') dnl
|
||||
IFDOS(` define(`n', ``%r8'') ') dnl
|
||||
-IFDOS(` define(`r8', ``r11'') ') dnl
|
||||
+IFDOS(` define(`r8', ``rbx'') ') dnl
|
||||
|
||||
ASM_START()
|
||||
TEXT
|
||||
|
39
patches/gmp/5.1.1/110-mpz_powm_ui.patch
Normal file
39
patches/gmp/5.1.1/110-mpz_powm_ui.patch
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1363174284 -3600
|
||||
# Node ID ec4d88674036804b26f22c6a2bfca6ae1e92d370
|
||||
# Parent e616ff715c34e112d0a5f7535d31ffe1194a5c7d
|
||||
(mod): Adhere to mpn_mu_div_qr's overlap requirements.
|
||||
|
||||
diff -r e616ff715c34 -r ec4d88674036 mpz/powm_ui.c
|
||||
--- a/mpz/powm_ui.c Sun Feb 17 19:40:16 2013 +0100
|
||||
+++ b/mpz/powm_ui.c Wed Mar 13 12:31:24 2013 +0100
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
Contributed to the GNU project by Torbjorn Granlund.
|
||||
|
||||
-Copyright 1991, 1993, 1994, 1996, 1997, 2000, 2001, 2002, 2005, 2008,
|
||||
-2009, 2011, 2012 Free Software Foundation, Inc.
|
||||
+Copyright 1991, 1993, 1994, 1996, 1997, 2000, 2001, 2002, 2005, 2008, 2009,
|
||||
+2011, 2012, 2013 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
@@ -70,9 +70,14 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
+ /* We need to allocate separate remainder area, since mpn_mu_div_qr does
|
||||
+ not handle overlap between the numerator and remainder areas.
|
||||
+ FIXME: Make it handle such overlap. */
|
||||
+ mp_ptr rp = TMP_ALLOC_LIMBS (dn);
|
||||
mp_size_t itch = mpn_mu_div_qr_itch (nn, dn, 0);
|
||||
mp_ptr scratch = TMP_ALLOC_LIMBS (itch);
|
||||
- mpn_mu_div_qr (qp, np, np, nn, dp, dn, scratch);
|
||||
+ mpn_mu_div_qr (qp, rp, np, nn, dp, dn, scratch);
|
||||
+ MPN_COPY (np, rp, dn);
|
||||
}
|
||||
|
||||
TMP_FREE;
|
||||
|
164
patches/gmp/5.1.1/120-fix-mpn_sbpi1_div_qr_sec.patch
Normal file
164
patches/gmp/5.1.1/120-fix-mpn_sbpi1_div_qr_sec.patch
Normal file
@ -0,0 +1,164 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1373624469 -7200
|
||||
# Node ID a447c0c537891ed23edf180594a89616364ee633
|
||||
# Parent 6540e0b2925ead29f7158bb182e4fabfb9441433
|
||||
Partial rewrite.
|
||||
|
||||
diff -r 6540e0b2925e -r a447c0c53789 mpn/generic/sbpi1_div_sec.c
|
||||
--- a/mpn/generic/sbpi1_div_sec.c Mon Jul 01 19:16:32 2013 +0200
|
||||
+++ b/mpn/generic/sbpi1_div_sec.c Fri Jul 12 12:21:09 2013 +0200
|
||||
@@ -8,7 +8,7 @@
|
||||
SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST
|
||||
GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE.
|
||||
|
||||
-Copyright 2011, 2012 Free Software Foundation, Inc.
|
||||
+Copyright 2011, 2012, 2013 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
@@ -29,6 +29,28 @@
|
||||
#include "gmp-impl.h"
|
||||
#include "longlong.h"
|
||||
|
||||
+/* This side-channel silent division algorithm reduces the partial remainder by
|
||||
+ GMP_NUMB_BITS/2 bits at a time, compared to GMP_NUMB_BITS for the main
|
||||
+ division algorithm. We do not insists on reducing by exactly
|
||||
+ GMP_NUMB_BITS/2, but may leave a partial remainder that is D*B^i to 3D*B^i
|
||||
+ too large (B is the limb base, D is the divisor, and i is the induction
|
||||
+ variable); the subsequent step will handle the extra partial remainder bits.
|
||||
+
|
||||
+ WIth that partial remainder reduction, each step generates a quotient "half
|
||||
+ limb". The outer loop generates two quotient half limbs, an upper (q1h) and
|
||||
+ a lower (q0h) which are stored sparsely in separate limb arrays. These
|
||||
+ arrays are added at the end; using separate arrays avoids data-dependent
|
||||
+ carry propagation which could else pose a side-channel leakage problem.
|
||||
+
|
||||
+ The quotient half limbs may be between -3 to 0 from the accurate value
|
||||
+ ("accurate" being the one which corresponds to a reduction to a principal
|
||||
+ partial remainder). Too small quotient half limbs correspond to too large
|
||||
+ remainders, which we reduce later, as described above.
|
||||
+
|
||||
+ In order to keep quotients from getting too big, corresponding to a negative
|
||||
+ partial remainder, we use an inverse which is sligtly smaller than usually.
|
||||
+*/
|
||||
+
|
||||
#if OPERATION_sbpi1_div_qr_sec
|
||||
/* Needs (dn + 1) + (nn - dn) + (nn - dn) = 2nn - dn + 1 limbs at tp. */
|
||||
#define FNAME mpn_sbpi1_div_qr_sec
|
||||
@@ -49,7 +71,7 @@
|
||||
mp_limb_t dinv,
|
||||
mp_ptr tp)
|
||||
{
|
||||
- mp_limb_t nh, cy, q1h, q0h, dummy, h;
|
||||
+ mp_limb_t nh, cy, q1h, q0h, dummy, cnd;
|
||||
mp_size_t i;
|
||||
mp_ptr hp;
|
||||
#if OPERATION_sbpi1_div_qr_sec
|
||||
@@ -72,77 +94,69 @@
|
||||
#endif
|
||||
}
|
||||
|
||||
+ /* Decremenet inverse to keep quotient half limbs from being too large. */
|
||||
+ dinv -= dinv != 0; /* FIXME: cmp-to-int */
|
||||
+
|
||||
/* Create a divisor copy shifted half a limb. */
|
||||
hp = tp; /* (dn + 1) limbs */
|
||||
- cy = mpn_lshift (hp, dp, dn, GMP_NUMB_BITS / 2);
|
||||
- hp[dn] = dp[dn - 1] >> GMP_NUMB_BITS / 2;
|
||||
+ hp[dn] = mpn_lshift (hp, dp, dn, GMP_NUMB_BITS / 2);
|
||||
|
||||
#if OPERATION_sbpi1_div_qr_sec
|
||||
qlp = tp + (dn + 1); /* (nn - dn) limbs */
|
||||
qhp = tp + (nn + 1); /* (nn - dn) limbs */
|
||||
#endif
|
||||
|
||||
- np += nn;
|
||||
+ np += nn - dn;
|
||||
+ nh = 0;
|
||||
|
||||
- /* Main loop. Develop one full limb per iteration, but do it in two steps in
|
||||
- order to avoid conditionals. Quotient bits will be either correct or
|
||||
- underestimates. When a quotient is underestimated, the next quotient will
|
||||
- compensate, since quotients are to be added at consecutive weight distance
|
||||
- GMP_NUMB_BITS/2. We make two quotient arrays, each with GMP_NUMB_BITS/2+2
|
||||
- bits per entry. The arrays are added late after the loop. Separate
|
||||
- arrays avoid data-dependent carry propagation. */
|
||||
- nh = 0;
|
||||
for (i = nn - dn - 1; i >= 0; i--)
|
||||
{
|
||||
np--;
|
||||
|
||||
- nh = (nh << GMP_NUMB_BITS/2) + (np[0] >> GMP_NUMB_BITS/2);
|
||||
+ nh = (nh << GMP_NUMB_BITS/2) + (np[dn] >> GMP_NUMB_BITS/2);
|
||||
umul_ppmm (q1h, dummy, nh, dinv);
|
||||
q1h += nh;
|
||||
#if OPERATION_sbpi1_div_qr_sec
|
||||
qhp[i] = q1h;
|
||||
#endif
|
||||
- cy = mpn_submul_1 (np - dn, hp, dn + 1, q1h);
|
||||
+ mpn_submul_1 (np, hp, dn + 1, q1h);
|
||||
|
||||
- nh = np[0];
|
||||
+ nh = np[dn];
|
||||
umul_ppmm (q0h, dummy, nh, dinv);
|
||||
q0h += nh;
|
||||
#if OPERATION_sbpi1_div_qr_sec
|
||||
qlp[i] = q0h;
|
||||
#endif
|
||||
- cy = mpn_submul_1 (np - dn, dp, dn, q0h);
|
||||
-
|
||||
- nh -= cy;
|
||||
+ nh -= mpn_submul_1 (np, dp, dn, q0h);
|
||||
}
|
||||
|
||||
- np[0] = nh;
|
||||
-
|
||||
- np -= dn;
|
||||
-
|
||||
/* 1st adjustment depends on extra high remainder limb. */
|
||||
- h = np[dn];
|
||||
+ cnd = nh != 0; /* FIXME: cmp-to-int */
|
||||
#if OPERATION_sbpi1_div_qr_sec
|
||||
- qlp[0] += h;
|
||||
+ qlp[0] += cnd;
|
||||
#endif
|
||||
- h -= mpn_subcnd_n (np, np, dp, dn, h);
|
||||
+ nh -= mpn_subcnd_n (np, np, dp, dn, cnd);
|
||||
|
||||
- /* 2nd adjustment depends on remainder/divisor comparision as well as whether
|
||||
+ /* 2nd adjustment depends on remainder/divisor comparison as well as whether
|
||||
extra remainder limb was nullified by previous subtract. */
|
||||
cy = mpn_sub_n (np, np, dp, dn);
|
||||
- cy = cy == h; /* FIXME: might leak on some archs */
|
||||
+ cy = cy - nh;
|
||||
#if OPERATION_sbpi1_div_qr_sec
|
||||
- qlp[0] += cy;
|
||||
+ qlp[0] += 1 - cy;
|
||||
#endif
|
||||
- mpn_addcnd_n (np, np, dp, dn, 1 - cy);
|
||||
+ mpn_addcnd_n (np, np, dp, dn, cy);
|
||||
|
||||
+ /* 3rd adjustment depends on remainder/divisor comparison. */
|
||||
+ cy = mpn_sub_n (np, np, dp, dn);
|
||||
+#if OPERATION_sbpi1_div_qr_sec
|
||||
+ qlp[0] += 1 - cy;
|
||||
+#endif
|
||||
+ mpn_addcnd_n (np, np, dp, dn, cy);
|
||||
+
|
||||
+#if OPERATION_sbpi1_div_qr_sec
|
||||
/* Combine quotient halves into final quotient. */
|
||||
-#if OPERATION_sbpi1_div_qr_sec
|
||||
- qh = 0;
|
||||
- if (nn - dn != 0)
|
||||
- {
|
||||
- qh = mpn_lshift (qhp, qhp, nn - dn, GMP_NUMB_BITS/2);
|
||||
- qh += mpn_add_n (qp, qhp, qlp, nn - dn);
|
||||
- }
|
||||
+ qh = mpn_lshift (qhp, qhp, nn - dn, GMP_NUMB_BITS/2);
|
||||
+ qh += mpn_add_n (qp, qhp, qlp, nn - dn);
|
||||
|
||||
return qh;
|
||||
#else
|
||||
|
73
patches/gmp/5.1.1/130-do-not-clobber-f16-f18.patch
Normal file
73
patches/gmp/5.1.1/130-do-not-clobber-f16-f18.patch
Normal file
@ -0,0 +1,73 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <tege@gmplib.org>
|
||||
# Date 1369216954 -7200
|
||||
# Node ID 394bdf8fdaee749660cc5680cc0636ea0242fae7
|
||||
# Parent 0771124b9f13b218a3f07f7dd7c127961974489d
|
||||
Don't clobber f16-f18.
|
||||
|
||||
diff -r 0771124b9f13 -r 394bdf8fdaee mpn/ia64/divrem_2.asm
|
||||
--- a/mpn/ia64/divrem_2.asm Mon May 20 16:56:05 2013 +0200
|
||||
+++ b/mpn/ia64/divrem_2.asm Wed May 22 12:02:34 2013 +0200
|
||||
@@ -1,6 +1,6 @@
|
||||
dnl IA-64 mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number.
|
||||
|
||||
-dnl Copyright 2010 Free Software Foundation, Inc.
|
||||
+dnl Copyright 2010, 2013 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
|
||||
@@ -98,17 +98,17 @@
|
||||
br.call.sptk.many b0 = mpn_invert_limb
|
||||
;;
|
||||
setf.sig f11 = r8 // di (non-final)
|
||||
- setf.sig f18 = r39 // d1
|
||||
- setf.sig f17 = r36 // d0
|
||||
+ setf.sig f34 = r39 // d1
|
||||
+ setf.sig f33 = r36 // d0
|
||||
mov r1 = r43
|
||||
;;
|
||||
mov r17 = 1
|
||||
setf.sig f9 = r38 // n2
|
||||
- xma.l f6 = f11, f18, f0 // t0 = LO(di * d1)
|
||||
+ xma.l f6 = f11, f34, f0 // t0 = LO(di * d1)
|
||||
;;
|
||||
setf.sig f10 = r37 // n1
|
||||
setf.sig f15 = r17 // 1
|
||||
- xma.hu f8 = f11, f17, f0 // s0 = HI(di * d0)
|
||||
+ xma.hu f8 = f11, f33, f0 // s0 = HI(di * d0)
|
||||
;;
|
||||
getf.sig r17 = f6
|
||||
getf.sig r16 = f8
|
||||
@@ -178,7 +178,7 @@
|
||||
(p9) br.cond.dptk .L52
|
||||
.L46:
|
||||
')
|
||||
- setf.sig f16 = r8 // di
|
||||
+ setf.sig f32 = r8 // di
|
||||
shladd r32 = r35, 3, r32
|
||||
;;
|
||||
|
||||
@@ -189,8 +189,8 @@
|
||||
;;
|
||||
(p8) mov r37 = r0
|
||||
(p9) ld8 r37 = [r34], -8
|
||||
- xma.hu f8 = f9, f16, f10 // 0,29
|
||||
- xma.l f12 = f9, f16, f10 // 0
|
||||
+ xma.hu f8 = f9, f32, f10 // 0,29
|
||||
+ xma.l f12 = f9, f32, f10 // 0
|
||||
;;
|
||||
getf.sig r20 = f12 // q0 4
|
||||
xma.l f13 = f15, f8, f9 // q += n2 4
|
||||
@@ -198,8 +198,8 @@
|
||||
;;
|
||||
getf.sig r18 = f13 // 8
|
||||
xma.l f7 = f14, f13, f10 // 8
|
||||
- xma.l f6 = f17, f13, f17 // t0 = LO(d0*q+d0) 8
|
||||
- xma.hu f9 = f17, f13, f17 // t1 = HI(d0*q+d0) 9
|
||||
+ xma.l f6 = f33, f13, f33 // t0 = LO(d0*q+d0) 8
|
||||
+ xma.hu f9 = f33, f13, f33 // t1 = HI(d0*q+d0) 9
|
||||
;;
|
||||
getf.sig r38 = f7 // n1 12
|
||||
getf.sig r16 = f6 // 13
|
||||
|
59
patches/gmp/6.1.0/100-fix-broadwell-skylake.patch
Normal file
59
patches/gmp/6.1.0/100-fix-broadwell-skylake.patch
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Torbjorn Granlund <torbjorng@google.com>
|
||||
# Date 1450109109 -3600
|
||||
# Node ID 67d4ee9dead1ed8b1c9f4eb320ac72208fe1a015
|
||||
# Parent 20bf21d5f600710d62b040ea9b20da22871db1f1
|
||||
Add FUNC_EXITs.
|
||||
|
||||
diff -r 20bf21d5f600 -r 67d4ee9dead1 NEWS
|
||||
--- a/NEWS Mon Dec 14 08:37:18 2015 +0100
|
||||
+++ b/NEWS Mon Dec 14 17:05:09 2015 +0100
|
||||
@@ -4,6 +4,11 @@
|
||||
medium, provided this notice is preserved.
|
||||
|
||||
|
||||
+Changes between GMP version 6.1.1 and 6.1.0
|
||||
+
|
||||
+ BUGS FIXED
|
||||
+ * .
|
||||
+
|
||||
Changes between GMP version 6.0.* and 6.1.0
|
||||
|
||||
BUGS FIXED
|
||||
diff -r 20bf21d5f600 -r 67d4ee9dead1 mpn/x86_64/coreibwl/mul_basecase.asm
|
||||
--- a/mpn/x86_64/coreibwl/mul_basecase.asm Mon Dec 14 08:37:18 2015 +0100
|
||||
+++ b/mpn/x86_64/coreibwl/mul_basecase.asm Mon Dec 14 17:05:09 2015 +0100
|
||||
@@ -94,6 +94,7 @@
|
||||
|
||||
L(s11): mov %rax, (rp)
|
||||
mov %r9, 8(rp)
|
||||
+ FUNC_EXIT()
|
||||
ret
|
||||
|
||||
L(s2x): cmp $2, vn
|
||||
@@ -105,6 +106,7 @@
|
||||
mov %rax, (rp)
|
||||
mov %r9, 8(rp)
|
||||
mov %r10, 16(rp)
|
||||
+ FUNC_EXIT()
|
||||
ret
|
||||
|
||||
L(s22): add %r8, %r9 C 1
|
||||
@@ -121,6 +123,7 @@
|
||||
mov %r9, 8(rp)
|
||||
mov %r10, 16(rp)
|
||||
mov %rdx, 24(rp)
|
||||
+ FUNC_EXIT()
|
||||
ret
|
||||
|
||||
ALIGN(16)
|
||||
@@ -294,6 +297,7 @@
|
||||
pop %r12
|
||||
pop %rbp
|
||||
pop %rbx
|
||||
+ FUNC_EXIT()
|
||||
ret
|
||||
|
||||
L(f2):
|
||||
|
Loading…
x
Reference in New Issue
Block a user