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

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

?? atomic.h

?? glibc 庫, 不僅可以學習使用庫函數,還可以學習函數的具體實現,是提高功力的好資料
?? H
字號:
/* Atomic operations.  sparc32 version.   Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.   This file is part of the GNU C Library.   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  */#ifndef _BITS_ATOMIC_H#define _BITS_ATOMIC_H	1#include <stdint.h>typedef int8_t atomic8_t;typedef uint8_t uatomic8_t;typedef int_fast8_t atomic_fast8_t;typedef uint_fast8_t uatomic_fast8_t;typedef int16_t atomic16_t;typedef uint16_t uatomic16_t;typedef int_fast16_t atomic_fast16_t;typedef uint_fast16_t uatomic_fast16_t;typedef int32_t atomic32_t;typedef uint32_t uatomic32_t;typedef int_fast32_t atomic_fast32_t;typedef uint_fast32_t uatomic_fast32_t;typedef int64_t atomic64_t;typedef uint64_t uatomic64_t;typedef int_fast64_t atomic_fast64_t;typedef uint_fast64_t uatomic_fast64_t;typedef intptr_t atomicptr_t;typedef uintptr_t uatomicptr_t;typedef intmax_t atomic_max_t;typedef uintmax_t uatomic_max_t;/* We have no compare and swap, just test and set.   The following implementation contends on 64 global locks   per library and assumes no variable will be accessed using atomic.h   macros from two different libraries.  */__make_section_unallocated  (".gnu.linkonce.b.__sparc32_atomic_locks, \"aw\", %nobits");volatile unsigned char __sparc32_atomic_locks[64]  __attribute__ ((nocommon, section (".gnu.linkonce.b.__sparc32_atomic_locks"				     __sec_comment),		  visibility ("hidden")));#define __sparc32_atomic_do_lock(addr) \  do								      \    {								      \      unsigned int __old_lock;					      \      unsigned int __idx = (((long) addr >> 2) ^ ((long) addr >> 12)) \			   & 63;				      \      do							      \	__asm __volatile ("ldstub %1, %0"			      \			  : "=r" (__old_lock),			      \			    "=m" (__sparc32_atomic_locks[__idx])      \			  : "m" (__sparc32_atomic_locks[__idx])	      \			  : "memory");				      \      while (__old_lock);					      \    }								      \  while (0)#define __sparc32_atomic_do_unlock(addr) \  do								      \    {								      \      __sparc32_atomic_locks[(((long) addr >> 2)		      \			      ^ ((long) addr >> 12)) & 63] = 0;	      \      __asm __volatile ("" ::: "memory");			      \    }								      \  while (0)#define __sparc32_atomic_do_lock24(addr) \  do								      \    {								      \      unsigned int __old_lock;					      \      do							      \	__asm __volatile ("ldstub %1, %0"			      \			  : "=r" (__old_lock), "=m" (*(addr))	      \			  : "m" (*(addr))			      \			  : "memory");				      \      while (__old_lock);					      \    }								      \  while (0)#define __sparc32_atomic_do_unlock24(addr) \  do								      \    {								      \      *(char *) (addr) = 0;					      \      __asm __volatile ("" ::: "memory");			      \    }								      \  while (0)#ifndef SHARED# define __v9_compare_and_exchange_val_32_acq(mem, newval, oldval) \({									      \  register __typeof (*(mem)) __acev_tmp __asm ("%g6");			      \  register __typeof (mem) __acev_mem __asm ("%g1") = (mem);		      \  register __typeof (*(mem)) __acev_oldval __asm ("%g5");		      \  __acev_tmp = (newval);						      \  __acev_oldval = (oldval);						      \  /* .word 0xcde05005 is cas [%g1], %g5, %g6.  Can't use cas here though,     \     because as will then mark the object file as V8+ arch.  */		      \  __asm __volatile (".word 0xcde05005"					      \		    : "+r" (__acev_tmp), "=m" (*__acev_mem)		      \		    : "r" (__acev_oldval), "m" (*__acev_mem),		      \		      "r" (__acev_mem) : "memory");			      \  __acev_tmp; })#endif/* The only basic operation needed is compare and exchange.  */#define __v7_compare_and_exchange_val_acq(mem, newval, oldval) \  ({ __typeof (mem) __acev_memp = (mem);			      \     __typeof (*mem) __acev_ret;				      \     __typeof (*mem) __acev_newval = (newval);			      \								      \     __sparc32_atomic_do_lock (__acev_memp);			      \     __acev_ret = *__acev_memp;					      \     if (__acev_ret == (oldval))				      \       *__acev_memp = __acev_newval;				      \     __sparc32_atomic_do_unlock (__acev_memp);			      \     __acev_ret; })#define __v7_compare_and_exchange_bool_acq(mem, newval, oldval) \  ({ __typeof (mem) __aceb_memp = (mem);			      \     int __aceb_ret;						      \     __typeof (*mem) __aceb_newval = (newval);			      \								      \     __sparc32_atomic_do_lock (__aceb_memp);			      \     __aceb_ret = 0;						      \     if (*__aceb_memp == (oldval))				      \       *__aceb_memp = __aceb_newval;				      \     else							      \       __aceb_ret = 1;						      \     __sparc32_atomic_do_unlock (__aceb_memp);			      \     __aceb_ret; })#define __v7_exchange_acq(mem, newval) \  ({ __typeof (mem) __acev_memp = (mem);			      \     __typeof (*mem) __acev_ret;				      \     __typeof (*mem) __acev_newval = (newval);			      \								      \     __sparc32_atomic_do_lock (__acev_memp);			      \     __acev_ret = *__acev_memp;					      \     *__acev_memp = __acev_newval;				      \     __sparc32_atomic_do_unlock (__acev_memp);			      \     __acev_ret; })#define __v7_exchange_and_add(mem, value) \  ({ __typeof (mem) __acev_memp = (mem);			      \     __typeof (*mem) __acev_ret;				      \								      \     __sparc32_atomic_do_lock (__acev_memp);			      \     __acev_ret = *__acev_memp;					      \     *__acev_memp = __acev_ret + (value);			      \     __sparc32_atomic_do_unlock (__acev_memp);			      \     __acev_ret; })/* Special versions, which guarantee that top 8 bits of all values   are cleared and use those bits as the ldstub lock.  */#define __v7_compare_and_exchange_val_24_acq(mem, newval, oldval) \  ({ __typeof (mem) __acev_memp = (mem);			      \     __typeof (*mem) __acev_ret;				      \     __typeof (*mem) __acev_newval = (newval);			      \								      \     __sparc32_atomic_do_lock24 (__acev_memp);			      \     __acev_ret = *__acev_memp & 0xffffff;			      \     if (__acev_ret == (oldval))				      \       *__acev_memp = __acev_newval;				      \     else							      \       __sparc32_atomic_do_unlock24 (__acev_memp);		      \     __asm __volatile ("" ::: "memory");			      \     __acev_ret; })#define __v7_exchange_24_rel(mem, newval) \  ({ __typeof (mem) __acev_memp = (mem);			      \     __typeof (*mem) __acev_ret;				      \     __typeof (*mem) __acev_newval = (newval);			      \								      \     __sparc32_atomic_do_lock24 (__acev_memp);			      \     __acev_ret = *__acev_memp & 0xffffff;			      \     *__acev_memp = __acev_newval;				      \     __asm __volatile ("" ::: "memory");			      \     __acev_ret; })#ifdef SHARED/* When dynamically linked, we assume pre-v9 libraries are only ever   used on pre-v9 CPU.  */# define __atomic_is_v9 0# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \  __v7_compare_and_exchange_val_acq (mem, newval, oldval)# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \  __v7_compare_and_exchange_bool_acq (mem, newval, oldval)# define atomic_exchange_acq(mem, newval) \  __v7_exchange_acq (mem, newval)# define atomic_exchange_and_add(mem, value) \  __v7_exchange_and_add (mem, value)# define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval) \  ({								      \     if (sizeof (*mem) != 4)					      \       abort ();						      \     __v7_compare_and_exchange_val_24_acq (mem, newval, oldval); })# define atomic_exchange_24_rel(mem, newval) \  ({								      \     if (sizeof (*mem) != 4)					      \       abort ();						      \     __v7_exchange_24_rel (mem, newval); })#else/* In libc.a/libpthread.a etc. we don't know if we'll be run on   pre-v9 or v9 CPU.  To be interoperable with dynamically linked   apps on v9 CPUs e.g. with process shared primitives, use cas insn   on v9 CPUs and ldstub on pre-v9.  *//* Avoid <ldsodefs.h> include here.  */extern uint64_t _dl_hwcap __attribute__((weak));# define __ATOMIC_HWCAP_SPARC_V9	16# define __atomic_is_v9 \  (__builtin_expect (&_dl_hwcap != 0, 1) \   && __builtin_expect (_dl_hwcap & __ATOMIC_HWCAP_SPARC_V9, \			__ATOMIC_HWCAP_SPARC_V9))# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \  ({								      \     __typeof (*mem) __acev_wret;				      \     if (sizeof (*mem) != 4)					      \       abort ();						      \     if (__atomic_is_v9)					      \       __acev_wret						      \	 = __v9_compare_and_exchange_val_32_acq (mem, newval, oldval);\     else							      \       __acev_wret						      \	 = __v7_compare_and_exchange_val_acq (mem, newval, oldval);   \     __acev_wret; })# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \  ({								      \     int __acev_wret;						      \     if (sizeof (*mem) != 4)					      \       abort ();						      \     if (__atomic_is_v9)					      \       {							      \	 __typeof (oldval) __acev_woldval = (oldval);		      \	 __acev_wret						      \	   = __v9_compare_and_exchange_val_32_acq (mem, newval,	      \						   __acev_woldval)    \	     != __acev_woldval;					      \       }							      \     else							      \       __acev_wret						      \	 = __v7_compare_and_exchange_bool_acq (mem, newval, oldval);  \     __acev_wret; })# define atomic_exchange_rel(mem, newval) \  ({								      \     __typeof (*mem) __acev_wret;				      \     if (sizeof (*mem) != 4)					      \       abort ();						      \     if (__atomic_is_v9)					      \       {							      \	 __typeof (mem) __acev_wmemp = (mem);			      \	 __typeof (*(mem)) __acev_wval = (newval);		      \	 do							      \	   __acev_wret = *__acev_wmemp;				      \	 while (__builtin_expect				      \		  (__v9_compare_and_exchange_val_32_acq (__acev_wmemp,\							 __acev_wval, \							 __acev_wret) \		   != __acev_wret, 0));				      \       }							      \     else							      \       __acev_wret = __v7_exchange_acq (mem, newval);		      \     __acev_wret; })# define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval) \  ({								      \     __typeof (*mem) __acev_wret;				      \     if (sizeof (*mem) != 4)					      \       abort ();						      \     if (__atomic_is_v9)					      \       __acev_wret						      \	 = __v9_compare_and_exchange_val_32_acq (mem, newval, oldval);\     else							      \       __acev_wret						      \	 = __v7_compare_and_exchange_val_24_acq (mem, newval, oldval);\     __acev_wret; })# define atomic_exchange_24_rel(mem, newval) \  ({								      \     __typeof (*mem) __acev_w24ret;				      \     if (sizeof (*mem) != 4)					      \       abort ();						      \     if (__atomic_is_v9)					      \       __acev_w24ret = atomic_exchange_rel (mem, newval);	      \     else							      \       __acev_w24ret = __v7_exchange_24_rel (mem, newval);	      \     __acev_w24ret; })#endif#endif	/* bits/atomic.h */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜在线观看| 一区二区三区精品在线| 国产高清不卡二三区| 综合自拍亚洲综合图不卡区| 91精品国产欧美一区二区成人| 国产麻豆视频精品| 亚洲大片免费看| 中文字幕欧美区| 欧美一激情一区二区三区| 色哟哟国产精品免费观看| 激情图片小说一区| 婷婷激情综合网| 亚洲精品欧美在线| 国产精品理伦片| 久久久久久久综合| 日韩欧美一级在线播放| 精品视频色一区| 91在线视频观看| 福利一区二区在线观看| 激情久久久久久久久久久久久久久久| 亚洲国产欧美日韩另类综合| 国产日本欧美一区二区| 精品理论电影在线观看| 日韩三级免费观看| 欧美日高清视频| 欧美伊人久久久久久久久影院| 91丨porny丨蝌蚪视频| 成人免费视频国产在线观看| 久久国产精品99久久久久久老狼| 日本aⅴ亚洲精品中文乱码| 亚洲宅男天堂在线观看无病毒| 国产精品欧美久久久久一区二区| 18成人在线观看| 国产亚洲福利社区一区| 久久这里只有精品6| 日韩免费视频线观看| 欧美一区二区三区视频在线| 欧美日韩的一区二区| 欧美日韩一卡二卡| 欧美亚洲丝袜传媒另类| 欧美中文字幕亚洲一区二区va在线| 91蜜桃免费观看视频| 粗大黑人巨茎大战欧美成人| 成人精品鲁一区一区二区| 国产激情视频一区二区三区欧美| 国产乱国产乱300精品| 国产乱码精品一区二区三| 国产精品一区三区| 国产成人h网站| 成人国产精品免费| 91麻豆免费看| 欧美三区在线观看| 欧美一区二区三区成人| 欧美成人性战久久| 亚洲精品在线免费观看视频| 久久精品亚洲精品国产欧美kt∨ | 不卡av在线网| 成人三级在线视频| 一本到不卡免费一区二区| 色综合一区二区| 欧美区视频在线观看| 日韩片之四级片| 久久综合999| 中文字幕视频一区| 五月天中文字幕一区二区| 奇米色一区二区三区四区| 韩国欧美一区二区| av高清久久久| 欧美日本国产一区| 国产亚洲一区字幕| 亚洲男人的天堂av| 日本中文字幕一区二区视频| 国产成人综合网| 91黄视频在线观看| 日韩免费在线观看| 亚洲欧洲日产国码二区| 午夜激情综合网| 国产精品一区二区久久不卡| 色婷婷国产精品综合在线观看| 日韩一区二区精品在线观看| 中文字幕一区二区三区精华液| 亚洲一区二区三区四区在线观看| 亚洲欧洲综合另类| 日韩精彩视频在线观看| 日韩电影在线一区二区三区| 欧美日韩极品在线观看一区| 久久精子c满五个校花| 中文在线一区二区| 亚洲一区精品在线| 亚洲黄色录像片| 亚洲成av人综合在线观看| 国产米奇在线777精品观看| 色综合久久久久网| 国产亚洲午夜高清国产拍精品| 一区二区在线观看免费| 国产一区二区三区综合| 欧美日韩午夜在线| 国产精品视频观看| 久久国产精品免费| 欧美性感一类影片在线播放| 久久久久久久久一| 日本亚洲欧美天堂免费| 97成人超碰视| 久久久久久9999| 奇米影视一区二区三区小说| 一本久久精品一区二区| 国产日韩欧美激情| 日本视频一区二区三区| 色狠狠综合天天综合综合| wwwwxxxxx欧美| 日韩专区欧美专区| 99久久精品免费| 中文成人综合网| 久草在线在线精品观看| 欧美日韩国产片| 怡红院av一区二区三区| 成熟亚洲日本毛茸茸凸凹| 久久午夜羞羞影院免费观看| 欧美a一区二区| 欧美片在线播放| 亚洲香肠在线观看| 色中色一区二区| 国产精品久久久久久一区二区三区| 国产主播一区二区| 日韩一区二区电影| 日精品一区二区| 欧美精品久久99| 午夜激情一区二区| 欧美三级欧美一级| 亚洲福利视频导航| 欧美色图第一页| 无码av中文一区二区三区桃花岛| 在线观看日韩av先锋影音电影院| 亚洲欧美日韩在线不卡| 91久久一区二区| 亚洲精品午夜久久久| 色婷婷精品久久二区二区蜜臂av | 91精品国产欧美一区二区成人| 亚洲一区视频在线观看视频| 91碰在线视频| 亚洲乱码国产乱码精品精的特点| 色婷婷综合激情| 怡红院av一区二区三区| 欧美三级一区二区| 日日夜夜一区二区| 精品91自产拍在线观看一区| 精彩视频一区二区| 国产精品免费av| 91在线观看美女| 亚洲国产中文字幕| 91精品国产高清一区二区三区| 石原莉奈一区二区三区在线观看| 欧美一区二区日韩一区二区| 激情综合色综合久久| 久久久亚洲精华液精华液精华液| 粉嫩高潮美女一区二区三区| 国产精品你懂的在线欣赏| 在线亚洲免费视频| 免费成人美女在线观看| 国产亚洲成aⅴ人片在线观看| 成人免费不卡视频| 亚洲精品国产精华液| 欧美丰满嫩嫩电影| 国产中文一区二区三区| ...av二区三区久久精品| 欧美三级日本三级少妇99| 精品一区二区成人精品| 中文字幕高清不卡| 欧美日韩国产小视频在线观看| 亚洲国产岛国毛片在线| 欧美亚洲日本一区| 亚洲一卡二卡三卡四卡五卡| 精品美女被调教视频大全网站| 9久草视频在线视频精品| 亚洲成av人片在线| 国精产品一区一区三区mba桃花| 色偷偷一区二区三区| 久久超级碰视频| 国产午夜亚洲精品羞羞网站| 91蝌蚪porny| 另类小说欧美激情| 国产精品免费视频一区| 欧美三级三级三级爽爽爽| 国产a精品视频| 亚洲va欧美va人人爽| 国产婷婷色一区二区三区| 欧美三区在线观看| 成人亚洲精品久久久久软件| 午夜激情久久久| 国产目拍亚洲精品99久久精品| 欧美日韩情趣电影| 成人网页在线观看| 日av在线不卡| 一区二区三区国产精华| 国产亚洲短视频| 91精品免费在线观看| 色综合久久久久| 国产精品主播直播| 午夜在线电影亚洲一区| 亚洲欧洲日产国码二区|