зеркало из https://github.com/mozilla/gecko-dev.git
Bug 303507: Add comba for MPI's multiply and square routines.
This code is currently for AMD 64 on both Linux and Solaris only.
This commit is contained in:
Родитель
216a4fbef2
Коммит
c3fa2091c5
|
@ -132,7 +132,8 @@ ifeq ($(CPU_ARCH),x86_64)
|
|||
ASFILES = arcfour-amd64-gas.s mpi_amd64_gas.s
|
||||
ASFLAGS += -march=opteron -m64 -fPIC
|
||||
DEFINES += -DNSS_BEVAND_ARCFOUR -DMPI_AMD64 -DMP_ASSEMBLY_MULTIPLY
|
||||
MPI_SRCS += mpi_amd64.c
|
||||
DEFINES += -DNSS_USE_COMBA
|
||||
MPI_SRCS += mpi_amd64.c mp_comba.c
|
||||
endif
|
||||
ifeq ($(CPU_ARCH),x86)
|
||||
ASFILES = mpi_x86.s
|
||||
|
@ -251,12 +252,15 @@ else
|
|||
ifdef NS_USE_GCC
|
||||
ASFILES = arcfour-amd64-gas.s mpi_amd64_gas.s
|
||||
ASFLAGS += -march=opteron -m64 -fPIC
|
||||
MPI_SRCS += mp_comba.c
|
||||
else
|
||||
ASFILES = arcfour-amd64-sun.s mpi_amd64_sun.s sha-fast-amd64-sun.s
|
||||
ASFILES += mp_comba_amd64_sun.s
|
||||
ASFLAGS += -xarch=generic64 -K PIC
|
||||
SHA_SRCS =
|
||||
endif
|
||||
DEFINES += -DNSS_BEVAND_ARCFOUR -DMPI_AMD64 -DMP_ASSEMBLY_MULTIPLY
|
||||
DEFINES += -DNSS_USE_COMBA
|
||||
MPI_SRCS += mpi_amd64.c
|
||||
else
|
||||
# Solaris x86
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -42,7 +42,7 @@
|
|||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
/* $Id: mpi-priv.h,v 1.18 2005/02/25 04:30:11 julien.pierre.bugs%sun.com Exp $ */
|
||||
/* $Id: mpi-priv.h,v 1.19 2005/08/16 19:25:48 saul.edwards%sun.com Exp $ */
|
||||
#ifndef _MPI_PRIV_H_
|
||||
#define _MPI_PRIV_H_ 1
|
||||
|
||||
|
@ -231,6 +231,22 @@ mp_err s_mp_invmod_odd_m( const mp_int *a, const mp_int *m, mp_int *c);
|
|||
mp_err s_mp_invmod_2d( const mp_int *a, mp_size k, mp_int *c);
|
||||
mp_err s_mp_invmod_even_m(const mp_int *a, const mp_int *m, mp_int *c);
|
||||
|
||||
#ifdef NSS_USE_COMBA
|
||||
|
||||
#define IS_POWER_OF_2(a) ((a) && !((a) & ((a)-1)))
|
||||
|
||||
void s_mp_mul_comba_4(const mp_int *A, const mp_int *B, mp_int *C);
|
||||
void s_mp_mul_comba_8(const mp_int *A, const mp_int *B, mp_int *C);
|
||||
void s_mp_mul_comba_16(const mp_int *A, const mp_int *B, mp_int *C);
|
||||
void s_mp_mul_comba_32(const mp_int *A, const mp_int *B, mp_int *C);
|
||||
|
||||
void s_mp_sqr_comba_4(const mp_int *A, mp_int *B);
|
||||
void s_mp_sqr_comba_8(const mp_int *A, mp_int *B);
|
||||
void s_mp_sqr_comba_16(const mp_int *A, mp_int *B);
|
||||
void s_mp_sqr_comba_32(const mp_int *A, mp_int *B);
|
||||
|
||||
#endif /* end NSS_USE_COMBA */
|
||||
|
||||
/* ------ mpv functions, operate on arrays of digits, not on mp_int's ------ */
|
||||
#if defined (__OS2__) && defined (__IBMC__)
|
||||
#define MPI_ASM_DECL __cdecl
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
/* $Id: mpi.c,v 1.42 2004/04/27 23:04:36 gerv%gerv.net Exp $ */
|
||||
/* $Id: mpi.c,v 1.43 2005/08/16 19:25:48 saul.edwards%sun.com Exp $ */
|
||||
|
||||
#include "mpi-priv.h"
|
||||
#if defined(OSF1)
|
||||
|
@ -844,6 +844,27 @@ mp_err mp_mul(const mp_int *a, const mp_int *b, mp_int * c)
|
|||
if((res = s_mp_pad(c, USED(a) + USED(b))) != MP_OKAY)
|
||||
goto CLEANUP;
|
||||
|
||||
#ifdef NSS_USE_COMBA
|
||||
if ((MP_USED(a) == MP_USED(b)) && IS_POWER_OF_2(MP_USED(b))) {
|
||||
if (MP_USED(a) == 4) {
|
||||
s_mp_mul_comba_4(a, b, c);
|
||||
goto CLEANUP;
|
||||
}
|
||||
if (MP_USED(a) == 8) {
|
||||
s_mp_mul_comba_8(a, b, c);
|
||||
goto CLEANUP;
|
||||
}
|
||||
if (MP_USED(a) == 16) {
|
||||
s_mp_mul_comba_16(a, b, c);
|
||||
goto CLEANUP;
|
||||
}
|
||||
if (MP_USED(a) == 32) {
|
||||
s_mp_mul_comba_32(a, b, c);
|
||||
goto CLEANUP;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
pb = MP_DIGITS(b);
|
||||
s_mpv_mul_d(MP_DIGITS(a), MP_USED(a), *pb++, MP_DIGITS(c));
|
||||
|
||||
|
@ -914,6 +935,27 @@ mp_err mp_sqr(const mp_int *a, mp_int *sqr)
|
|||
MP_USED(sqr) = ix;
|
||||
MP_DIGIT(sqr, 0) = 0;
|
||||
|
||||
#ifdef NSS_USE_COMBA
|
||||
if (IS_POWER_OF_2(MP_USED(a))) {
|
||||
if (MP_USED(a) == 4) {
|
||||
s_mp_sqr_comba_4(a, sqr);
|
||||
goto CLEANUP;
|
||||
}
|
||||
if (MP_USED(a) == 8) {
|
||||
s_mp_sqr_comba_8(a, sqr);
|
||||
goto CLEANUP;
|
||||
}
|
||||
if (MP_USED(a) == 16) {
|
||||
s_mp_sqr_comba_16(a, sqr);
|
||||
goto CLEANUP;
|
||||
}
|
||||
if (MP_USED(a) == 32) {
|
||||
s_mp_sqr_comba_32(a, sqr);
|
||||
goto CLEANUP;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
pa = MP_DIGITS(a);
|
||||
count = MP_USED(a) - 1;
|
||||
if (count > 0) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче