SPARCv9 assembler pack: refine CPU detection on Linux, fix for "unaligned
[oweals/openssl.git] / crypto / sha / asm / sha256-armv4.pl
index d2465e3aa88f24344d4b1ba7a33bfac2960b92ec..48d846deec36810fffc4dbacae782ddb487e9a7f 100644 (file)
@@ -7,9 +7,14 @@
 # details see http://www.openssl.org/~appro/cryptogams/.
 # ====================================================================
 
-# SHA256 block procedure for ARMv4.
+# SHA256 block procedure for ARMv4. May 2007.
 
-# Performance is ~2x better than gcc 3.4 generated code.
+# Performance is ~2x better than gcc 3.4 generated code and in "abso-
+# 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";
@@ -165,9 +170,12 @@ $code.=<<___;
        tst     lr,#1
        moveq   pc,lr                   @ be binary compatible with V4, yet
        bx      lr                      @ interoperable with Thumb ISA:-)
-.size   sha256_block_data_order,.-sha1_block_data_order
+.size   sha256_block_data_order,.-sha256_block_data_order
 .asciz  "SHA256 block transform for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
 ___
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;
+$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm;   # make it possible to compile with -march=armv4
 print $code;
+close STDOUT; # enforce flush