Hi Koji,

Thanks.  Comments below.

On 07/12/2012 12:33 PM, Koji Ishii wrote:
> 
>>> hb-atomic-private.hh fix is for x86 only. The current code builds fine
>>> for x64 but not for x86.
>>
>> I don't understand why this is needed.  According to:
>>
>>   http://msdn.microsoft.com/en-us/library/1b4s3xf5%28v=vs.80%29.aspx
>>
>> _InterlockedCompareExchangePointer is available on both x86 and x64.
> 
> And the page says:
> Note   On the x86 architecture, _InterlockedCompareExchangePointer is a macro 
> that calls _InterlockedCompareExchange.
> 
> So, you can't declare it as intrinsic, and the macro is defined in concrt.h, 
> not in intrin.h.

I see...

Can you please confirm that in general the intrinsic pragmas are needed at all?

I'm pushed your suggested change out now.

behdad

> I guess I've got better fix thanks to your advice. How's this? This compiles 
> good too, and we don't hard code the macro any longer. I still see some 
> warnings on both x86/x64, but that's a separate issue.
> 
> Regards,
> Koji
> 
> diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh
> index 918852d..3653608 100644
> --- a/src/hb-atomic-private.hh
> +++ b/src/hb-atomic-private.hh
> @@ -45,7 +45,12 @@
>  #elif !defined(HB_NO_MT) && defined(_MSC_VER) && _MSC_VER >= 1600
>  
>  #include <intrin.h>
> +#if defined(_M_IX86)
> +#include <concrt.h>
> +#pragma intrinsic(_InterlockedExchangeAdd)
> +#else
>  #pragma intrinsic(_InterlockedExchangeAdd, 
> _InterlockedCompareExchangePointer)
> +#endif
>  
>  typedef long hb_atomic_int_t;
>  #define hb_atomic_int_add(AI, V)     _InterlockedExchangeAdd (&(AI), (V))
> 
> 
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to