/opt/alt/python33/include/python3.3m
NameSizeModeActions
abstract.h426070644editdlrm
accu.h10160644editdlrm
asdl.h10920644editdlrm
ast.h3440644editdlrm
bitset.h7920644editdlrm
bltinmodule.h2640644editdlrm
boolobject.h8860644editdlrm
bytearrayobject.h20010644editdlrm
bytesobject.h48910644editdlrm
bytes_methods.h20250644editdlrm
cellobject.h7010644editdlrm
ceval.h71940644editdlrm
classobject.h16660644editdlrm
code.h42270644editdlrm
codecs.h64780644editdlrm
compile.h16630644editdlrm
complexobject.h19540644editdlrm
datetime.h85420644editdlrm
descrobject.h29130644editdlrm
dictobject.h49720644editdlrm
dtoa.h4580644editdlrm
dynamic_annotations.h224710644editdlrm
enumobject.h2530644editdlrm
errcode.h14970644editdlrm
eval.h5970644editdlrm
fileobject.h17670644editdlrm
fileutils.h10860644editdlrm
floatobject.h46410644editdlrm
frameobject.h33720644editdlrm
funcobject.h37710644editdlrm
genobject.h10800644editdlrm
graminit.h18730644editdlrm
grammar.h20210644editdlrm
import.h38830644editdlrm
intrcheck.h4600644editdlrm
iterobject.h5670644editdlrm
listobject.h28340644editdlrm
longintrepr.h39970644editdlrm
longobject.h77330644editdlrm
marshal.h7430644editdlrm
memoryobject.h28720644editdlrm
metagrammar.h2530644editdlrm
methodobject.h33070644editdlrm
modsupport.h48670644editdlrm
moduleobject.h15650644editdlrm
namespaceobject.h2970644editdlrm
node.h9960644editdlrm
object.h379780644editdlrm
objimpl.h133890644editdlrm
opcode.h52080644editdlrm
osdefs.h9860644editdlrm
parsetok.h22830644editdlrm
patchlevel.h11280644editdlrm
pgen.h2530644editdlrm
pgenheaders.h11440644editdlrm
pyarena.h27440644editdlrm
pyatomic.h59440644editdlrm
pycapsule.h17260644editdlrm
pyconfig-64.h424310644editdlrm
pyconfig.h1620644editdlrm
pyctype.h13200644editdlrm
pydebug.h9860644editdlrm
pyerrors.h146850644editdlrm
pyexpat.h23400644editdlrm
pyfpe.h84890644editdlrm
pygetopt.h3880644editdlrm
pymacconfig.h29880644editdlrm
pymacro.h26850644editdlrm
pymath.h64120644editdlrm
pymem.h46980644editdlrm
pyport.h310430644editdlrm
pystate.h77570644editdlrm
pystrcmp.h4360644editdlrm
pystrtod.h12760644editdlrm
Python-ast.h193210644editdlrm
Python.h28360644editdlrm
pythonrun.h89970644editdlrm
pythread.h30360644editdlrm
pytime.h27060644editdlrm
py_curses.h41750644editdlrm
rangeobject.h6290644editdlrm
setobject.h32910644editdlrm
sliceobject.h13800644editdlrm
structmember.h20680644editdlrm
structseq.h12170644editdlrm
symtable.h46880644editdlrm
sysmodule.h11110644editdlrm
token.h18820644editdlrm
traceback.h21450644editdlrm
tupleobject.h24440644editdlrm
typeslots.h19970644editdlrm
ucnhash.h10570644editdlrm
unicodeobject.h761940644editdlrm
warnings.h9530644editdlrm
weakrefobject.h28660644editdlrm
Edit: /opt/alt/python33/include/python3.3m/pyatomic.h (5944B)
#ifndef Py_LIMITED_API #ifndef Py_ATOMIC_H #define Py_ATOMIC_H /* XXX: When compilers start offering a stdatomic.h with lock-free atomic_int and atomic_address types, include that here and rewrite the atomic operations in terms of it. */ #include "dynamic_annotations.h" #ifdef __cplusplus extern "C" { #endif /* This is modeled after the atomics interface from C1x, according to * the draft at * http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1425.pdf. * Operations and types are named the same except with a _Py_ prefix * and have the same semantics. * * Beware, the implementations here are deep magic. */ typedef enum _Py_memory_order { _Py_memory_order_relaxed, _Py_memory_order_acquire, _Py_memory_order_release, _Py_memory_order_acq_rel, _Py_memory_order_seq_cst } _Py_memory_order; typedef struct _Py_atomic_address { void *_value; } _Py_atomic_address; typedef struct _Py_atomic_int { int _value; } _Py_atomic_int; /* Only support GCC (for expression statements) and x86 (for simple * atomic semantics) for now */ #if defined(__GNUC__) && (defined(__i386__) || defined(__amd64)) static __inline__ void _Py_atomic_signal_fence(_Py_memory_order order) { if (order != _Py_memory_order_relaxed) __asm__ volatile("":::"memory"); } static __inline__ void _Py_atomic_thread_fence(_Py_memory_order order) { if (order != _Py_memory_order_relaxed) __asm__ volatile("mfence":::"memory"); } /* Tell the race checker about this operation's effects. */ static __inline__ void _Py_ANNOTATE_MEMORY_ORDER(const volatile void *address, _Py_memory_order order) { (void)address; /* shut up -Wunused-parameter */ switch(order) { case _Py_memory_order_release: case _Py_memory_order_acq_rel: case _Py_memory_order_seq_cst: _Py_ANNOTATE_HAPPENS_BEFORE(address); break; case _Py_memory_order_relaxed: case _Py_memory_order_acquire: break; } switch(order) { case _Py_memory_order_acquire: case _Py_memory_order_acq_rel: case _Py_memory_order_seq_cst: _Py_ANNOTATE_HAPPENS_AFTER(address); break; case _Py_memory_order_relaxed: case _Py_memory_order_release: break; } } #define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ __extension__ ({ \ __typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \ __typeof__(atomic_val->_value) new_val = NEW_VAL;\ volatile __typeof__(new_val) *volatile_data = &atomic_val->_value; \ _Py_memory_order order = ORDER; \ _Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \ \ /* Perform the operation. */ \ _Py_ANNOTATE_IGNORE_WRITES_BEGIN(); \ switch(order) { \ case _Py_memory_order_release: \ _Py_atomic_signal_fence(_Py_memory_order_release); \ /* fallthrough */ \ case _Py_memory_order_relaxed: \ *volatile_data = new_val; \ break; \ \ case _Py_memory_order_acquire: \ case _Py_memory_order_acq_rel: \ case _Py_memory_order_seq_cst: \ __asm__ volatile("xchg %0, %1" \ : "+r"(new_val) \ : "m"(atomic_val->_value) \ : "memory"); \ break; \ } \ _Py_ANNOTATE_IGNORE_WRITES_END(); \ }) #define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ __extension__ ({ \ __typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \ __typeof__(atomic_val->_value) result; \ volatile __typeof__(result) *volatile_data = &atomic_val->_value; \ _Py_memory_order order = ORDER; \ _Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \ \ /* Perform the operation. */ \ _Py_ANNOTATE_IGNORE_READS_BEGIN(); \ switch(order) { \ case _Py_memory_order_release: \ case _Py_memory_order_acq_rel: \ case _Py_memory_order_seq_cst: \ /* Loads on x86 are not releases by default, so need a */ \ /* thread fence. */ \ _Py_atomic_thread_fence(_Py_memory_order_release); \ break; \ default: \ /* No fence */ \ break; \ } \ result = *volatile_data; \ switch(order) { \ case _Py_memory_order_acquire: \ case _Py_memory_order_acq_rel: \ case _Py_memory_order_seq_cst: \ /* Loads on x86 are automatically acquire operations so */ \ /* can get by with just a compiler fence. */ \ _Py_atomic_signal_fence(_Py_memory_order_acquire); \ break; \ default: \ /* No fence */ \ break; \ } \ _Py_ANNOTATE_IGNORE_READS_END(); \ result; \ }) #else /* !gcc x86 */ /* Fall back to other compilers and processors by assuming that simple volatile accesses are atomic. This is false, so people should port this. */ #define _Py_atomic_signal_fence(/*memory_order*/ ORDER) ((void)0) #define _Py_atomic_thread_fence(/*memory_order*/ ORDER) ((void)0) #define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ ((ATOMIC_VAL)->_value = NEW_VAL) #define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ ((ATOMIC_VAL)->_value) #endif /* !gcc x86 */ /* Standardized shortcuts. */ #define _Py_atomic_store(ATOMIC_VAL, NEW_VAL) \ _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_seq_cst) #define _Py_atomic_load(ATOMIC_VAL) \ _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_seq_cst) /* Python-local extensions */ #define _Py_atomic_store_relaxed(ATOMIC_VAL, NEW_VAL) \ _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_relaxed) #define _Py_atomic_load_relaxed(ATOMIC_VAL) \ _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_relaxed) #ifdef __cplusplus } #endif #endif /* Py_ATOMIC_H */ #endif /* Py_LIMITED_API */