threads / patch / 24178

patch, 4 partsmsvc: Select the "fast" definition of the {get,put}_be32() macros

Subject: [PATCH 2/4] msvc: Select the "fast" definition of the {get,put}_be32() macros

## tl;dr

5 messages between Jun 23, 2010 and Jun 30, 2010. Diffs are folded; open one to read it.

replies: 4people: 2as markdown or json

Ramsay Jones· Jun 23, 2010, 19:47 UTC · lore

On Intel machines, the msvc compiler defines the CPU architecture macros _M_IX86 and _M_X64 (equivalent to __i386__ and __x86_64__ respectively). Use these macros in the pre-processor expression to select the "fast" definition of the {get,put}_be32() macros.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
I did consider adding an additional guard, like so:
    (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))) || \
However, I decided that the extra paranoia was not needed ...
 block-sha1/sha1.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
Show changes to block-sha1/sha1.c +1 −0
diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
index d893475..e102856 100644
--- a/block-sha1/sha1.c
+++ b/block-sha1/sha1.c
@@ -70,6 +70,7 @@
  */
 
 #if defined(__i386__) || defined(__x86_64__) || \
+    defined(_M_IX86) || defined(_M_X64) || \
     defined(__ppc__) || defined(__ppc64__) || \
     defined(__powerpc__) || defined(__powerpc64__) || \
     defined(__s390__) || defined(__s390x__)
-- 
1.7.1
Jonathan Nieder· Jun 24, 2010, 11:21 UTC · re: Ramsay Jones · lore

Re: [PATCH 2/4] msvc: Select the "fast" definition of the {get,put}_be32() macros

Ramsay Jones wrote:
Show 12 quoted lines
> diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
> index d893475..e102856 100644
> --- a/block-sha1/sha1.c
> +++ b/block-sha1/sha1.c
> @@ -70,6 +70,7 @@
>   */
>  
>  #if defined(__i386__) || defined(__x86_64__) || \
> +    defined(_M_IX86) || defined(_M_X64) || \
>      defined(__ppc__) || defined(__ppc64__) || \
>      defined(__powerpc__) || defined(__powerpc64__) || \
>      defined(__s390__) || defined(__s390x__)

Looks good to me, for what it’s worth. You might want a similar change on line 57:

 
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__i386__) || defined(__x86_64__) || \
+	defined(_M_IX86) || defined(_M_X64)
   #define setW(x, val) (*(volatile unsigned int *)&W(x) = (val))

Or alternatively, it might make sense to add something like the following to compat/mingw.h or git-compat-util.h to fix this once.

 #if defined(_M_IX86) && !defined(__i386__)
 # define __i386__
 #endif
 #if defined(_M_X64) && !defined (__x86_64__)
 # define __x86_64__
 #endif

Thanks, Jonathan

Ramsay Jones· Jun 25, 2010, 20:13 UTC · re: Jonathan Nieder · lore

Re: [PATCH 2/4] msvc: Select the "fast" definition of the {get,put}_be32() macros

Jonathan Nieder wrote:
Show 23 quoted lines
> Ramsay Jones wrote:
> 
>> diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
>> index d893475..e102856 100644
>> --- a/block-sha1/sha1.c
>> +++ b/block-sha1/sha1.c
>> @@ -70,6 +70,7 @@
>>   */
>>  
>>  #if defined(__i386__) || defined(__x86_64__) || \
>> +    defined(_M_IX86) || defined(_M_X64) || \
>>      defined(__ppc__) || defined(__ppc64__) || \
>>      defined(__powerpc__) || defined(__powerpc64__) || \
>>      defined(__s390__) || defined(__s390x__)
> 
> Looks good to me, for what it’s worth.  You might want a similar
> change on line 57:
> 
>  
> -#if defined(__i386__) || defined(__x86_64__)
> +#if defined(__i386__) || defined(__x86_64__) || \
> +	defined(_M_IX86) || defined(_M_X64)
>    #define setW(x, val) (*(volatile unsigned int *)&W(x) = (val))

I looked at this, but decided not to make this change (while adding an item to my TODO list to investigate further).

After reading the large comment before line 57, and with a vague recollection of the mailing list discussion, I was left with the impression that this was aimed specifically at a quirk of the gcc code generator. In other words, maybe line 57 should read:

#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))

I don't know ... anyway I suspect that msvc has a different set of code generation quirks! :-P

It should probably be investigated at some point, but I don't think it's an urgent issue (and the msvc build will be no worse off ;-).

ATB, Ramsay Jones

Jonathan Nieder· Jun 26, 2010, 18:31 UTC · re: Ramsay Jones · lore

Re: [PATCH 2/4] msvc: Select the "fast" definition of the {get,put}_be32() macros

Ramsay Jones wrote:
> Jonathan Nieder wrote:
Show 7 quoted lines
>> -#if defined(__i386__) || defined(__x86_64__)
>> +#if defined(__i386__) || defined(__x86_64__) || \
>> +	defined(_M_IX86) || defined(_M_X64)
>>    #define setW(x, val) (*(volatile unsigned int *)&W(x) = (val))
>
> I looked at this, but decided not to make this change (while adding
> an item to my TODO list to investigate further).

Mmm, my only complaint is that leaving out this change makes the code appear to do something other than it does. Maybe a comment would help.

> After reading the large comment before line 57, and with a vague
> recollection of the mailing list discussion, I was left with the
> impression that this was aimed specifically at a quirk of the gcc
> code generator.

Sort of, but sort of not. Using volatile here is saying “I really want to do these stores in this order”. And that is probably the right thing to do for _any_ code generator on x86, unless it is very smart.

> In other words, maybe line 57 should read:
>
> #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))

That would exclude icc etc so I’d prefer to avoid it without empirical evidence.

> It should probably be investigated at some point, but I don't think
> it's an urgent issue (and the msvc build will be no worse off ;-).
Right, I agree with this. :)  So for what it’s worth:
  Acked-by: Jonathan Nieder <jrnieder@gmail.com>
I am referring to your original patch $gmane/149542 here.
Thanks.
Ramsay Jones· Jun 30, 2010, 19:53 UTC · re: Jonathan Nieder · lore

Re: [PATCH 2/4] msvc: Select the "fast" definition of the {get,put}_be32() macros

Jonathan Nieder wrote:
Show 6 quoted lines
>> It should probably be investigated at some point, but I don't think
>> it's an urgent issue (and the msvc build will be no worse off ;-).
> 
> Right, I agree with this. :)  So for what it’s worth:
> 
>   Acked-by: Jonathan Nieder <jrnieder@gmail.com>
Thanks!

ATB, Ramsay Jones

← back to recent threads