[PATCH] ARM optimized SHA1 implementation

This is my ARM assembly SHA1 implementation for GIT. It is approximately
50% faster than the generic C version. On an XScale processor running at
400MHz:

	generic C version:	9.8 MB/s
	my version:		14.5 MB/s

It's not that I expect a lot of big GIT users on ARM, but I stillknow
about one important ARM user that might benefit from it, and writing
that code was fun.

I also reworked the makefile a bit so any optimized SHA1 implementations
is used regardless of whether NO_OPENSSL is defined or not.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/Makefile b/Makefile
index f83c495..6d73a4d 100644
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,9 @@
 # Define PPC_SHA1 environment variable when running make to make use of
 # a bundled SHA1 routine optimized for PowerPC.
 #
+# Define ARM_SHA1 environment variable when running make to make use of
+# a bundled SHA1 routine optimized for ARM.
+#
 # Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin).
 #
 # Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
@@ -162,6 +165,9 @@
 	NEEDS_NSL = YesPlease
 	PLATFORM_DEFINES += -D__EXTENSIONS__
 endif
+ifneq (,$(findstring arm,$(shell uname -m)))
+	ARM_SHA1 = YesPlease
+endif
 
 ifndef SHELL_PATH
 	SHELL_PATH = /bin/sh
@@ -191,18 +197,6 @@
 else
 	LIB_4_ICONV =
 endif
-ifdef MOZILLA_SHA1
-	SHA1_HEADER = "mozilla-sha1/sha1.h"
-	LIB_OBJS += mozilla-sha1/sha1.o
-else
-	ifdef PPC_SHA1
-		SHA1_HEADER = "ppc/sha1.h"
-		LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
-	else
-		SHA1_HEADER = <openssl/sha.h>
-		LIBS += $(LIB_4_CRYPTO)
-	endif
-endif
 ifdef NEEDS_SOCKET
 	LIBS += -lsocket
 	SIMPLE_LIB += -lsocket
@@ -216,6 +210,24 @@
 	LIB_OBJS += compat/strcasestr.o
 endif
 
+ifdef PPC_SHA1
+	SHA1_HEADER = "ppc/sha1.h"
+	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
+else
+ifdef ARM_SHA1
+	SHA1_HEADER = "arm/sha1.h"
+	LIB_OBJS += arm/sha1.o arm/sha1_arm.o
+else
+ifdef MOZILLA_SHA1
+	SHA1_HEADER = "mozilla-sha1/sha1.h"
+	LIB_OBJS += mozilla-sha1/sha1.o
+else
+	SHA1_HEADER = <openssl/sha.h>
+	LIBS += $(LIB_4_CRYPTO)
+endif
+endif
+endif
+
 DEFINES += '-DSHA1_HEADER=$(SHA1_HEADER)'
 
 SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \