[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1635?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13824063#comment-13824063
 ] 

Michi Mutsuzaki commented on ZOOKEEPER-1635:
--------------------------------------------

We don't use _asm any more. The current fetch_and_add code looks like this:

{code}
int32_t fetch_and_add(volatile int32_t* operand, int incr)
{
#ifndef WIN32
    return __sync_fetch_and_add(operand, incr);
#else
    return InterlockedExchangeAdd(operand, incr);
#endif
}
{code}

This should work on 64 bit windows, no?

> Support x64 architecture for Windows
> ------------------------------------
>
>                 Key: ZOOKEEPER-1635
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1635
>             Project: ZooKeeper
>          Issue Type: Improvement
>         Environment: Windows x64 systems.
>            Reporter: Tomas Gutierrez
>             Fix For: 3.5.0
>
>
> x64 target does not support _asm inline  (See: 
> http://msdn.microsoft.com/en-us/library/4ks26t93(v=vs.80).aspx)
> The proposal is to use native windows function which still valid for i386 and 
> x64 architecture.
> In order to avoid any potential break, a compilation directive has been 
> added. But, the best should be the removal of the asm part.
> -----------
> sample code
> -----------
> int32_t fetch_and_add(volatile int32_t* operand, int incr)
> {
> #ifndef WIN32
>     int32_t result;
>     asm __volatile__(
>          "lock xaddl %0,%1\n"
>          : "=r"(result), "=m"(*(int *)operand)
>          : "0"(incr)
>          : "memory");
>    return result;
> #else
> #ifdef WIN32_NOASM
>                 InterlockedExchangeAdd(operand, incr);
>                 return *operand;
> #else
>     volatile int32_t result;
>     _asm
>     {
>         mov eax, operand; //eax = v;
>        mov ebx, incr; // ebx = i;
>         mov ecx, 0x0; // ecx = 0;
>         lock xadd dword ptr [eax], ecx; 
>        lock xadd dword ptr [eax], ebx; 
>         mov result, ecx; // result = ebx;        
>      }
>      return result;*/
> #endif
> #endif
> }



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to