Mark Shannon
233e32f936
GH-102300: Reuse objects with refcount == 1 in float specialized binary ops. (GH-102301)
2023-03-13 10:34:54 +00:00
Brandt Bucher
08b67fb34f
GH-90997: Shrink the LOAD_GLOBAL caches ( #102569 )
2023-03-10 17:01:16 -08:00
Eric Snow
b45d14b886
gh-100227: Move dict_state.global_version to PyInterpreterState (gh-102338)
...
https://github.com/python/cpython/issues/100227
2023-03-09 08:16:30 -07:00
Jacob Bower
8de59c1bb9
gh-102021 : Allow multiple input files for interpreter loop generator ( #102022 )
...
The input files no longer use `-i`.
2023-03-03 20:59:21 -08:00
Guido van Rossum
b5ff382433
GH-102305: Expand some macros in generated_cases.c.h ( #102309 )
...
* Emit straight stack_pointer[-i] instead of PEEK(i), POKE(i, ...)
* Expand JUMPBY() and NEXTOPARG(), and fix a perf bug
2023-02-28 08:49:35 -08:00
Dennis Sweeney
e3c3f9fec0
gh-102250: Fix double-decref in COMPARE_AND_BRANCH error case (GH-102287)
2023-02-27 10:46:40 +00:00
Mark Shannon
7c106a443f
GH-100982: Restrict `FOR_ITER_RANGE` to a single instruction to allow instrumentation. (GH-101985)
2023-02-22 11:11:57 +00:00
Steve Dower
a99eb5cd99
gh-101907: Stop using `_Py_OPCODE` and `_Py_OPARG` macros (GH-101912)
...
* gh-101907: Removes use of non-standard C++ extension from Include/cpython/code.h
* Make cases_generator correct on Windows
2023-02-20 14:56:48 +00:00
Eclips4
68bd8c5e2e
gh-101952: Fix possible segfault in `BUILD_SET` opcode ( #101958 )
2023-02-16 09:46:43 -08:00
Mark Shannon
c7766245c1
GH-87849: Fix refleak in SEND instruction. (GH-101908)
...
Fix refleak in SEND instruction.
2023-02-15 12:21:40 +00:00
Irit Katriel
81e3aa835c
gh-101799: implement PREP_RERAISE_STAR as an intrinsic function ( #101800 )
2023-02-14 11:54:13 +00:00
Mark Shannon
160f2fe2b9
GH-87849: Simplify stack effect of SEND and specialize it for generators and coroutines. (GH-101788)
2023-02-13 11:24:55 +00:00
Guido van Rossum
616aec1ff1
gh-98831: Modernize CALL and family ( #101508 )
...
Includes a slight improvement to `DECREF_INPUTS()`.
2023-02-08 11:40:10 -08:00
Mark Shannon
feec49c407
GH-101578: Normalize the current exception (GH-101607)
...
* Make sure that the current exception is always normalized.
* Remove redundant type and traceback fields for the current exception.
* Add new API functions: PyErr_GetRaisedException, PyErr_SetRaisedException
* Add new API functions: PyException_GetArgs, PyException_SetArgs
2023-02-08 09:31:12 +00:00
Guido van Rossum
a9f01448a9
gh-98831: Modernize CALL_FUNCTION_EX ( #101627 )
...
New generator feature: Move CHECK_EVAL_BREAKER() call to just before DISPATCH().
2023-02-07 20:03:22 -08:00
Guido van Rossum
b2b85b5db9
gh-98831: Modernize FORMAT_VALUE ( #101628 )
...
Generator update: support balanced parentheses and brackets in conditions and size expressions.
2023-02-07 17:35:55 -08:00
Guido van Rossum
aacbdb0c65
gh-98831: Finish the UNPACK_SEQUENCE family ( #101666 )
...
New generator feature: Generate useful glue for output arrays, so you can just write values to the output array (no bounds checking). Rewrote UNPACK_SEQUENCE_TWO_TUPLE to use this, and also UNPACK_SEQUENCE_{TUPLE,LIST}.
2023-02-07 15:44:37 -08:00
penguin_wwy
753fc8a5d6
gh-101632: Add the new RETURN_CONST opcode ( #101633 )
2023-02-07 22:32:21 +00:00
Irit Katriel
dec1ab0387
gh-98831: rewrite UNPACK_EX, UNPACK_SEQUENCE, UNPACK_SEQUENCE_TWO_TUPLE in the instruction definition DSL ( #101641 )
2023-02-07 20:37:43 +00:00
Guido van Rossum
d54b8d8fbd
gh-98831: Modernize the FOR_ITER family of instructions ( #101626 )
...
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
2023-02-07 08:28:28 -08:00
Irit Katriel
38752760c9
gh-98831: rewrite COPY and SWAP in the instruction definition DSL ( #101620 )
2023-02-06 22:45:18 +00:00
Irit Katriel
433fb3ef08
gh-98831: rewrite MAKE_FUNCTION and BUILD_SLICE in the instruction definition DSL ( #101529 )
2023-02-03 14:40:45 +00:00
Irit Katriel
04e06e20ee
gh-98831: rewrite SEND, GET_YIELD_FROM_ITER, RETURN_GENERATOR in the instruction definition DSL ( #101516 )
2023-02-03 11:30:21 +00:00
Irit Katriel
0675b8f032
gh-98831: rewrite RERAISE and CLEANUP_THROW in the instruction definition DSL ( #101511 )
2023-02-02 10:02:57 +00:00
Guido van Rossum
ae9b38f424
gh-98831: Modernize the LOAD_GLOBAL family ( #101502 )
2023-02-01 13:12:49 -08:00
Irit Katriel
b91b42d236
gh-98831: rewrite PUSH_EXC_INFO and conditional jumps in the instruction definition DSL ( #101481 )
2023-02-01 19:38:06 +00:00
Guido van Rossum
7840ff3cdb
gh-98831: Modernize the LOAD_ATTR family ( #101488 )
2023-02-01 10:56:52 -08:00
Irit Katriel
0062f538d9
gh-98831: rewrite BEFORE_ASYNC_WITH and END_ASYNC_FOR in the instruction definition DSL ( #101458 )
2023-01-31 18:47:50 +00:00
Irit Katriel
29a858b85f
gh-98831: rewrite GET_LEN, GET_ITER, BEFORE_WITH and a few simple opcodes in the instruction definition DSL ( #101443 )
2023-01-31 10:23:15 +00:00
Mark Shannon
c1b1f51cd1
GH-101291: Refactor the `PyLongObject` struct into object header and PyLongValue struct. (GH-101292)
2023-01-30 10:03:04 +00:00
Guido van Rossum
f5a3d91b6c
gh-98831: Support conditional effects; use for LOAD_ATTR ( #101333 )
2023-01-29 17:28:39 -08:00
Irit Katriel
b400219df5
gh-98831: rewrite RAISE_VARARGS in the instruction definition DSL ( #101306 )
2023-01-25 22:29:56 +00:00
Irit Katriel
1a9d8c750b
gh-98831: rewrite pattern matching opcodes in the instruction definition DSL ( #101287 )
2023-01-24 22:39:13 +00:00
Mark Shannon
f02fa64bf2
GH-100762: Don't call `gen.throw()` in `gen.close()`, unless necessary. (GH-101013)
...
* Store exception stack depth in YIELD_VALUE's oparg and use it avoid expensive gen.throw() in gen.close() where possible.
2023-01-24 17:25:37 +00:00
Irit Katriel
8c183cddd3
gh-98831: rewrite CHECK_EG_MATCH opcode in the instruction definition DSL ( #101269 )
2023-01-24 09:43:16 +00:00
Irit Katriel
e9ccfe4a63
gh-100712: make it possible to disable specialization (for debugging) ( #100713 )
2023-01-19 18:14:55 +00:00
Guido van Rossum
80e3e3423c
GH-98831: Implement array support in cases generator ( #100912 )
...
You can now write things like this:
```
inst(BUILD_STRING, (pieces[oparg] -- str)) { ... }
inst(LIST_APPEND, (list, unused[oparg-1], v -- list, unused[oparg-1])) { ... }
```
Note that array output effects are only partially supported (they must be named `unused` or correspond to an input effect).
2023-01-17 15:59:19 -08:00
Mark Shannon
7b14c2ef19
GH-100982: Add `COMPARE_AND_BRANCH` instruction (GH-100983)
2023-01-16 12:35:21 +00:00
Mark Shannon
6e4e14d98f
GH-100923: Embed jump mask in `COMPARE_OP` oparg (GH-100924)
2023-01-11 20:40:43 +00:00
Irit Katriel
15c44789bb
gh-100758: Refactor initialisation of frame headers into a single function (_PyFrame_Initialize) (GH-100759)
2023-01-06 14:55:56 +00:00
Mark Shannon
78068126a1
GH-99005: More intrinsics (GH-100774)
...
* Remove UNARY_POSITIVE, LIST_TO_TUPLE and ASYNC_GEN_WRAP, replacing them with intrinsics.
2023-01-06 14:47:57 +00:00
Mark Shannon
28187141cc
GH-99005: Add `CALL_INTRINSIC_1` instruction (GH-100771)
...
* Remove PRINT_EXPR instruction
* Remove STOPITERATION_ERROR instruction
* Remove IMPORT_STAR instruction
2023-01-05 16:05:51 +00:00
Mark Shannon
f20c553a45
GH-100288: Remove LOAD_ATTR_METHOD_WITH_DICT instruction. (GH-100753)
2023-01-05 12:20:09 +00:00
Mark Shannon
15aecf8dd7
GH-100719: Remove the `co_nplaincellvars` field from code objects. (GH-100721)
2023-01-04 15:41:39 +00:00
L. A. F. Pereira
e6d4440782
gh-100146: Steal references from stack when building a list ( #100147 )
...
When executing the BUILD_LIST opcode, steal the references from the stack,
in a manner similar to the BUILD_TUPLE opcode. Implement this by offloading
the logic to a new private API, _PyList_FromArraySteal(), that works similarly
to _PyTuple_FromArraySteal().
This way, instead of performing multiple stack pointer adjustments while the
list is being initialized, the stack is adjusted only once and a fast memory
copy operation is performed in one fell swoop.
2023-01-03 10:49:49 -08:00
Guido van Rossum
08e5594cf3
GH-98831: Modernize a ton of simpler instructions ( #100545 )
...
* load_const and load_fast aren't families for now
* Don't decref unmoved names
* Modernize GET_ANEXT
* Modernize GET_AWAITABLE
* Modernize ASYNC_GEN_WRAP
* Modernize YIELD_VALUE
* Modernize POP_EXCEPT (in more than one way)
* Modernize PREP_RERAISE_STAR
* Modernize LOAD_ASSERTION_ERROR
* Modernize LOAD_BUILD_CLASS
* Modernize STORE_NAME
* Modernize LOAD_NAME
* Modernize LOAD_CLASSDEREF
* Modernize LOAD_DEREF
* Modernize STORE_DEREF
* Modernize COPY_FREE_VARS (mark it as done)
* Modernize LIST_TO_TUPLE
* Modernize LIST_EXTEND
* Modernize SET_UPDATE
* Modernize SETUP_ANNOTATIONS
* Modernize DICT_UPDATE
* Modernize DICT_MERGE
* Modernize MAP_ADD
* Modernize IS_OP
* Modernize CONTAINS_OP
* Modernize CHECK_EXC_MATCH
* Modernize IMPORT_NAME
* Modernize IMPORT_STAR
* Modernize IMPORT_FROM
* Modernize JUMP_FORWARD (mark it as done)
* Modernize JUMP_BACKWARD (mark it as done)
2022-12-27 17:11:03 -08:00
Ken Jin
36d358348d
Revert "gh-100288: Specialise LOAD_ATTR_METHOD for managed dictionaries (GH-100289)" ( #100468 )
...
This reverts commit c3c7848a48
.
2022-12-24 01:48:43 +08:00
Ken Jin
c3c7848a48
gh-100288: Specialise LOAD_ATTR_METHOD for managed dictionaries (GH-100289)
2022-12-24 00:26:42 +08:00
Pieter Eendebak
2b82c36f17
gh-99761: Add `_PyLong_IsPositiveSingleDigit` function to check for single digit integers ( #100064 )
2022-12-22 17:00:18 +05:30
Brandt Bucher
9076455d1b
GH-90043: Handle NaNs in COMPARE_OP_FLOAT_JUMP (GH-100278)
2022-12-16 10:18:31 -08:00
Mark Shannon
6997e77bdf
GH-100222: Redefine _Py_CODEUNIT as a union to clarify structure of code unit. (GH-100223)
2022-12-14 11:12:53 +00:00
Mark Shannon
fb713b2183
GH-98522: Add version number to code objects. (GH-98525)
...
* Add version number to code object for better versioning of functions.
* Improves specialization for closures and list comprehensions.
2022-12-09 12:18:45 +00:00
Ken Jin
748c6c0921
GH-100110: Specialize FOR_ITER for tuples (GH-100109)
...
* Specialize FOR_ITER for tuples
2022-12-09 10:27:01 +00:00
Guido van Rossum
1cfa704f64
GH-98831: Generate things in the input order ( #100123 )
...
This makes it easier to see what changed in the generated code
when converting an instruction to super or macro.
2022-12-08 15:54:07 -08:00
Guido van Rossum
c85be734d1
GH-98831: Typed stack effects, and more instructions converted ( #99764 )
...
Stack effects can now have a type, e.g. `inst(X, (left, right -- jump/uint64_t)) { ... }`.
Instructions converted to the non-legacy format:
* COMPARE_OP
* COMPARE_OP_FLOAT_JUMP
* COMPARE_OP_INT_JUMP
* COMPARE_OP_STR_JUMP
* STORE_ATTR
* DELETE_ATTR
* STORE_GLOBAL
* STORE_ATTR_INSTANCE_VALUE
* STORE_ATTR_WITH_HINT
* STORE_ATTR_SLOT, and complete the store_attr family
* Complete the store_subscr family: STORE_SUBSCR{,DICT,LIST_INT}
(STORE_SUBSCR was alread half converted,
but wasn't using cache effects yet.)
* DELETE_SUBSCR
* PRINT_EXPR
* INTERPRETER_EXIT (a bit weird, ends in return)
* RETURN_VALUE
* GET_AITER (had to restructure it some)
The original had mysterious `SET_TOP(NULL)` before `goto error`.
I assume those just account for `obj` having been decref'ed,
so I got rid of them in favor of the cleanup implied by `ERROR_IF()`.
* LIST_APPEND (a bit unhappy with it)
* SET_ADD (also a bit unhappy with it)
Various other improvements/refactorings as well.
2022-12-08 13:31:27 -08:00
Brandt Bucher
b72014c783
GH-99729: Unlink frames before clearing them (GH-100030)
2022-12-06 14:01:38 +00:00
Guido van Rossum
acf9184e6b
GH-98831: Support cache effects in super- and macro instructions ( #99601 )
2022-12-02 19:57:30 -08:00
Serhiy Storchaka
787764219f
gh-89189: More compact range iterator (GH-27986)
2022-11-30 23:04:30 +02:00
Guido van Rossum
8f18ac04d3
GH-98831: Add `macro` and `op` and their implementation to DSL ( #99495 )
...
Newly supported interpreter definition syntax:
- `op(NAME, (input_stack_effects -- output_stack_effects)) { ... }`
- `macro(NAME) = OP1 + OP2;`
Also some other random improvements:
- Convert `WITH_EXCEPT_START` to use stack effects
- Fix lexer to balk at unrecognized characters, e.g. `@`
- Fix moved output names; support object pointers in cache
- Introduce `error()` method to print errors
- Introduce read_uint16(p) as equivalent to `*p`
Co-authored-by: Brandt Bucher <brandtbucher@gmail.com>
2022-11-22 16:04:57 -08:00
Guido van Rossum
4f5e1cb00a
GH-98831: Refactor and fix cases generator ( #99526 )
...
Also complete cache effects for BINARY_SUBSCR family.
2022-11-17 17:06:07 -08:00
Brandt Bucher
b629fdd88a
GH-99298: Clean up attribute specializations (GH-99398)
2022-11-17 15:09:18 -08:00
Brandt Bucher
8555dee5ae
GH-98686: Get rid of BINARY_OP_GENERIC and COMPARE_OP_GENERIC (GH-99399)
2022-11-17 11:36:57 -08:00
Brandt Bucher
6f8b0e781c
Add a macro for "inlining" new frames (GH-99490)
2022-11-17 11:36:03 -08:00
Guido van Rossum
e37744f289
GH-98831: Implement basic cache effects ( #99313 )
2022-11-15 19:59:19 -08:00
Hood Chatham
86a49e0673
gh-99460 Emscripten trampolines on optimized METH_O and METH_NOARGS code paths ( #99461 )
2022-11-15 09:53:39 -08:00
Guido van Rossum
694cdb24a6
GH-98831: Remove all remaining DISPATCH() calls from bytecodes.c ( #99271 )
...
Also mark those opcodes that have no stack effect as such.
Co-authored-by: Brandt Bucher <brandtbucher@gmail.com>
2022-11-10 10:50:57 -08:00
Brandt Bucher
00ee6d506e
GH-99298: Don't perform jumps before error handling (GH-99299)
2022-11-10 08:46:56 -08:00
Mark Shannon
1e197e63e2
GH-96421: Insert shim frame on entry to interpreter (GH-96319)
...
* Adds EXIT_INTERPRETER instruction to exit PyEval_EvalDefault()
* Simplifies RETURN_VALUE, YIELD_VALUE and RETURN_GENERATOR instructions as they no longer need to check for entry frames.
2022-11-10 12:34:57 +00:00
Victor Stinner
2e343fc465
gh-99300: Use Py_NewRef() in Python/ceval.c ( #99318 )
...
Replace Py_INCREF() and Py_XINCREF() with Py_NewRef() and
Py_XNewRef() in Python/ceval.c and related files.
2022-11-10 11:25:33 +01:00
Brandt Bucher
c7f5708714
GH-98686: Get rid of "adaptive" and "quick" instructions (GH-99182)
2022-11-09 10:50:09 -08:00
Guido van Rossum
f1a654648b
GH-98831: Simple input-output stack effects for bytecodes.c ( #99120 )
2022-11-08 08:22:56 -08:00
Mark Shannon
4a1c58d504
GH-96793: Specialize FOR_ITER for generators. (GH-98772)
2022-11-07 14:49:51 +00:00
Guido van Rossum
7dcd28eb41
GH-98831: Implement super-instruction generation ( #99084 )
...
Co-authored-by: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
2022-11-06 09:40:47 -08:00
Guido van Rossum
d04899abb0
GH-99104: Update headers for bytecodes.c and generate_cases.py ( #99112 )
...
Also tweak the labels near the end of bytecodes.c.
2022-11-04 17:40:43 -07:00
Mark Shannon
f4adb97506
GH-96793: Implement PEP 479 in bytecode. (GH-99006)
...
* Handle converting StopIteration to RuntimeError in bytecode.
* Add custom instruction for converting StopIteration into RuntimeError.
2022-11-03 11:38:51 +00:00
Guido van Rossum
41bc101dd6
GH-98831: "Generate" the interpreter ( #98830 )
...
The switch cases (really TARGET(opcode) macros) have been moved from ceval.c to generated_cases.c.h. That file is generated from instruction definitions in bytecodes.c (which impersonates a C file so the C code it contains can be edited without custom support in e.g. VS Code).
The code generator lives in Tools/cases_generator (it has a README.md explaining how it works). The DSL used to describe the instructions is a work in progress, described in https://github.com/faster-cpython/ideas/blob/main/3.12/interpreter_definition.md .
This is surely a work-in-progress. An easy next step could be auto-generating super-instructions.
**IMPORTANT: Merge Conflicts**
If you get a merge conflict for instruction implementations in ceval.c, your best bet is to port your changes to bytecodes.c. That file looks almost the same as the original cases, except instead of `TARGET(NAME)` it uses `inst(NAME)`, and the trailing `DISPATCH()` call is omitted (the code generator adds it automatically).
2022-11-02 21:31:26 -07:00