mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
gh-117958: Expose JIT code via method in UOpExecutor (#117959)
This commit is contained in:
parent
4a08a75cf4
commit
beb653cc24
2 changed files with 26 additions and 1 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
Added a ``get_jit_code()`` method to access JIT compiled machine code from the UOp Executor when the experimental JIT is enabled. Patch
|
||||||
|
by Anthony Shaw.
|
|
@ -393,6 +393,29 @@ executor_traverse(PyObject *o, visitproc visit, void *arg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
get_jit_code(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
#ifndef _Py_JIT
|
||||||
|
PyErr_SetString(PyExc_RuntimeError, "JIT support not enabled.");
|
||||||
|
return NULL;
|
||||||
|
#else
|
||||||
|
_PyExecutorObject *executor = (_PyExecutorObject *)self;
|
||||||
|
if (executor->jit_code == NULL || executor->jit_size == 0) {
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
}
|
||||||
|
return PyBytes_FromStringAndSize(executor->jit_code, executor->jit_size);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyMethodDef uop_executor_methods[] = {
|
||||||
|
{ "is_valid", is_valid, METH_NOARGS, NULL },
|
||||||
|
{ "get_jit_code", get_jit_code, METH_NOARGS, NULL},
|
||||||
|
{ "get_opcode", get_opcode, METH_NOARGS, NULL },
|
||||||
|
{ "get_oparg", get_oparg, METH_NOARGS, NULL },
|
||||||
|
{ NULL, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
executor_is_gc(PyObject *o)
|
executor_is_gc(PyObject *o)
|
||||||
{
|
{
|
||||||
|
@ -407,7 +430,7 @@ PyTypeObject _PyUOpExecutor_Type = {
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_HAVE_GC,
|
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_HAVE_GC,
|
||||||
.tp_dealloc = (destructor)uop_dealloc,
|
.tp_dealloc = (destructor)uop_dealloc,
|
||||||
.tp_as_sequence = &uop_as_sequence,
|
.tp_as_sequence = &uop_as_sequence,
|
||||||
.tp_methods = executor_methods,
|
.tp_methods = uop_executor_methods,
|
||||||
.tp_traverse = executor_traverse,
|
.tp_traverse = executor_traverse,
|
||||||
.tp_clear = (inquiry)executor_clear,
|
.tp_clear = (inquiry)executor_clear,
|
||||||
.tp_is_gc = executor_is_gc,
|
.tp_is_gc = executor_is_gc,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue