Загрузить файлы в «venv/Lib/site-packages/greenlet/platform»
This commit is contained in:
BIN
venv/Lib/site-packages/greenlet/platform/__init__.py
Normal file
BIN
venv/Lib/site-packages/greenlet/platform/__init__.py
Normal file
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" amd64
|
||||||
|
ml64 /nologo /c /Fo switch_x64_masm.obj switch_x64_masm.asm
|
||||||
124
venv/Lib/site-packages/greenlet/platform/switch_aarch64_gcc.h
Normal file
124
venv/Lib/site-packages/greenlet/platform/switch_aarch64_gcc.h
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* this is the internal transfer function.
|
||||||
|
*
|
||||||
|
* HISTORY
|
||||||
|
* 07-Sep-16 Add clang support using x register naming. Fredrik Fornwall
|
||||||
|
* 13-Apr-13 Add support for strange GCC caller-save decisions
|
||||||
|
* 08-Apr-13 File creation. Michael Matz
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
*
|
||||||
|
* Simply save all callee saved registers
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define STACK_REFPLUS 1
|
||||||
|
|
||||||
|
#ifdef SLP_EVAL
|
||||||
|
#define STACK_MAGIC 0
|
||||||
|
#define REGS_TO_SAVE "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", \
|
||||||
|
"x27", "x28", "x30" /* aka lr */, \
|
||||||
|
"v8", "v9", "v10", "v11", \
|
||||||
|
"v12", "v13", "v14", "v15"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Recall:
|
||||||
|
asm asm-qualifiers ( AssemblerTemplate
|
||||||
|
: OutputOperands
|
||||||
|
[ : InputOperands
|
||||||
|
[ : Clobbers ] ])
|
||||||
|
|
||||||
|
or (if asm-qualifiers contains 'goto')
|
||||||
|
|
||||||
|
asm asm-qualifiers ( AssemblerTemplate
|
||||||
|
: OutputOperands
|
||||||
|
: InputOperands
|
||||||
|
: Clobbers
|
||||||
|
: GotoLabels)
|
||||||
|
|
||||||
|
and OutputOperands are
|
||||||
|
|
||||||
|
[ [asmSymbolicName] ] constraint (cvariablename)
|
||||||
|
|
||||||
|
When a name is given, refer to it as ``%[the name]``.
|
||||||
|
When not given, ``%i`` where ``i`` is the zero-based index.
|
||||||
|
|
||||||
|
constraints starting with ``=`` means only writing; ``+`` means
|
||||||
|
reading and writing.
|
||||||
|
|
||||||
|
This is followed by ``r`` (must be register) or ``m`` (must be memory)
|
||||||
|
and these can be combined.
|
||||||
|
|
||||||
|
The ``cvariablename`` is actually an lvalue expression.
|
||||||
|
|
||||||
|
In AArch65, 31 general purpose registers. If named X0... they are
|
||||||
|
64-bit. If named W0... they are the bottom 32 bits of the
|
||||||
|
corresponding 64 bit register.
|
||||||
|
|
||||||
|
XZR and WZR are hardcoded to 0, and ignore writes.
|
||||||
|
|
||||||
|
Arguments are in X0..X7. C++ uses X0 for ``this``. X0 holds simple return
|
||||||
|
values (?)
|
||||||
|
|
||||||
|
Whenever a W register is written, the top half of the X register is zeroed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
slp_switch(void)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
void *fp;
|
||||||
|
/* Windowz uses a 32-bit long on a 64-bit platform, unlike the rest of
|
||||||
|
the world, and in theory we can be compiled with GCC/llvm on 64-bit
|
||||||
|
windows. So we need a fixed-width type.
|
||||||
|
*/
|
||||||
|
int64_t *stackref, stsizediff;
|
||||||
|
__asm__ volatile ("" : : : REGS_TO_SAVE);
|
||||||
|
__asm__ volatile ("str x29, %0" : "=m"(fp) : : );
|
||||||
|
__asm__ ("mov %0, sp" : "=r" (stackref));
|
||||||
|
{
|
||||||
|
SLP_SAVE_STATE(stackref, stsizediff);
|
||||||
|
__asm__ volatile (
|
||||||
|
"add sp,sp,%0\n"
|
||||||
|
"add x29,x29,%0\n"
|
||||||
|
:
|
||||||
|
: "r" (stsizediff)
|
||||||
|
);
|
||||||
|
SLP_RESTORE_STATE();
|
||||||
|
/* SLP_SAVE_STATE macro contains some return statements
|
||||||
|
(of -1 and 1). It falls through only when
|
||||||
|
the return value of slp_save_state() is zero, which
|
||||||
|
is placed in x0.
|
||||||
|
In that case we (slp_switch) also want to return zero
|
||||||
|
(also in x0 of course).
|
||||||
|
Now, some GCC versions (seen with 4.8) think it's a
|
||||||
|
good idea to save/restore x0 around the call to
|
||||||
|
slp_restore_state(), instead of simply zeroing it
|
||||||
|
at the return below. But slp_restore_state
|
||||||
|
writes random values to the stack slot used for this
|
||||||
|
save/restore (from when it once was saved above in
|
||||||
|
SLP_SAVE_STATE, when it was still uninitialized), so
|
||||||
|
"restoring" that precious zero actually makes us
|
||||||
|
return random values. There are some ways to make
|
||||||
|
GCC not use that zero value in the normal return path
|
||||||
|
(e.g. making err volatile, but that costs a little
|
||||||
|
stack space), and the simplest is to call a function
|
||||||
|
that returns an unknown value (which happens to be zero),
|
||||||
|
so the saved/restored value is unused.
|
||||||
|
|
||||||
|
Thus, this line stores a 0 into the ``err`` variable
|
||||||
|
(which must be held in a register for this instruction,
|
||||||
|
of course). The ``w`` qualifier causes the instruction
|
||||||
|
to use W0 instead of X0, otherwise we get a warning
|
||||||
|
about a value size mismatch (because err is an int,
|
||||||
|
and aarch64 platforms are LP64: 32-bit int, 64 bit long
|
||||||
|
and pointer).
|
||||||
|
*/
|
||||||
|
__asm__ volatile ("mov %w0, #0" : "=r" (err));
|
||||||
|
}
|
||||||
|
__asm__ volatile ("ldr x29, %0" : : "m" (fp) :);
|
||||||
|
__asm__ volatile ("" : : : REGS_TO_SAVE);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
30
venv/Lib/site-packages/greenlet/platform/switch_alpha_unix.h
Normal file
30
venv/Lib/site-packages/greenlet/platform/switch_alpha_unix.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#define STACK_REFPLUS 1
|
||||||
|
|
||||||
|
#ifdef SLP_EVAL
|
||||||
|
#define STACK_MAGIC 0
|
||||||
|
|
||||||
|
#define REGS_TO_SAVE "$9", "$10", "$11", "$12", "$13", "$14", "$15", \
|
||||||
|
"$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", "$f9"
|
||||||
|
|
||||||
|
static int
|
||||||
|
slp_switch(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
long *stackref, stsizediff;
|
||||||
|
__asm__ volatile ("" : : : REGS_TO_SAVE);
|
||||||
|
__asm__ volatile ("mov $30, %0" : "=r" (stackref) : );
|
||||||
|
{
|
||||||
|
SLP_SAVE_STATE(stackref, stsizediff);
|
||||||
|
__asm__ volatile (
|
||||||
|
"addq $30, %0, $30\n\t"
|
||||||
|
: /* no outputs */
|
||||||
|
: "r" (stsizediff)
|
||||||
|
);
|
||||||
|
SLP_RESTORE_STATE();
|
||||||
|
}
|
||||||
|
__asm__ volatile ("" : : : REGS_TO_SAVE);
|
||||||
|
__asm__ volatile ("mov $31, %0" : "=r" (ret) : );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
87
venv/Lib/site-packages/greenlet/platform/switch_amd64_unix.h
Normal file
87
venv/Lib/site-packages/greenlet/platform/switch_amd64_unix.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* this is the internal transfer function.
|
||||||
|
*
|
||||||
|
* HISTORY
|
||||||
|
* 3-May-13 Ralf Schmitt <ralf@systemexit.de>
|
||||||
|
* Add support for strange GCC caller-save decisions
|
||||||
|
* (ported from switch_aarch64_gcc.h)
|
||||||
|
* 18-Aug-11 Alexey Borzenkov <snaury@gmail.com>
|
||||||
|
* Correctly save rbp, csr and cw
|
||||||
|
* 01-Apr-04 Hye-Shik Chang <perky@FreeBSD.org>
|
||||||
|
* Ported from i386 to amd64.
|
||||||
|
* 24-Nov-02 Christian Tismer <tismer@tismer.com>
|
||||||
|
* needed to add another magic constant to insure
|
||||||
|
* that f in slp_eval_frame(PyFrameObject *f)
|
||||||
|
* STACK_REFPLUS will probably be 1 in most cases.
|
||||||
|
* gets included into the saved stack area.
|
||||||
|
* 17-Sep-02 Christian Tismer <tismer@tismer.com>
|
||||||
|
* after virtualizing stack save/restore, the
|
||||||
|
* stack size shrunk a bit. Needed to introduce
|
||||||
|
* an adjustment STACK_MAGIC per platform.
|
||||||
|
* 15-Sep-02 Gerd Woetzel <gerd.woetzel@GMD.DE>
|
||||||
|
* slightly changed framework for spark
|
||||||
|
* 31-Avr-02 Armin Rigo <arigo@ulb.ac.be>
|
||||||
|
* Added ebx, esi and edi register-saves.
|
||||||
|
* 01-Mar-02 Samual M. Rushing <rushing@ironport.com>
|
||||||
|
* Ported from i386.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define STACK_REFPLUS 1
|
||||||
|
|
||||||
|
#ifdef SLP_EVAL
|
||||||
|
|
||||||
|
/* #define STACK_MAGIC 3 */
|
||||||
|
/* the above works fine with gcc 2.96, but 2.95.3 wants this */
|
||||||
|
#define STACK_MAGIC 0
|
||||||
|
|
||||||
|
#define REGS_TO_SAVE "r12", "r13", "r14", "r15"
|
||||||
|
|
||||||
|
static int
|
||||||
|
slp_switch(void)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
void* rbp;
|
||||||
|
void* rbx;
|
||||||
|
unsigned int csr;
|
||||||
|
unsigned short cw;
|
||||||
|
/* This used to be declared 'register', but that does nothing in
|
||||||
|
modern compilers and is explicitly forbidden in some new
|
||||||
|
standards. */
|
||||||
|
long *stackref, stsizediff;
|
||||||
|
__asm__ volatile ("" : : : REGS_TO_SAVE);
|
||||||
|
__asm__ volatile ("fstcw %0" : "=m" (cw));
|
||||||
|
__asm__ volatile ("stmxcsr %0" : "=m" (csr));
|
||||||
|
__asm__ volatile ("movq %%rbp, %0" : "=m" (rbp));
|
||||||
|
__asm__ volatile ("movq %%rbx, %0" : "=m" (rbx));
|
||||||
|
__asm__ ("movq %%rsp, %0" : "=g" (stackref));
|
||||||
|
{
|
||||||
|
SLP_SAVE_STATE(stackref, stsizediff);
|
||||||
|
__asm__ volatile (
|
||||||
|
"addq %0, %%rsp\n"
|
||||||
|
"addq %0, %%rbp\n"
|
||||||
|
:
|
||||||
|
: "r" (stsizediff)
|
||||||
|
);
|
||||||
|
SLP_RESTORE_STATE();
|
||||||
|
__asm__ volatile ("xorq %%rax, %%rax" : "=a" (err));
|
||||||
|
}
|
||||||
|
__asm__ volatile ("movq %0, %%rbx" : : "m" (rbx));
|
||||||
|
__asm__ volatile ("movq %0, %%rbp" : : "m" (rbp));
|
||||||
|
__asm__ volatile ("ldmxcsr %0" : : "m" (csr));
|
||||||
|
__asm__ volatile ("fldcw %0" : : "m" (cw));
|
||||||
|
__asm__ volatile ("" : : : REGS_TO_SAVE);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* further self-processing support
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* if you want to add self-inspection tools, place them
|
||||||
|
* here. See the x86_msvc for the necessary defines.
|
||||||
|
* These features are highly experimental und not
|
||||||
|
* essential yet.
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user