08.12.2015 13:39, Vlad Khorsun wrote:
>    I don't know how to guarantee atomic execution of sequence of two 
> instructions on Intel HW.

   Don't be confused by pseudocode in function description.

>     You have a proof of course...

   Test program from your link.
   MSVC assembler:

> ; Line 7
>       mov     DWORD PTR _cur$[esp+8], 15              ; 0000000fH
>       push    esi
> ; Line 9 -         old = _InterlockedOr(&cur, 0xF0);
>       mov     ecx, 240                                ; 000000f0H
>       lea     edx, DWORD PTR _cur$[esp+12]
>       mov     eax, DWORD PTR [edx]
> $LN3@main:
>       mov     esi, eax
>       or      esi, ecx
>       lock     cmpxchg DWORD PTR [edx], esi
>       jne     SHORT $LN3@main
>       mov     DWORD PTR _old$[esp+12], eax
> ; Line 10 -         _InterlockedOr(&cur, 0xF0);
>       mov     eax, edx
>       lock     or      DWORD PTR [eax], ecx

   GCC assembler:

>       movl    $15, 44(%rsp)
> ;      old = __atomic_fetch_or(&cur, 0xF0, __ATOMIC_SEQ_CST);
>       movl    44(%rsp), %eax
> .L2:
>       movl    %eax, %edx
>       movl    %eax, %ecx
>       orb     $-16, %dl
>       lock cmpxchgl   %edx, 44(%rsp)
>       jne     .L2
>       movl    %ecx, 40(%rsp)
> ;        __atomic_fetch_or(&cur, 0xF0, __ATOMIC_SEQ_CST);
>       lock orl        $240, 44(%rsp)


-- 
   WBR, SD.

------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to