188 lines
5.0 KiB
Plaintext
188 lines
5.0 KiB
Plaintext
|
|
AMD64 processor now fully supported using Intel GCC Compiler
|
|
|
|
Use a header file like
|
|
|
|
#define MR_LITTLE_ENDIAN
|
|
#define MIRACL 64
|
|
#define mr_utype long
|
|
#define MR_IBITS 32
|
|
#define MR_LBITS 64
|
|
#define mr_unsign32 unsigned int
|
|
#define mr_unsign64 unsigned long
|
|
#define MR_FLASH 52
|
|
#define MAXBASE ((mr_small)1<<(MIRACL-1))
|
|
#define BITSINCHAR 8
|
|
|
|
and use assembly language file mrmuldv.s64
|
|
|
|
Note that the above header file assumes an LP64-compatible compiler.
|
|
For an LLP64 compiler, change mr_utype to a 64-bit "long long" or __int64
|
|
|
|
To build the miracl library, extract below into a file "amd64" and execute
|
|
|
|
bash amd64
|
|
|
|
|
|
-------------------------------
|
|
|
|
rm miracl.a
|
|
gcc -c -m64 -O2 mrcore.c
|
|
gcc -c -m64 -O2 mrarth0.c
|
|
gcc -c -m64 -O2 mrarth1.c
|
|
gcc -c -m64 -O2 mrarth2.c
|
|
gcc -c -m64 -O2 mralloc.c
|
|
gcc -c -m64 -O2 mrsmall.c
|
|
gcc -c -m64 -O2 mrio1.c
|
|
gcc -c -m64 -O2 mrio2.c
|
|
gcc -c -m64 -O2 mrgcd.c
|
|
gcc -c -m64 -O2 mrjack.c
|
|
gcc -c -m64 -O2 mrxgcd.c
|
|
gcc -c -m64 -O2 mrarth3.c
|
|
gcc -c -m64 -O2 mrbits.c
|
|
gcc -c -m64 -O2 mrrand.c
|
|
gcc -c -m64 -O2 mrprime.c
|
|
gcc -c -m64 -O2 mrcrt.c
|
|
gcc -c -m64 -O2 mrscrt.c
|
|
gcc -c -m64 -O2 mrmonty.c
|
|
gcc -c -m64 -O2 mrpower.c
|
|
gcc -c -m64 -O2 mrsroot.c
|
|
gcc -c -m64 -O2 mrcurve.c
|
|
gcc -c -m64 -O2 mrfast.c
|
|
gcc -c -m64 -O2 mrshs.c
|
|
gcc -c -m64 -O2 mrshs256.c
|
|
gcc -c -m64 -O2 mrshs512.c
|
|
gcc -c -m64 -O2 mrsha3.c
|
|
gcc -c -m64 -O2 mrfpe.c
|
|
gcc -c -m64 -O2 mraes.c
|
|
gcc -c -m64 -O2 mrgcm.c
|
|
gcc -c -m64 -O2 mrlucas.c
|
|
gcc -c -m64 -O2 mrzzn2.c
|
|
gcc -c -m64 -O2 mrzzn2b.c
|
|
gcc -c -m64 -O2 mrzzn3.c
|
|
gcc -c -m64 -O2 mrzzn4.c
|
|
gcc -c -m64 -O2 mrecn2.c
|
|
gcc -c -m64 -O2 mrstrong.c
|
|
gcc -c -m64 -O2 mrbrick.c
|
|
gcc -c -m64 -O2 mrebrick.c
|
|
gcc -c -m64 -O2 mrec2m.c
|
|
gcc -c -m64 -O2 mrgf2m.c
|
|
gcc -c -m64 -O2 mrflash.c
|
|
gcc -c -m64 -O2 mrfrnd.c
|
|
gcc -c -m64 -O2 mrdouble.c
|
|
gcc -c -m64 -O2 mrround.c
|
|
gcc -c -m64 -O2 mrbuild.c
|
|
gcc -c -m64 -O2 mrflsh1.c
|
|
gcc -c -m64 -O2 mrpi.c
|
|
gcc -c -m64 -O2 mrflsh2.c
|
|
gcc -c -m64 -O2 mrflsh3.c
|
|
gcc -c -m64 -O2 mrflsh4.c
|
|
cp mrmuldv.g64 mrmuldv.c
|
|
gcc -c -m64 -O2 mrmuldv.c
|
|
ar rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mralloc.o mrsmall.o mrzzn2.o mrzzn3.o
|
|
ar r miracl.a mrio1.o mrio2.o mrjack.o mrgcd.o mrxgcd.o mrarth3.o mrbits.o mrecn2.o mrzzn4.o
|
|
ar r miracl.a mrrand.o mrprime.o mrcrt.o mrscrt.o mrmonty.o mrcurve.o mrsroot.o mrzzn2b.o
|
|
ar r miracl.a mrpower.o mrfast.o mrshs.o mrshs256.o mraes.o mrlucas.o mrstrong.o mrgcm.o
|
|
ar r miracl.a mrflash.o mrfrnd.o mrdouble.o mrround.o mrbuild.o
|
|
ar r miracl.a mrflsh1.o mrpi.o mrflsh2.o mrflsh3.o mrflsh4.o
|
|
ar r miracl.a mrbrick.o mrebrick.o mrec2m.o mrgf2m.o mrmuldv.o mrshs512.o mrsha3.o mrfpe.o
|
|
gcc -I. -O2 factor.c miracl.a -lm -o factor
|
|
rm mr*.o
|
|
|
|
----------------------------------------------------
|
|
|
|
There is also a macro file amd64.mcs - see kcmcomba.txt and makemcs.txt
|
|
|
|
|
|
For example use the following to build a very fast version of ake12t.cpp
|
|
|
|
( But first change
|
|
|
|
Miracl precision(8,0);
|
|
|
|
to
|
|
|
|
Miracl precision(4,0);
|
|
|
|
And execute
|
|
|
|
mex 4 amd64 mrcomba
|
|
|
|
to create the module mrcomba.c )
|
|
|
|
/*
|
|
AMD64 mirdef.h file
|
|
optimized for a 256 (=4x64) bit modulus, using COMBA method
|
|
*/
|
|
#define MR_LITTLE_ENDIAN
|
|
#define MIRACL 64
|
|
#define mr_utype long
|
|
#define MR_IBITS 32
|
|
#define MR_LBITS 64
|
|
#define mr_unsign32 unsigned int
|
|
#define mr_unsign64 unsigned long
|
|
#define MR_ALWAYS_BINARY
|
|
#define MAXBASE ((mr_small)1<<(MIRACL-1))
|
|
#define MR_BITSINCHAR 8
|
|
#define MR_COMBA 4
|
|
|
|
rm *.exe
|
|
rm *.lib
|
|
rm miracl.a
|
|
gcc -I. -c -O2 mrcore.c
|
|
gcc -I. -c -O2 mrarth0.c
|
|
gcc -I. -c -O2 mrarth1.c
|
|
gcc -I. -c -O2 mrarth2.c
|
|
gcc -I. -c -O2 mralloc.c
|
|
gcc -I. -c -O2 mrsmall.c
|
|
gcc -I. -c -O2 mrio1.c
|
|
gcc -I. -c -O2 mrio2.c
|
|
gcc -I. -c -O2 mrgcd.c
|
|
gcc -I. -c -O2 mrjack.c
|
|
gcc -I. -c -O2 mrxgcd.c
|
|
gcc -I. -c -O2 mrarth3.c
|
|
gcc -I. -c -O2 mrbits.c
|
|
gcc -I. -c -O2 mrrand.c
|
|
gcc -I. -c -O2 mrprime.c
|
|
gcc -I. -c -O2 mrcrt.c
|
|
gcc -I. -c -O2 mrscrt.c
|
|
gcc -I. -c -O2 mrmonty.c
|
|
gcc -I. -c -O2 mrpower.c
|
|
gcc -I. -c -O2 mrsroot.c
|
|
gcc -I. -c -O2 mrcurve.c
|
|
gcc -I. -c -O2 mrfast.c
|
|
gcc -I. -c -O2 mrshs.c
|
|
gcc -I. -c -O2 mrshs256.c
|
|
gcc -I. -c -O2 mrshs512.c
|
|
gcc -I. -c -O2 mraes.c
|
|
gcc -I. -c -O2 mrgcm.c
|
|
gcc -I. -c -O2 mrlucas.c
|
|
gcc -I. -c -O2 mrzzn2.c
|
|
gcc -I. -c -O2 mrstrong.c
|
|
gcc -I. -c -O2 mrbrick.c
|
|
gcc -I. -c -O2 mrebrick.c
|
|
gcc -I. -c -O2 mrec2m.c
|
|
gcc -I. -c -O2 mrgf2m.c
|
|
gcc -I. -c -O2 mrecn2.c
|
|
gcc -I. -c -O2 mrzzn4.c
|
|
gcc -I. -c -O2 mrzzn2b.c
|
|
gcc -I. -c -O2 mrcomba.c
|
|
|
|
as mrmuldv.s64 -o mrmuldv.o
|
|
ar rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mralloc.o mrsmall.o mrzzn2.o
|
|
ar r miracl.a mrio1.o mrio2.o mrjack.o mrgcd.o mrxgcd.o mrarth3.o mrbits.o mrgcm.o
|
|
ar r miracl.a mrrand.o mrprime.o mrcrt.o mrscrt.o mrmonty.o mrcurve.o mrsroot.o
|
|
ar r miracl.a mrpower.o mrfast.o mrshs.o mrshs256.o mraes.o mrlucas.o mrstrong.o
|
|
ar r miracl.a mrbrick.o mrebrick.o mrec2m.o mrgf2m.o mrmuldv.o mrshs512.o mrcomba.o
|
|
ar r miracl.a mrecn2.o mrzzn4.o mrzzn2b.o
|
|
rm mr*.o
|
|
|
|
g++ -I. -c -O2 -DZZNS=4 zzn.cpp
|
|
g++ -I. -c -O2 -DZZNS=4 big.cpp
|
|
g++ -I. -c -O2 -DZZNS=4 zzn12a.cpp
|
|
g++ -I. -c -O2 -DZZNS=4 zzn4.cpp
|
|
g++ -I. -c -O2 -DZZNS=4 zzn2.cpp
|
|
g++ -I. -c -O2 -DZZNS=4 ecn2.cpp
|
|
g++ -I. -c -O2 -DZZNS=4 ecn.cpp
|
|
g++ -I. -O2 -DZZNS=4 ake12bnx.cpp zzn12a.o zzn4.o zzn2.o ecn2.o ecn.o zzn.o big.o miracl.a -o ake12bnx
|