summaryrefslogtreecommitdiffstats
path: root/Python/bytecodes.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2022-11-06 17:40:47 (GMT)
committerGitHub <noreply@github.com>2022-11-06 17:40:47 (GMT)
commit7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16 (patch)
tree9d22898f492f9bdc544c1bed9a1d5e34b79924d3 /Python/bytecodes.c
parentede6cb26153f106a11a462614fdda12691fc6463 (diff)
downloadcpython-7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16.zip
cpython-7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16.tar.gz
cpython-7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16.tar.bz2
GH-98831: Implement super-instruction generation (#99084)
Co-authored-by: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r--Python/bytecodes.c67
1 files changed, 6 insertions, 61 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index e87ca6e..f0e9e3a 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -69,6 +69,7 @@ do { \
#define DISPATCH() ((void)0)
#define inst(name) case name:
+#define super(name) static int SUPER_##name
#define family(name) static int family_##name
#define NAME_ERROR_MSG \
@@ -158,67 +159,11 @@ dummy_func(
SETLOCAL(oparg, value);
}
- // stack effect: ( -- __0, __1)
- inst(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);
- }
-
- // stack effect: ( -- __0, __1)
- inst(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);
- }
-
- // stack effect: ( -- )
- inst(STORE_FAST__LOAD_FAST) {
- PyObject *value = POP();
- SETLOCAL(oparg, value);
- NEXTOPARG();
- next_instr++;
- value = GETLOCAL(oparg);
- assert(value != NULL);
- Py_INCREF(value);
- PUSH(value);
- }
-
- // stack effect: (__0, __1 -- )
- inst(STORE_FAST__STORE_FAST) {
- PyObject *value = POP();
- SETLOCAL(oparg, value);
- NEXTOPARG();
- next_instr++;
- value = POP();
- SETLOCAL(oparg, value);
- }
-
- // stack effect: ( -- __0, __1)
- inst(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);
- }
+ super(LOAD_FAST__LOAD_FAST) = LOAD_FAST + LOAD_FAST;
+ super(LOAD_FAST__LOAD_CONST) = LOAD_FAST + LOAD_CONST;
+ super(STORE_FAST__LOAD_FAST) = STORE_FAST + LOAD_FAST;
+ super(STORE_FAST__STORE_FAST) = STORE_FAST + STORE_FAST;
+ super (LOAD_CONST__LOAD_FAST) = LOAD_CONST + LOAD_FAST;
// stack effect: (__0 -- )
inst(POP_TOP) {