From: Sebastian Schuberth <sschuberth@gmail.com>
To: Johannes Sixt <j.sixt@viscovery.net>
Cc: msysGit <msysgit@googlegroups.com>,
Junio C Hamano <gitster@pobox.com>,
Git Mailing List <git@vger.kernel.org>
Subject: Re: [PATCH] block-sha1: Windows declares ntohl() in winsock2.h
Date: Tue, 18 Aug 2009 12:45:53 +0200 [thread overview]
Message-ID: <4A8A8661.5060908@gmail.com> (raw)
In-Reply-To: <4A8A552D.6020407@viscovery.net>
> This is a minimal fix to compile block-sha1 on Windows. I did not do any
> benchmarks whether the implementation of ntohl() is actually faster than
> bytewise access and shifts.
As ntohl()/htonl() are function calls (that internally do shifts), I
doubt they're faster than the shift macros, though I haven't measured
it. However, I do not suggest to go for the macros on Windows/Intel, but
to apply the following patch on top of your patch:
From 34402f0e5691ca46cd63c930eef8fc9cadf80493 Mon Sep 17 00:00:00 2001
From: Sebastian Schuberth <sschuberth@gmail.com>
Date: Tue, 18 Aug 2009 12:33:35 +0200
Subject: [PATCH] block-sha1: On Intel, use bswap built-in in favor of
ntohl()/htonl()
On Windows/Intel, ntohl()/htonl() are function calls that do shifts to
swap the
byte order. Using the native bswap instruction boths gets rid of the
shifts and
the function call overhead to gain some performance.
Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
---
block-sha1/sha1.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
index f2830c0..07f2937 100644
--- a/block-sha1/sha1.c
+++ b/block-sha1/sha1.c
@@ -66,15 +66,20 @@
/*
* Performance might be improved if the CPU architecture is OK with
- * unaligned 32-bit loads and a fast ntohl() is available.
+ * unaligned 32-bit loads and a fast ntohl() is available. On Intel,
+ * use the bswap built-in to get rid of the function call overhead.
* Otherwise fall back to byte loads and shifts which is portable,
* and is faster on architectures with memory alignment issues.
*/
-#if defined(__i386__) || defined(__x86_64__) || \
- defined(__ppc__) || defined(__ppc64__) || \
- defined(__powerpc__) || defined(__powerpc64__) || \
- defined(__s390__) || defined(__s390x__)
+#if defined(__i386__) || defined(__x86_64__)
+
+#define get_be32(p) __builtin_bswap32(*(unsigned int *)(p))
+#define put_be32(p, v) do { *(unsigned int *)(p) =
__builtin_bswap32(v); } while (0)
+
+#elif defined(__ppc__) || defined(__ppc64__) || \
+ defined(__powerpc__) || defined(__powerpc64__) || \
+ defined(__s390__) || defined(__s390x__)
#define get_be32(p) ntohl(*(unsigned int *)(p))
#define put_be32(p, v) do { *(unsigned int *)(p) = htonl(v); } while (0)
--
1.6.4.169.g64d5.dirty
next prev parent reply other threads:[~2009-08-18 10:46 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-18 7:15 [PATCH] block-sha1: Windows declares ntohl() in winsock2.h Johannes Sixt
2009-08-18 10:45 ` Sebastian Schuberth [this message]
2009-08-18 11:07 ` Junio C Hamano
2009-08-18 11:28 ` Sebastian Schuberth
2009-08-18 12:56 ` Artur Skawina
2009-08-18 13:17 ` Sebastian Schuberth
2009-08-18 13:39 ` Junio C Hamano
2009-08-18 15:40 ` Linus Torvalds
2009-08-18 16:08 ` Linus Torvalds
2009-08-18 16:23 ` Sebastian Schuberth
2009-08-18 16:43 ` Junio C Hamano
2009-08-18 16:30 ` Nicolas Pitre
2009-08-18 16:43 ` Nicolas Pitre
2009-08-18 16:50 ` Junio C Hamano
2009-08-18 18:01 ` Nicolas Pitre
2009-08-18 19:00 ` Junio C Hamano
2009-08-18 19:22 ` Nicolas Pitre
2009-08-18 19:26 ` [PATCH] make sure byte swapping is optimal for git Nicolas Pitre
2009-08-18 19:37 ` [PATCH] block-sha1: guard gcc extensions with __GNUC__ Nicolas Pitre
2009-08-18 19:40 ` [PATCH] block-sha1: Windows declares ntohl() in winsock2.h Junio C Hamano
2009-08-18 19:56 ` Brandon Casey
2009-08-18 20:10 ` Nicolas Pitre
2009-08-18 20:25 ` Linus Torvalds
2009-08-18 20:29 ` Brandon Casey
2009-08-20 2:26 ` Nicolas Pitre
2009-08-20 2:30 ` Linus Torvalds
2009-08-20 2:45 ` Brandon Casey
2009-08-18 16:59 ` Sebastian Schuberth
2009-08-18 17:05 ` Junio C Hamano
2009-08-18 18:16 ` Nicolas Pitre
2009-08-18 20:17 ` Junio C Hamano
2009-08-18 20:30 ` Junio C Hamano
2009-08-18 20:49 ` Nicolas Pitre
2009-08-18 18:10 ` Nicolas Pitre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A8A8661.5060908@gmail.com \
--to=sschuberth@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j.sixt@viscovery.net \
--cc=msysgit@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.