From 666c582e36e245af111dbd47f1ae1216bbc1d7bf Mon Sep 17 00:00:00 2001 From: David Shaw Date: Mon, 12 Jan 2004 00:51:39 +0000 Subject: [PATCH] * config.links: OpenBSD 3.4 is now ELF, so use the proper assembler code for that. Use the portable C MPI code for OpenBSD before 3.4, and remove the special i386-openbsd assembly directory. * Makefile.am: Add the portable C links to DISTCLEANFILES. Noted by Nelson H. F. Beebe. * mpi-mpow.c (build_index): s/index/idx/ to avoid gcc warning. From Werner on stable branch. * longlong.h: Added PowerPC 64 bit code from GPM-4.1.2 but didn't enable it yet. From Werner on stable branch. --- mpi/ChangeLog | 16 ++++++++++++ mpi/Makefile.am | 7 ++++-- mpi/config.links | 35 ++++++++++++-------------- mpi/longlong.h | 65 +++++++++++++++++++++++++++++++++++++++++++++--- mpi/mpi-mpow.c | 10 +++----- 5 files changed, 102 insertions(+), 31 deletions(-) diff --git a/mpi/ChangeLog b/mpi/ChangeLog index 42e37ab70..7c416365c 100644 --- a/mpi/ChangeLog +++ b/mpi/ChangeLog @@ -1,3 +1,19 @@ +2004-01-11 David Shaw + + * config.links: OpenBSD 3.4 is now ELF, so use the proper + assembler code for that. Use the portable C MPI code for OpenBSD + before 3.4, and remove the special i386-openbsd assembly + directory. + + * Makefile.am: Add the portable C links to DISTCLEANFILES. Noted + by Nelson H. F. Beebe. + + * mpi-mpow.c (build_index): s/index/idx/ to avoid gcc warning. + From Werner on stable branch. + + * longlong.h: Added PowerPC 64 bit code from GPM-4.1.2 but didn't + enable it yet. From Werner on stable branch. + 2003-12-29 David Shaw * g10m.c: Dead code. Remove. diff --git a/mpi/Makefile.am b/mpi/Makefile.am index 1a4faf066..10b1988d5 100644 --- a/mpi/Makefile.am +++ b/mpi/Makefile.am @@ -25,8 +25,11 @@ ASFLAGS = @MPI_SFLAGS@ EXTRA_DIST = config.links DISTCLEANFILES = mpi-asm-defs.h \ - mpih-add1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S \ - mpih-lshift.S mpih-rshift.S mpih-sub1.S asm-syntax.h sysdep.h + mpih-add1.S mpih-add1.c mpih-mul1.S mpih-mul1.c \ + mpih-mul2.S mpih-mul2.c mpih-mul3.S mpih-mul3.c \ + mpih-lshift.S mpih-lshift.c mpih-rshift.S mpih-rshift.c \ + mpih-sub1.S mpih-sub1.c asm-syntax.h sysdep.h + # Note: we only use .S files so we should delete all left over .s CLEANFILES = _*.s diff --git a/mpi/config.links b/mpi/config.links index 9e3bfd6fc..f63f60a84 100644 --- a/mpi/config.links +++ b/mpi/config.links @@ -1,6 +1,6 @@ # config.links - helper for ../configure -# Copyright (C) 1998, 1999, 2000, 2001, 2002, -# 2003 Free Software Foundation, Inc. +# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 +# 2004 Free Software Foundation, Inc. # # This file is part of GnuPG. # @@ -33,10 +33,13 @@ echo "/* Target: ${target} */" >>./mpi/asm-syntax.h if test "$try_asm_modules" = "yes" ; then case "${target}" in - powerpc-apple-darwin*) - echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h - path="" - ;; + powerpc-apple-darwin* | \ + i[34567]86*-*-openbsd[12]* | \ + i[34567]86*-*-openbsd3.[0123]*) + echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h + path="" + ;; + i[3467]86*-*-openbsd* | \ i[3467]86*-*-freebsd*-elf | \ i[3467]86*-*-freebsd[3-9]* | \ i[3467]86*-*-freebsdelf* | \ @@ -46,12 +49,13 @@ case "${target}" in cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i386" ;; - i586*-*-freebsd*-elf | \ - i586*-*-freebsd[3-9]* | \ - i586*-*-freebsdelf* | \ - i586*-*-netbsd* | \ - i586*-*-k*bsd* | \ - pentium-*-netbsd* | \ + i586*-*-openbsd* | \ + i586*-*-freebsd*-elf | \ + i586*-*-freebsd[3-9]* | \ + i586*-*-freebsdelf* | \ + i586*-*-netbsd* | \ + i586*-*-k*bsd* | \ + pentium-*-netbsd* | \ pentiumpro-*-netbsd*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h @@ -62,13 +66,6 @@ case "${target}" in cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i386" ;; -# Use old assembler syntax for OpenBSD as their assembler is really old. - i[34567]86*-*-openbsd*) - echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h - echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h - cat $srcdir/mpi/i386-openbsd/syntax.h >>./mpi/asm-syntax.h - path="i386-openbsd" - ;; i[3467]86*-*-linuxaout* | \ i[3467]86*-*-linuxoldld* | \ i[3467]86*-*-*bsd*) diff --git a/mpi/longlong.h b/mpi/longlong.h index 8711c70b4..ba0642cf2 100644 --- a/mpi/longlong.h +++ b/mpi/longlong.h @@ -5,16 +5,16 @@ Copyright (C) 1991, 1992, 1993, 1994, 1996, 1998, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. -You should have received a copy of the GNU Library General Public License +You should have received a copy of the GNU Lesser General Public License along with this file; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -921,6 +921,63 @@ extern USItype __udiv_qrnnd (); #endif #endif /* Power architecture variants. */ +/* Powerpc 64 bit support taken from gmp-4.1.2. */ +/* We should test _IBMR2 here when we add assembly support for the system + vendor compilers. */ +#if 0 /* Not yet enabled becuase we don't have hardware for a test. */ +#if (defined (_ARCH_PPC) || defined (__powerpc__)) && W_TYPE_SIZE == 64 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else \ + __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ + : "=r" (sh), "=&r" (sl) \ + : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ + } while (0) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (ah) && (ah) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else \ + __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ + : "=r" (sh), "=&r" (sl) \ + : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ + } while (0) +#define count_leading_zeros(count, x) \ + __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x)) +#define COUNT_LEADING_ZEROS_0 64 +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + UDItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 15 +#define smul_ppmm(ph, pl, m0, m1) \ + do { \ + DItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define SMUL_TIME 14 /* ??? */ +#define UDIV_TIME 120 /* ??? */ +#endif /* 64-bit PowerPC. */ +#endif /* if 0 */ /*************************************** ************** PYR ****************** diff --git a/mpi/mpi-mpow.c b/mpi/mpi-mpow.c index 7c46fc65c..44d8e51fd 100644 --- a/mpi/mpi-mpow.c +++ b/mpi/mpi-mpow.c @@ -29,15 +29,15 @@ static int build_index( MPI *exparray, int k, int i, int t ) { int j, bitno; - int index = 0; + int idx = 0; bitno = t-i; for(j=k-1; j >= 0; j-- ) { - index <<= 1; + idx <<= 1; if( mpi_test_bit( exparray[j], bitno ) ) - index |= 1; + idx |= 1; } - return index; + return idx; } /**************** @@ -97,5 +97,3 @@ mpi_mulpowm( MPI res, MPI *basearray, MPI *exparray, MPI m) mpi_free(G[i]); m_free(G); } - -