/
usr
/
include
/
python3.6m
/
/usr/include/python3.6m
mkdir
upload
Name
Size
Mode
Actions
abstract.h
47451
0644
edit
dl
rm
accu.h
1016
0644
edit
dl
rm
asdl.h
1213
0644
edit
dl
rm
ast.h
477
0644
edit
dl
rm
bitset.h
792
0644
edit
dl
rm
bltinmodule.h
264
0644
edit
dl
rm
boolobject.h
886
0644
edit
dl
rm
bytearrayobject.h
2114
0644
edit
dl
rm
bytesobject.h
8363
0644
edit
dl
rm
bytes_methods.h
3191
0644
edit
dl
rm
cellobject.h
701
0644
edit
dl
rm
ceval.h
8524
0644
edit
dl
rm
classobject.h
1666
0644
edit
dl
rm
code.h
5945
0644
edit
dl
rm
codecs.h
6793
0644
edit
dl
rm
compile.h
2164
0644
edit
dl
rm
complexobject.h
1807
0644
edit
dl
rm
datetime.h
9414
0644
edit
dl
rm
descrobject.h
2964
0644
edit
dl
rm
dictobject.h
7178
0644
edit
dl
rm
dtoa.h
458
0644
edit
dl
rm
dynamic_annotations.h
22469
0644
edit
dl
rm
enumobject.h
253
0644
edit
dl
rm
errcode.h
1497
0644
edit
dl
rm
eval.h
597
0644
edit
dl
rm
fileobject.h
1651
0644
edit
dl
rm
fileutils.h
3524
0644
edit
dl
rm
floatobject.h
4794
0644
edit
dl
rm
frameobject.h
3530
0644
edit
dl
rm
funcobject.h
4079
0644
edit
dl
rm
genobject.h
3583
0644
edit
dl
rm
graminit.h
1966
0644
edit
dl
rm
grammar.h
2074
0644
edit
dl
rm
import.h
4233
0644
edit
dl
rm
intrcheck.h
513
0644
edit
dl
rm
iterobject.h
567
0644
edit
dl
rm
listobject.h
2900
0644
edit
dl
rm
longintrepr.h
3761
0644
edit
dl
rm
longobject.h
9830
0644
edit
dl
rm
marshal.h
803
0644
edit
dl
rm
memoryobject.h
2765
0644
edit
dl
rm
metagrammar.h
253
0644
edit
dl
rm
methodobject.h
3847
0644
edit
dl
rm
modsupport.h
7317
0644
edit
dl
rm
moduleobject.h
2285
0644
edit
dl
rm
namespaceobject.h
349
0644
edit
dl
rm
node.h
1007
0644
edit
dl
rm
object.h
42203
0644
edit
dl
rm
objimpl.h
14244
0644
edit
dl
rm
odictobject.h
1288
0644
edit
dl
rm
opcode.h
5073
0644
edit
dl
rm
osdefs.h
691
0644
edit
dl
rm
osmodule.h
291
0644
edit
dl
rm
parsetok.h
2885
0644
edit
dl
rm
patchlevel.h
1128
0644
edit
dl
rm
pgen.h
253
0644
edit
dl
rm
pgenheaders.h
1180
0644
edit
dl
rm
pyarena.h
2744
0644
edit
dl
rm
pyatomic.h
8128
0644
edit
dl
rm
pycapsule.h
1726
0644
edit
dl
rm
pyconfig-64.h
44622
0644
edit
dl
rm
pyconfig.h
162
0644
edit
dl
rm
pyctype.h
1320
0644
edit
dl
rm
pydebug.h
1264
0644
edit
dl
rm
pydtrace.h
1970
0644
edit
dl
rm
pyerrors.h
17219
0644
edit
dl
rm
pyexpat.h
2450
0644
edit
dl
rm
pyfpe.h
8471
0644
edit
dl
rm
pygetopt.h
410
0644
edit
dl
rm
pyhash.h
4139
0644
edit
dl
rm
pylifecycle.h
4078
0644
edit
dl
rm
pymacconfig.h
2989
0644
edit
dl
rm
pymacro.h
3500
0644
edit
dl
rm
pymath.h
8312
0644
edit
dl
rm
pymem.h
8557
0644
edit
dl
rm
pyport.h
27573
0644
edit
dl
rm
pystate.h
11146
0644
edit
dl
rm
pystrcmp.h
436
0644
edit
dl
rm
pystrhex.h
495
0644
edit
dl
rm
pystrtod.h
1483
0644
edit
dl
rm
Python-ast.h
22274
0644
edit
dl
rm
Python.h
3221
0644
edit
dl
rm
pythonrun.h
6782
0644
edit
dl
rm
pythread.h
2992
0644
edit
dl
rm
pytime.h
7609
0644
edit
dl
rm
py_curses.h
4307
0644
edit
dl
rm
rangeobject.h
629
0644
edit
dl
rm
setobject.h
3333
0644
edit
dl
rm
sliceobject.h
2485
0644
edit
dl
rm
structmember.h
2018
0644
edit
dl
rm
structseq.h
1353
0644
edit
dl
rm
symtable.h
4994
0644
edit
dl
rm
sysmodule.h
1355
0644
edit
dl
rm
token.h
1943
0644
edit
dl
rm
traceback.h
3644
0644
edit
dl
rm
tupleobject.h
2444
0644
edit
dl
rm
typeslots.h
2253
0644
edit
dl
rm
ucnhash.h
1056
0644
edit
dl
rm
unicodeobject.h
81779
0644
edit
dl
rm
warnings.h
1693
0644
edit
dl
rm
weakrefobject.h
2866
0644
edit
dl
rm
_hashopenssl.h
1365
0644
edit
dl
rm
Edit:
/usr/include/python3.6m/pyatomic.h
(8128B)
#ifndef Py_ATOMIC_H #define Py_ATOMIC_H #ifdef Py_BUILD_CORE #include "dynamic_annotations.h" #include "pyconfig.h" #if defined(HAVE_STD_ATOMIC) #include <stdatomic.h> #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. */ #if defined(HAVE_STD_ATOMIC) typedef enum _Py_memory_order { _Py_memory_order_relaxed = memory_order_relaxed, _Py_memory_order_acquire = memory_order_acquire, _Py_memory_order_release = memory_order_release, _Py_memory_order_acq_rel = memory_order_acq_rel, _Py_memory_order_seq_cst = memory_order_seq_cst } _Py_memory_order; typedef struct _Py_atomic_address { atomic_uintptr_t _value; } _Py_atomic_address; typedef struct _Py_atomic_int { atomic_int _value; } _Py_atomic_int; #define _Py_atomic_signal_fence(/*memory_order*/ ORDER) \ atomic_signal_fence(ORDER) #define _Py_atomic_thread_fence(/*memory_order*/ ORDER) \ atomic_thread_fence(ORDER) #define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ atomic_store_explicit(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER) #define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ atomic_load_explicit(&(ATOMIC_VAL)->_value, ORDER) /* Use builtin atomic operations in GCC >= 4.7 */ #elif defined(HAVE_BUILTIN_ATOMIC) typedef enum _Py_memory_order { _Py_memory_order_relaxed = __ATOMIC_RELAXED, _Py_memory_order_acquire = __ATOMIC_ACQUIRE, _Py_memory_order_release = __ATOMIC_RELEASE, _Py_memory_order_acq_rel = __ATOMIC_ACQ_REL, _Py_memory_order_seq_cst = __ATOMIC_SEQ_CST } _Py_memory_order; typedef struct _Py_atomic_address { uintptr_t _value; } _Py_atomic_address; typedef struct _Py_atomic_int { int _value; } _Py_atomic_int; #define _Py_atomic_signal_fence(/*memory_order*/ ORDER) \ __atomic_signal_fence(ORDER) #define _Py_atomic_thread_fence(/*memory_order*/ ORDER) \ __atomic_thread_fence(ORDER) #define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \ (assert((ORDER) == __ATOMIC_RELAXED \ || (ORDER) == __ATOMIC_SEQ_CST \ || (ORDER) == __ATOMIC_RELEASE), \ __atomic_store_n(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER)) #define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \ (assert((ORDER) == __ATOMIC_RELAXED \ || (ORDER) == __ATOMIC_SEQ_CST \ || (ORDER) == __ATOMIC_ACQUIRE \ || (ORDER) == __ATOMIC_CONSUME), \ __atomic_load_n(&(ATOMIC_VAL)->_value, ORDER)) #else 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 { uintptr_t _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 */ #endif /* 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) #endif /* Py_BUILD_CORE */ #endif /* Py_ATOMIC_H */
Save
cmd:
run