亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atomicbase.h

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? H
?? 第 1 頁 / 共 4 頁
字號:
/* * * This software is released under the provisions of the GPL version 2. * see file "COPYING".  If that file is not available, the full statement  * of the license can be found at * * http://www.fsf.org/licensing/licenses/gpl.txt * * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved. * *//*********************************************************************** *  THIS CODE IS HIGHLY CRITICAL TO THE SERVER'S STABILITY!!! *  DO NOT MAKE CHANGES TO THE ATOMIC OPERATORS OR TO THE *  MUTEX CODE WITHOUT A SERVER TEAM CODE-REVIEW! (dev@helix-server) *//**************************************************************************** *  $Id: atomicbase.h 587223 2006-09-21 23:14:40Z aoliveira $ * *  atomicbase.h - Defines several atomic operations *  *  See server/common/util/pub/servatomic.h for broader platform support. *  Also conditionally overrides InterlockedIncrement/Decrement *  via USE_HX_ATOMIC_INTERLOCKED_INC_DEC. * * *********************************************************************** * * Defines: * * void HXAtomicIncINT32(INT32* p)             -- Increment *p * void HXAtomicDecINT32(INT32* p)             -- Decrement *p * void HXAtomicAddINT32(INT32* p, INT32 n)    -- Increment *p by n  * void HXAtomicSubINT32(INT32* p, INT32 n)    -- Decrement *p by n * INT32 HXAtomicIncRetINT32(INT32* p)         -- Increment *p and return it * INT32 HXAtomicDecRetINT32(INT32* p)         -- Decrement *p and return it * INT32 HXAtomicAddRetINT32(INT32* p, INT32 n)-- Increment *p by n, return it * INT32 HXAtomicSubRetINT32(INT32* p, INT32 n)-- Increment *p by n, return it * * * There are also UINT32 versions: * * void HXAtomicIncUINT32(UINT32* p) * void HXAtomicDecUINT32(UINT32* p) * void HXAtomicAddUINT32(UINT32* p, UINT32 n) * void HXAtomicSubUINT32(UINT32* p, UINT32 n) * UINT32 HXAtomicIncRetUINT32(UINT32* p) * UINT32 HXAtomicDecRetUINT32(UINT32* p) * UINT32 HXAtomicAddRetUINT32(UINT32* p, UINT32 n) * UINT32 HXAtomicSubRetUINT32(UINT32* p, UINT32 n) * *********************************************************************** * * TODO: *   Add INT64 versions *   Obsolete the 0x80000000-based Solaris implementation entirely. * ***********************************************************************/#ifndef _ATOMICBASE_H_#define _ATOMICBASE_H_/*********************************************************************** * Sun Solaris / SPARC (Native compiler) * * Implementation Notes: * This uses inline assembly from server/common/util/platform/solaris/atomicops.il * Note: Sparc/gcc is in include/atomicbase.h */#if defined (_SOLARIS) && !defined (__GNUC__)#if defined(__cplusplus)extern "C" {#endif    //UINT32 _HXAtomicIncRetUINT32 (UINT32* pNum);    //UINT32 _HXAtomicDecRetUINT32 (UINT32* pNum);    UINT32 _HXAtomicAddRetUINT32 (UINT32* pNum, UINT32 ulNum);    UINT32 _HXAtomicSubRetUINT32 (UINT32* pNum, UINT32 ulNum);#if defined(__cplusplus)}#endif#define HXAtomicIncUINT32(p)      _HXAtomicAddRetUINT32((p),(UINT32)1)#define HXAtomicDecUINT32(p)      _HXAtomicSubRetUINT32((p),(UINT32)1)#define HXAtomicIncRetUINT32(p)   _HXAtomicAddRetUINT32((p),(UINT32)1)#define HXAtomicDecRetUINT32(p)   _HXAtomicSubRetUINT32((p),(UINT32)1)#define HXAtomicAddUINT32(p,n)    _HXAtomicAddRetUINT32((p),(n))#define HXAtomicSubUINT32(p,n)    _HXAtomicSubRetUINT32((p),(n))#define HXAtomicAddRetUINT32(p,n) _HXAtomicAddRetUINT32((p),(n))#define HXAtomicSubRetUINT32(p,n) _HXAtomicSubRetUINT32((p),(n))inline void HXAtomicIncINT32(INT32* p)              { HXAtomicIncUINT32((UINT32*)p); }inline void HXAtomicDecINT32(INT32* p)              { HXAtomicDecUINT32((UINT32*)p); }inline void HXAtomicAddINT32(INT32* p, INT32 n)     { HXAtomicAddUINT32((UINT32*)p, (UINT32)n); }inline void HXAtomicSubINT32(INT32* p, INT32 n)     { HXAtomicSubUINT32((UINT32*)p, (UINT32)n); }inline INT32 HXAtomicIncRetINT32(INT32* p)          { return HXAtomicIncRetUINT32((UINT32*)p); }inline INT32 HXAtomicDecRetINT32(INT32* p)          { return HXAtomicDecRetUINT32((UINT32*)p); }inline INT32 HXAtomicAddRetINT32(INT32* p, INT32 n) { return HXAtomicAddRetUINT32((UINT32*)p, (UINT32)n); }inline INT32 HXAtomicSubRetINT32(INT32* p, INT32 n) { return HXAtomicSubRetUINT32((UINT32*)p, (UINT32)n); }/*********************************************************************** * Sun Solaris / SPARC (gcc) * * Implementation Notes: * The sparc method of pipelining and use of "delay slots" requires * the nop's.  Be extra careful modifying these routines! * * This implementation sacrifices being able to store the value * 0x800000000 in the INT32 value, which is a special "busy" marker value. * Since these are intended for use primarily with AddRef/Release and * resource usage counters, this should be acceptable for now.  If a counter * is incremented to the point it would conflict with the flag, it is * incremented one more to hop over it.  The same in reverse for decrement. * This is far from ideal, however...  See the inline-assembly file * server/common/util/platform/solaris/mutex_setbit.il for *much* * better implementations using newer sparc assembly operators. * * Basic design of the flag-based implementation: *   1. Load a register with 0x80000000 *   2. _atomically_ swap it with the INT32 (critical!) *   3. Compare what we got with 0x80000000 *   4. Branch if equal to #2 *   5. Increment (or decrement) the result *   6. Compare to 0x80000000 *   7. Branch if equal to #5 *   8. Save the new value to the INT32's location in memory *   9. Return new INT32 result if required *    * This implementation primarily exists due to limitations in the ancient * version of gcc we used to use on Solaris (2.7.2.3), and more modern * gcc's can probably handle assembly more like what's used in Sun's * Native compiler version.   * */#elif defined (__sparc__) && defined (__GNUC__)/* Increment by 1 */inline voidHXAtomicIncUINT32(UINT32* pNum){    __asm__ __volatile__(\"1:      swap    [%0], %2;               ! Swap *pNum and %2\n""        nop;                            ! delay slot...\n""        cmp     %2, %1;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""2:      inc     %2;                     ! Increment %2\n""        cmp     %2, %1;                 ! check for overflow\n""        be      2b;                     ! if so, inc again\n""        nop;                            ! but this means a delay, sigh\n""        st      %2, [%0];               ! Save new value into *pNum\n"        : /* no output */        : "r" (pNum), "r" (0x80000000), "r" (0x80000000)        : "cc", "memory"        );}/* Decrement by 1 */inline voidHXAtomicDecUINT32(UINT32* pNum){    __asm__ __volatile__("1:      swap    [%0], %2;               ! Swap *pNum and %2\n""        nop;                            ! delay slot...\n""        cmp     %2, %1;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""2:      dec     %2;                     ! Increment %2\n""        cmp     %2, %1;                 ! check for overflow\n""        be      2b;                     ! if so, dec again\n""        nop;                            ! but this means a delay, sigh\n""        st      %2, [%0];               ! Save new value into *pNum\n"        : /* no output */        : "r" (pNum), "r" (0x80000000), "r" (0x80000000)        : "cc", "memory"        );}/* Increment by 1 and return new value */inline UINT32HXAtomicIncRetUINT32(UINT32* pNum){    volatile UINT32 ulRet;    __asm__ __volatile__("        mov     %2, %0;                 ! Copy %2 to %0 \n""1:      swap    [%1], %0;               ! Swap *pNum and %0\n""        nop;                            ! delay slot...\n""        cmp     %0, %2;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""2:      inc     %0;                     ! Increment %0\n""        cmp     %0, %2;                 ! check for overflow\n""        be      2b;                     ! if so, inc again\n""        nop;                            ! but this means a delay, sigh\n""        st      %0, [%1];               ! Save new value into *pNum\n"        : "=r" (ulRet)        : "r" (pNum), "r" (0x80000000), "0" (ulRet)        : "cc", "memory"        );    return ulRet;}/* Decrement by 1 and return new value */inline UINT32HXAtomicDecRetUINT32(UINT32* pNum){   volatile UINT32 ulRet;    __asm__ __volatile__("        mov     %2, %0;                 ! Copy %2 to %0 \n""1:      swap    [%1], %0;               ! Swap *pNum and %0\n""        nop;                            ! delay slot...\n""        cmp     %0, %2;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""2:      dec     %0;                     ! Decrement %0\n""        cmp     %0, %2;                 ! check for overflow\n""        be      2b;                     ! if so, dec again\n""        nop;                            ! but this means a delay, sigh\n""        st      %0, [%1];               ! Save new value into *pNum\n"        : "=r" (ulRet)        : "r" (pNum), "r" (0x80000000), "0" (ulRet)        : "cc", "memory"        );    return ulRet;}/* Add n */inline voidHXAtomicAddUINT32(UINT32* pNum, UINT32 ulNum){    __asm__ __volatile__("1:      swap    [%0], %2;               ! Swap *pNum and %2\n""        nop;                            ! delay slot...\n""        cmp     %2, %1;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""        add     %2, %3, %2;             ! Add ulNum to %2\n""        cmp     %2, %1;                 ! check for overflow\n""        bne     2f;                     ! if not, skip to the end\n""        nop;                            ! but this means a delay, sigh\n""        inc     %2;                     ! skip marker value\n""2:      st      %2, [%0];               ! Save new value into *pNum\n"        : /* no output */        : "r" (pNum), "r" (0x80000000), "r" (0x80000000), "r" (ulNum)        : "cc", "memory"        );}/* Subtract n */inline voidHXAtomicSubUINT32(UINT32* pNum, UINT32 ulNum){    __asm__ __volatile__("1:      swap    [%0], %2;               ! Swap *pNum and %2\n""        nop;                            ! delay slot...\n""        cmp     %2, %1;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""        sub     %2, %3, %2;             ! Subtract ulNum to %2\n""        cmp     %2, %1;                 ! check for overflow\n""        bne     2f;                     ! if not, skip to the end\n""        nop;                            ! but this means a delay, sigh\n""        inc     %2;                     ! skip marker value\n""2:      st      %2, [%0];               ! Save new value into *pNum\n"        : /* no output */        : "r" (pNum), "r" (0x80000000), "r" (0x80000000), "r" (ulNum)        : "cc", "memory"        );}/* Add n and return new value */inline UINT32HXAtomicAddRetUINT32(UINT32* pNum, UINT32 ulNum){    volatile UINT32 ulRet; \    __asm__ __volatile__("        mov     %2, %0                  ! Copy %2 to %0 \n""1:      swap    [%1], %0;               ! Swap *pNum and %0\n""        nop;                            ! delay slot...\n""        cmp     %0, %2;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""        add     %0, %3, %0;             ! Add ulNum to %0\n""        cmp     %0, %2;                 ! check for overflow\n""        bne     2f;                     ! if not, skip to the end\n""        nop;                            ! but this means a delay, sigh\n""        inc     %0;                     ! skip marker value\n""2:      st      %0, [%1];               ! Save new value into *pNum\n"        : "=r" (ulRet)        : "r" (pNum), "r" (0x80000000), "r" (ulNum), "0" (ulRet)        : "cc", "memory"        );        return ulRet;}/* Subtract n and return new value */inline UINT32HXAtomicSubRetUINT32(UINT32* pNum, UINT32 ulNum){   volatile UINT32 ulRet;    __asm__ __volatile__("        mov     %2, %0                  ! Copy %2 to %0 \n""1:      swap    [%1], %0;               ! Swap *pNum and %0\n""        nop;                            ! delay slot...\n""        cmp     %0, %2;                 ! Is someone else using pNum?\n""        be      1b;                     ! If so, retry...\n""        nop;                            ! delay slot...yawn\n""        sub     %0, %3, %0;             ! Sub ulNum from %0\n""        cmp     %0, %2;                 ! check for overflow\n""        bne     2f;                     ! if not, skip to the end\n""        nop;                            ! but this means a delay, sigh\n""        dec     %0;                     ! skip marker value\n""2:      st      %0, [%1];               ! Save new value into *pNum\n"        : "=r" (ulRet)        : "r" (pNum), "r" (0x80000000), "r" (ulNum), "0" (ulRet)        : "cc", "memory"        );        return ulRet;}inline void HXAtomicIncINT32(INT32* p)              { HXAtomicIncUINT32((UINT32*)p); }inline void HXAtomicDecINT32(INT32* p)              { HXAtomicDecUINT32((UINT32*)p); }inline void HXAtomicAddINT32(INT32* p, INT32 n)     { HXAtomicAddUINT32((UINT32*)p, (UINT32)n); }inline void HXAtomicSubINT32(INT32* p, INT32 n)     { HXAtomicSubUINT32((UINT32*)p, (UINT32)n); }inline INT32 HXAtomicIncRetINT32(INT32* p)          { return HXAtomicIncRetUINT32((UINT32*)p); }inline INT32 HXAtomicDecRetINT32(INT32* p)          { return HXAtomicDecRetUINT32((UINT32*)p); }inline INT32 HXAtomicAddRetINT32(INT32* p, INT32 n) { return HXAtomicAddRetUINT32((UINT32*)p, (UINT32)n); }inline INT32 HXAtomicSubRetINT32(INT32* p, INT32 n) { return HXAtomicSubRetUINT32((UINT32*)p, (UINT32)n); }/*********************************************************************** * Windows / x86 (Visual C/C++) * * Implementation Notes: *   'xadd' is only available in the 486 series and later, not the 386. *   There is no 'xsub' counterpart, you have to negate the operand *   and use 'xadd'.  Note the use of the 'lock' prefix to ensure *   certain operations occur atomically. */#elif defined (_M_IX86) /* && _M_IX86 > 300 XXX wschildbach: disabled until the build system delivers the correct value *//* Increment by 1 */static __inline voidHXAtomicIncUINT32(UINT32* pNum){        // register usage summary:        //   eax - pointer to the value we're modifying    _asm    {             mov  eax, pNum              ; Load the pointer into a register        lock inc  dword ptr [eax]        ; Atomically increment *pNum    }}/* Decrement by 1 */static __inline voidHXAtomicDecUINT32(UINT32* pNum){        // register usage summary:        //   eax - pointer to the value we're modifying    _asm    {             mov  eax,  pNum             ; Load the pointer into a register        lock dec  dword ptr [eax]        ; Atomically decrement *pNum    }}/* Increment by 1 and return new value */static __inline UINT32HXAtomicIncRetUINT32(UINT32* pNum){    volatile UINT32 ulRet;             // register usage summary:        //   eax - pointer to the value we're modifying        //   ebx - work register    _asm    {             mov  eax, pNum              ; Load the pointer into a register             mov  ebx, 0x1               ; Load increment amount into a register        lock xadd dword ptr [eax], ebx   ; Increment *pNum; ebx gets old value             inc  ebx                    ; Increment old value             mov  ulRet, ebx             ; Set the return value    }    return ulRet;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆视频网站| 亚洲午夜av在线| 国产一区二区三区观看| 精品盗摄一区二区三区| 美女视频网站黄色亚洲| 日韩一级大片在线| 国产综合色精品一区二区三区| 日韩一区二区免费在线观看| 捆绑变态av一区二区三区| 精品国产一区二区三区av性色| 国产曰批免费观看久久久| 国产日产亚洲精品系列| 91亚洲永久精品| 亚洲第一电影网| 日韩精品综合一本久道在线视频| 国产成人av电影在线观看| 中文一区一区三区高中清不卡| 99精品视频在线观看免费| 亚洲国产日韩精品| 久久日一线二线三线suv| 91免费小视频| 喷白浆一区二区| 亚洲视频免费在线| 欧美一区二区福利视频| 国产99久久久国产精品| 亚洲国产综合91精品麻豆| 精品国产凹凸成av人导航| 91黄色免费看| 久99久精品视频免费观看| 亚洲免费电影在线| 日韩美女视频在线| 在线观看精品一区| 国产精品亚洲午夜一区二区三区| 亚洲免费成人av| 久久夜色精品一区| 欧美日韩国产美女| av在线播放一区二区三区| 美国十次综合导航| 一级精品视频在线观看宜春院| 精品入口麻豆88视频| 在线免费观看视频一区| 国产大陆a不卡| 免费的成人av| 亚洲电影中文字幕在线观看| 日本一区二区在线不卡| 正在播放亚洲一区| 在线看不卡av| jiyouzz国产精品久久| 激情深爱一区二区| 日韩中文字幕区一区有砖一区| 亚洲色欲色欲www| 久久精品亚洲麻豆av一区二区| 欧美精品在线观看一区二区| 不卡大黄网站免费看| 国产精品69久久久久水密桃| 日韩电影在线免费看| 亚洲成在人线在线播放| 亚洲人成网站色在线观看| 中文字幕第一区综合| 精品国产一区a| 91精品久久久久久蜜臀| 欧美日韩在线三级| 在线看国产一区| 欧美在线三级电影| 色综合天天综合给合国产| 成人的网站免费观看| 国产激情一区二区三区桃花岛亚洲| 麻豆精品在线观看| 日本视频在线一区| 日产国产欧美视频一区精品| 亚洲午夜在线视频| 亚洲sss视频在线视频| 亚洲高清视频的网址| 一级女性全黄久久生活片免费| 亚洲免费在线播放| 一区二区三区四区乱视频| 亚洲男女一区二区三区| 亚洲欧美日韩国产手机在线| 亚洲国产成人私人影院tom| 国产视频视频一区| 国产午夜精品美女毛片视频| 国产三级精品视频| 国产精品久久久久久久久免费桃花| 久久精品免视看| 国产精品麻豆99久久久久久| 中文字幕在线观看一区| 18成人在线观看| 一区二区三区日韩欧美精品| 亚洲精选视频免费看| 亚洲电影一区二区三区| 日日骚欧美日韩| 毛片av一区二区| 国产一区二区三区免费| 成人免费毛片app| 99视频超级精品| 日本精品免费观看高清观看| 欧美午夜在线一二页| 欧美日韩国产a| 久久综合色天天久久综合图片| 精品久久久久久久久久久院品网| 欧美v日韩v国产v| 国产欧美一区二区精品性色超碰 | 午夜精品久久久| 五月婷婷激情综合| 久久成人久久爱| 国产+成+人+亚洲欧洲自线| 成人综合激情网| 色系网站成人免费| 欧美一级电影网站| 国产三级三级三级精品8ⅰ区| 国产精品国产馆在线真实露脸| 亚洲国产日韩在线一区模特| 国产在线不卡一卡二卡三卡四卡| www.日韩精品| 在线不卡的av| 欧美国产亚洲另类动漫| 亚洲人成在线观看一区二区| 蜜桃一区二区三区四区| 高清av一区二区| 欧美老肥妇做.爰bbww视频| 久久免费精品国产久精品久久久久| 亚洲视频香蕉人妖| 精品在线观看免费| 91亚洲国产成人精品一区二区三| 欧美肥大bbwbbw高潮| 国产精品免费网站在线观看| 五月天欧美精品| 岛国av在线一区| 欧美一区二区在线免费观看| 欧美激情在线观看视频免费| 日韩精品乱码av一区二区| 不卡的电影网站| 精品国产乱码久久久久久久久| 夜夜嗨av一区二区三区中文字幕 | 国产欧美一区二区在线观看| 亚洲国产精品久久一线不卡| 国产91精品一区二区| 日韩午夜激情av| 一区二区三区在线视频观看58| 紧缚奴在线一区二区三区| 欧美影院午夜播放| 亚洲色图在线视频| 成人中文字幕电影| 欧美成人性福生活免费看| 五月天网站亚洲| 日本高清不卡视频| 中文字幕一区三区| 国产成人精品一区二| 精品日韩一区二区三区免费视频| 亚洲成人午夜电影| 色婷婷av一区二区三区软件| 国产精品视频yy9299一区| 美女一区二区视频| 91精品在线一区二区| 午夜精品久久久久久不卡8050| 色综合天天综合网天天看片 | 中文字幕在线免费不卡| 国产成人av电影在线| 久久一二三国产| 国产一区在线不卡| 久久免费午夜影院| 国产在线一区二区综合免费视频| 日韩欧美在线1卡| 日韩精品一二三四| 欧美精品 日韩| 亚洲成人一区二区| 欧美日韩免费一区二区三区| 亚洲综合图片区| 欧洲一区在线观看| 亚洲国产精品精华液网站| 欧美三级欧美一级| 亚洲国产视频网站| 欧美色综合网站| 亚洲va天堂va国产va久| 欧美一区二区三区在线| 日韩成人午夜电影| 欧美一区二区三区不卡| 美国毛片一区二区三区| 欧美sm美女调教| 国产一区二区三区久久久| 精品对白一区国产伦| 国产精品一区久久久久| 国产精品久久久久久一区二区三区| 成人激情视频网站| 一区二区三区不卡视频在线观看| 欧美亚洲综合一区| 日韩综合小视频| 久久综合久久综合久久| 波多野结衣中文字幕一区| 亚洲精品自拍动漫在线| 91精品欧美一区二区三区综合在| 九色综合狠狠综合久久| 日本一区免费视频| 91国产丝袜在线播放| 蜜桃一区二区三区在线观看| 久久精品视频在线看| 色丁香久综合在线久综合在线观看| 午夜影院久久久| 国产女同互慰高潮91漫画| 91官网在线免费观看|