Re: [PATCH] block-sha1: Windows declares ntohl() in winsock2.h
- From
- Brandon Casey <brandon.casey.ctr@nrlssc.navy.mil>
- Date
- Aug 20, 2009, 02:45 UTC
- Message-ID
- <swB1Tb3ZWzkSggFnb4OlG99G0HKv1Bv9CEnk5hC0dseH5Wq60whE0w@cipher.nrlssc.navy.mil>
- In-Reply-To
- <alpine.LFD.2.00.0908192201180.6044@xanadu.home>
Nicolas Pitre wrote:
Show 37 quoted lines
> On Tue, 18 Aug 2009, Brandon Casey wrote:
>
>> The SUNWspro compiler doesn't set __i386__. Instead it sets __i386, and
>> I think __x86_64 and __amd64 where appropriate. So, compilation with
>> the SUNWspro compiler on x86 is currently unaffected by these changes and
>> falls back to the generic routines.
>>
>> It seems that v5.10 of the compiler can grok both the __asm__ statements
>> and the ({...}) naked block notation and passes all of the tests when the
>> block_sha1 code is modified to add defined(__i386) to each of the macro
>> statements.
>>
>> The 5.8 version cannot grok the naked block, and requires spelling __asm__
>> as __asm for inline assembly. Even then it appears that there is a bug in
>> the assembly that is produced (a google search told me so), so the assembly
>> code does not successfully compile.
>>
>> I haven't had much time to think about how or whether to address this.
>>
>> Adding something like the following would get ugly real quick:
>>
>> (defined(__i386) && defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5100))
>
> I think the best solution in this case might simply be to add something
> like this somewhere at the top of git-compat-util.h after the system
> includes:
>
> /*
> * The SUNWspro compiler uses different symbols than gcc.
> * Let's standardize on the gcc flavor.
> */
> #if defined(__i386) && !defined(__i386__)
> #define __i386__
> #endif
> #if (defined(__x86_64) || defined(__amd64)) && !defined(__x86_64__)
> #define __x86_64__
> #endifYes, I had this idea too.
Show 7 quoted lines
> /* > * SUNWspro from version 5.10 supports gcc extensions such as gcc's > * statement expressions and extended inline asm, so let's pretend... > */ > #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5100)) > #define __GNUC__ > #endif
I hadn't thought of this. I'll test to make sure the other statements that are protected by ifdef __GNUC__ work correctly with SUNWspro v5.10.
-brandon