ARMv4 assembler pack.
authorAndy Polyakov <appro@openssl.org>
Thu, 27 Sep 2007 07:09:46 +0000 (07:09 +0000)
committerAndy Polyakov <appro@openssl.org>
Thu, 27 Sep 2007 07:09:46 +0000 (07:09 +0000)
CHANGES
Configure
config
crypto/sha/Makefile
crypto/sha/asm/sha1-armv4-large.pl
crypto/sha/asm/sha1-thumb.pl
crypto/sha/asm/sha256-armv4.pl
crypto/sha/asm/sha512-armv4.pl

diff --git a/CHANGES b/CHANGES
index 73cf7b354a9995ed217ad1355f0ee16ac3d7b03d..9b43c4c54636cacc0ea237adb1737300882fe57f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.8f and 0.9.9  [xx XXX xxxx]
 
+  *) ARMv4 assembler pack. ARMv4 refers to v4 and later ISA, not CPU
+     "family."
+     [Andy Polyakov]
+
   *) Implement certificate status request TLS extension defined in RFC3546.
      A client can set the appropriate parameters and receive the encoded
      OCSP response via a callback. A server can query the supplied parameters
index d55dd9416437d080c3fd12827e2c677171bf8fe2..958d46ae3326db64062d65becdcc15603bea7082 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -127,6 +127,7 @@ my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o::::::::::";
 my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o:::::::::::";
 my $mips3_asm=":bn-mips3.o:::::::::::";
 my $s390x_asm=":bn_asm.o s390x-mont.o::aes_cbc.o aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::::::";
+my $armv4_asm=":bn_asm.o armv4-mont.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o::::::";
 my $no_asm="::::::::::::";
 
 # As for $BSDthreads. Idea is to maintain "collective" set of flags,
@@ -323,6 +324,7 @@ my %table=(
 # throw in -D[BL]_ENDIAN, whichever appropriate...
 "linux-generic32","gcc:-DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "linux-ppc",   "gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:ppccpuid_linux32.o:linux_ppc32.o linux_ppc32-mont.o:::::sha1-ppc_linux32.o sha256-ppc_linux32.o:::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-armv4", "gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 #### IA-32 targets...
 "linux-ia32-icc",      "icc:-DL_ENDIAN -DTERMIO -O2 -no_cpprt::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "linux-elf",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
diff --git a/config b/config
index 5a75047021946f3425a3bac8184fe533bc4b7489..e8128262d4293a1b7b159359cd953e18e0a6e1ff 100755 (executable)
--- a/config
+++ b/config
@@ -611,8 +611,8 @@ case "$GUESSOS" in
 
        options="$options -DB_ENDIAN -mschedule=$CPUSCHEDULE -march=$CPUARCH"
        OUT="linux-generic32" ;;
-  arm*b-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
-  arm*l-*-linux2) OUT="linux-generic32"; options="$options -DL_ENDIAN" ;;
+  arm[1-3]*-*-linux2) OUT="linux-generic32" ;;
+  arm*-*-linux2) OUT="linux-armv4" ;;
   sh*b-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
   sh*-*-linux2)  OUT="linux-generic32"; options="$options -DL_ENDIAN" ;;
   m68k*-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
index e02d9f1dc3d8c3079ca73c0c1bbeeee273015de3..763b2aad65e17c13ad4922822da99c687404532b 100644 (file)
@@ -71,6 +71,9 @@ sha256-ia64.s: asm/sha512-ia64.pl
 sha512-ia64.s: asm/sha512-ia64.pl
        (cd asm; $(PERL) sha512-ia64.pl ../$@ $(CFLAGS))
 
+sha256-armv4.s: asm/sha256-armv4.pl
+       $(PERL) $< $@
+
 # Solaris make has to be explicitly told
 sha1-x86_64.s: asm/sha1-x86_64.pl;     $(PERL) asm/sha1-x86_64.pl $@
 sha256-x86_64.s:asm/sha512-x86_64.pl;  $(PERL) asm/sha512-x86_64.pl $@
index f54eef5a045d92847e123b75db2bb7e742cba86c..436eb36d70b5dab2e76146514846ffed9f9d1c45 100644 (file)
@@ -38,6 +38,9 @@
 #      the same job in Thumb, therefore the code is never twice as
 #      small and always slower.
 
+$output=shift;
+open STDOUT,">$output";
+
 $ctx="r0";
 $inp="r1";
 $len="r2";
@@ -224,3 +227,4 @@ $code.=<<___;
 ___
 
 print $code;
+close STDOUT; # enforce flush
index f025001b2ff8862176d3f80ac264455e7c863d87..7c9ea9b0296c0616cb58884e1d5612fe8d2917da 100644 (file)
@@ -19,6 +19,9 @@
 # by over 40%, while code increases by only 10% or 32 bytes. But once
 # again, the goal was to establish _size_ benchmark, not performance.
 
+$output=shift;
+open STDOUT,">$output";
+
 $inline=0;
 #$cheat_on_binutils=1;
 
@@ -253,3 +256,4 @@ $code.=<<___;
 ___
 
 print $code;
+close STDOUT; # enforce flush
index 4dd09619a6a72c8b2a2e598f0a4407242071024c..0c9d999de998c5f11b5bfb53f320afa5c8e255c6 100644 (file)
@@ -13,6 +13,9 @@
 # lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per
 # byte.
 
+$output=shift;
+open STDOUT,">$output";
+
 $ctx="r0";     $t0="r0";
 $inp="r1";
 $len="r2";     $t1="r2";
@@ -173,3 +176,4 @@ ___
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;
 print $code;
+close STDOUT; # enforce flush
index da720bd5d3228bf4bf8f130411d0c651cd31b199..230e78d7ef84c748a363bc63e882654a9fd42ea1 100644 (file)
@@ -22,6 +22,9 @@ $hi=0;
 $lo=4;
 # ====================================================================
 
+$output=shift;
+open STDOUT,">$output";
+
 $ctx="r0";
 $inp="r1";
 $len="r2";
@@ -391,3 +394,4 @@ ___
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;
 print $code;
+close STDOUT; # enforce flush