GH-98831: Implement super-instruction generation (#99084)

Co-authored-by: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
This commit is contained in:
Guido van Rossum 2022-11-06 09:40:47 -08:00 committed by GitHub
parent ede6cb2615
commit 7dcd28eb41
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 163 additions and 138 deletions

View file

@ -57,68 +57,6 @@
DISPATCH();
}
TARGET(LOAD_FAST__LOAD_FAST) {
PyObject *value = GETLOCAL(oparg);
assert(value != NULL);
NEXTOPARG();
next_instr++;
Py_INCREF(value);
PUSH(value);
value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
DISPATCH();
}
TARGET(LOAD_FAST__LOAD_CONST) {
PyObject *value = GETLOCAL(oparg);
assert(value != NULL);
NEXTOPARG();
next_instr++;
Py_INCREF(value);
PUSH(value);
value = GETITEM(consts, oparg);
Py_INCREF(value);
PUSH(value);
DISPATCH();
}
TARGET(STORE_FAST__LOAD_FAST) {
PyObject *value = POP();
SETLOCAL(oparg, value);
NEXTOPARG();
next_instr++;
value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
DISPATCH();
}
TARGET(STORE_FAST__STORE_FAST) {
PyObject *value = POP();
SETLOCAL(oparg, value);
NEXTOPARG();
next_instr++;
value = POP();
SETLOCAL(oparg, value);
DISPATCH();
}
TARGET(LOAD_CONST__LOAD_FAST) {
PyObject *value = GETITEM(consts, oparg);
NEXTOPARG();
next_instr++;
Py_INCREF(value);
PUSH(value);
value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
DISPATCH();
}
TARGET(POP_TOP) {
PyObject *value = POP();
Py_DECREF(value);
@ -3900,3 +3838,85 @@
TARGET(CACHE) {
Py_UNREACHABLE();
}
TARGET(LOAD_FAST__LOAD_FAST) {
{
PyObject *value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
}
NEXTOPARG();
next_instr++;
{
PyObject *value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
}
DISPATCH();
}
TARGET(LOAD_FAST__LOAD_CONST) {
{
PyObject *value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
}
NEXTOPARG();
next_instr++;
{
PyObject *value = GETITEM(consts, oparg);
Py_INCREF(value);
PUSH(value);
}
DISPATCH();
}
TARGET(STORE_FAST__LOAD_FAST) {
{
PyObject *value = POP();
SETLOCAL(oparg, value);
}
NEXTOPARG();
next_instr++;
{
PyObject *value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
}
DISPATCH();
}
TARGET(STORE_FAST__STORE_FAST) {
{
PyObject *value = POP();
SETLOCAL(oparg, value);
}
NEXTOPARG();
next_instr++;
{
PyObject *value = POP();
SETLOCAL(oparg, value);
}
DISPATCH();
}
TARGET(LOAD_CONST__LOAD_FAST) {
{
PyObject *value = GETITEM(consts, oparg);
Py_INCREF(value);
PUSH(value);
}
NEXTOPARG();
next_instr++;
{
PyObject *value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
PUSH(value);
}
DISPATCH();
}