diff options
Diffstat (limited to 'mpi')
-rw-r--r-- | mpi/Makefile.am | 19 | ||||
-rw-r--r-- | mpi/Makefile.in | 19 | ||||
-rw-r--r-- | mpi/mpi-bit.c | 11 | ||||
-rw-r--r-- | mpi/mpi-scan.c | 30 | ||||
-rw-r--r-- | mpi/mpicoder.c | 34 | ||||
-rw-r--r-- | mpi/mpiutil.c | 2 |
6 files changed, 75 insertions, 40 deletions
diff --git a/mpi/Makefile.am b/mpi/Makefile.am index 11b15dd3b..3c4995cc4 100644 --- a/mpi/Makefile.am +++ b/mpi/Makefile.am @@ -11,6 +11,8 @@ EXTRA_DIST = config.links noinst_LIBRARIES = libmpi.a # noinst_HEADERS = + + libmpi_a_SOURCES = longlong.h \ mpi-add.c \ mpi-bit.c \ @@ -31,11 +33,16 @@ libmpi_a_SOURCES = longlong.h \ mpih-mul.c \ mpiutil.c -libmpi_a_LIBADD = mpih-mul1.o \ - mpih-mul2.o \ - mpih-mul3.o \ - mpih-add1.o \ - mpih-sub1.o \ - mpih-shift.o @MPI_EXTRA_ASM_OBJS@ +# Note this objects are actually links, the sourcefiles are +# distributed by special code in dist-hook +common_asm_objects = mpih-mul1.o \ + mpih-mul2.o \ + mpih-mul3.o \ + mpih-add1.o \ + mpih-sub1.o \ + mpih-shift.o + +libmpi_a_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ +$(LIBRARIES): $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ diff --git a/mpi/Makefile.in b/mpi/Makefile.in index 98b42753d..c9ae7cfd0 100644 --- a/mpi/Makefile.in +++ b/mpi/Makefile.in @@ -72,6 +72,7 @@ G10_LOCALEDIR = @G10_LOCALEDIR@ GENCAT = @GENCAT@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ +HAVE_ZLIB_H = @HAVE_ZLIB_H@ INSTOBJEXT = @INSTOBJEXT@ INTLDEPS = @INTLDEPS@ INTLLIBS = @INTLLIBS@ @@ -114,12 +115,16 @@ libmpi_a_SOURCES = longlong.h \ mpih-mul.c \ mpiutil.c -libmpi_a_LIBADD = mpih-mul1.o \ - mpih-mul2.o \ - mpih-mul3.o \ - mpih-add1.o \ - mpih-sub1.o \ - mpih-shift.o @MPI_EXTRA_ASM_OBJS@ +# Note this objects are actually links, the sourcefiles are +# distributed by special code in dist-hook +common_asm_objects = mpih-mul1.o \ + mpih-mul2.o \ + mpih-mul3.o \ + mpih-add1.o \ + mpih-sub1.o \ + mpih-shift.o + +libmpi_a_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = @@ -328,6 +333,8 @@ maintainer-clean-generic clean mostlyclean distclean maintainer-clean CFLAGS += -O2 +$(LIBRARIES): $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/mpi/mpi-bit.c b/mpi/mpi-bit.c index 0f69b6580..0d8cab706 100644 --- a/mpi/mpi-bit.c +++ b/mpi/mpi-bit.c @@ -45,6 +45,7 @@ __clz_tab[] = #endif +#define A_LIMB_1 ((mpi_limb_t)1) @@ -88,7 +89,7 @@ mpi_test_bit( MPI a, unsigned n ) if( limbno >= a->nlimbs ) return 0; /* too far left: this is a 0 */ limb = a->d[limbno]; - return (limb & (1 << bitno))? 1: 0; + return (limb & (A_LIMB_1 << bitno))? 1: 0; } @@ -108,7 +109,7 @@ mpi_set_bit( MPI a, unsigned n ) mpi_resize(a, limbno+1 ); a->nlimbs = limbno+1; } - a->d[limbno] |= (1<<bitno); + a->d[limbno] |= (A_LIMB_1<<bitno); } /**************** @@ -127,9 +128,9 @@ mpi_set_highbit( MPI a, unsigned n ) mpi_resize(a, limbno+1 ); a->nlimbs = limbno+1; } - a->d[limbno] |= (1<<bitno); + a->d[limbno] |= (A_LIMB_1<<bitno); for( bitno++; bitno < BITS_PER_MPI_LIMB; bitno++ ) - a->d[limbno] &= ~(1 << bitno); + a->d[limbno] &= ~(A_LIMB_1 << bitno); a->nlimbs = limbno+1; } @@ -146,7 +147,7 @@ mpi_clear_bit( MPI a, unsigned n ) if( limbno >= a->nlimbs ) return; /* don't need to clear this bit, it's to far to left */ - a->d[limbno] &= ~(1 << bitno); + a->d[limbno] &= ~(A_LIMB_1 << bitno); } diff --git a/mpi/mpi-scan.c b/mpi/mpi-scan.c index b9745e1af..329b868ca 100644 --- a/mpi/mpi-scan.c +++ b/mpi/mpi-scan.c @@ -54,22 +54,20 @@ mpi_getbyte( MPI a, unsigned index ) * Put a value at position INDEX into A. index counts from lsb to msb */ void -mpi_putbyte( MPI a, unsigned index, int c ) +mpi_putbyte( MPI a, unsigned index, int xc ) { int i, j; unsigned n; mpi_ptr_t ap; - mpi_limb_t limb; + mpi_limb_t limb, c; -#if BYTES_PER_MPI_LIMB != 4 - #error please enhance this function, its ugly - i know. -#endif - c &= 0xff; + c = xc & 0xff; ap = a->d; for(n=0,i=0; i < a->alloced; i++ ) { limb = ap[i]; for( j=0; j < BYTES_PER_MPI_LIMB; j++, n++ ) if( n == index ) { + #if BYTES_PER_MPI_LIMB == 4 if( j == 0 ) limb = (limb & 0xffffff00) | c; else if( j == 1 ) @@ -78,6 +76,26 @@ mpi_putbyte( MPI a, unsigned index, int c ) limb = (limb & 0xff00ffff) | (c<<16); else limb = (limb & 0x00ffffff) | (c<<24); + #elif BYTES_PER_MPI_LIMB == 8 + if( j == 0 ) + limb = (limb & 0xffffffffffffff00) | c; + else if( j == 1 ) + limb = (limb & 0xffffffffffff00ff) | (c<<8); + else if( j == 2 ) + limb = (limb & 0xffffffffff00ffff) | (c<<16); + else if( j == 3 ) + limb = (limb & 0xffffffff00ffffff) | (c<<24); + else if( j == 4 ) + limb = (limb & 0xffffff00ffffffff) | (c<<32); + else if( j == 5 ) + limb = (limb & 0xffff00ffffffffff) | (c<<40); + else if( j == 6 ) + limb = (limb & 0xff00ffffffffffff) | (c<<48); + else + limb = (limb & 0x00ffffffffffffff) | (c<<56); + #else + #error please enhance this function, its ugly - i know. + #endif if( a->nlimbs <= i ) a->nlimbs = i+1; ap[i] = limb; diff --git a/mpi/mpicoder.c b/mpi/mpicoder.c index efb5d0904..bccb51ff5 100644 --- a/mpi/mpicoder.c +++ b/mpi/mpicoder.c @@ -20,6 +20,7 @@ #include <config.h> #include <stdio.h> +#include <string.h> #include <stdlib.h> #include <assert.h> @@ -326,14 +327,15 @@ mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign ) alimb |= *p-- << 16 ; alimb |= *p-- << 24 ; #elif BYTES_PER_MPI_LIMB == 8 - alimb = *p-- ; - alimb |= *p-- << 8 ; - alimb |= *p-- << 16 ; - alimb |= *p-- << 24 ; - alimb |= *p-- << 32 ; - alimb |= *p-- << 40 ; - alimb |= *p-- << 48 ; - alimb |= *p-- << 56 ; + /* cast due to egc's "left shift count >= width of type" warning*/ + alimb = (mpi_limb_t)*p-- ; + alimb |= (mpi_limb_t)*p-- << 8 ; + alimb |= (mpi_limb_t)*p-- << 16 ; + alimb |= (mpi_limb_t)*p-- << 24 ; + alimb |= (mpi_limb_t)*p-- << 32 ; + alimb |= (mpi_limb_t)*p-- << 40 ; + alimb |= (mpi_limb_t)*p-- << 48 ; + alimb |= (mpi_limb_t)*p-- << 56 ; #else #error please implement for this limb size. #endif @@ -346,14 +348,14 @@ mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign ) if( p >= buffer ) alimb |= *p-- << 16 ; if( p >= buffer ) alimb |= *p-- << 24 ; #elif BYTES_PER_MPI_LIMB == 8 - alimb = *p-- ; - if( p >= buffer ) alimb |= *p-- << 8 ; - if( p >= buffer ) alimb |= *p-- << 16 ; - if( p >= buffer ) alimb |= *p-- << 24 ; - if( p >= buffer ) alimb |= *p-- << 32 ; - if( p >= buffer ) alimb |= *p-- << 40 ; - if( p >= buffer ) alimb |= *p-- << 48 ; - if( p >= buffer ) alimb |= *p-- << 56 ; + alimb = (mpi_limb_t)*p-- ; + if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 8 ; + if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 16 ; + if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 24 ; + if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 32 ; + if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 40 ; + if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 48 ; + if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 56 ; #else #error please implement for this limb size. #endif diff --git a/mpi/mpiutil.c b/mpi/mpiutil.c index 7515eafd1..09be317f2 100644 --- a/mpi/mpiutil.c +++ b/mpi/mpiutil.c @@ -103,7 +103,7 @@ mpi_alloc_limb_space( unsigned nlimbs, int secure ) size_t len = nlimbs * sizeof(mpi_limb_t); if( DBG_MEMORY ) - log_debug("mpi_alloc_limb_space(%u)\n", len*8 ); + log_debug("mpi_alloc_limb_space(%u)\n", (unsigned)len*8 ); #ifdef M_DEBUG return secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info ); #else |