From 579b758a42a0bf39b178e01bd3655e8dbf85f9b9 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Wed, 11 Jun 2025 09:39:21 +0100 Subject: [PATCH 01/14] Tier 2 TOS caching. Work in progress --- Include/internal/pycore_optimizer.h | 2 +- Include/internal/pycore_uop_ids.h | 689 +- Include/internal/pycore_uop_metadata.h | 1484 ++- Python/bytecodes.c | 11 + Python/ceval.c | 11 +- Python/ceval_macros.h | 8 +- Python/executor_cases.c.h | 8603 ++++++++++++++--- Python/optimizer.c | 153 +- Python/optimizer_cases.c.h | 4 + Tools/cases_generator/analyzer.py | 54 + Tools/cases_generator/generators_common.py | 14 + Tools/cases_generator/stack.py | 8 + Tools/cases_generator/tier2_generator.py | 42 +- Tools/cases_generator/uop_id_generator.py | 13 +- .../cases_generator/uop_metadata_generator.py | 55 +- 15 files changed, 9783 insertions(+), 1368 deletions(-) diff --git a/Include/internal/pycore_optimizer.h b/Include/internal/pycore_optimizer.h index d3674726997f6a..b248a431bfd21e 100644 --- a/Include/internal/pycore_optimizer.h +++ b/Include/internal/pycore_optimizer.h @@ -118,7 +118,7 @@ PyAPI_FUNC(void) _Py_Executors_InvalidateCold(PyInterpreterState *interp); #define JIT_CLEANUP_THRESHOLD 100000 // This is the length of the trace we project initially. -#define UOP_MAX_TRACE_LENGTH 800 +#define UOP_MAX_TRACE_LENGTH 1600 #define TRACE_STACK_SIZE 5 diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index 2b845527cf2ed5..ce9e36903fb84a 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -231,9 +231,7 @@ extern "C" { #define _LOAD_FAST_BORROW_5 465 #define _LOAD_FAST_BORROW_6 466 #define _LOAD_FAST_BORROW_7 467 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW LOAD_FAST_BORROW_LOAD_FAST_BORROW #define _LOAD_FAST_CHECK LOAD_FAST_CHECK -#define _LOAD_FAST_LOAD_FAST LOAD_FAST_LOAD_FAST #define _LOAD_FROM_DICT_OR_DEREF LOAD_FROM_DICT_OR_DEREF #define _LOAD_FROM_DICT_OR_GLOBALS LOAD_FROM_DICT_OR_GLOBALS #define _LOAD_GLOBAL 468 @@ -298,48 +296,677 @@ extern "C" { #define _SET_ADD SET_ADD #define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE #define _SET_UPDATE SET_UPDATE -#define _START_EXECUTOR 506 -#define _STORE_ATTR 507 -#define _STORE_ATTR_INSTANCE_VALUE 508 -#define _STORE_ATTR_SLOT 509 -#define _STORE_ATTR_WITH_HINT 510 +#define _SPILL_OR_RELOAD 506 +#define _START_EXECUTOR 507 +#define _STORE_ATTR 508 +#define _STORE_ATTR_INSTANCE_VALUE 509 +#define _STORE_ATTR_SLOT 510 +#define _STORE_ATTR_WITH_HINT 511 #define _STORE_DEREF STORE_DEREF -#define _STORE_FAST 511 -#define _STORE_FAST_0 512 -#define _STORE_FAST_1 513 -#define _STORE_FAST_2 514 -#define _STORE_FAST_3 515 -#define _STORE_FAST_4 516 -#define _STORE_FAST_5 517 -#define _STORE_FAST_6 518 -#define _STORE_FAST_7 519 -#define _STORE_FAST_LOAD_FAST STORE_FAST_LOAD_FAST -#define _STORE_FAST_STORE_FAST STORE_FAST_STORE_FAST +#define _STORE_FAST 512 +#define _STORE_FAST_0 513 +#define _STORE_FAST_1 514 +#define _STORE_FAST_2 515 +#define _STORE_FAST_3 516 +#define _STORE_FAST_4 517 +#define _STORE_FAST_5 518 +#define _STORE_FAST_6 519 +#define _STORE_FAST_7 520 #define _STORE_GLOBAL STORE_GLOBAL #define _STORE_NAME STORE_NAME -#define _STORE_SLICE 520 -#define _STORE_SUBSCR 521 -#define _STORE_SUBSCR_DICT 522 -#define _STORE_SUBSCR_LIST_INT 523 +#define _STORE_SLICE 521 +#define _STORE_SUBSCR 522 +#define _STORE_SUBSCR_DICT 523 +#define _STORE_SUBSCR_LIST_INT 524 #define _SWAP SWAP -#define _TIER2_RESUME_CHECK 524 -#define _TO_BOOL 525 +#define _TIER2_RESUME_CHECK 525 +#define _TO_BOOL 526 #define _TO_BOOL_BOOL TO_BOOL_BOOL #define _TO_BOOL_INT TO_BOOL_INT -#define _TO_BOOL_LIST 526 +#define _TO_BOOL_LIST 527 #define _TO_BOOL_NONE TO_BOOL_NONE -#define _TO_BOOL_STR 527 +#define _TO_BOOL_STR 528 #define _UNARY_INVERT UNARY_INVERT #define _UNARY_NEGATIVE UNARY_NEGATIVE #define _UNARY_NOT UNARY_NOT #define _UNPACK_EX UNPACK_EX -#define _UNPACK_SEQUENCE 528 -#define _UNPACK_SEQUENCE_LIST 529 -#define _UNPACK_SEQUENCE_TUPLE 530 -#define _UNPACK_SEQUENCE_TWO_TUPLE 531 +#define _UNPACK_SEQUENCE 529 +#define _UNPACK_SEQUENCE_LIST 530 +#define _UNPACK_SEQUENCE_TUPLE 531 +#define _UNPACK_SEQUENCE_TWO_TUPLE 532 #define _WITH_EXCEPT_START WITH_EXCEPT_START #define _YIELD_VALUE YIELD_VALUE -#define MAX_UOP_ID 531 +#define MAX_UOP_ID 532 +#define _BINARY_OP_r21 533 +#define _BINARY_OP_ADD_FLOAT_r10 534 +#define _BINARY_OP_ADD_FLOAT_r21 535 +#define _BINARY_OP_ADD_FLOAT_r32 536 +#define _BINARY_OP_ADD_INT_r21 537 +#define _BINARY_OP_ADD_UNICODE_r10 538 +#define _BINARY_OP_ADD_UNICODE_r21 539 +#define _BINARY_OP_ADD_UNICODE_r32 540 +#define _BINARY_OP_EXTEND_r21 541 +#define _BINARY_OP_INPLACE_ADD_UNICODE_r20 542 +#define _BINARY_OP_MULTIPLY_FLOAT_r10 543 +#define _BINARY_OP_MULTIPLY_FLOAT_r21 544 +#define _BINARY_OP_MULTIPLY_FLOAT_r32 545 +#define _BINARY_OP_MULTIPLY_INT_r21 546 +#define _BINARY_OP_SUBSCR_CHECK_FUNC_r23 547 +#define _BINARY_OP_SUBSCR_DICT_r21 548 +#define _BINARY_OP_SUBSCR_INIT_CALL_r31 549 +#define _BINARY_OP_SUBSCR_LIST_INT_r21 550 +#define _BINARY_OP_SUBSCR_LIST_SLICE_r21 551 +#define _BINARY_OP_SUBSCR_STR_INT_r21 552 +#define _BINARY_OP_SUBSCR_TUPLE_INT_r21 553 +#define _BINARY_OP_SUBTRACT_FLOAT_r10 554 +#define _BINARY_OP_SUBTRACT_FLOAT_r21 555 +#define _BINARY_OP_SUBTRACT_FLOAT_r32 556 +#define _BINARY_OP_SUBTRACT_INT_r21 557 +#define _BINARY_SLICE_r31 558 +#define _BUILD_INTERPOLATION_r01 559 +#define _BUILD_LIST_r01 560 +#define _BUILD_MAP_r01 561 +#define _BUILD_SET_r01 562 +#define _BUILD_SLICE_r01 563 +#define _BUILD_STRING_r01 564 +#define _BUILD_TEMPLATE_r21 565 +#define _BUILD_TUPLE_r01 566 +#define _CALL_BUILTIN_CLASS_r01 567 +#define _CALL_BUILTIN_FAST_r01 568 +#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01 569 +#define _CALL_BUILTIN_O_r01 570 +#define _CALL_INTRINSIC_1_r11 571 +#define _CALL_INTRINSIC_2_r21 572 +#define _CALL_ISINSTANCE_r31 573 +#define _CALL_KW_NON_PY_r11 574 +#define _CALL_LEN_r31 575 +#define _CALL_LIST_APPEND_r30 576 +#define _CALL_METHOD_DESCRIPTOR_FAST_r01 577 +#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01 578 +#define _CALL_METHOD_DESCRIPTOR_NOARGS_r01 579 +#define _CALL_METHOD_DESCRIPTOR_O_r01 580 +#define _CALL_NON_PY_GENERAL_r01 581 +#define _CALL_STR_1_r31 582 +#define _CALL_TUPLE_1_r31 583 +#define _CALL_TYPE_1_r31 584 +#define _CHECK_AND_ALLOCATE_OBJECT_r00 585 +#define _CHECK_ATTR_CLASS_r00 586 +#define _CHECK_ATTR_CLASS_r11 587 +#define _CHECK_ATTR_CLASS_r22 588 +#define _CHECK_ATTR_CLASS_r33 589 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r00 590 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 591 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 592 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 593 +#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 594 +#define _CHECK_EG_MATCH_r22 595 +#define _CHECK_EXC_MATCH_r11 596 +#define _CHECK_FUNCTION_r00 597 +#define _CHECK_FUNCTION_r11 598 +#define _CHECK_FUNCTION_r22 599 +#define _CHECK_FUNCTION_r33 600 +#define _CHECK_FUNCTION_EXACT_ARGS_r00 601 +#define _CHECK_FUNCTION_VERSION_r00 602 +#define _CHECK_FUNCTION_VERSION_INLINE_r00 603 +#define _CHECK_FUNCTION_VERSION_INLINE_r11 604 +#define _CHECK_FUNCTION_VERSION_INLINE_r22 605 +#define _CHECK_FUNCTION_VERSION_INLINE_r33 606 +#define _CHECK_FUNCTION_VERSION_KW_r11 607 +#define _CHECK_IS_NOT_PY_CALLABLE_r00 608 +#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 609 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r00 610 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 611 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 612 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 613 +#define _CHECK_METHOD_VERSION_r00 614 +#define _CHECK_METHOD_VERSION_KW_r11 615 +#define _CHECK_PEP_523_r00 616 +#define _CHECK_PEP_523_r11 617 +#define _CHECK_PEP_523_r22 618 +#define _CHECK_PEP_523_r33 619 +#define _CHECK_PERIODIC_r00 620 +#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 621 +#define _CHECK_RECURSION_REMAINING_r00 622 +#define _CHECK_RECURSION_REMAINING_r11 623 +#define _CHECK_RECURSION_REMAINING_r22 624 +#define _CHECK_RECURSION_REMAINING_r33 625 +#define _CHECK_STACK_SPACE_r00 626 +#define _CHECK_STACK_SPACE_OPERAND_r00 627 +#define _CHECK_STACK_SPACE_OPERAND_r11 628 +#define _CHECK_STACK_SPACE_OPERAND_r22 629 +#define _CHECK_STACK_SPACE_OPERAND_r33 630 +#define _CHECK_VALIDITY_r00 631 +#define _CHECK_VALIDITY_r11 632 +#define _CHECK_VALIDITY_r22 633 +#define _CHECK_VALIDITY_r33 634 +#define _COMPARE_OP_r21 635 +#define _COMPARE_OP_FLOAT_r10 636 +#define _COMPARE_OP_FLOAT_r21 637 +#define _COMPARE_OP_FLOAT_r32 638 +#define _COMPARE_OP_INT_r10 639 +#define _COMPARE_OP_INT_r21 640 +#define _COMPARE_OP_INT_r32 641 +#define _COMPARE_OP_STR_r10 642 +#define _COMPARE_OP_STR_r21 643 +#define _COMPARE_OP_STR_r32 644 +#define _CONTAINS_OP_r21 645 +#define _CONTAINS_OP_DICT_r21 646 +#define _CONTAINS_OP_SET_r21 647 +#define _CONVERT_VALUE_r11 648 +#define _COPY_r01 649 +#define _COPY_FREE_VARS_r00 650 +#define _COPY_FREE_VARS_r11 651 +#define _COPY_FREE_VARS_r22 652 +#define _COPY_FREE_VARS_r33 653 +#define _CREATE_INIT_FRAME_r01 654 +#define _DELETE_ATTR_r10 655 +#define _DELETE_DEREF_r00 656 +#define _DELETE_FAST_r00 657 +#define _DELETE_GLOBAL_r00 658 +#define _DELETE_NAME_r00 659 +#define _DELETE_SUBSCR_r20 660 +#define _DEOPT_r00 661 +#define _DEOPT_r11 662 +#define _DEOPT_r22 663 +#define _DEOPT_r33 664 +#define _DICT_MERGE_r10 665 +#define _DICT_UPDATE_r10 666 +#define _DO_CALL_r01 667 +#define _DO_CALL_FUNCTION_EX_r31 668 +#define _DO_CALL_KW_r11 669 +#define _END_FOR_r10 670 +#define _END_SEND_r21 671 +#define _ERROR_POP_N_r00 672 +#define _ERROR_POP_N_r11 673 +#define _ERROR_POP_N_r22 674 +#define _ERROR_POP_N_r33 675 +#define _EXIT_INIT_CHECK_r10 676 +#define _EXIT_TRACE_r00 677 +#define _EXIT_TRACE_r11 678 +#define _EXIT_TRACE_r22 679 +#define _EXIT_TRACE_r33 680 +#define _EXPAND_METHOD_r00 681 +#define _EXPAND_METHOD_KW_r00 682 +#define _FATAL_ERROR_r00 683 +#define _FATAL_ERROR_r11 684 +#define _FATAL_ERROR_r22 685 +#define _FATAL_ERROR_r33 686 +#define _FORMAT_SIMPLE_r11 687 +#define _FORMAT_WITH_SPEC_r21 688 +#define _FOR_ITER_r01 689 +#define _FOR_ITER_GEN_FRAME_r23 690 +#define _FOR_ITER_TIER_TWO_r01 691 +#define _GET_AITER_r11 692 +#define _GET_ANEXT_r01 693 +#define _GET_AWAITABLE_r11 694 +#define _GET_ITER_r12 695 +#define _GET_LEN_r01 696 +#define _GET_YIELD_FROM_ITER_r11 697 +#define _GUARD_BINARY_OP_EXTEND_r00 698 +#define _GUARD_CALLABLE_ISINSTANCE_r33 699 +#define _GUARD_CALLABLE_LEN_r33 700 +#define _GUARD_CALLABLE_LIST_APPEND_r33 701 +#define _GUARD_CALLABLE_STR_1_r33 702 +#define _GUARD_CALLABLE_TUPLE_1_r33 703 +#define _GUARD_CALLABLE_TYPE_1_r33 704 +#define _GUARD_DORV_NO_DICT_r00 705 +#define _GUARD_DORV_NO_DICT_r11 706 +#define _GUARD_DORV_NO_DICT_r22 707 +#define _GUARD_DORV_NO_DICT_r33 708 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00 709 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 710 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 711 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 712 +#define _GUARD_GLOBALS_VERSION_r00 713 +#define _GUARD_GLOBALS_VERSION_r11 714 +#define _GUARD_GLOBALS_VERSION_r22 715 +#define _GUARD_GLOBALS_VERSION_r33 716 +#define _GUARD_IS_FALSE_POP_r10 717 +#define _GUARD_IS_NONE_POP_r10 718 +#define _GUARD_IS_NOT_NONE_POP_r10 719 +#define _GUARD_IS_TRUE_POP_r10 720 +#define _GUARD_KEYS_VERSION_r00 721 +#define _GUARD_KEYS_VERSION_r11 722 +#define _GUARD_KEYS_VERSION_r22 723 +#define _GUARD_KEYS_VERSION_r33 724 +#define _GUARD_NOS_DICT_r00 725 +#define _GUARD_NOS_DICT_r11 726 +#define _GUARD_NOS_DICT_r22 727 +#define _GUARD_NOS_DICT_r33 728 +#define _GUARD_NOS_FLOAT_r00 729 +#define _GUARD_NOS_FLOAT_r11 730 +#define _GUARD_NOS_FLOAT_r22 731 +#define _GUARD_NOS_FLOAT_r33 732 +#define _GUARD_NOS_INT_r00 733 +#define _GUARD_NOS_INT_r11 734 +#define _GUARD_NOS_INT_r22 735 +#define _GUARD_NOS_INT_r33 736 +#define _GUARD_NOS_LIST_r00 737 +#define _GUARD_NOS_LIST_r11 738 +#define _GUARD_NOS_LIST_r22 739 +#define _GUARD_NOS_LIST_r33 740 +#define _GUARD_NOS_NOT_NULL_r00 741 +#define _GUARD_NOS_NOT_NULL_r11 742 +#define _GUARD_NOS_NOT_NULL_r22 743 +#define _GUARD_NOS_NOT_NULL_r33 744 +#define _GUARD_NOS_NULL_r00 745 +#define _GUARD_NOS_NULL_r11 746 +#define _GUARD_NOS_NULL_r22 747 +#define _GUARD_NOS_NULL_r33 748 +#define _GUARD_NOS_TUPLE_r00 749 +#define _GUARD_NOS_TUPLE_r11 750 +#define _GUARD_NOS_TUPLE_r22 751 +#define _GUARD_NOS_TUPLE_r33 752 +#define _GUARD_NOS_UNICODE_r00 753 +#define _GUARD_NOS_UNICODE_r11 754 +#define _GUARD_NOS_UNICODE_r22 755 +#define _GUARD_NOS_UNICODE_r33 756 +#define _GUARD_NOT_EXHAUSTED_LIST_r00 757 +#define _GUARD_NOT_EXHAUSTED_LIST_r11 758 +#define _GUARD_NOT_EXHAUSTED_LIST_r22 759 +#define _GUARD_NOT_EXHAUSTED_LIST_r33 760 +#define _GUARD_NOT_EXHAUSTED_RANGE_r00 761 +#define _GUARD_NOT_EXHAUSTED_RANGE_r11 762 +#define _GUARD_NOT_EXHAUSTED_RANGE_r22 763 +#define _GUARD_NOT_EXHAUSTED_RANGE_r33 764 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r00 765 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r11 766 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 767 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 768 +#define _GUARD_THIRD_NULL_r33 769 +#define _GUARD_TOS_ANY_SET_r00 770 +#define _GUARD_TOS_ANY_SET_r11 771 +#define _GUARD_TOS_ANY_SET_r22 772 +#define _GUARD_TOS_ANY_SET_r33 773 +#define _GUARD_TOS_DICT_r00 774 +#define _GUARD_TOS_DICT_r11 775 +#define _GUARD_TOS_DICT_r22 776 +#define _GUARD_TOS_DICT_r33 777 +#define _GUARD_TOS_FLOAT_r00 778 +#define _GUARD_TOS_FLOAT_r11 779 +#define _GUARD_TOS_FLOAT_r22 780 +#define _GUARD_TOS_FLOAT_r33 781 +#define _GUARD_TOS_INT_r00 782 +#define _GUARD_TOS_INT_r11 783 +#define _GUARD_TOS_INT_r22 784 +#define _GUARD_TOS_INT_r33 785 +#define _GUARD_TOS_LIST_r00 786 +#define _GUARD_TOS_LIST_r11 787 +#define _GUARD_TOS_LIST_r22 788 +#define _GUARD_TOS_LIST_r33 789 +#define _GUARD_TOS_SLICE_r00 790 +#define _GUARD_TOS_SLICE_r11 791 +#define _GUARD_TOS_SLICE_r22 792 +#define _GUARD_TOS_SLICE_r33 793 +#define _GUARD_TOS_TUPLE_r00 794 +#define _GUARD_TOS_TUPLE_r11 795 +#define _GUARD_TOS_TUPLE_r22 796 +#define _GUARD_TOS_TUPLE_r33 797 +#define _GUARD_TOS_UNICODE_r00 798 +#define _GUARD_TOS_UNICODE_r11 799 +#define _GUARD_TOS_UNICODE_r22 800 +#define _GUARD_TOS_UNICODE_r33 801 +#define _GUARD_TYPE_VERSION_r00 802 +#define _GUARD_TYPE_VERSION_r11 803 +#define _GUARD_TYPE_VERSION_r22 804 +#define _GUARD_TYPE_VERSION_r33 805 +#define _GUARD_TYPE_VERSION_AND_LOCK_r00 806 +#define _GUARD_TYPE_VERSION_AND_LOCK_r11 807 +#define _GUARD_TYPE_VERSION_AND_LOCK_r22 808 +#define _GUARD_TYPE_VERSION_AND_LOCK_r33 809 +#define _IMPORT_FROM_r01 810 +#define _IMPORT_NAME_r21 811 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 812 +#define _INIT_CALL_PY_EXACT_ARGS_r01 813 +#define _INIT_CALL_PY_EXACT_ARGS_0_r01 814 +#define _INIT_CALL_PY_EXACT_ARGS_1_r01 815 +#define _INIT_CALL_PY_EXACT_ARGS_2_r01 816 +#define _INIT_CALL_PY_EXACT_ARGS_3_r01 817 +#define _INIT_CALL_PY_EXACT_ARGS_4_r01 818 +#define _INSERT_NULL_r10 819 +#define _INSTRUMENTED_FOR_ITER_r01 820 +#define _INSTRUMENTED_INSTRUCTION_r00 821 +#define _INSTRUMENTED_JUMP_FORWARD_r00 822 +#define _INSTRUMENTED_JUMP_FORWARD_r11 823 +#define _INSTRUMENTED_JUMP_FORWARD_r22 824 +#define _INSTRUMENTED_JUMP_FORWARD_r33 825 +#define _INSTRUMENTED_LINE_r00 826 +#define _INSTRUMENTED_NOT_TAKEN_r00 827 +#define _INSTRUMENTED_NOT_TAKEN_r11 828 +#define _INSTRUMENTED_NOT_TAKEN_r22 829 +#define _INSTRUMENTED_NOT_TAKEN_r33 830 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 831 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 832 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 833 +#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 834 +#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 835 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 836 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 837 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 838 +#define _IS_NONE_r11 839 +#define _IS_OP_r21 840 +#define _ITER_CHECK_LIST_r00 841 +#define _ITER_CHECK_LIST_r11 842 +#define _ITER_CHECK_LIST_r22 843 +#define _ITER_CHECK_LIST_r33 844 +#define _ITER_CHECK_RANGE_r00 845 +#define _ITER_CHECK_RANGE_r11 846 +#define _ITER_CHECK_RANGE_r22 847 +#define _ITER_CHECK_RANGE_r33 848 +#define _ITER_CHECK_TUPLE_r00 849 +#define _ITER_CHECK_TUPLE_r11 850 +#define _ITER_CHECK_TUPLE_r22 851 +#define _ITER_CHECK_TUPLE_r33 852 +#define _ITER_JUMP_LIST_r00 853 +#define _ITER_JUMP_LIST_r11 854 +#define _ITER_JUMP_LIST_r22 855 +#define _ITER_JUMP_LIST_r33 856 +#define _ITER_JUMP_RANGE_r00 857 +#define _ITER_JUMP_RANGE_r11 858 +#define _ITER_JUMP_RANGE_r22 859 +#define _ITER_JUMP_RANGE_r33 860 +#define _ITER_JUMP_TUPLE_r00 861 +#define _ITER_JUMP_TUPLE_r11 862 +#define _ITER_JUMP_TUPLE_r22 863 +#define _ITER_JUMP_TUPLE_r33 864 +#define _ITER_NEXT_LIST_r01 865 +#define _ITER_NEXT_LIST_TIER_TWO_r01 866 +#define _ITER_NEXT_RANGE_r23 867 +#define _ITER_NEXT_TUPLE_r23 868 +#define _JUMP_TO_TOP_r00 869 +#define _LIST_APPEND_r10 870 +#define _LIST_EXTEND_r10 871 +#define _LOAD_ATTR_r10 872 +#define _LOAD_ATTR_CLASS_r11 873 +#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 874 +#define _LOAD_ATTR_INSTANCE_VALUE_r11 875 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r01 876 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 877 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 878 +#define _LOAD_ATTR_METHOD_NO_DICT_r01 879 +#define _LOAD_ATTR_METHOD_NO_DICT_r12 880 +#define _LOAD_ATTR_METHOD_NO_DICT_r23 881 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r01 882 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 883 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 884 +#define _LOAD_ATTR_MODULE_r11 885 +#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 886 +#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 887 +#define _LOAD_ATTR_PROPERTY_FRAME_r00 888 +#define _LOAD_ATTR_PROPERTY_FRAME_r11 889 +#define _LOAD_ATTR_PROPERTY_FRAME_r22 890 +#define _LOAD_ATTR_PROPERTY_FRAME_r33 891 +#define _LOAD_ATTR_SLOT_r11 892 +#define _LOAD_ATTR_WITH_HINT_r11 893 +#define _LOAD_BUILD_CLASS_r01 894 +#define _LOAD_BYTECODE_r00 895 +#define _LOAD_COMMON_CONSTANT_r01 896 +#define _LOAD_COMMON_CONSTANT_r12 897 +#define _LOAD_COMMON_CONSTANT_r23 898 +#define _LOAD_CONST_r01 899 +#define _LOAD_CONST_r12 900 +#define _LOAD_CONST_r23 901 +#define _LOAD_CONST_INLINE_r01 902 +#define _LOAD_CONST_INLINE_r12 903 +#define _LOAD_CONST_INLINE_r23 904 +#define _LOAD_CONST_INLINE_BORROW_r01 905 +#define _LOAD_CONST_INLINE_BORROW_r12 906 +#define _LOAD_CONST_INLINE_BORROW_r23 907 +#define _LOAD_CONST_UNDER_INLINE_r01 908 +#define _LOAD_CONST_UNDER_INLINE_r12 909 +#define _LOAD_CONST_UNDER_INLINE_r23 910 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r01 911 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 912 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 913 +#define _LOAD_DEREF_r01 914 +#define _LOAD_FAST_r01 915 +#define _LOAD_FAST_r12 916 +#define _LOAD_FAST_r23 917 +#define _LOAD_FAST_0_r01 918 +#define _LOAD_FAST_0_r12 919 +#define _LOAD_FAST_0_r23 920 +#define _LOAD_FAST_1_r01 921 +#define _LOAD_FAST_1_r12 922 +#define _LOAD_FAST_1_r23 923 +#define _LOAD_FAST_2_r01 924 +#define _LOAD_FAST_2_r12 925 +#define _LOAD_FAST_2_r23 926 +#define _LOAD_FAST_3_r01 927 +#define _LOAD_FAST_3_r12 928 +#define _LOAD_FAST_3_r23 929 +#define _LOAD_FAST_4_r01 930 +#define _LOAD_FAST_4_r12 931 +#define _LOAD_FAST_4_r23 932 +#define _LOAD_FAST_5_r01 933 +#define _LOAD_FAST_5_r12 934 +#define _LOAD_FAST_5_r23 935 +#define _LOAD_FAST_6_r01 936 +#define _LOAD_FAST_6_r12 937 +#define _LOAD_FAST_6_r23 938 +#define _LOAD_FAST_7_r01 939 +#define _LOAD_FAST_7_r12 940 +#define _LOAD_FAST_7_r23 941 +#define _LOAD_FAST_AND_CLEAR_r01 942 +#define _LOAD_FAST_AND_CLEAR_r12 943 +#define _LOAD_FAST_AND_CLEAR_r23 944 +#define _LOAD_FAST_BORROW_r01 945 +#define _LOAD_FAST_BORROW_r12 946 +#define _LOAD_FAST_BORROW_r23 947 +#define _LOAD_FAST_BORROW_0_r01 948 +#define _LOAD_FAST_BORROW_0_r12 949 +#define _LOAD_FAST_BORROW_0_r23 950 +#define _LOAD_FAST_BORROW_1_r01 951 +#define _LOAD_FAST_BORROW_1_r12 952 +#define _LOAD_FAST_BORROW_1_r23 953 +#define _LOAD_FAST_BORROW_2_r01 954 +#define _LOAD_FAST_BORROW_2_r12 955 +#define _LOAD_FAST_BORROW_2_r23 956 +#define _LOAD_FAST_BORROW_3_r01 957 +#define _LOAD_FAST_BORROW_3_r12 958 +#define _LOAD_FAST_BORROW_3_r23 959 +#define _LOAD_FAST_BORROW_4_r01 960 +#define _LOAD_FAST_BORROW_4_r12 961 +#define _LOAD_FAST_BORROW_4_r23 962 +#define _LOAD_FAST_BORROW_5_r01 963 +#define _LOAD_FAST_BORROW_5_r12 964 +#define _LOAD_FAST_BORROW_5_r23 965 +#define _LOAD_FAST_BORROW_6_r01 966 +#define _LOAD_FAST_BORROW_6_r12 967 +#define _LOAD_FAST_BORROW_6_r23 968 +#define _LOAD_FAST_BORROW_7_r01 969 +#define _LOAD_FAST_BORROW_7_r12 970 +#define _LOAD_FAST_BORROW_7_r23 971 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 972 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 973 +#define _LOAD_FAST_CHECK_r01 974 +#define _LOAD_FAST_LOAD_FAST_r02 975 +#define _LOAD_FAST_LOAD_FAST_r13 976 +#define _LOAD_FROM_DICT_OR_DEREF_r11 977 +#define _LOAD_FROM_DICT_OR_GLOBALS_r11 978 +#define _LOAD_GLOBAL_r00 979 +#define _LOAD_GLOBAL_BUILTINS_r01 980 +#define _LOAD_GLOBAL_BUILTINS_r12 981 +#define _LOAD_GLOBAL_BUILTINS_r23 982 +#define _LOAD_GLOBAL_MODULE_r01 983 +#define _LOAD_GLOBAL_MODULE_r12 984 +#define _LOAD_GLOBAL_MODULE_r23 985 +#define _LOAD_LOCALS_r01 986 +#define _LOAD_NAME_r01 987 +#define _LOAD_SMALL_INT_r01 988 +#define _LOAD_SMALL_INT_r12 989 +#define _LOAD_SMALL_INT_r23 990 +#define _LOAD_SMALL_INT_0_r01 991 +#define _LOAD_SMALL_INT_0_r12 992 +#define _LOAD_SMALL_INT_0_r23 993 +#define _LOAD_SMALL_INT_1_r01 994 +#define _LOAD_SMALL_INT_1_r12 995 +#define _LOAD_SMALL_INT_1_r23 996 +#define _LOAD_SMALL_INT_2_r01 997 +#define _LOAD_SMALL_INT_2_r12 998 +#define _LOAD_SMALL_INT_2_r23 999 +#define _LOAD_SMALL_INT_3_r01 1000 +#define _LOAD_SMALL_INT_3_r12 1001 +#define _LOAD_SMALL_INT_3_r23 1002 +#define _LOAD_SPECIAL_r00 1003 +#define _LOAD_SUPER_ATTR_ATTR_r31 1004 +#define _LOAD_SUPER_ATTR_METHOD_r32 1005 +#define _MAKE_CALLARGS_A_TUPLE_r00 1006 +#define _MAKE_CELL_r00 1007 +#define _MAKE_FUNCTION_r11 1008 +#define _MAKE_WARM_r00 1009 +#define _MAKE_WARM_r11 1010 +#define _MAKE_WARM_r22 1011 +#define _MAKE_WARM_r33 1012 +#define _MAP_ADD_r20 1013 +#define _MATCH_CLASS_r31 1014 +#define _MATCH_KEYS_r01 1015 +#define _MATCH_MAPPING_r01 1016 +#define _MATCH_MAPPING_r12 1017 +#define _MATCH_MAPPING_r23 1018 +#define _MATCH_SEQUENCE_r01 1019 +#define _MATCH_SEQUENCE_r12 1020 +#define _MATCH_SEQUENCE_r23 1021 +#define _MAYBE_EXPAND_METHOD_r00 1022 +#define _MAYBE_EXPAND_METHOD_KW_r00 1023 +#define _MONITOR_CALL_r00 1024 +#define _MONITOR_CALL_KW_r00 1025 +#define _MONITOR_JUMP_BACKWARD_r00 1026 +#define _MONITOR_JUMP_BACKWARD_r11 1027 +#define _MONITOR_JUMP_BACKWARD_r22 1028 +#define _MONITOR_JUMP_BACKWARD_r33 1029 +#define _MONITOR_RESUME_r00 1030 +#define _NOP_r00 1031 +#define _NOP_r11 1032 +#define _NOP_r22 1033 +#define _NOP_r33 1034 +#define _POP_CALL_r20 1035 +#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1036 +#define _POP_CALL_ONE_r30 1037 +#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1038 +#define _POP_CALL_TWO_r30 1039 +#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1040 +#define _POP_EXCEPT_r10 1041 +#define _POP_ITER_r20 1042 +#define _POP_JUMP_IF_FALSE_r10 1043 +#define _POP_JUMP_IF_FALSE_r21 1044 +#define _POP_JUMP_IF_FALSE_r32 1045 +#define _POP_JUMP_IF_TRUE_r10 1046 +#define _POP_JUMP_IF_TRUE_r21 1047 +#define _POP_JUMP_IF_TRUE_r32 1048 +#define _POP_TOP_r10 1049 +#define _POP_TOP_LOAD_CONST_INLINE_r11 1050 +#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1051 +#define _POP_TWO_r20 1052 +#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1053 +#define _PUSH_EXC_INFO_r01 1054 +#define _PUSH_EXC_INFO_r12 1055 +#define _PUSH_EXC_INFO_r23 1056 +#define _PUSH_FRAME_r10 1057 +#define _PUSH_NULL_r01 1058 +#define _PUSH_NULL_r12 1059 +#define _PUSH_NULL_r23 1060 +#define _PUSH_NULL_CONDITIONAL_r00 1061 +#define _PY_FRAME_GENERAL_r01 1062 +#define _PY_FRAME_KW_r11 1063 +#define _QUICKEN_RESUME_r00 1064 +#define _QUICKEN_RESUME_r11 1065 +#define _QUICKEN_RESUME_r22 1066 +#define _QUICKEN_RESUME_r33 1067 +#define _REPLACE_WITH_TRUE_r11 1068 +#define _RESUME_CHECK_r00 1069 +#define _RESUME_CHECK_r11 1070 +#define _RESUME_CHECK_r22 1071 +#define _RESUME_CHECK_r33 1072 +#define _RETURN_GENERATOR_r01 1073 +#define _RETURN_VALUE_r11 1074 +#define _SAVE_RETURN_OFFSET_r00 1075 +#define _SAVE_RETURN_OFFSET_r11 1076 +#define _SAVE_RETURN_OFFSET_r22 1077 +#define _SAVE_RETURN_OFFSET_r33 1078 +#define _SEND_r11 1079 +#define _SEND_GEN_FRAME_r00 1080 +#define _SEND_GEN_FRAME_r11 1081 +#define _SEND_GEN_FRAME_r22 1082 +#define _SEND_GEN_FRAME_r33 1083 +#define _SETUP_ANNOTATIONS_r00 1084 +#define _SET_ADD_r10 1085 +#define _SET_FUNCTION_ATTRIBUTE_r10 1086 +#define _SET_FUNCTION_ATTRIBUTE_r21 1087 +#define _SET_FUNCTION_ATTRIBUTE_r32 1088 +#define _SET_IP_r00 1089 +#define _SET_IP_r11 1090 +#define _SET_IP_r22 1091 +#define _SET_IP_r33 1092 +#define _SET_UPDATE_r10 1093 +#define _SPILL_OR_RELOAD_r01 1094 +#define _SPILL_OR_RELOAD_r02 1095 +#define _SPILL_OR_RELOAD_r03 1096 +#define _SPILL_OR_RELOAD_r10 1097 +#define _SPILL_OR_RELOAD_r12 1098 +#define _SPILL_OR_RELOAD_r13 1099 +#define _SPILL_OR_RELOAD_r20 1100 +#define _SPILL_OR_RELOAD_r21 1101 +#define _SPILL_OR_RELOAD_r23 1102 +#define _SPILL_OR_RELOAD_r30 1103 +#define _SPILL_OR_RELOAD_r31 1104 +#define _SPILL_OR_RELOAD_r32 1105 +#define _START_EXECUTOR_r00 1106 +#define _STORE_ATTR_r20 1107 +#define _STORE_ATTR_INSTANCE_VALUE_r20 1108 +#define _STORE_ATTR_SLOT_r20 1109 +#define _STORE_ATTR_WITH_HINT_r20 1110 +#define _STORE_DEREF_r10 1111 +#define _STORE_FAST_r10 1112 +#define _STORE_FAST_0_r10 1113 +#define _STORE_FAST_1_r10 1114 +#define _STORE_FAST_2_r10 1115 +#define _STORE_FAST_3_r10 1116 +#define _STORE_FAST_4_r10 1117 +#define _STORE_FAST_5_r10 1118 +#define _STORE_FAST_6_r10 1119 +#define _STORE_FAST_7_r10 1120 +#define _STORE_FAST_LOAD_FAST_r11 1121 +#define _STORE_FAST_STORE_FAST_r20 1122 +#define _STORE_GLOBAL_r10 1123 +#define _STORE_NAME_r10 1124 +#define _STORE_SLICE_r30 1125 +#define _STORE_SUBSCR_r30 1126 +#define _STORE_SUBSCR_DICT_r30 1127 +#define _STORE_SUBSCR_LIST_INT_r30 1128 +#define _SWAP_r11 1129 +#define _TIER2_RESUME_CHECK_r00 1130 +#define _TIER2_RESUME_CHECK_r11 1131 +#define _TIER2_RESUME_CHECK_r22 1132 +#define _TIER2_RESUME_CHECK_r33 1133 +#define _TO_BOOL_r11 1134 +#define _TO_BOOL_BOOL_r00 1135 +#define _TO_BOOL_BOOL_r11 1136 +#define _TO_BOOL_BOOL_r22 1137 +#define _TO_BOOL_BOOL_r33 1138 +#define _TO_BOOL_INT_r11 1139 +#define _TO_BOOL_LIST_r11 1140 +#define _TO_BOOL_NONE_r00 1141 +#define _TO_BOOL_NONE_r11 1142 +#define _TO_BOOL_NONE_r22 1143 +#define _TO_BOOL_NONE_r33 1144 +#define _TO_BOOL_STR_r11 1145 +#define _UNARY_INVERT_r11 1146 +#define _UNARY_NEGATIVE_r11 1147 +#define _UNARY_NOT_r00 1148 +#define _UNARY_NOT_r11 1149 +#define _UNARY_NOT_r22 1150 +#define _UNARY_NOT_r33 1151 +#define _UNPACK_EX_r10 1152 +#define _UNPACK_SEQUENCE_r10 1153 +#define _UNPACK_SEQUENCE_LIST_r10 1154 +#define _UNPACK_SEQUENCE_TUPLE_r10 1155 +#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1156 +#define _WITH_EXCEPT_START_r01 1157 +#define _YIELD_VALUE_r00 1158 +#define _YIELD_VALUE_r11 1159 +#define _YIELD_VALUE_r22 1160 +#define _YIELD_VALUE_r33 1161 +#define MAX_UOP_REGS_ID 1161 #ifdef __cplusplus } diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h index b08909e72c4f43..bf251c2d16688f 100644 --- a/Include/internal/pycore_uop_metadata.h +++ b/Include/internal/pycore_uop_metadata.h @@ -13,10 +13,19 @@ extern "C" { #include "pycore_uop_ids.h" extern const uint16_t _PyUop_Flags[MAX_UOP_ID+1]; extern const uint8_t _PyUop_Replication[MAX_UOP_ID+1]; -extern const char * const _PyOpcode_uop_name[MAX_UOP_ID+1]; +extern const char * const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1]; extern int _PyUop_num_popped(int opcode, int oparg); +typedef struct _pyuop_info { + int8_t min_input; int8_t max_input; + int8_t delta; uint16_t opcodes[4]; +} _PyUopCachingInfo; +extern const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1]; + +extern const uint16_t _PyUop_SpillsAndReloads[4][4]; +extern const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1]; + #ifdef NEED_OPCODE_METADATA const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_NOP] = HAS_PURE_FLAG, @@ -43,8 +52,6 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_LOAD_FAST_BORROW_7] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, [_LOAD_FAST_BORROW] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG, [_LOAD_FAST_AND_CLEAR] = HAS_ARG_FLAG | HAS_LOCAL_FLAG, - [_LOAD_FAST_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG, - [_LOAD_FAST_BORROW_LOAD_FAST_BORROW] = HAS_ARG_FLAG | HAS_LOCAL_FLAG, [_LOAD_CONST] = HAS_ARG_FLAG | HAS_CONST_FLAG, [_LOAD_SMALL_INT_0] = 0, [_LOAD_SMALL_INT_1] = 0, @@ -60,8 +67,6 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_STORE_FAST_6] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, [_STORE_FAST_7] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, [_STORE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_STORE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, [_POP_TOP] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG, [_POP_TWO] = HAS_ESCAPES_FLAG, [_PUSH_NULL] = HAS_PURE_FLAG, @@ -321,6 +326,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_DEOPT] = 0, [_ERROR_POP_N] = HAS_ARG_FLAG, [_TIER2_RESUME_CHECK] = HAS_DEOPT_FLAG, + [_SPILL_OR_RELOAD] = 0, }; const uint8_t _PyUop_Replication[MAX_UOP_ID+1] = { @@ -331,309 +337,1757 @@ const uint8_t _PyUop_Replication[MAX_UOP_ID+1] = { [_INIT_CALL_PY_EXACT_ARGS] = 5, }; -const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = { +const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { + [_NOP] = { 0, 3, 0, { _NOP_r00, _NOP_r11, _NOP_r22, _NOP_r33 } }, + [_CHECK_PERIODIC] = { 0, 0, 0, { _CHECK_PERIODIC_r00, 0, 0, 0 } }, + [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = { 0, 0, 0, { _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00, 0, 0, 0 } }, + [_RESUME_CHECK] = { 0, 3, 0, { _RESUME_CHECK_r00, _RESUME_CHECK_r11, _RESUME_CHECK_r22, _RESUME_CHECK_r33 } }, + [_LOAD_FAST_CHECK] = { 0, 0, 1, { _LOAD_FAST_CHECK_r01, 0, 0, 0 } }, + [_LOAD_FAST_0] = { 0, 2, 1, { _LOAD_FAST_0_r01, _LOAD_FAST_0_r12, _LOAD_FAST_0_r23, 0 } }, + [_LOAD_FAST_1] = { 0, 2, 1, { _LOAD_FAST_1_r01, _LOAD_FAST_1_r12, _LOAD_FAST_1_r23, 0 } }, + [_LOAD_FAST_2] = { 0, 2, 1, { _LOAD_FAST_2_r01, _LOAD_FAST_2_r12, _LOAD_FAST_2_r23, 0 } }, + [_LOAD_FAST_3] = { 0, 2, 1, { _LOAD_FAST_3_r01, _LOAD_FAST_3_r12, _LOAD_FAST_3_r23, 0 } }, + [_LOAD_FAST_4] = { 0, 2, 1, { _LOAD_FAST_4_r01, _LOAD_FAST_4_r12, _LOAD_FAST_4_r23, 0 } }, + [_LOAD_FAST_5] = { 0, 2, 1, { _LOAD_FAST_5_r01, _LOAD_FAST_5_r12, _LOAD_FAST_5_r23, 0 } }, + [_LOAD_FAST_6] = { 0, 2, 1, { _LOAD_FAST_6_r01, _LOAD_FAST_6_r12, _LOAD_FAST_6_r23, 0 } }, + [_LOAD_FAST_7] = { 0, 2, 1, { _LOAD_FAST_7_r01, _LOAD_FAST_7_r12, _LOAD_FAST_7_r23, 0 } }, + [_LOAD_FAST] = { 0, 2, 1, { _LOAD_FAST_r01, _LOAD_FAST_r12, _LOAD_FAST_r23, 0 } }, + [_LOAD_FAST_BORROW_0] = { 0, 2, 1, { _LOAD_FAST_BORROW_0_r01, _LOAD_FAST_BORROW_0_r12, _LOAD_FAST_BORROW_0_r23, 0 } }, + [_LOAD_FAST_BORROW_1] = { 0, 2, 1, { _LOAD_FAST_BORROW_1_r01, _LOAD_FAST_BORROW_1_r12, _LOAD_FAST_BORROW_1_r23, 0 } }, + [_LOAD_FAST_BORROW_2] = { 0, 2, 1, { _LOAD_FAST_BORROW_2_r01, _LOAD_FAST_BORROW_2_r12, _LOAD_FAST_BORROW_2_r23, 0 } }, + [_LOAD_FAST_BORROW_3] = { 0, 2, 1, { _LOAD_FAST_BORROW_3_r01, _LOAD_FAST_BORROW_3_r12, _LOAD_FAST_BORROW_3_r23, 0 } }, + [_LOAD_FAST_BORROW_4] = { 0, 2, 1, { _LOAD_FAST_BORROW_4_r01, _LOAD_FAST_BORROW_4_r12, _LOAD_FAST_BORROW_4_r23, 0 } }, + [_LOAD_FAST_BORROW_5] = { 0, 2, 1, { _LOAD_FAST_BORROW_5_r01, _LOAD_FAST_BORROW_5_r12, _LOAD_FAST_BORROW_5_r23, 0 } }, + [_LOAD_FAST_BORROW_6] = { 0, 2, 1, { _LOAD_FAST_BORROW_6_r01, _LOAD_FAST_BORROW_6_r12, _LOAD_FAST_BORROW_6_r23, 0 } }, + [_LOAD_FAST_BORROW_7] = { 0, 2, 1, { _LOAD_FAST_BORROW_7_r01, _LOAD_FAST_BORROW_7_r12, _LOAD_FAST_BORROW_7_r23, 0 } }, + [_LOAD_FAST_BORROW] = { 0, 2, 1, { _LOAD_FAST_BORROW_r01, _LOAD_FAST_BORROW_r12, _LOAD_FAST_BORROW_r23, 0 } }, + [_LOAD_FAST_AND_CLEAR] = { 0, 2, 1, { _LOAD_FAST_AND_CLEAR_r01, _LOAD_FAST_AND_CLEAR_r12, _LOAD_FAST_AND_CLEAR_r23, 0 } }, + [_LOAD_CONST] = { 0, 2, 1, { _LOAD_CONST_r01, _LOAD_CONST_r12, _LOAD_CONST_r23, 0 } }, + [_LOAD_SMALL_INT_0] = { 0, 2, 1, { _LOAD_SMALL_INT_0_r01, _LOAD_SMALL_INT_0_r12, _LOAD_SMALL_INT_0_r23, 0 } }, + [_LOAD_SMALL_INT_1] = { 0, 2, 1, { _LOAD_SMALL_INT_1_r01, _LOAD_SMALL_INT_1_r12, _LOAD_SMALL_INT_1_r23, 0 } }, + [_LOAD_SMALL_INT_2] = { 0, 2, 1, { _LOAD_SMALL_INT_2_r01, _LOAD_SMALL_INT_2_r12, _LOAD_SMALL_INT_2_r23, 0 } }, + [_LOAD_SMALL_INT_3] = { 0, 2, 1, { _LOAD_SMALL_INT_3_r01, _LOAD_SMALL_INT_3_r12, _LOAD_SMALL_INT_3_r23, 0 } }, + [_LOAD_SMALL_INT] = { 0, 2, 1, { _LOAD_SMALL_INT_r01, _LOAD_SMALL_INT_r12, _LOAD_SMALL_INT_r23, 0 } }, + [_STORE_FAST_0] = { 1, 1, -1, { 0, _STORE_FAST_0_r10, 0, 0 } }, + [_STORE_FAST_1] = { 1, 1, -1, { 0, _STORE_FAST_1_r10, 0, 0 } }, + [_STORE_FAST_2] = { 1, 1, -1, { 0, _STORE_FAST_2_r10, 0, 0 } }, + [_STORE_FAST_3] = { 1, 1, -1, { 0, _STORE_FAST_3_r10, 0, 0 } }, + [_STORE_FAST_4] = { 1, 1, -1, { 0, _STORE_FAST_4_r10, 0, 0 } }, + [_STORE_FAST_5] = { 1, 1, -1, { 0, _STORE_FAST_5_r10, 0, 0 } }, + [_STORE_FAST_6] = { 1, 1, -1, { 0, _STORE_FAST_6_r10, 0, 0 } }, + [_STORE_FAST_7] = { 1, 1, -1, { 0, _STORE_FAST_7_r10, 0, 0 } }, + [_STORE_FAST] = { 1, 1, -1, { 0, _STORE_FAST_r10, 0, 0 } }, + [_POP_TOP] = { 1, 1, -1, { 0, _POP_TOP_r10, 0, 0 } }, + [_POP_TWO] = { 2, 2, -2, { 0, 0, _POP_TWO_r20, 0 } }, + [_PUSH_NULL] = { 0, 2, 1, { _PUSH_NULL_r01, _PUSH_NULL_r12, _PUSH_NULL_r23, 0 } }, + [_END_FOR] = { 1, 1, -1, { 0, _END_FOR_r10, 0, 0 } }, + [_POP_ITER] = { 2, 2, -2, { 0, 0, _POP_ITER_r20, 0 } }, + [_END_SEND] = { 2, 2, -1, { 0, 0, _END_SEND_r21, 0 } }, + [_UNARY_NEGATIVE] = { 1, 1, 0, { 0, _UNARY_NEGATIVE_r11, 0, 0 } }, + [_UNARY_NOT] = { 0, 3, 0, { _UNARY_NOT_r00, _UNARY_NOT_r11, _UNARY_NOT_r22, _UNARY_NOT_r33 } }, + [_TO_BOOL] = { 1, 1, 0, { 0, _TO_BOOL_r11, 0, 0 } }, + [_TO_BOOL_BOOL] = { 0, 3, 0, { _TO_BOOL_BOOL_r00, _TO_BOOL_BOOL_r11, _TO_BOOL_BOOL_r22, _TO_BOOL_BOOL_r33 } }, + [_TO_BOOL_INT] = { 1, 1, 0, { 0, _TO_BOOL_INT_r11, 0, 0 } }, + [_GUARD_NOS_LIST] = { 0, 3, 0, { _GUARD_NOS_LIST_r00, _GUARD_NOS_LIST_r11, _GUARD_NOS_LIST_r22, _GUARD_NOS_LIST_r33 } }, + [_GUARD_TOS_LIST] = { 0, 3, 0, { _GUARD_TOS_LIST_r00, _GUARD_TOS_LIST_r11, _GUARD_TOS_LIST_r22, _GUARD_TOS_LIST_r33 } }, + [_GUARD_TOS_SLICE] = { 0, 3, 0, { _GUARD_TOS_SLICE_r00, _GUARD_TOS_SLICE_r11, _GUARD_TOS_SLICE_r22, _GUARD_TOS_SLICE_r33 } }, + [_TO_BOOL_LIST] = { 1, 1, 0, { 0, _TO_BOOL_LIST_r11, 0, 0 } }, + [_TO_BOOL_NONE] = { 0, 3, 0, { _TO_BOOL_NONE_r00, _TO_BOOL_NONE_r11, _TO_BOOL_NONE_r22, _TO_BOOL_NONE_r33 } }, + [_GUARD_NOS_UNICODE] = { 0, 3, 0, { _GUARD_NOS_UNICODE_r00, _GUARD_NOS_UNICODE_r11, _GUARD_NOS_UNICODE_r22, _GUARD_NOS_UNICODE_r33 } }, + [_GUARD_TOS_UNICODE] = { 0, 3, 0, { _GUARD_TOS_UNICODE_r00, _GUARD_TOS_UNICODE_r11, _GUARD_TOS_UNICODE_r22, _GUARD_TOS_UNICODE_r33 } }, + [_TO_BOOL_STR] = { 1, 1, 0, { 0, _TO_BOOL_STR_r11, 0, 0 } }, + [_REPLACE_WITH_TRUE] = { 1, 1, 0, { 0, _REPLACE_WITH_TRUE_r11, 0, 0 } }, + [_UNARY_INVERT] = { 1, 1, 0, { 0, _UNARY_INVERT_r11, 0, 0 } }, + [_GUARD_NOS_INT] = { 0, 3, 0, { _GUARD_NOS_INT_r00, _GUARD_NOS_INT_r11, _GUARD_NOS_INT_r22, _GUARD_NOS_INT_r33 } }, + [_GUARD_TOS_INT] = { 0, 3, 0, { _GUARD_TOS_INT_r00, _GUARD_TOS_INT_r11, _GUARD_TOS_INT_r22, _GUARD_TOS_INT_r33 } }, + [_BINARY_OP_MULTIPLY_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_MULTIPLY_INT_r21, 0 } }, + [_BINARY_OP_ADD_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_ADD_INT_r21, 0 } }, + [_BINARY_OP_SUBTRACT_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBTRACT_INT_r21, 0 } }, + [_GUARD_NOS_FLOAT] = { 0, 3, 0, { _GUARD_NOS_FLOAT_r00, _GUARD_NOS_FLOAT_r11, _GUARD_NOS_FLOAT_r22, _GUARD_NOS_FLOAT_r33 } }, + [_GUARD_TOS_FLOAT] = { 0, 3, 0, { _GUARD_TOS_FLOAT_r00, _GUARD_TOS_FLOAT_r11, _GUARD_TOS_FLOAT_r22, _GUARD_TOS_FLOAT_r33 } }, + [_BINARY_OP_MULTIPLY_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_MULTIPLY_FLOAT_r10, _BINARY_OP_MULTIPLY_FLOAT_r21, _BINARY_OP_MULTIPLY_FLOAT_r32 } }, + [_BINARY_OP_ADD_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_ADD_FLOAT_r10, _BINARY_OP_ADD_FLOAT_r21, _BINARY_OP_ADD_FLOAT_r32 } }, + [_BINARY_OP_SUBTRACT_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_SUBTRACT_FLOAT_r10, _BINARY_OP_SUBTRACT_FLOAT_r21, _BINARY_OP_SUBTRACT_FLOAT_r32 } }, + [_BINARY_OP_ADD_UNICODE] = { 1, 3, -1, { 0, _BINARY_OP_ADD_UNICODE_r10, _BINARY_OP_ADD_UNICODE_r21, _BINARY_OP_ADD_UNICODE_r32 } }, + [_BINARY_OP_INPLACE_ADD_UNICODE] = { 2, 2, -2, { 0, 0, _BINARY_OP_INPLACE_ADD_UNICODE_r20, 0 } }, + [_GUARD_BINARY_OP_EXTEND] = { 0, 0, 0, { _GUARD_BINARY_OP_EXTEND_r00, 0, 0, 0 } }, + [_BINARY_OP_EXTEND] = { 2, 2, -1, { 0, 0, _BINARY_OP_EXTEND_r21, 0 } }, + [_BINARY_SLICE] = { 3, 3, -2, { 0, 0, 0, _BINARY_SLICE_r31 } }, + [_STORE_SLICE] = { 3, 3, -3, { 0, 0, 0, _STORE_SLICE_r30 } }, + [_BINARY_OP_SUBSCR_LIST_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_LIST_INT_r21, 0 } }, + [_BINARY_OP_SUBSCR_LIST_SLICE] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_LIST_SLICE_r21, 0 } }, + [_BINARY_OP_SUBSCR_STR_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_STR_INT_r21, 0 } }, + [_GUARD_NOS_TUPLE] = { 0, 3, 0, { _GUARD_NOS_TUPLE_r00, _GUARD_NOS_TUPLE_r11, _GUARD_NOS_TUPLE_r22, _GUARD_NOS_TUPLE_r33 } }, + [_GUARD_TOS_TUPLE] = { 0, 3, 0, { _GUARD_TOS_TUPLE_r00, _GUARD_TOS_TUPLE_r11, _GUARD_TOS_TUPLE_r22, _GUARD_TOS_TUPLE_r33 } }, + [_BINARY_OP_SUBSCR_TUPLE_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_TUPLE_INT_r21, 0 } }, + [_GUARD_NOS_DICT] = { 0, 3, 0, { _GUARD_NOS_DICT_r00, _GUARD_NOS_DICT_r11, _GUARD_NOS_DICT_r22, _GUARD_NOS_DICT_r33 } }, + [_GUARD_TOS_DICT] = { 0, 3, 0, { _GUARD_TOS_DICT_r00, _GUARD_TOS_DICT_r11, _GUARD_TOS_DICT_r22, _GUARD_TOS_DICT_r33 } }, + [_BINARY_OP_SUBSCR_DICT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_DICT_r21, 0 } }, + [_BINARY_OP_SUBSCR_CHECK_FUNC] = { 2, 2, 1, { 0, 0, _BINARY_OP_SUBSCR_CHECK_FUNC_r23, 0 } }, + [_BINARY_OP_SUBSCR_INIT_CALL] = { 3, 3, -2, { 0, 0, 0, _BINARY_OP_SUBSCR_INIT_CALL_r31 } }, + [_LIST_APPEND] = { 1, 1, -1, { 0, _LIST_APPEND_r10, 0, 0 } }, + [_SET_ADD] = { 1, 1, -1, { 0, _SET_ADD_r10, 0, 0 } }, + [_STORE_SUBSCR] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_r30 } }, + [_STORE_SUBSCR_LIST_INT] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_LIST_INT_r30 } }, + [_STORE_SUBSCR_DICT] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_DICT_r30 } }, + [_DELETE_SUBSCR] = { 2, 2, -2, { 0, 0, _DELETE_SUBSCR_r20, 0 } }, + [_CALL_INTRINSIC_1] = { 1, 1, 0, { 0, _CALL_INTRINSIC_1_r11, 0, 0 } }, + [_CALL_INTRINSIC_2] = { 2, 2, -1, { 0, 0, _CALL_INTRINSIC_2_r21, 0 } }, + [_RETURN_VALUE] = { 1, 1, 0, { 0, _RETURN_VALUE_r11, 0, 0 } }, + [_GET_AITER] = { 1, 1, 0, { 0, _GET_AITER_r11, 0, 0 } }, + [_GET_ANEXT] = { 0, 0, 1, { _GET_ANEXT_r01, 0, 0, 0 } }, + [_GET_AWAITABLE] = { 1, 1, 0, { 0, _GET_AWAITABLE_r11, 0, 0 } }, + [_SEND_GEN_FRAME] = { 0, 3, 0, { _SEND_GEN_FRAME_r00, _SEND_GEN_FRAME_r11, _SEND_GEN_FRAME_r22, _SEND_GEN_FRAME_r33 } }, + [_YIELD_VALUE] = { 0, 3, 0, { _YIELD_VALUE_r00, _YIELD_VALUE_r11, _YIELD_VALUE_r22, _YIELD_VALUE_r33 } }, + [_POP_EXCEPT] = { 1, 1, -1, { 0, _POP_EXCEPT_r10, 0, 0 } }, + [_LOAD_COMMON_CONSTANT] = { 0, 2, 1, { _LOAD_COMMON_CONSTANT_r01, _LOAD_COMMON_CONSTANT_r12, _LOAD_COMMON_CONSTANT_r23, 0 } }, + [_LOAD_BUILD_CLASS] = { 0, 0, 1, { _LOAD_BUILD_CLASS_r01, 0, 0, 0 } }, + [_STORE_NAME] = { 1, 1, -1, { 0, _STORE_NAME_r10, 0, 0 } }, + [_DELETE_NAME] = { 0, 0, 0, { _DELETE_NAME_r00, 0, 0, 0 } }, + [_UNPACK_SEQUENCE] = { 1, 1, -1, { 0, _UNPACK_SEQUENCE_r10, 0, 0 } }, + [_UNPACK_SEQUENCE_TWO_TUPLE] = { 1, 1, 1, { 0, _UNPACK_SEQUENCE_TWO_TUPLE_r12, 0, 0 } }, + [_UNPACK_SEQUENCE_TUPLE] = { 1, 1, -1, { 0, _UNPACK_SEQUENCE_TUPLE_r10, 0, 0 } }, + [_UNPACK_SEQUENCE_LIST] = { 1, 1, -1, { 0, _UNPACK_SEQUENCE_LIST_r10, 0, 0 } }, + [_UNPACK_EX] = { 1, 1, -1, { 0, _UNPACK_EX_r10, 0, 0 } }, + [_STORE_ATTR] = { 2, 2, -2, { 0, 0, _STORE_ATTR_r20, 0 } }, + [_DELETE_ATTR] = { 1, 1, -1, { 0, _DELETE_ATTR_r10, 0, 0 } }, + [_STORE_GLOBAL] = { 1, 1, -1, { 0, _STORE_GLOBAL_r10, 0, 0 } }, + [_DELETE_GLOBAL] = { 0, 0, 0, { _DELETE_GLOBAL_r00, 0, 0, 0 } }, + [_LOAD_LOCALS] = { 0, 0, 1, { _LOAD_LOCALS_r01, 0, 0, 0 } }, + [_LOAD_NAME] = { 0, 0, 1, { _LOAD_NAME_r01, 0, 0, 0 } }, + [_LOAD_GLOBAL] = { 0, 0, 0, { _LOAD_GLOBAL_r00, 0, 0, 0 } }, + [_PUSH_NULL_CONDITIONAL] = { 0, 0, 0, { _PUSH_NULL_CONDITIONAL_r00, 0, 0, 0 } }, + [_GUARD_GLOBALS_VERSION] = { 0, 3, 0, { _GUARD_GLOBALS_VERSION_r00, _GUARD_GLOBALS_VERSION_r11, _GUARD_GLOBALS_VERSION_r22, _GUARD_GLOBALS_VERSION_r33 } }, + [_LOAD_GLOBAL_MODULE] = { 0, 2, 1, { _LOAD_GLOBAL_MODULE_r01, _LOAD_GLOBAL_MODULE_r12, _LOAD_GLOBAL_MODULE_r23, 0 } }, + [_LOAD_GLOBAL_BUILTINS] = { 0, 2, 1, { _LOAD_GLOBAL_BUILTINS_r01, _LOAD_GLOBAL_BUILTINS_r12, _LOAD_GLOBAL_BUILTINS_r23, 0 } }, + [_DELETE_FAST] = { 0, 0, 0, { _DELETE_FAST_r00, 0, 0, 0 } }, + [_MAKE_CELL] = { 0, 0, 0, { _MAKE_CELL_r00, 0, 0, 0 } }, + [_DELETE_DEREF] = { 0, 0, 0, { _DELETE_DEREF_r00, 0, 0, 0 } }, + [_LOAD_FROM_DICT_OR_DEREF] = { 1, 1, 0, { 0, _LOAD_FROM_DICT_OR_DEREF_r11, 0, 0 } }, + [_LOAD_DEREF] = { 0, 0, 1, { _LOAD_DEREF_r01, 0, 0, 0 } }, + [_STORE_DEREF] = { 1, 1, -1, { 0, _STORE_DEREF_r10, 0, 0 } }, + [_COPY_FREE_VARS] = { 0, 3, 0, { _COPY_FREE_VARS_r00, _COPY_FREE_VARS_r11, _COPY_FREE_VARS_r22, _COPY_FREE_VARS_r33 } }, + [_BUILD_STRING] = { 0, 0, 1, { _BUILD_STRING_r01, 0, 0, 0 } }, + [_BUILD_INTERPOLATION] = { 0, 0, 1, { _BUILD_INTERPOLATION_r01, 0, 0, 0 } }, + [_BUILD_TEMPLATE] = { 2, 2, -1, { 0, 0, _BUILD_TEMPLATE_r21, 0 } }, + [_BUILD_TUPLE] = { 0, 0, 1, { _BUILD_TUPLE_r01, 0, 0, 0 } }, + [_BUILD_LIST] = { 0, 0, 1, { _BUILD_LIST_r01, 0, 0, 0 } }, + [_LIST_EXTEND] = { 1, 1, -1, { 0, _LIST_EXTEND_r10, 0, 0 } }, + [_SET_UPDATE] = { 1, 1, -1, { 0, _SET_UPDATE_r10, 0, 0 } }, + [_BUILD_SET] = { 0, 0, 1, { _BUILD_SET_r01, 0, 0, 0 } }, + [_BUILD_MAP] = { 0, 0, 1, { _BUILD_MAP_r01, 0, 0, 0 } }, + [_SETUP_ANNOTATIONS] = { 0, 0, 0, { _SETUP_ANNOTATIONS_r00, 0, 0, 0 } }, + [_DICT_UPDATE] = { 1, 1, -1, { 0, _DICT_UPDATE_r10, 0, 0 } }, + [_DICT_MERGE] = { 1, 1, -1, { 0, _DICT_MERGE_r10, 0, 0 } }, + [_MAP_ADD] = { 2, 2, -2, { 0, 0, _MAP_ADD_r20, 0 } }, + [_LOAD_SUPER_ATTR_ATTR] = { 3, 3, -2, { 0, 0, 0, _LOAD_SUPER_ATTR_ATTR_r31 } }, + [_LOAD_SUPER_ATTR_METHOD] = { 3, 3, -1, { 0, 0, 0, _LOAD_SUPER_ATTR_METHOD_r32 } }, + [_LOAD_ATTR] = { 1, 1, -1, { 0, _LOAD_ATTR_r10, 0, 0 } }, + [_GUARD_TYPE_VERSION] = { 0, 3, 0, { _GUARD_TYPE_VERSION_r00, _GUARD_TYPE_VERSION_r11, _GUARD_TYPE_VERSION_r22, _GUARD_TYPE_VERSION_r33 } }, + [_GUARD_TYPE_VERSION_AND_LOCK] = { 0, 3, 0, { _GUARD_TYPE_VERSION_AND_LOCK_r00, _GUARD_TYPE_VERSION_AND_LOCK_r11, _GUARD_TYPE_VERSION_AND_LOCK_r22, _GUARD_TYPE_VERSION_AND_LOCK_r33 } }, + [_CHECK_MANAGED_OBJECT_HAS_VALUES] = { 0, 3, 0, { _CHECK_MANAGED_OBJECT_HAS_VALUES_r00, _CHECK_MANAGED_OBJECT_HAS_VALUES_r11, _CHECK_MANAGED_OBJECT_HAS_VALUES_r22, _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 } }, + [_LOAD_ATTR_INSTANCE_VALUE] = { 1, 1, 0, { 0, _LOAD_ATTR_INSTANCE_VALUE_r11, 0, 0 } }, + [_LOAD_ATTR_MODULE] = { 1, 1, 0, { 0, _LOAD_ATTR_MODULE_r11, 0, 0 } }, + [_LOAD_ATTR_WITH_HINT] = { 1, 1, 0, { 0, _LOAD_ATTR_WITH_HINT_r11, 0, 0 } }, + [_LOAD_ATTR_SLOT] = { 1, 1, 0, { 0, _LOAD_ATTR_SLOT_r11, 0, 0 } }, + [_CHECK_ATTR_CLASS] = { 0, 3, 0, { _CHECK_ATTR_CLASS_r00, _CHECK_ATTR_CLASS_r11, _CHECK_ATTR_CLASS_r22, _CHECK_ATTR_CLASS_r33 } }, + [_LOAD_ATTR_CLASS] = { 1, 1, 0, { 0, _LOAD_ATTR_CLASS_r11, 0, 0 } }, + [_LOAD_ATTR_PROPERTY_FRAME] = { 0, 3, 0, { _LOAD_ATTR_PROPERTY_FRAME_r00, _LOAD_ATTR_PROPERTY_FRAME_r11, _LOAD_ATTR_PROPERTY_FRAME_r22, _LOAD_ATTR_PROPERTY_FRAME_r33 } }, + [_GUARD_DORV_NO_DICT] = { 0, 3, 0, { _GUARD_DORV_NO_DICT_r00, _GUARD_DORV_NO_DICT_r11, _GUARD_DORV_NO_DICT_r22, _GUARD_DORV_NO_DICT_r33 } }, + [_STORE_ATTR_INSTANCE_VALUE] = { 2, 2, -2, { 0, 0, _STORE_ATTR_INSTANCE_VALUE_r20, 0 } }, + [_STORE_ATTR_WITH_HINT] = { 2, 2, -2, { 0, 0, _STORE_ATTR_WITH_HINT_r20, 0 } }, + [_STORE_ATTR_SLOT] = { 2, 2, -2, { 0, 0, _STORE_ATTR_SLOT_r20, 0 } }, + [_COMPARE_OP] = { 2, 2, -1, { 0, 0, _COMPARE_OP_r21, 0 } }, + [_COMPARE_OP_FLOAT] = { 1, 3, -1, { 0, _COMPARE_OP_FLOAT_r10, _COMPARE_OP_FLOAT_r21, _COMPARE_OP_FLOAT_r32 } }, + [_COMPARE_OP_INT] = { 1, 3, -1, { 0, _COMPARE_OP_INT_r10, _COMPARE_OP_INT_r21, _COMPARE_OP_INT_r32 } }, + [_COMPARE_OP_STR] = { 1, 3, -1, { 0, _COMPARE_OP_STR_r10, _COMPARE_OP_STR_r21, _COMPARE_OP_STR_r32 } }, + [_IS_OP] = { 2, 2, -1, { 0, 0, _IS_OP_r21, 0 } }, + [_CONTAINS_OP] = { 2, 2, -1, { 0, 0, _CONTAINS_OP_r21, 0 } }, + [_GUARD_TOS_ANY_SET] = { 0, 3, 0, { _GUARD_TOS_ANY_SET_r00, _GUARD_TOS_ANY_SET_r11, _GUARD_TOS_ANY_SET_r22, _GUARD_TOS_ANY_SET_r33 } }, + [_CONTAINS_OP_SET] = { 2, 2, -1, { 0, 0, _CONTAINS_OP_SET_r21, 0 } }, + [_CONTAINS_OP_DICT] = { 2, 2, -1, { 0, 0, _CONTAINS_OP_DICT_r21, 0 } }, + [_CHECK_EG_MATCH] = { 2, 2, 0, { 0, 0, _CHECK_EG_MATCH_r22, 0 } }, + [_CHECK_EXC_MATCH] = { 1, 1, 0, { 0, _CHECK_EXC_MATCH_r11, 0, 0 } }, + [_IMPORT_NAME] = { 2, 2, -1, { 0, 0, _IMPORT_NAME_r21, 0 } }, + [_IMPORT_FROM] = { 0, 0, 1, { _IMPORT_FROM_r01, 0, 0, 0 } }, + [_IS_NONE] = { 1, 1, 0, { 0, _IS_NONE_r11, 0, 0 } }, + [_GET_LEN] = { 0, 0, 1, { _GET_LEN_r01, 0, 0, 0 } }, + [_MATCH_CLASS] = { 3, 3, -2, { 0, 0, 0, _MATCH_CLASS_r31 } }, + [_MATCH_MAPPING] = { 0, 2, 1, { _MATCH_MAPPING_r01, _MATCH_MAPPING_r12, _MATCH_MAPPING_r23, 0 } }, + [_MATCH_SEQUENCE] = { 0, 2, 1, { _MATCH_SEQUENCE_r01, _MATCH_SEQUENCE_r12, _MATCH_SEQUENCE_r23, 0 } }, + [_MATCH_KEYS] = { 0, 0, 1, { _MATCH_KEYS_r01, 0, 0, 0 } }, + [_GET_ITER] = { 1, 1, 1, { 0, _GET_ITER_r12, 0, 0 } }, + [_GET_YIELD_FROM_ITER] = { 1, 1, 0, { 0, _GET_YIELD_FROM_ITER_r11, 0, 0 } }, + [_FOR_ITER_TIER_TWO] = { 0, 0, 1, { _FOR_ITER_TIER_TWO_r01, 0, 0, 0 } }, + [_ITER_CHECK_LIST] = { 0, 3, 0, { _ITER_CHECK_LIST_r00, _ITER_CHECK_LIST_r11, _ITER_CHECK_LIST_r22, _ITER_CHECK_LIST_r33 } }, + [_GUARD_NOT_EXHAUSTED_LIST] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_LIST_r00, _GUARD_NOT_EXHAUSTED_LIST_r11, _GUARD_NOT_EXHAUSTED_LIST_r22, _GUARD_NOT_EXHAUSTED_LIST_r33 } }, + [_ITER_NEXT_LIST_TIER_TWO] = { 0, 0, 1, { _ITER_NEXT_LIST_TIER_TWO_r01, 0, 0, 0 } }, + [_ITER_CHECK_TUPLE] = { 0, 3, 0, { _ITER_CHECK_TUPLE_r00, _ITER_CHECK_TUPLE_r11, _ITER_CHECK_TUPLE_r22, _ITER_CHECK_TUPLE_r33 } }, + [_GUARD_NOT_EXHAUSTED_TUPLE] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_TUPLE_r00, _GUARD_NOT_EXHAUSTED_TUPLE_r11, _GUARD_NOT_EXHAUSTED_TUPLE_r22, _GUARD_NOT_EXHAUSTED_TUPLE_r33 } }, + [_ITER_NEXT_TUPLE] = { 2, 2, 1, { 0, 0, _ITER_NEXT_TUPLE_r23, 0 } }, + [_ITER_CHECK_RANGE] = { 0, 3, 0, { _ITER_CHECK_RANGE_r00, _ITER_CHECK_RANGE_r11, _ITER_CHECK_RANGE_r22, _ITER_CHECK_RANGE_r33 } }, + [_GUARD_NOT_EXHAUSTED_RANGE] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_RANGE_r00, _GUARD_NOT_EXHAUSTED_RANGE_r11, _GUARD_NOT_EXHAUSTED_RANGE_r22, _GUARD_NOT_EXHAUSTED_RANGE_r33 } }, + [_ITER_NEXT_RANGE] = { 2, 2, 1, { 0, 0, _ITER_NEXT_RANGE_r23, 0 } }, + [_FOR_ITER_GEN_FRAME] = { 2, 2, 1, { 0, 0, _FOR_ITER_GEN_FRAME_r23, 0 } }, + [_INSERT_NULL] = { 1, 1, -1, { 0, _INSERT_NULL_r10, 0, 0 } }, + [_LOAD_SPECIAL] = { 0, 0, 0, { _LOAD_SPECIAL_r00, 0, 0, 0 } }, + [_WITH_EXCEPT_START] = { 0, 0, 1, { _WITH_EXCEPT_START_r01, 0, 0, 0 } }, + [_PUSH_EXC_INFO] = { 0, 2, 1, { _PUSH_EXC_INFO_r01, _PUSH_EXC_INFO_r12, _PUSH_EXC_INFO_r23, 0 } }, + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT] = { 0, 3, 0, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 } }, + [_GUARD_KEYS_VERSION] = { 0, 3, 0, { _GUARD_KEYS_VERSION_r00, _GUARD_KEYS_VERSION_r11, _GUARD_KEYS_VERSION_r22, _GUARD_KEYS_VERSION_r33 } }, + [_LOAD_ATTR_METHOD_WITH_VALUES] = { 0, 2, 1, { _LOAD_ATTR_METHOD_WITH_VALUES_r01, _LOAD_ATTR_METHOD_WITH_VALUES_r12, _LOAD_ATTR_METHOD_WITH_VALUES_r23, 0 } }, + [_LOAD_ATTR_METHOD_NO_DICT] = { 0, 2, 1, { _LOAD_ATTR_METHOD_NO_DICT_r01, _LOAD_ATTR_METHOD_NO_DICT_r12, _LOAD_ATTR_METHOD_NO_DICT_r23, 0 } }, + [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { 1, 1, 0, { 0, _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11, 0, 0 } }, + [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { 1, 1, 0, { 0, _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11, 0, 0 } }, + [_CHECK_ATTR_METHOD_LAZY_DICT] = { 0, 3, 0, { _CHECK_ATTR_METHOD_LAZY_DICT_r00, _CHECK_ATTR_METHOD_LAZY_DICT_r11, _CHECK_ATTR_METHOD_LAZY_DICT_r22, _CHECK_ATTR_METHOD_LAZY_DICT_r33 } }, + [_LOAD_ATTR_METHOD_LAZY_DICT] = { 0, 2, 1, { _LOAD_ATTR_METHOD_LAZY_DICT_r01, _LOAD_ATTR_METHOD_LAZY_DICT_r12, _LOAD_ATTR_METHOD_LAZY_DICT_r23, 0 } }, + [_MAYBE_EXPAND_METHOD] = { 0, 0, 0, { _MAYBE_EXPAND_METHOD_r00, 0, 0, 0 } }, + [_PY_FRAME_GENERAL] = { 0, 0, 1, { _PY_FRAME_GENERAL_r01, 0, 0, 0 } }, + [_CHECK_FUNCTION_VERSION] = { 0, 0, 0, { _CHECK_FUNCTION_VERSION_r00, 0, 0, 0 } }, + [_CHECK_FUNCTION_VERSION_INLINE] = { 0, 3, 0, { _CHECK_FUNCTION_VERSION_INLINE_r00, _CHECK_FUNCTION_VERSION_INLINE_r11, _CHECK_FUNCTION_VERSION_INLINE_r22, _CHECK_FUNCTION_VERSION_INLINE_r33 } }, + [_CHECK_METHOD_VERSION] = { 0, 0, 0, { _CHECK_METHOD_VERSION_r00, 0, 0, 0 } }, + [_EXPAND_METHOD] = { 0, 0, 0, { _EXPAND_METHOD_r00, 0, 0, 0 } }, + [_CHECK_IS_NOT_PY_CALLABLE] = { 0, 0, 0, { _CHECK_IS_NOT_PY_CALLABLE_r00, 0, 0, 0 } }, + [_CALL_NON_PY_GENERAL] = { 0, 0, 1, { _CALL_NON_PY_GENERAL_r01, 0, 0, 0 } }, + [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = { 0, 0, 0, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00, 0, 0, 0 } }, + [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = { 0, 0, 0, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00, 0, 0, 0 } }, + [_CHECK_PEP_523] = { 0, 3, 0, { _CHECK_PEP_523_r00, _CHECK_PEP_523_r11, _CHECK_PEP_523_r22, _CHECK_PEP_523_r33 } }, + [_CHECK_FUNCTION_EXACT_ARGS] = { 0, 0, 0, { _CHECK_FUNCTION_EXACT_ARGS_r00, 0, 0, 0 } }, + [_CHECK_STACK_SPACE] = { 0, 0, 0, { _CHECK_STACK_SPACE_r00, 0, 0, 0 } }, + [_CHECK_RECURSION_REMAINING] = { 0, 3, 0, { _CHECK_RECURSION_REMAINING_r00, _CHECK_RECURSION_REMAINING_r11, _CHECK_RECURSION_REMAINING_r22, _CHECK_RECURSION_REMAINING_r33 } }, + [_INIT_CALL_PY_EXACT_ARGS_0] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_0_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_1] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_1_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_2] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_2_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_3] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_3_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_4] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_4_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_r01, 0, 0, 0 } }, + [_PUSH_FRAME] = { 1, 1, -1, { 0, _PUSH_FRAME_r10, 0, 0 } }, + [_GUARD_NOS_NULL] = { 0, 3, 0, { _GUARD_NOS_NULL_r00, _GUARD_NOS_NULL_r11, _GUARD_NOS_NULL_r22, _GUARD_NOS_NULL_r33 } }, + [_GUARD_NOS_NOT_NULL] = { 0, 3, 0, { _GUARD_NOS_NOT_NULL_r00, _GUARD_NOS_NOT_NULL_r11, _GUARD_NOS_NOT_NULL_r22, _GUARD_NOS_NOT_NULL_r33 } }, + [_GUARD_THIRD_NULL] = { 3, 3, 0, { 0, 0, 0, _GUARD_THIRD_NULL_r33 } }, + [_GUARD_CALLABLE_TYPE_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_TYPE_1_r33 } }, + [_CALL_TYPE_1] = { 3, 3, -2, { 0, 0, 0, _CALL_TYPE_1_r31 } }, + [_GUARD_CALLABLE_STR_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_STR_1_r33 } }, + [_CALL_STR_1] = { 3, 3, -2, { 0, 0, 0, _CALL_STR_1_r31 } }, + [_GUARD_CALLABLE_TUPLE_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_TUPLE_1_r33 } }, + [_CALL_TUPLE_1] = { 3, 3, -2, { 0, 0, 0, _CALL_TUPLE_1_r31 } }, + [_CHECK_AND_ALLOCATE_OBJECT] = { 0, 0, 0, { _CHECK_AND_ALLOCATE_OBJECT_r00, 0, 0, 0 } }, + [_CREATE_INIT_FRAME] = { 0, 0, 1, { _CREATE_INIT_FRAME_r01, 0, 0, 0 } }, + [_EXIT_INIT_CHECK] = { 1, 1, -1, { 0, _EXIT_INIT_CHECK_r10, 0, 0 } }, + [_CALL_BUILTIN_CLASS] = { 0, 0, 1, { _CALL_BUILTIN_CLASS_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_O] = { 0, 0, 1, { _CALL_BUILTIN_O_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST] = { 0, 0, 1, { _CALL_BUILTIN_FAST_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, + [_GUARD_CALLABLE_LEN] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LEN_r33 } }, + [_CALL_LEN] = { 3, 3, -2, { 0, 0, 0, _CALL_LEN_r31 } }, + [_GUARD_CALLABLE_ISINSTANCE] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_ISINSTANCE_r33 } }, + [_CALL_ISINSTANCE] = { 3, 3, -2, { 0, 0, 0, _CALL_ISINSTANCE_r31 } }, + [_GUARD_CALLABLE_LIST_APPEND] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LIST_APPEND_r33 } }, + [_CALL_LIST_APPEND] = { 3, 3, -3, { 0, 0, 0, _CALL_LIST_APPEND_r30 } }, + [_CALL_METHOD_DESCRIPTOR_O] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_O_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_NOARGS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_NOARGS_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_r01, 0, 0, 0 } }, + [_MAYBE_EXPAND_METHOD_KW] = { 0, 0, 0, { _MAYBE_EXPAND_METHOD_KW_r00, 0, 0, 0 } }, + [_PY_FRAME_KW] = { 1, 1, 0, { 0, _PY_FRAME_KW_r11, 0, 0 } }, + [_CHECK_FUNCTION_VERSION_KW] = { 1, 1, 0, { 0, _CHECK_FUNCTION_VERSION_KW_r11, 0, 0 } }, + [_CHECK_METHOD_VERSION_KW] = { 1, 1, 0, { 0, _CHECK_METHOD_VERSION_KW_r11, 0, 0 } }, + [_EXPAND_METHOD_KW] = { 0, 0, 0, { _EXPAND_METHOD_KW_r00, 0, 0, 0 } }, + [_CHECK_IS_NOT_PY_CALLABLE_KW] = { 1, 1, 0, { 0, _CHECK_IS_NOT_PY_CALLABLE_KW_r11, 0, 0 } }, + [_CALL_KW_NON_PY] = { 1, 1, 0, { 0, _CALL_KW_NON_PY_r11, 0, 0 } }, + [_MAKE_CALLARGS_A_TUPLE] = { 0, 0, 0, { _MAKE_CALLARGS_A_TUPLE_r00, 0, 0, 0 } }, + [_MAKE_FUNCTION] = { 1, 1, 0, { 0, _MAKE_FUNCTION_r11, 0, 0 } }, + [_SET_FUNCTION_ATTRIBUTE] = { 1, 3, -1, { 0, _SET_FUNCTION_ATTRIBUTE_r10, _SET_FUNCTION_ATTRIBUTE_r21, _SET_FUNCTION_ATTRIBUTE_r32 } }, + [_RETURN_GENERATOR] = { 0, 0, 1, { _RETURN_GENERATOR_r01, 0, 0, 0 } }, + [_BUILD_SLICE] = { 0, 0, 1, { _BUILD_SLICE_r01, 0, 0, 0 } }, + [_CONVERT_VALUE] = { 1, 1, 0, { 0, _CONVERT_VALUE_r11, 0, 0 } }, + [_FORMAT_SIMPLE] = { 1, 1, 0, { 0, _FORMAT_SIMPLE_r11, 0, 0 } }, + [_FORMAT_WITH_SPEC] = { 2, 2, -1, { 0, 0, _FORMAT_WITH_SPEC_r21, 0 } }, + [_COPY] = { 0, 0, 1, { _COPY_r01, 0, 0, 0 } }, + [_BINARY_OP] = { 2, 2, -1, { 0, 0, _BINARY_OP_r21, 0 } }, + [_SWAP] = { 1, 1, 0, { 0, _SWAP_r11, 0, 0 } }, + [_GUARD_IS_TRUE_POP] = { 1, 1, -1, { 0, _GUARD_IS_TRUE_POP_r10, 0, 0 } }, + [_GUARD_IS_FALSE_POP] = { 1, 1, -1, { 0, _GUARD_IS_FALSE_POP_r10, 0, 0 } }, + [_GUARD_IS_NONE_POP] = { 1, 1, -1, { 0, _GUARD_IS_NONE_POP_r10, 0, 0 } }, + [_GUARD_IS_NOT_NONE_POP] = { 1, 1, -1, { 0, _GUARD_IS_NOT_NONE_POP_r10, 0, 0 } }, + [_JUMP_TO_TOP] = { 0, 0, 0, { _JUMP_TO_TOP_r00, 0, 0, 0 } }, + [_SET_IP] = { 0, 3, 0, { _SET_IP_r00, _SET_IP_r11, _SET_IP_r22, _SET_IP_r33 } }, + [_CHECK_STACK_SPACE_OPERAND] = { 0, 3, 0, { _CHECK_STACK_SPACE_OPERAND_r00, _CHECK_STACK_SPACE_OPERAND_r11, _CHECK_STACK_SPACE_OPERAND_r22, _CHECK_STACK_SPACE_OPERAND_r33 } }, + [_SAVE_RETURN_OFFSET] = { 0, 3, 0, { _SAVE_RETURN_OFFSET_r00, _SAVE_RETURN_OFFSET_r11, _SAVE_RETURN_OFFSET_r22, _SAVE_RETURN_OFFSET_r33 } }, + [_EXIT_TRACE] = { 0, 3, 0, { _EXIT_TRACE_r00, _EXIT_TRACE_r11, _EXIT_TRACE_r22, _EXIT_TRACE_r33 } }, + [_CHECK_VALIDITY] = { 0, 3, 0, { _CHECK_VALIDITY_r00, _CHECK_VALIDITY_r11, _CHECK_VALIDITY_r22, _CHECK_VALIDITY_r33 } }, + [_LOAD_CONST_INLINE] = { 0, 2, 1, { _LOAD_CONST_INLINE_r01, _LOAD_CONST_INLINE_r12, _LOAD_CONST_INLINE_r23, 0 } }, + [_POP_TOP_LOAD_CONST_INLINE] = { 1, 1, 0, { 0, _POP_TOP_LOAD_CONST_INLINE_r11, 0, 0 } }, + [_LOAD_CONST_INLINE_BORROW] = { 0, 2, 1, { _LOAD_CONST_INLINE_BORROW_r01, _LOAD_CONST_INLINE_BORROW_r12, _LOAD_CONST_INLINE_BORROW_r23, 0 } }, + [_POP_CALL] = { 2, 2, -2, { 0, 0, _POP_CALL_r20, 0 } }, + [_POP_CALL_ONE] = { 3, 3, -3, { 0, 0, 0, _POP_CALL_ONE_r30 } }, + [_POP_CALL_TWO] = { 3, 3, -3, { 0, 0, 0, _POP_CALL_TWO_r30 } }, + [_POP_TOP_LOAD_CONST_INLINE_BORROW] = { 1, 1, 0, { 0, _POP_TOP_LOAD_CONST_INLINE_BORROW_r11, 0, 0 } }, + [_POP_TWO_LOAD_CONST_INLINE_BORROW] = { 2, 2, -1, { 0, 0, _POP_TWO_LOAD_CONST_INLINE_BORROW_r21, 0 } }, + [_POP_CALL_LOAD_CONST_INLINE_BORROW] = { 2, 2, -1, { 0, 0, _POP_CALL_LOAD_CONST_INLINE_BORROW_r21, 0 } }, + [_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW] = { 3, 3, -2, { 0, 0, 0, _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 } }, + [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW] = { 3, 3, -2, { 0, 0, 0, _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 } }, + [_LOAD_CONST_UNDER_INLINE] = { 0, 2, 1, { _LOAD_CONST_UNDER_INLINE_r01, _LOAD_CONST_UNDER_INLINE_r12, _LOAD_CONST_UNDER_INLINE_r23, 0 } }, + [_LOAD_CONST_UNDER_INLINE_BORROW] = { 0, 2, 1, { _LOAD_CONST_UNDER_INLINE_BORROW_r01, _LOAD_CONST_UNDER_INLINE_BORROW_r12, _LOAD_CONST_UNDER_INLINE_BORROW_r23, 0 } }, + [_CHECK_FUNCTION] = { 0, 3, 0, { _CHECK_FUNCTION_r00, _CHECK_FUNCTION_r11, _CHECK_FUNCTION_r22, _CHECK_FUNCTION_r33 } }, + [_START_EXECUTOR] = { 0, 0, 0, { _START_EXECUTOR_r00, 0, 0, 0 } }, + [_MAKE_WARM] = { 0, 3, 0, { _MAKE_WARM_r00, _MAKE_WARM_r11, _MAKE_WARM_r22, _MAKE_WARM_r33 } }, + [_FATAL_ERROR] = { 0, 3, 0, { _FATAL_ERROR_r00, _FATAL_ERROR_r11, _FATAL_ERROR_r22, _FATAL_ERROR_r33 } }, + [_DEOPT] = { 0, 3, 0, { _DEOPT_r00, _DEOPT_r11, _DEOPT_r22, _DEOPT_r33 } }, + [_ERROR_POP_N] = { 0, 3, 0, { _ERROR_POP_N_r00, _ERROR_POP_N_r11, _ERROR_POP_N_r22, _ERROR_POP_N_r33 } }, + [_TIER2_RESUME_CHECK] = { 0, 3, 0, { _TIER2_RESUME_CHECK_r00, _TIER2_RESUME_CHECK_r11, _TIER2_RESUME_CHECK_r22, _TIER2_RESUME_CHECK_r33 } }, +}; + +const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { + [_NOP_r00] = _NOP, + [_NOP_r11] = _NOP, + [_NOP_r22] = _NOP, + [_NOP_r33] = _NOP, + [_CHECK_PERIODIC_r00] = _CHECK_PERIODIC, + [_CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00] = _CHECK_PERIODIC_IF_NOT_YIELD_FROM, + [_RESUME_CHECK_r00] = _RESUME_CHECK, + [_RESUME_CHECK_r11] = _RESUME_CHECK, + [_RESUME_CHECK_r22] = _RESUME_CHECK, + [_RESUME_CHECK_r33] = _RESUME_CHECK, + [_LOAD_FAST_CHECK_r01] = _LOAD_FAST_CHECK, + [_LOAD_FAST_0_r01] = _LOAD_FAST_0, + [_LOAD_FAST_0_r12] = _LOAD_FAST_0, + [_LOAD_FAST_0_r23] = _LOAD_FAST_0, + [_LOAD_FAST_1_r01] = _LOAD_FAST_1, + [_LOAD_FAST_1_r12] = _LOAD_FAST_1, + [_LOAD_FAST_1_r23] = _LOAD_FAST_1, + [_LOAD_FAST_2_r01] = _LOAD_FAST_2, + [_LOAD_FAST_2_r12] = _LOAD_FAST_2, + [_LOAD_FAST_2_r23] = _LOAD_FAST_2, + [_LOAD_FAST_3_r01] = _LOAD_FAST_3, + [_LOAD_FAST_3_r12] = _LOAD_FAST_3, + [_LOAD_FAST_3_r23] = _LOAD_FAST_3, + [_LOAD_FAST_4_r01] = _LOAD_FAST_4, + [_LOAD_FAST_4_r12] = _LOAD_FAST_4, + [_LOAD_FAST_4_r23] = _LOAD_FAST_4, + [_LOAD_FAST_5_r01] = _LOAD_FAST_5, + [_LOAD_FAST_5_r12] = _LOAD_FAST_5, + [_LOAD_FAST_5_r23] = _LOAD_FAST_5, + [_LOAD_FAST_6_r01] = _LOAD_FAST_6, + [_LOAD_FAST_6_r12] = _LOAD_FAST_6, + [_LOAD_FAST_6_r23] = _LOAD_FAST_6, + [_LOAD_FAST_7_r01] = _LOAD_FAST_7, + [_LOAD_FAST_7_r12] = _LOAD_FAST_7, + [_LOAD_FAST_7_r23] = _LOAD_FAST_7, + [_LOAD_FAST_r01] = _LOAD_FAST, + [_LOAD_FAST_r12] = _LOAD_FAST, + [_LOAD_FAST_r23] = _LOAD_FAST, + [_LOAD_FAST_BORROW_0_r01] = _LOAD_FAST_BORROW_0, + [_LOAD_FAST_BORROW_0_r12] = _LOAD_FAST_BORROW_0, + [_LOAD_FAST_BORROW_0_r23] = _LOAD_FAST_BORROW_0, + [_LOAD_FAST_BORROW_1_r01] = _LOAD_FAST_BORROW_1, + [_LOAD_FAST_BORROW_1_r12] = _LOAD_FAST_BORROW_1, + [_LOAD_FAST_BORROW_1_r23] = _LOAD_FAST_BORROW_1, + [_LOAD_FAST_BORROW_2_r01] = _LOAD_FAST_BORROW_2, + [_LOAD_FAST_BORROW_2_r12] = _LOAD_FAST_BORROW_2, + [_LOAD_FAST_BORROW_2_r23] = _LOAD_FAST_BORROW_2, + [_LOAD_FAST_BORROW_3_r01] = _LOAD_FAST_BORROW_3, + [_LOAD_FAST_BORROW_3_r12] = _LOAD_FAST_BORROW_3, + [_LOAD_FAST_BORROW_3_r23] = _LOAD_FAST_BORROW_3, + [_LOAD_FAST_BORROW_4_r01] = _LOAD_FAST_BORROW_4, + [_LOAD_FAST_BORROW_4_r12] = _LOAD_FAST_BORROW_4, + [_LOAD_FAST_BORROW_4_r23] = _LOAD_FAST_BORROW_4, + [_LOAD_FAST_BORROW_5_r01] = _LOAD_FAST_BORROW_5, + [_LOAD_FAST_BORROW_5_r12] = _LOAD_FAST_BORROW_5, + [_LOAD_FAST_BORROW_5_r23] = _LOAD_FAST_BORROW_5, + [_LOAD_FAST_BORROW_6_r01] = _LOAD_FAST_BORROW_6, + [_LOAD_FAST_BORROW_6_r12] = _LOAD_FAST_BORROW_6, + [_LOAD_FAST_BORROW_6_r23] = _LOAD_FAST_BORROW_6, + [_LOAD_FAST_BORROW_7_r01] = _LOAD_FAST_BORROW_7, + [_LOAD_FAST_BORROW_7_r12] = _LOAD_FAST_BORROW_7, + [_LOAD_FAST_BORROW_7_r23] = _LOAD_FAST_BORROW_7, + [_LOAD_FAST_BORROW_r01] = _LOAD_FAST_BORROW, + [_LOAD_FAST_BORROW_r12] = _LOAD_FAST_BORROW, + [_LOAD_FAST_BORROW_r23] = _LOAD_FAST_BORROW, + [_LOAD_FAST_AND_CLEAR_r01] = _LOAD_FAST_AND_CLEAR, + [_LOAD_FAST_AND_CLEAR_r12] = _LOAD_FAST_AND_CLEAR, + [_LOAD_FAST_AND_CLEAR_r23] = _LOAD_FAST_AND_CLEAR, + [_LOAD_CONST_r01] = _LOAD_CONST, + [_LOAD_CONST_r12] = _LOAD_CONST, + [_LOAD_CONST_r23] = _LOAD_CONST, + [_LOAD_SMALL_INT_0_r01] = _LOAD_SMALL_INT_0, + [_LOAD_SMALL_INT_0_r12] = _LOAD_SMALL_INT_0, + [_LOAD_SMALL_INT_0_r23] = _LOAD_SMALL_INT_0, + [_LOAD_SMALL_INT_1_r01] = _LOAD_SMALL_INT_1, + [_LOAD_SMALL_INT_1_r12] = _LOAD_SMALL_INT_1, + [_LOAD_SMALL_INT_1_r23] = _LOAD_SMALL_INT_1, + [_LOAD_SMALL_INT_2_r01] = _LOAD_SMALL_INT_2, + [_LOAD_SMALL_INT_2_r12] = _LOAD_SMALL_INT_2, + [_LOAD_SMALL_INT_2_r23] = _LOAD_SMALL_INT_2, + [_LOAD_SMALL_INT_3_r01] = _LOAD_SMALL_INT_3, + [_LOAD_SMALL_INT_3_r12] = _LOAD_SMALL_INT_3, + [_LOAD_SMALL_INT_3_r23] = _LOAD_SMALL_INT_3, + [_LOAD_SMALL_INT_r01] = _LOAD_SMALL_INT, + [_LOAD_SMALL_INT_r12] = _LOAD_SMALL_INT, + [_LOAD_SMALL_INT_r23] = _LOAD_SMALL_INT, + [_STORE_FAST_0_r10] = _STORE_FAST_0, + [_STORE_FAST_1_r10] = _STORE_FAST_1, + [_STORE_FAST_2_r10] = _STORE_FAST_2, + [_STORE_FAST_3_r10] = _STORE_FAST_3, + [_STORE_FAST_4_r10] = _STORE_FAST_4, + [_STORE_FAST_5_r10] = _STORE_FAST_5, + [_STORE_FAST_6_r10] = _STORE_FAST_6, + [_STORE_FAST_7_r10] = _STORE_FAST_7, + [_STORE_FAST_r10] = _STORE_FAST, + [_POP_TOP_r10] = _POP_TOP, + [_POP_TWO_r20] = _POP_TWO, + [_PUSH_NULL_r01] = _PUSH_NULL, + [_PUSH_NULL_r12] = _PUSH_NULL, + [_PUSH_NULL_r23] = _PUSH_NULL, + [_END_FOR_r10] = _END_FOR, + [_POP_ITER_r20] = _POP_ITER, + [_END_SEND_r21] = _END_SEND, + [_UNARY_NEGATIVE_r11] = _UNARY_NEGATIVE, + [_UNARY_NOT_r11] = _UNARY_NOT, + [_UNARY_NOT_r00] = _UNARY_NOT, + [_UNARY_NOT_r22] = _UNARY_NOT, + [_UNARY_NOT_r33] = _UNARY_NOT, + [_TO_BOOL_r11] = _TO_BOOL, + [_TO_BOOL_BOOL_r11] = _TO_BOOL_BOOL, + [_TO_BOOL_BOOL_r00] = _TO_BOOL_BOOL, + [_TO_BOOL_BOOL_r22] = _TO_BOOL_BOOL, + [_TO_BOOL_BOOL_r33] = _TO_BOOL_BOOL, + [_TO_BOOL_INT_r11] = _TO_BOOL_INT, + [_GUARD_NOS_LIST_r22] = _GUARD_NOS_LIST, + [_GUARD_NOS_LIST_r00] = _GUARD_NOS_LIST, + [_GUARD_NOS_LIST_r11] = _GUARD_NOS_LIST, + [_GUARD_NOS_LIST_r33] = _GUARD_NOS_LIST, + [_GUARD_TOS_LIST_r11] = _GUARD_TOS_LIST, + [_GUARD_TOS_LIST_r00] = _GUARD_TOS_LIST, + [_GUARD_TOS_LIST_r22] = _GUARD_TOS_LIST, + [_GUARD_TOS_LIST_r33] = _GUARD_TOS_LIST, + [_GUARD_TOS_SLICE_r11] = _GUARD_TOS_SLICE, + [_GUARD_TOS_SLICE_r00] = _GUARD_TOS_SLICE, + [_GUARD_TOS_SLICE_r22] = _GUARD_TOS_SLICE, + [_GUARD_TOS_SLICE_r33] = _GUARD_TOS_SLICE, + [_TO_BOOL_LIST_r11] = _TO_BOOL_LIST, + [_TO_BOOL_NONE_r11] = _TO_BOOL_NONE, + [_TO_BOOL_NONE_r00] = _TO_BOOL_NONE, + [_TO_BOOL_NONE_r22] = _TO_BOOL_NONE, + [_TO_BOOL_NONE_r33] = _TO_BOOL_NONE, + [_GUARD_NOS_UNICODE_r22] = _GUARD_NOS_UNICODE, + [_GUARD_NOS_UNICODE_r00] = _GUARD_NOS_UNICODE, + [_GUARD_NOS_UNICODE_r11] = _GUARD_NOS_UNICODE, + [_GUARD_NOS_UNICODE_r33] = _GUARD_NOS_UNICODE, + [_GUARD_TOS_UNICODE_r11] = _GUARD_TOS_UNICODE, + [_GUARD_TOS_UNICODE_r00] = _GUARD_TOS_UNICODE, + [_GUARD_TOS_UNICODE_r22] = _GUARD_TOS_UNICODE, + [_GUARD_TOS_UNICODE_r33] = _GUARD_TOS_UNICODE, + [_TO_BOOL_STR_r11] = _TO_BOOL_STR, + [_REPLACE_WITH_TRUE_r11] = _REPLACE_WITH_TRUE, + [_UNARY_INVERT_r11] = _UNARY_INVERT, + [_GUARD_NOS_INT_r22] = _GUARD_NOS_INT, + [_GUARD_NOS_INT_r00] = _GUARD_NOS_INT, + [_GUARD_NOS_INT_r11] = _GUARD_NOS_INT, + [_GUARD_NOS_INT_r33] = _GUARD_NOS_INT, + [_GUARD_TOS_INT_r11] = _GUARD_TOS_INT, + [_GUARD_TOS_INT_r00] = _GUARD_TOS_INT, + [_GUARD_TOS_INT_r22] = _GUARD_TOS_INT, + [_GUARD_TOS_INT_r33] = _GUARD_TOS_INT, + [_BINARY_OP_MULTIPLY_INT_r21] = _BINARY_OP_MULTIPLY_INT, + [_BINARY_OP_ADD_INT_r21] = _BINARY_OP_ADD_INT, + [_BINARY_OP_SUBTRACT_INT_r21] = _BINARY_OP_SUBTRACT_INT, + [_GUARD_NOS_FLOAT_r22] = _GUARD_NOS_FLOAT, + [_GUARD_NOS_FLOAT_r00] = _GUARD_NOS_FLOAT, + [_GUARD_NOS_FLOAT_r11] = _GUARD_NOS_FLOAT, + [_GUARD_NOS_FLOAT_r33] = _GUARD_NOS_FLOAT, + [_GUARD_TOS_FLOAT_r11] = _GUARD_TOS_FLOAT, + [_GUARD_TOS_FLOAT_r00] = _GUARD_TOS_FLOAT, + [_GUARD_TOS_FLOAT_r22] = _GUARD_TOS_FLOAT, + [_GUARD_TOS_FLOAT_r33] = _GUARD_TOS_FLOAT, + [_BINARY_OP_MULTIPLY_FLOAT_r21] = _BINARY_OP_MULTIPLY_FLOAT, + [_BINARY_OP_MULTIPLY_FLOAT_r10] = _BINARY_OP_MULTIPLY_FLOAT, + [_BINARY_OP_MULTIPLY_FLOAT_r32] = _BINARY_OP_MULTIPLY_FLOAT, + [_BINARY_OP_ADD_FLOAT_r21] = _BINARY_OP_ADD_FLOAT, + [_BINARY_OP_ADD_FLOAT_r10] = _BINARY_OP_ADD_FLOAT, + [_BINARY_OP_ADD_FLOAT_r32] = _BINARY_OP_ADD_FLOAT, + [_BINARY_OP_SUBTRACT_FLOAT_r21] = _BINARY_OP_SUBTRACT_FLOAT, + [_BINARY_OP_SUBTRACT_FLOAT_r10] = _BINARY_OP_SUBTRACT_FLOAT, + [_BINARY_OP_SUBTRACT_FLOAT_r32] = _BINARY_OP_SUBTRACT_FLOAT, + [_BINARY_OP_ADD_UNICODE_r21] = _BINARY_OP_ADD_UNICODE, + [_BINARY_OP_ADD_UNICODE_r10] = _BINARY_OP_ADD_UNICODE, + [_BINARY_OP_ADD_UNICODE_r32] = _BINARY_OP_ADD_UNICODE, + [_BINARY_OP_INPLACE_ADD_UNICODE_r20] = _BINARY_OP_INPLACE_ADD_UNICODE, + [_GUARD_BINARY_OP_EXTEND_r00] = _GUARD_BINARY_OP_EXTEND, + [_BINARY_OP_EXTEND_r21] = _BINARY_OP_EXTEND, + [_BINARY_SLICE_r31] = _BINARY_SLICE, + [_STORE_SLICE_r30] = _STORE_SLICE, + [_BINARY_OP_SUBSCR_LIST_INT_r21] = _BINARY_OP_SUBSCR_LIST_INT, + [_BINARY_OP_SUBSCR_LIST_SLICE_r21] = _BINARY_OP_SUBSCR_LIST_SLICE, + [_BINARY_OP_SUBSCR_STR_INT_r21] = _BINARY_OP_SUBSCR_STR_INT, + [_GUARD_NOS_TUPLE_r22] = _GUARD_NOS_TUPLE, + [_GUARD_NOS_TUPLE_r00] = _GUARD_NOS_TUPLE, + [_GUARD_NOS_TUPLE_r11] = _GUARD_NOS_TUPLE, + [_GUARD_NOS_TUPLE_r33] = _GUARD_NOS_TUPLE, + [_GUARD_TOS_TUPLE_r11] = _GUARD_TOS_TUPLE, + [_GUARD_TOS_TUPLE_r00] = _GUARD_TOS_TUPLE, + [_GUARD_TOS_TUPLE_r22] = _GUARD_TOS_TUPLE, + [_GUARD_TOS_TUPLE_r33] = _GUARD_TOS_TUPLE, + [_BINARY_OP_SUBSCR_TUPLE_INT_r21] = _BINARY_OP_SUBSCR_TUPLE_INT, + [_GUARD_NOS_DICT_r22] = _GUARD_NOS_DICT, + [_GUARD_NOS_DICT_r00] = _GUARD_NOS_DICT, + [_GUARD_NOS_DICT_r11] = _GUARD_NOS_DICT, + [_GUARD_NOS_DICT_r33] = _GUARD_NOS_DICT, + [_GUARD_TOS_DICT_r11] = _GUARD_TOS_DICT, + [_GUARD_TOS_DICT_r00] = _GUARD_TOS_DICT, + [_GUARD_TOS_DICT_r22] = _GUARD_TOS_DICT, + [_GUARD_TOS_DICT_r33] = _GUARD_TOS_DICT, + [_BINARY_OP_SUBSCR_DICT_r21] = _BINARY_OP_SUBSCR_DICT, + [_BINARY_OP_SUBSCR_CHECK_FUNC_r23] = _BINARY_OP_SUBSCR_CHECK_FUNC, + [_BINARY_OP_SUBSCR_INIT_CALL_r31] = _BINARY_OP_SUBSCR_INIT_CALL, + [_LIST_APPEND_r10] = _LIST_APPEND, + [_SET_ADD_r10] = _SET_ADD, + [_STORE_SUBSCR_r30] = _STORE_SUBSCR, + [_STORE_SUBSCR_LIST_INT_r30] = _STORE_SUBSCR_LIST_INT, + [_STORE_SUBSCR_DICT_r30] = _STORE_SUBSCR_DICT, + [_DELETE_SUBSCR_r20] = _DELETE_SUBSCR, + [_CALL_INTRINSIC_1_r11] = _CALL_INTRINSIC_1, + [_CALL_INTRINSIC_2_r21] = _CALL_INTRINSIC_2, + [_RETURN_VALUE_r11] = _RETURN_VALUE, + [_GET_AITER_r11] = _GET_AITER, + [_GET_ANEXT_r01] = _GET_ANEXT, + [_GET_AWAITABLE_r11] = _GET_AWAITABLE, + [_SEND_GEN_FRAME_r22] = _SEND_GEN_FRAME, + [_SEND_GEN_FRAME_r00] = _SEND_GEN_FRAME, + [_SEND_GEN_FRAME_r11] = _SEND_GEN_FRAME, + [_SEND_GEN_FRAME_r33] = _SEND_GEN_FRAME, + [_YIELD_VALUE_r11] = _YIELD_VALUE, + [_YIELD_VALUE_r00] = _YIELD_VALUE, + [_YIELD_VALUE_r22] = _YIELD_VALUE, + [_YIELD_VALUE_r33] = _YIELD_VALUE, + [_POP_EXCEPT_r10] = _POP_EXCEPT, + [_LOAD_COMMON_CONSTANT_r01] = _LOAD_COMMON_CONSTANT, + [_LOAD_COMMON_CONSTANT_r12] = _LOAD_COMMON_CONSTANT, + [_LOAD_COMMON_CONSTANT_r23] = _LOAD_COMMON_CONSTANT, + [_LOAD_BUILD_CLASS_r01] = _LOAD_BUILD_CLASS, + [_STORE_NAME_r10] = _STORE_NAME, + [_DELETE_NAME_r00] = _DELETE_NAME, + [_UNPACK_SEQUENCE_r10] = _UNPACK_SEQUENCE, + [_UNPACK_SEQUENCE_TWO_TUPLE_r12] = _UNPACK_SEQUENCE_TWO_TUPLE, + [_UNPACK_SEQUENCE_TUPLE_r10] = _UNPACK_SEQUENCE_TUPLE, + [_UNPACK_SEQUENCE_LIST_r10] = _UNPACK_SEQUENCE_LIST, + [_UNPACK_EX_r10] = _UNPACK_EX, + [_STORE_ATTR_r20] = _STORE_ATTR, + [_DELETE_ATTR_r10] = _DELETE_ATTR, + [_STORE_GLOBAL_r10] = _STORE_GLOBAL, + [_DELETE_GLOBAL_r00] = _DELETE_GLOBAL, + [_LOAD_LOCALS_r01] = _LOAD_LOCALS, + [_LOAD_NAME_r01] = _LOAD_NAME, + [_LOAD_GLOBAL_r00] = _LOAD_GLOBAL, + [_PUSH_NULL_CONDITIONAL_r00] = _PUSH_NULL_CONDITIONAL, + [_GUARD_GLOBALS_VERSION_r00] = _GUARD_GLOBALS_VERSION, + [_GUARD_GLOBALS_VERSION_r11] = _GUARD_GLOBALS_VERSION, + [_GUARD_GLOBALS_VERSION_r22] = _GUARD_GLOBALS_VERSION, + [_GUARD_GLOBALS_VERSION_r33] = _GUARD_GLOBALS_VERSION, + [_LOAD_GLOBAL_MODULE_r01] = _LOAD_GLOBAL_MODULE, + [_LOAD_GLOBAL_MODULE_r12] = _LOAD_GLOBAL_MODULE, + [_LOAD_GLOBAL_MODULE_r23] = _LOAD_GLOBAL_MODULE, + [_LOAD_GLOBAL_BUILTINS_r01] = _LOAD_GLOBAL_BUILTINS, + [_LOAD_GLOBAL_BUILTINS_r12] = _LOAD_GLOBAL_BUILTINS, + [_LOAD_GLOBAL_BUILTINS_r23] = _LOAD_GLOBAL_BUILTINS, + [_DELETE_FAST_r00] = _DELETE_FAST, + [_MAKE_CELL_r00] = _MAKE_CELL, + [_DELETE_DEREF_r00] = _DELETE_DEREF, + [_LOAD_FROM_DICT_OR_DEREF_r11] = _LOAD_FROM_DICT_OR_DEREF, + [_LOAD_DEREF_r01] = _LOAD_DEREF, + [_STORE_DEREF_r10] = _STORE_DEREF, + [_COPY_FREE_VARS_r00] = _COPY_FREE_VARS, + [_COPY_FREE_VARS_r11] = _COPY_FREE_VARS, + [_COPY_FREE_VARS_r22] = _COPY_FREE_VARS, + [_COPY_FREE_VARS_r33] = _COPY_FREE_VARS, + [_BUILD_STRING_r01] = _BUILD_STRING, + [_BUILD_INTERPOLATION_r01] = _BUILD_INTERPOLATION, + [_BUILD_TEMPLATE_r21] = _BUILD_TEMPLATE, + [_BUILD_TUPLE_r01] = _BUILD_TUPLE, + [_BUILD_LIST_r01] = _BUILD_LIST, + [_LIST_EXTEND_r10] = _LIST_EXTEND, + [_SET_UPDATE_r10] = _SET_UPDATE, + [_BUILD_SET_r01] = _BUILD_SET, + [_BUILD_MAP_r01] = _BUILD_MAP, + [_SETUP_ANNOTATIONS_r00] = _SETUP_ANNOTATIONS, + [_DICT_UPDATE_r10] = _DICT_UPDATE, + [_DICT_MERGE_r10] = _DICT_MERGE, + [_MAP_ADD_r20] = _MAP_ADD, + [_LOAD_SUPER_ATTR_ATTR_r31] = _LOAD_SUPER_ATTR_ATTR, + [_LOAD_SUPER_ATTR_METHOD_r32] = _LOAD_SUPER_ATTR_METHOD, + [_LOAD_ATTR_r10] = _LOAD_ATTR, + [_GUARD_TYPE_VERSION_r11] = _GUARD_TYPE_VERSION, + [_GUARD_TYPE_VERSION_r00] = _GUARD_TYPE_VERSION, + [_GUARD_TYPE_VERSION_r22] = _GUARD_TYPE_VERSION, + [_GUARD_TYPE_VERSION_r33] = _GUARD_TYPE_VERSION, + [_GUARD_TYPE_VERSION_AND_LOCK_r11] = _GUARD_TYPE_VERSION_AND_LOCK, + [_GUARD_TYPE_VERSION_AND_LOCK_r00] = _GUARD_TYPE_VERSION_AND_LOCK, + [_GUARD_TYPE_VERSION_AND_LOCK_r22] = _GUARD_TYPE_VERSION_AND_LOCK, + [_GUARD_TYPE_VERSION_AND_LOCK_r33] = _GUARD_TYPE_VERSION_AND_LOCK, + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r11] = _CHECK_MANAGED_OBJECT_HAS_VALUES, + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r00] = _CHECK_MANAGED_OBJECT_HAS_VALUES, + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r22] = _CHECK_MANAGED_OBJECT_HAS_VALUES, + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r33] = _CHECK_MANAGED_OBJECT_HAS_VALUES, + [_LOAD_ATTR_INSTANCE_VALUE_r11] = _LOAD_ATTR_INSTANCE_VALUE, + [_LOAD_ATTR_MODULE_r11] = _LOAD_ATTR_MODULE, + [_LOAD_ATTR_WITH_HINT_r11] = _LOAD_ATTR_WITH_HINT, + [_LOAD_ATTR_SLOT_r11] = _LOAD_ATTR_SLOT, + [_CHECK_ATTR_CLASS_r11] = _CHECK_ATTR_CLASS, + [_CHECK_ATTR_CLASS_r00] = _CHECK_ATTR_CLASS, + [_CHECK_ATTR_CLASS_r22] = _CHECK_ATTR_CLASS, + [_CHECK_ATTR_CLASS_r33] = _CHECK_ATTR_CLASS, + [_LOAD_ATTR_CLASS_r11] = _LOAD_ATTR_CLASS, + [_LOAD_ATTR_PROPERTY_FRAME_r11] = _LOAD_ATTR_PROPERTY_FRAME, + [_LOAD_ATTR_PROPERTY_FRAME_r00] = _LOAD_ATTR_PROPERTY_FRAME, + [_LOAD_ATTR_PROPERTY_FRAME_r22] = _LOAD_ATTR_PROPERTY_FRAME, + [_LOAD_ATTR_PROPERTY_FRAME_r33] = _LOAD_ATTR_PROPERTY_FRAME, + [_GUARD_DORV_NO_DICT_r11] = _GUARD_DORV_NO_DICT, + [_GUARD_DORV_NO_DICT_r00] = _GUARD_DORV_NO_DICT, + [_GUARD_DORV_NO_DICT_r22] = _GUARD_DORV_NO_DICT, + [_GUARD_DORV_NO_DICT_r33] = _GUARD_DORV_NO_DICT, + [_STORE_ATTR_INSTANCE_VALUE_r20] = _STORE_ATTR_INSTANCE_VALUE, + [_STORE_ATTR_WITH_HINT_r20] = _STORE_ATTR_WITH_HINT, + [_STORE_ATTR_SLOT_r20] = _STORE_ATTR_SLOT, + [_COMPARE_OP_r21] = _COMPARE_OP, + [_COMPARE_OP_FLOAT_r21] = _COMPARE_OP_FLOAT, + [_COMPARE_OP_FLOAT_r10] = _COMPARE_OP_FLOAT, + [_COMPARE_OP_FLOAT_r32] = _COMPARE_OP_FLOAT, + [_COMPARE_OP_INT_r21] = _COMPARE_OP_INT, + [_COMPARE_OP_INT_r10] = _COMPARE_OP_INT, + [_COMPARE_OP_INT_r32] = _COMPARE_OP_INT, + [_COMPARE_OP_STR_r21] = _COMPARE_OP_STR, + [_COMPARE_OP_STR_r10] = _COMPARE_OP_STR, + [_COMPARE_OP_STR_r32] = _COMPARE_OP_STR, + [_IS_OP_r21] = _IS_OP, + [_CONTAINS_OP_r21] = _CONTAINS_OP, + [_GUARD_TOS_ANY_SET_r11] = _GUARD_TOS_ANY_SET, + [_GUARD_TOS_ANY_SET_r00] = _GUARD_TOS_ANY_SET, + [_GUARD_TOS_ANY_SET_r22] = _GUARD_TOS_ANY_SET, + [_GUARD_TOS_ANY_SET_r33] = _GUARD_TOS_ANY_SET, + [_CONTAINS_OP_SET_r21] = _CONTAINS_OP_SET, + [_CONTAINS_OP_DICT_r21] = _CONTAINS_OP_DICT, + [_CHECK_EG_MATCH_r22] = _CHECK_EG_MATCH, + [_CHECK_EXC_MATCH_r11] = _CHECK_EXC_MATCH, + [_IMPORT_NAME_r21] = _IMPORT_NAME, + [_IMPORT_FROM_r01] = _IMPORT_FROM, + [_IS_NONE_r11] = _IS_NONE, + [_GET_LEN_r01] = _GET_LEN, + [_MATCH_CLASS_r31] = _MATCH_CLASS, + [_MATCH_MAPPING_r12] = _MATCH_MAPPING, + [_MATCH_MAPPING_r01] = _MATCH_MAPPING, + [_MATCH_MAPPING_r23] = _MATCH_MAPPING, + [_MATCH_SEQUENCE_r12] = _MATCH_SEQUENCE, + [_MATCH_SEQUENCE_r01] = _MATCH_SEQUENCE, + [_MATCH_SEQUENCE_r23] = _MATCH_SEQUENCE, + [_MATCH_KEYS_r01] = _MATCH_KEYS, + [_GET_ITER_r12] = _GET_ITER, + [_GET_YIELD_FROM_ITER_r11] = _GET_YIELD_FROM_ITER, + [_FOR_ITER_TIER_TWO_r01] = _FOR_ITER_TIER_TWO, + [_ITER_CHECK_LIST_r22] = _ITER_CHECK_LIST, + [_ITER_CHECK_LIST_r00] = _ITER_CHECK_LIST, + [_ITER_CHECK_LIST_r11] = _ITER_CHECK_LIST, + [_ITER_CHECK_LIST_r33] = _ITER_CHECK_LIST, + [_GUARD_NOT_EXHAUSTED_LIST_r22] = _GUARD_NOT_EXHAUSTED_LIST, + [_GUARD_NOT_EXHAUSTED_LIST_r00] = _GUARD_NOT_EXHAUSTED_LIST, + [_GUARD_NOT_EXHAUSTED_LIST_r11] = _GUARD_NOT_EXHAUSTED_LIST, + [_GUARD_NOT_EXHAUSTED_LIST_r33] = _GUARD_NOT_EXHAUSTED_LIST, + [_ITER_NEXT_LIST_TIER_TWO_r01] = _ITER_NEXT_LIST_TIER_TWO, + [_ITER_CHECK_TUPLE_r22] = _ITER_CHECK_TUPLE, + [_ITER_CHECK_TUPLE_r00] = _ITER_CHECK_TUPLE, + [_ITER_CHECK_TUPLE_r11] = _ITER_CHECK_TUPLE, + [_ITER_CHECK_TUPLE_r33] = _ITER_CHECK_TUPLE, + [_GUARD_NOT_EXHAUSTED_TUPLE_r22] = _GUARD_NOT_EXHAUSTED_TUPLE, + [_GUARD_NOT_EXHAUSTED_TUPLE_r00] = _GUARD_NOT_EXHAUSTED_TUPLE, + [_GUARD_NOT_EXHAUSTED_TUPLE_r11] = _GUARD_NOT_EXHAUSTED_TUPLE, + [_GUARD_NOT_EXHAUSTED_TUPLE_r33] = _GUARD_NOT_EXHAUSTED_TUPLE, + [_ITER_NEXT_TUPLE_r23] = _ITER_NEXT_TUPLE, + [_ITER_CHECK_RANGE_r22] = _ITER_CHECK_RANGE, + [_ITER_CHECK_RANGE_r00] = _ITER_CHECK_RANGE, + [_ITER_CHECK_RANGE_r11] = _ITER_CHECK_RANGE, + [_ITER_CHECK_RANGE_r33] = _ITER_CHECK_RANGE, + [_GUARD_NOT_EXHAUSTED_RANGE_r22] = _GUARD_NOT_EXHAUSTED_RANGE, + [_GUARD_NOT_EXHAUSTED_RANGE_r00] = _GUARD_NOT_EXHAUSTED_RANGE, + [_GUARD_NOT_EXHAUSTED_RANGE_r11] = _GUARD_NOT_EXHAUSTED_RANGE, + [_GUARD_NOT_EXHAUSTED_RANGE_r33] = _GUARD_NOT_EXHAUSTED_RANGE, + [_ITER_NEXT_RANGE_r23] = _ITER_NEXT_RANGE, + [_FOR_ITER_GEN_FRAME_r23] = _FOR_ITER_GEN_FRAME, + [_INSERT_NULL_r10] = _INSERT_NULL, + [_LOAD_SPECIAL_r00] = _LOAD_SPECIAL, + [_WITH_EXCEPT_START_r01] = _WITH_EXCEPT_START, + [_PUSH_EXC_INFO_r12] = _PUSH_EXC_INFO, + [_PUSH_EXC_INFO_r01] = _PUSH_EXC_INFO, + [_PUSH_EXC_INFO_r23] = _PUSH_EXC_INFO, + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11] = _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00] = _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22] = _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33] = _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, + [_GUARD_KEYS_VERSION_r11] = _GUARD_KEYS_VERSION, + [_GUARD_KEYS_VERSION_r00] = _GUARD_KEYS_VERSION, + [_GUARD_KEYS_VERSION_r22] = _GUARD_KEYS_VERSION, + [_GUARD_KEYS_VERSION_r33] = _GUARD_KEYS_VERSION, + [_LOAD_ATTR_METHOD_WITH_VALUES_r12] = _LOAD_ATTR_METHOD_WITH_VALUES, + [_LOAD_ATTR_METHOD_WITH_VALUES_r01] = _LOAD_ATTR_METHOD_WITH_VALUES, + [_LOAD_ATTR_METHOD_WITH_VALUES_r23] = _LOAD_ATTR_METHOD_WITH_VALUES, + [_LOAD_ATTR_METHOD_NO_DICT_r12] = _LOAD_ATTR_METHOD_NO_DICT, + [_LOAD_ATTR_METHOD_NO_DICT_r01] = _LOAD_ATTR_METHOD_NO_DICT, + [_LOAD_ATTR_METHOD_NO_DICT_r23] = _LOAD_ATTR_METHOD_NO_DICT, + [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11] = _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, + [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11] = _LOAD_ATTR_NONDESCRIPTOR_NO_DICT, + [_CHECK_ATTR_METHOD_LAZY_DICT_r11] = _CHECK_ATTR_METHOD_LAZY_DICT, + [_CHECK_ATTR_METHOD_LAZY_DICT_r00] = _CHECK_ATTR_METHOD_LAZY_DICT, + [_CHECK_ATTR_METHOD_LAZY_DICT_r22] = _CHECK_ATTR_METHOD_LAZY_DICT, + [_CHECK_ATTR_METHOD_LAZY_DICT_r33] = _CHECK_ATTR_METHOD_LAZY_DICT, + [_LOAD_ATTR_METHOD_LAZY_DICT_r12] = _LOAD_ATTR_METHOD_LAZY_DICT, + [_LOAD_ATTR_METHOD_LAZY_DICT_r01] = _LOAD_ATTR_METHOD_LAZY_DICT, + [_LOAD_ATTR_METHOD_LAZY_DICT_r23] = _LOAD_ATTR_METHOD_LAZY_DICT, + [_MAYBE_EXPAND_METHOD_r00] = _MAYBE_EXPAND_METHOD, + [_PY_FRAME_GENERAL_r01] = _PY_FRAME_GENERAL, + [_CHECK_FUNCTION_VERSION_r00] = _CHECK_FUNCTION_VERSION, + [_CHECK_FUNCTION_VERSION_INLINE_r00] = _CHECK_FUNCTION_VERSION_INLINE, + [_CHECK_FUNCTION_VERSION_INLINE_r11] = _CHECK_FUNCTION_VERSION_INLINE, + [_CHECK_FUNCTION_VERSION_INLINE_r22] = _CHECK_FUNCTION_VERSION_INLINE, + [_CHECK_FUNCTION_VERSION_INLINE_r33] = _CHECK_FUNCTION_VERSION_INLINE, + [_CHECK_METHOD_VERSION_r00] = _CHECK_METHOD_VERSION, + [_EXPAND_METHOD_r00] = _EXPAND_METHOD, + [_CHECK_IS_NOT_PY_CALLABLE_r00] = _CHECK_IS_NOT_PY_CALLABLE, + [_CALL_NON_PY_GENERAL_r01] = _CALL_NON_PY_GENERAL, + [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00] = _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, + [_INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00] = _INIT_CALL_BOUND_METHOD_EXACT_ARGS, + [_CHECK_PEP_523_r00] = _CHECK_PEP_523, + [_CHECK_PEP_523_r11] = _CHECK_PEP_523, + [_CHECK_PEP_523_r22] = _CHECK_PEP_523, + [_CHECK_PEP_523_r33] = _CHECK_PEP_523, + [_CHECK_FUNCTION_EXACT_ARGS_r00] = _CHECK_FUNCTION_EXACT_ARGS, + [_CHECK_STACK_SPACE_r00] = _CHECK_STACK_SPACE, + [_CHECK_RECURSION_REMAINING_r00] = _CHECK_RECURSION_REMAINING, + [_CHECK_RECURSION_REMAINING_r11] = _CHECK_RECURSION_REMAINING, + [_CHECK_RECURSION_REMAINING_r22] = _CHECK_RECURSION_REMAINING, + [_CHECK_RECURSION_REMAINING_r33] = _CHECK_RECURSION_REMAINING, + [_INIT_CALL_PY_EXACT_ARGS_0_r01] = _INIT_CALL_PY_EXACT_ARGS_0, + [_INIT_CALL_PY_EXACT_ARGS_1_r01] = _INIT_CALL_PY_EXACT_ARGS_1, + [_INIT_CALL_PY_EXACT_ARGS_2_r01] = _INIT_CALL_PY_EXACT_ARGS_2, + [_INIT_CALL_PY_EXACT_ARGS_3_r01] = _INIT_CALL_PY_EXACT_ARGS_3, + [_INIT_CALL_PY_EXACT_ARGS_4_r01] = _INIT_CALL_PY_EXACT_ARGS_4, + [_INIT_CALL_PY_EXACT_ARGS_r01] = _INIT_CALL_PY_EXACT_ARGS, + [_PUSH_FRAME_r10] = _PUSH_FRAME, + [_GUARD_NOS_NULL_r22] = _GUARD_NOS_NULL, + [_GUARD_NOS_NULL_r00] = _GUARD_NOS_NULL, + [_GUARD_NOS_NULL_r11] = _GUARD_NOS_NULL, + [_GUARD_NOS_NULL_r33] = _GUARD_NOS_NULL, + [_GUARD_NOS_NOT_NULL_r22] = _GUARD_NOS_NOT_NULL, + [_GUARD_NOS_NOT_NULL_r00] = _GUARD_NOS_NOT_NULL, + [_GUARD_NOS_NOT_NULL_r11] = _GUARD_NOS_NOT_NULL, + [_GUARD_NOS_NOT_NULL_r33] = _GUARD_NOS_NOT_NULL, + [_GUARD_THIRD_NULL_r33] = _GUARD_THIRD_NULL, + [_GUARD_CALLABLE_TYPE_1_r33] = _GUARD_CALLABLE_TYPE_1, + [_CALL_TYPE_1_r31] = _CALL_TYPE_1, + [_GUARD_CALLABLE_STR_1_r33] = _GUARD_CALLABLE_STR_1, + [_CALL_STR_1_r31] = _CALL_STR_1, + [_GUARD_CALLABLE_TUPLE_1_r33] = _GUARD_CALLABLE_TUPLE_1, + [_CALL_TUPLE_1_r31] = _CALL_TUPLE_1, + [_CHECK_AND_ALLOCATE_OBJECT_r00] = _CHECK_AND_ALLOCATE_OBJECT, + [_CREATE_INIT_FRAME_r01] = _CREATE_INIT_FRAME, + [_EXIT_INIT_CHECK_r10] = _EXIT_INIT_CHECK, + [_CALL_BUILTIN_CLASS_r01] = _CALL_BUILTIN_CLASS, + [_CALL_BUILTIN_O_r01] = _CALL_BUILTIN_O, + [_CALL_BUILTIN_FAST_r01] = _CALL_BUILTIN_FAST, + [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01] = _CALL_BUILTIN_FAST_WITH_KEYWORDS, + [_GUARD_CALLABLE_LEN_r33] = _GUARD_CALLABLE_LEN, + [_CALL_LEN_r31] = _CALL_LEN, + [_GUARD_CALLABLE_ISINSTANCE_r33] = _GUARD_CALLABLE_ISINSTANCE, + [_CALL_ISINSTANCE_r31] = _CALL_ISINSTANCE, + [_GUARD_CALLABLE_LIST_APPEND_r33] = _GUARD_CALLABLE_LIST_APPEND, + [_CALL_LIST_APPEND_r30] = _CALL_LIST_APPEND, + [_CALL_METHOD_DESCRIPTOR_O_r01] = _CALL_METHOD_DESCRIPTOR_O, + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01] = _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, + [_CALL_METHOD_DESCRIPTOR_NOARGS_r01] = _CALL_METHOD_DESCRIPTOR_NOARGS, + [_CALL_METHOD_DESCRIPTOR_FAST_r01] = _CALL_METHOD_DESCRIPTOR_FAST, + [_MAYBE_EXPAND_METHOD_KW_r00] = _MAYBE_EXPAND_METHOD_KW, + [_PY_FRAME_KW_r11] = _PY_FRAME_KW, + [_CHECK_FUNCTION_VERSION_KW_r11] = _CHECK_FUNCTION_VERSION_KW, + [_CHECK_METHOD_VERSION_KW_r11] = _CHECK_METHOD_VERSION_KW, + [_EXPAND_METHOD_KW_r00] = _EXPAND_METHOD_KW, + [_CHECK_IS_NOT_PY_CALLABLE_KW_r11] = _CHECK_IS_NOT_PY_CALLABLE_KW, + [_CALL_KW_NON_PY_r11] = _CALL_KW_NON_PY, + [_MAKE_CALLARGS_A_TUPLE_r00] = _MAKE_CALLARGS_A_TUPLE, + [_MAKE_FUNCTION_r11] = _MAKE_FUNCTION, + [_SET_FUNCTION_ATTRIBUTE_r21] = _SET_FUNCTION_ATTRIBUTE, + [_SET_FUNCTION_ATTRIBUTE_r10] = _SET_FUNCTION_ATTRIBUTE, + [_SET_FUNCTION_ATTRIBUTE_r32] = _SET_FUNCTION_ATTRIBUTE, + [_RETURN_GENERATOR_r01] = _RETURN_GENERATOR, + [_BUILD_SLICE_r01] = _BUILD_SLICE, + [_CONVERT_VALUE_r11] = _CONVERT_VALUE, + [_FORMAT_SIMPLE_r11] = _FORMAT_SIMPLE, + [_FORMAT_WITH_SPEC_r21] = _FORMAT_WITH_SPEC, + [_COPY_r01] = _COPY, + [_BINARY_OP_r21] = _BINARY_OP, + [_SWAP_r11] = _SWAP, + [_GUARD_IS_TRUE_POP_r10] = _GUARD_IS_TRUE_POP, + [_GUARD_IS_FALSE_POP_r10] = _GUARD_IS_FALSE_POP, + [_GUARD_IS_NONE_POP_r10] = _GUARD_IS_NONE_POP, + [_GUARD_IS_NOT_NONE_POP_r10] = _GUARD_IS_NOT_NONE_POP, + [_JUMP_TO_TOP_r00] = _JUMP_TO_TOP, + [_SET_IP_r00] = _SET_IP, + [_SET_IP_r11] = _SET_IP, + [_SET_IP_r22] = _SET_IP, + [_SET_IP_r33] = _SET_IP, + [_CHECK_STACK_SPACE_OPERAND_r00] = _CHECK_STACK_SPACE_OPERAND, + [_CHECK_STACK_SPACE_OPERAND_r11] = _CHECK_STACK_SPACE_OPERAND, + [_CHECK_STACK_SPACE_OPERAND_r22] = _CHECK_STACK_SPACE_OPERAND, + [_CHECK_STACK_SPACE_OPERAND_r33] = _CHECK_STACK_SPACE_OPERAND, + [_SAVE_RETURN_OFFSET_r00] = _SAVE_RETURN_OFFSET, + [_SAVE_RETURN_OFFSET_r11] = _SAVE_RETURN_OFFSET, + [_SAVE_RETURN_OFFSET_r22] = _SAVE_RETURN_OFFSET, + [_SAVE_RETURN_OFFSET_r33] = _SAVE_RETURN_OFFSET, + [_EXIT_TRACE_r00] = _EXIT_TRACE, + [_EXIT_TRACE_r11] = _EXIT_TRACE, + [_EXIT_TRACE_r22] = _EXIT_TRACE, + [_EXIT_TRACE_r33] = _EXIT_TRACE, + [_CHECK_VALIDITY_r00] = _CHECK_VALIDITY, + [_CHECK_VALIDITY_r11] = _CHECK_VALIDITY, + [_CHECK_VALIDITY_r22] = _CHECK_VALIDITY, + [_CHECK_VALIDITY_r33] = _CHECK_VALIDITY, + [_LOAD_CONST_INLINE_r01] = _LOAD_CONST_INLINE, + [_LOAD_CONST_INLINE_r12] = _LOAD_CONST_INLINE, + [_LOAD_CONST_INLINE_r23] = _LOAD_CONST_INLINE, + [_POP_TOP_LOAD_CONST_INLINE_r11] = _POP_TOP_LOAD_CONST_INLINE, + [_LOAD_CONST_INLINE_BORROW_r01] = _LOAD_CONST_INLINE_BORROW, + [_LOAD_CONST_INLINE_BORROW_r12] = _LOAD_CONST_INLINE_BORROW, + [_LOAD_CONST_INLINE_BORROW_r23] = _LOAD_CONST_INLINE_BORROW, + [_POP_CALL_r20] = _POP_CALL, + [_POP_CALL_ONE_r30] = _POP_CALL_ONE, + [_POP_CALL_TWO_r30] = _POP_CALL_TWO, + [_POP_TOP_LOAD_CONST_INLINE_BORROW_r11] = _POP_TOP_LOAD_CONST_INLINE_BORROW, + [_POP_TWO_LOAD_CONST_INLINE_BORROW_r21] = _POP_TWO_LOAD_CONST_INLINE_BORROW, + [_POP_CALL_LOAD_CONST_INLINE_BORROW_r21] = _POP_CALL_LOAD_CONST_INLINE_BORROW, + [_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31] = _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW, + [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31] = _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW, + [_LOAD_CONST_UNDER_INLINE_r12] = _LOAD_CONST_UNDER_INLINE, + [_LOAD_CONST_UNDER_INLINE_r01] = _LOAD_CONST_UNDER_INLINE, + [_LOAD_CONST_UNDER_INLINE_r23] = _LOAD_CONST_UNDER_INLINE, + [_LOAD_CONST_UNDER_INLINE_BORROW_r12] = _LOAD_CONST_UNDER_INLINE_BORROW, + [_LOAD_CONST_UNDER_INLINE_BORROW_r01] = _LOAD_CONST_UNDER_INLINE_BORROW, + [_LOAD_CONST_UNDER_INLINE_BORROW_r23] = _LOAD_CONST_UNDER_INLINE_BORROW, + [_CHECK_FUNCTION_r00] = _CHECK_FUNCTION, + [_CHECK_FUNCTION_r11] = _CHECK_FUNCTION, + [_CHECK_FUNCTION_r22] = _CHECK_FUNCTION, + [_CHECK_FUNCTION_r33] = _CHECK_FUNCTION, + [_START_EXECUTOR_r00] = _START_EXECUTOR, + [_MAKE_WARM_r00] = _MAKE_WARM, + [_MAKE_WARM_r11] = _MAKE_WARM, + [_MAKE_WARM_r22] = _MAKE_WARM, + [_MAKE_WARM_r33] = _MAKE_WARM, + [_FATAL_ERROR_r00] = _FATAL_ERROR, + [_FATAL_ERROR_r11] = _FATAL_ERROR, + [_FATAL_ERROR_r22] = _FATAL_ERROR, + [_FATAL_ERROR_r33] = _FATAL_ERROR, + [_DEOPT_r00] = _DEOPT, + [_DEOPT_r11] = _DEOPT, + [_DEOPT_r22] = _DEOPT, + [_DEOPT_r33] = _DEOPT, + [_ERROR_POP_N_r00] = _ERROR_POP_N, + [_ERROR_POP_N_r11] = _ERROR_POP_N, + [_ERROR_POP_N_r22] = _ERROR_POP_N, + [_ERROR_POP_N_r33] = _ERROR_POP_N, + [_TIER2_RESUME_CHECK_r00] = _TIER2_RESUME_CHECK, + [_TIER2_RESUME_CHECK_r11] = _TIER2_RESUME_CHECK, + [_TIER2_RESUME_CHECK_r22] = _TIER2_RESUME_CHECK, + [_TIER2_RESUME_CHECK_r33] = _TIER2_RESUME_CHECK, + [_SPILL_OR_RELOAD_r01] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r02] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r03] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r10] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r12] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r13] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r20] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r21] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r23] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r30] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r31] = _SPILL_OR_RELOAD, + [_SPILL_OR_RELOAD_r32] = _SPILL_OR_RELOAD, +}; + +const uint16_t _PyUop_SpillsAndReloads[4][4] = { + [0][1] = _SPILL_OR_RELOAD_r01, + [0][2] = _SPILL_OR_RELOAD_r02, + [0][3] = _SPILL_OR_RELOAD_r03, + [1][0] = _SPILL_OR_RELOAD_r10, + [1][2] = _SPILL_OR_RELOAD_r12, + [1][3] = _SPILL_OR_RELOAD_r13, + [2][0] = _SPILL_OR_RELOAD_r20, + [2][1] = _SPILL_OR_RELOAD_r21, + [2][3] = _SPILL_OR_RELOAD_r23, + [3][0] = _SPILL_OR_RELOAD_r30, + [3][1] = _SPILL_OR_RELOAD_r31, + [3][2] = _SPILL_OR_RELOAD_r32, +}; + +const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP] = "_BINARY_OP", + [_BINARY_OP_r21] = "_BINARY_OP_r21", [_BINARY_OP_ADD_FLOAT] = "_BINARY_OP_ADD_FLOAT", + [_BINARY_OP_ADD_FLOAT_r21] = "_BINARY_OP_ADD_FLOAT_r21", + [_BINARY_OP_ADD_FLOAT_r10] = "_BINARY_OP_ADD_FLOAT_r10", + [_BINARY_OP_ADD_FLOAT_r32] = "_BINARY_OP_ADD_FLOAT_r32", [_BINARY_OP_ADD_INT] = "_BINARY_OP_ADD_INT", + [_BINARY_OP_ADD_INT_r21] = "_BINARY_OP_ADD_INT_r21", [_BINARY_OP_ADD_UNICODE] = "_BINARY_OP_ADD_UNICODE", + [_BINARY_OP_ADD_UNICODE_r21] = "_BINARY_OP_ADD_UNICODE_r21", + [_BINARY_OP_ADD_UNICODE_r10] = "_BINARY_OP_ADD_UNICODE_r10", + [_BINARY_OP_ADD_UNICODE_r32] = "_BINARY_OP_ADD_UNICODE_r32", [_BINARY_OP_EXTEND] = "_BINARY_OP_EXTEND", + [_BINARY_OP_EXTEND_r21] = "_BINARY_OP_EXTEND_r21", [_BINARY_OP_INPLACE_ADD_UNICODE] = "_BINARY_OP_INPLACE_ADD_UNICODE", + [_BINARY_OP_INPLACE_ADD_UNICODE_r20] = "_BINARY_OP_INPLACE_ADD_UNICODE_r20", [_BINARY_OP_MULTIPLY_FLOAT] = "_BINARY_OP_MULTIPLY_FLOAT", + [_BINARY_OP_MULTIPLY_FLOAT_r21] = "_BINARY_OP_MULTIPLY_FLOAT_r21", + [_BINARY_OP_MULTIPLY_FLOAT_r10] = "_BINARY_OP_MULTIPLY_FLOAT_r10", + [_BINARY_OP_MULTIPLY_FLOAT_r32] = "_BINARY_OP_MULTIPLY_FLOAT_r32", [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", + [_BINARY_OP_MULTIPLY_INT_r21] = "_BINARY_OP_MULTIPLY_INT_r21", [_BINARY_OP_SUBSCR_CHECK_FUNC] = "_BINARY_OP_SUBSCR_CHECK_FUNC", + [_BINARY_OP_SUBSCR_CHECK_FUNC_r23] = "_BINARY_OP_SUBSCR_CHECK_FUNC_r23", [_BINARY_OP_SUBSCR_DICT] = "_BINARY_OP_SUBSCR_DICT", + [_BINARY_OP_SUBSCR_DICT_r21] = "_BINARY_OP_SUBSCR_DICT_r21", [_BINARY_OP_SUBSCR_INIT_CALL] = "_BINARY_OP_SUBSCR_INIT_CALL", + [_BINARY_OP_SUBSCR_INIT_CALL_r31] = "_BINARY_OP_SUBSCR_INIT_CALL_r31", [_BINARY_OP_SUBSCR_LIST_INT] = "_BINARY_OP_SUBSCR_LIST_INT", + [_BINARY_OP_SUBSCR_LIST_INT_r21] = "_BINARY_OP_SUBSCR_LIST_INT_r21", [_BINARY_OP_SUBSCR_LIST_SLICE] = "_BINARY_OP_SUBSCR_LIST_SLICE", + [_BINARY_OP_SUBSCR_LIST_SLICE_r21] = "_BINARY_OP_SUBSCR_LIST_SLICE_r21", [_BINARY_OP_SUBSCR_STR_INT] = "_BINARY_OP_SUBSCR_STR_INT", + [_BINARY_OP_SUBSCR_STR_INT_r21] = "_BINARY_OP_SUBSCR_STR_INT_r21", [_BINARY_OP_SUBSCR_TUPLE_INT] = "_BINARY_OP_SUBSCR_TUPLE_INT", + [_BINARY_OP_SUBSCR_TUPLE_INT_r21] = "_BINARY_OP_SUBSCR_TUPLE_INT_r21", [_BINARY_OP_SUBTRACT_FLOAT] = "_BINARY_OP_SUBTRACT_FLOAT", + [_BINARY_OP_SUBTRACT_FLOAT_r21] = "_BINARY_OP_SUBTRACT_FLOAT_r21", + [_BINARY_OP_SUBTRACT_FLOAT_r10] = "_BINARY_OP_SUBTRACT_FLOAT_r10", + [_BINARY_OP_SUBTRACT_FLOAT_r32] = "_BINARY_OP_SUBTRACT_FLOAT_r32", [_BINARY_OP_SUBTRACT_INT] = "_BINARY_OP_SUBTRACT_INT", + [_BINARY_OP_SUBTRACT_INT_r21] = "_BINARY_OP_SUBTRACT_INT_r21", [_BINARY_SLICE] = "_BINARY_SLICE", + [_BINARY_SLICE_r31] = "_BINARY_SLICE_r31", [_BUILD_INTERPOLATION] = "_BUILD_INTERPOLATION", + [_BUILD_INTERPOLATION_r01] = "_BUILD_INTERPOLATION_r01", [_BUILD_LIST] = "_BUILD_LIST", + [_BUILD_LIST_r01] = "_BUILD_LIST_r01", [_BUILD_MAP] = "_BUILD_MAP", + [_BUILD_MAP_r01] = "_BUILD_MAP_r01", [_BUILD_SET] = "_BUILD_SET", + [_BUILD_SET_r01] = "_BUILD_SET_r01", [_BUILD_SLICE] = "_BUILD_SLICE", + [_BUILD_SLICE_r01] = "_BUILD_SLICE_r01", [_BUILD_STRING] = "_BUILD_STRING", + [_BUILD_STRING_r01] = "_BUILD_STRING_r01", [_BUILD_TEMPLATE] = "_BUILD_TEMPLATE", + [_BUILD_TEMPLATE_r21] = "_BUILD_TEMPLATE_r21", [_BUILD_TUPLE] = "_BUILD_TUPLE", + [_BUILD_TUPLE_r01] = "_BUILD_TUPLE_r01", [_CALL_BUILTIN_CLASS] = "_CALL_BUILTIN_CLASS", + [_CALL_BUILTIN_CLASS_r01] = "_CALL_BUILTIN_CLASS_r01", [_CALL_BUILTIN_FAST] = "_CALL_BUILTIN_FAST", + [_CALL_BUILTIN_FAST_r01] = "_CALL_BUILTIN_FAST_r01", [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS", + [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01", [_CALL_BUILTIN_O] = "_CALL_BUILTIN_O", + [_CALL_BUILTIN_O_r01] = "_CALL_BUILTIN_O_r01", [_CALL_INTRINSIC_1] = "_CALL_INTRINSIC_1", + [_CALL_INTRINSIC_1_r11] = "_CALL_INTRINSIC_1_r11", [_CALL_INTRINSIC_2] = "_CALL_INTRINSIC_2", + [_CALL_INTRINSIC_2_r21] = "_CALL_INTRINSIC_2_r21", [_CALL_ISINSTANCE] = "_CALL_ISINSTANCE", + [_CALL_ISINSTANCE_r31] = "_CALL_ISINSTANCE_r31", [_CALL_KW_NON_PY] = "_CALL_KW_NON_PY", + [_CALL_KW_NON_PY_r11] = "_CALL_KW_NON_PY_r11", [_CALL_LEN] = "_CALL_LEN", + [_CALL_LEN_r31] = "_CALL_LEN_r31", [_CALL_LIST_APPEND] = "_CALL_LIST_APPEND", + [_CALL_LIST_APPEND_r30] = "_CALL_LIST_APPEND_r30", [_CALL_METHOD_DESCRIPTOR_FAST] = "_CALL_METHOD_DESCRIPTOR_FAST", + [_CALL_METHOD_DESCRIPTOR_FAST_r01] = "_CALL_METHOD_DESCRIPTOR_FAST_r01", [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01", [_CALL_METHOD_DESCRIPTOR_NOARGS] = "_CALL_METHOD_DESCRIPTOR_NOARGS", + [_CALL_METHOD_DESCRIPTOR_NOARGS_r01] = "_CALL_METHOD_DESCRIPTOR_NOARGS_r01", [_CALL_METHOD_DESCRIPTOR_O] = "_CALL_METHOD_DESCRIPTOR_O", + [_CALL_METHOD_DESCRIPTOR_O_r01] = "_CALL_METHOD_DESCRIPTOR_O_r01", [_CALL_NON_PY_GENERAL] = "_CALL_NON_PY_GENERAL", + [_CALL_NON_PY_GENERAL_r01] = "_CALL_NON_PY_GENERAL_r01", [_CALL_STR_1] = "_CALL_STR_1", + [_CALL_STR_1_r31] = "_CALL_STR_1_r31", [_CALL_TUPLE_1] = "_CALL_TUPLE_1", + [_CALL_TUPLE_1_r31] = "_CALL_TUPLE_1_r31", [_CALL_TYPE_1] = "_CALL_TYPE_1", + [_CALL_TYPE_1_r31] = "_CALL_TYPE_1_r31", [_CHECK_AND_ALLOCATE_OBJECT] = "_CHECK_AND_ALLOCATE_OBJECT", + [_CHECK_AND_ALLOCATE_OBJECT_r00] = "_CHECK_AND_ALLOCATE_OBJECT_r00", [_CHECK_ATTR_CLASS] = "_CHECK_ATTR_CLASS", + [_CHECK_ATTR_CLASS_r11] = "_CHECK_ATTR_CLASS_r11", + [_CHECK_ATTR_CLASS_r00] = "_CHECK_ATTR_CLASS_r00", + [_CHECK_ATTR_CLASS_r22] = "_CHECK_ATTR_CLASS_r22", + [_CHECK_ATTR_CLASS_r33] = "_CHECK_ATTR_CLASS_r33", [_CHECK_ATTR_METHOD_LAZY_DICT] = "_CHECK_ATTR_METHOD_LAZY_DICT", + [_CHECK_ATTR_METHOD_LAZY_DICT_r11] = "_CHECK_ATTR_METHOD_LAZY_DICT_r11", + [_CHECK_ATTR_METHOD_LAZY_DICT_r00] = "_CHECK_ATTR_METHOD_LAZY_DICT_r00", + [_CHECK_ATTR_METHOD_LAZY_DICT_r22] = "_CHECK_ATTR_METHOD_LAZY_DICT_r22", + [_CHECK_ATTR_METHOD_LAZY_DICT_r33] = "_CHECK_ATTR_METHOD_LAZY_DICT_r33", [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = "_CHECK_CALL_BOUND_METHOD_EXACT_ARGS", + [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00] = "_CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00", [_CHECK_EG_MATCH] = "_CHECK_EG_MATCH", + [_CHECK_EG_MATCH_r22] = "_CHECK_EG_MATCH_r22", [_CHECK_EXC_MATCH] = "_CHECK_EXC_MATCH", + [_CHECK_EXC_MATCH_r11] = "_CHECK_EXC_MATCH_r11", [_CHECK_FUNCTION] = "_CHECK_FUNCTION", + [_CHECK_FUNCTION_r00] = "_CHECK_FUNCTION_r00", + [_CHECK_FUNCTION_r11] = "_CHECK_FUNCTION_r11", + [_CHECK_FUNCTION_r22] = "_CHECK_FUNCTION_r22", + [_CHECK_FUNCTION_r33] = "_CHECK_FUNCTION_r33", [_CHECK_FUNCTION_EXACT_ARGS] = "_CHECK_FUNCTION_EXACT_ARGS", + [_CHECK_FUNCTION_EXACT_ARGS_r00] = "_CHECK_FUNCTION_EXACT_ARGS_r00", [_CHECK_FUNCTION_VERSION] = "_CHECK_FUNCTION_VERSION", + [_CHECK_FUNCTION_VERSION_r00] = "_CHECK_FUNCTION_VERSION_r00", [_CHECK_FUNCTION_VERSION_INLINE] = "_CHECK_FUNCTION_VERSION_INLINE", + [_CHECK_FUNCTION_VERSION_INLINE_r00] = "_CHECK_FUNCTION_VERSION_INLINE_r00", + [_CHECK_FUNCTION_VERSION_INLINE_r11] = "_CHECK_FUNCTION_VERSION_INLINE_r11", + [_CHECK_FUNCTION_VERSION_INLINE_r22] = "_CHECK_FUNCTION_VERSION_INLINE_r22", + [_CHECK_FUNCTION_VERSION_INLINE_r33] = "_CHECK_FUNCTION_VERSION_INLINE_r33", [_CHECK_FUNCTION_VERSION_KW] = "_CHECK_FUNCTION_VERSION_KW", + [_CHECK_FUNCTION_VERSION_KW_r11] = "_CHECK_FUNCTION_VERSION_KW_r11", [_CHECK_IS_NOT_PY_CALLABLE] = "_CHECK_IS_NOT_PY_CALLABLE", + [_CHECK_IS_NOT_PY_CALLABLE_r00] = "_CHECK_IS_NOT_PY_CALLABLE_r00", [_CHECK_IS_NOT_PY_CALLABLE_KW] = "_CHECK_IS_NOT_PY_CALLABLE_KW", + [_CHECK_IS_NOT_PY_CALLABLE_KW_r11] = "_CHECK_IS_NOT_PY_CALLABLE_KW_r11", [_CHECK_MANAGED_OBJECT_HAS_VALUES] = "_CHECK_MANAGED_OBJECT_HAS_VALUES", + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r11] = "_CHECK_MANAGED_OBJECT_HAS_VALUES_r11", + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r00] = "_CHECK_MANAGED_OBJECT_HAS_VALUES_r00", + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r22] = "_CHECK_MANAGED_OBJECT_HAS_VALUES_r22", + [_CHECK_MANAGED_OBJECT_HAS_VALUES_r33] = "_CHECK_MANAGED_OBJECT_HAS_VALUES_r33", [_CHECK_METHOD_VERSION] = "_CHECK_METHOD_VERSION", + [_CHECK_METHOD_VERSION_r00] = "_CHECK_METHOD_VERSION_r00", [_CHECK_METHOD_VERSION_KW] = "_CHECK_METHOD_VERSION_KW", + [_CHECK_METHOD_VERSION_KW_r11] = "_CHECK_METHOD_VERSION_KW_r11", [_CHECK_PEP_523] = "_CHECK_PEP_523", + [_CHECK_PEP_523_r00] = "_CHECK_PEP_523_r00", + [_CHECK_PEP_523_r11] = "_CHECK_PEP_523_r11", + [_CHECK_PEP_523_r22] = "_CHECK_PEP_523_r22", + [_CHECK_PEP_523_r33] = "_CHECK_PEP_523_r33", [_CHECK_PERIODIC] = "_CHECK_PERIODIC", + [_CHECK_PERIODIC_r00] = "_CHECK_PERIODIC_r00", [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = "_CHECK_PERIODIC_IF_NOT_YIELD_FROM", + [_CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00] = "_CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00", [_CHECK_RECURSION_REMAINING] = "_CHECK_RECURSION_REMAINING", + [_CHECK_RECURSION_REMAINING_r00] = "_CHECK_RECURSION_REMAINING_r00", + [_CHECK_RECURSION_REMAINING_r11] = "_CHECK_RECURSION_REMAINING_r11", + [_CHECK_RECURSION_REMAINING_r22] = "_CHECK_RECURSION_REMAINING_r22", + [_CHECK_RECURSION_REMAINING_r33] = "_CHECK_RECURSION_REMAINING_r33", [_CHECK_STACK_SPACE] = "_CHECK_STACK_SPACE", + [_CHECK_STACK_SPACE_r00] = "_CHECK_STACK_SPACE_r00", [_CHECK_STACK_SPACE_OPERAND] = "_CHECK_STACK_SPACE_OPERAND", + [_CHECK_STACK_SPACE_OPERAND_r00] = "_CHECK_STACK_SPACE_OPERAND_r00", + [_CHECK_STACK_SPACE_OPERAND_r11] = "_CHECK_STACK_SPACE_OPERAND_r11", + [_CHECK_STACK_SPACE_OPERAND_r22] = "_CHECK_STACK_SPACE_OPERAND_r22", + [_CHECK_STACK_SPACE_OPERAND_r33] = "_CHECK_STACK_SPACE_OPERAND_r33", [_CHECK_VALIDITY] = "_CHECK_VALIDITY", + [_CHECK_VALIDITY_r00] = "_CHECK_VALIDITY_r00", + [_CHECK_VALIDITY_r11] = "_CHECK_VALIDITY_r11", + [_CHECK_VALIDITY_r22] = "_CHECK_VALIDITY_r22", + [_CHECK_VALIDITY_r33] = "_CHECK_VALIDITY_r33", [_COMPARE_OP] = "_COMPARE_OP", + [_COMPARE_OP_r21] = "_COMPARE_OP_r21", [_COMPARE_OP_FLOAT] = "_COMPARE_OP_FLOAT", + [_COMPARE_OP_FLOAT_r21] = "_COMPARE_OP_FLOAT_r21", + [_COMPARE_OP_FLOAT_r10] = "_COMPARE_OP_FLOAT_r10", + [_COMPARE_OP_FLOAT_r32] = "_COMPARE_OP_FLOAT_r32", [_COMPARE_OP_INT] = "_COMPARE_OP_INT", + [_COMPARE_OP_INT_r21] = "_COMPARE_OP_INT_r21", + [_COMPARE_OP_INT_r10] = "_COMPARE_OP_INT_r10", + [_COMPARE_OP_INT_r32] = "_COMPARE_OP_INT_r32", [_COMPARE_OP_STR] = "_COMPARE_OP_STR", + [_COMPARE_OP_STR_r21] = "_COMPARE_OP_STR_r21", + [_COMPARE_OP_STR_r10] = "_COMPARE_OP_STR_r10", + [_COMPARE_OP_STR_r32] = "_COMPARE_OP_STR_r32", [_CONTAINS_OP] = "_CONTAINS_OP", + [_CONTAINS_OP_r21] = "_CONTAINS_OP_r21", [_CONTAINS_OP_DICT] = "_CONTAINS_OP_DICT", + [_CONTAINS_OP_DICT_r21] = "_CONTAINS_OP_DICT_r21", [_CONTAINS_OP_SET] = "_CONTAINS_OP_SET", + [_CONTAINS_OP_SET_r21] = "_CONTAINS_OP_SET_r21", [_CONVERT_VALUE] = "_CONVERT_VALUE", + [_CONVERT_VALUE_r11] = "_CONVERT_VALUE_r11", [_COPY] = "_COPY", + [_COPY_r01] = "_COPY_r01", [_COPY_FREE_VARS] = "_COPY_FREE_VARS", + [_COPY_FREE_VARS_r00] = "_COPY_FREE_VARS_r00", + [_COPY_FREE_VARS_r11] = "_COPY_FREE_VARS_r11", + [_COPY_FREE_VARS_r22] = "_COPY_FREE_VARS_r22", + [_COPY_FREE_VARS_r33] = "_COPY_FREE_VARS_r33", [_CREATE_INIT_FRAME] = "_CREATE_INIT_FRAME", + [_CREATE_INIT_FRAME_r01] = "_CREATE_INIT_FRAME_r01", [_DELETE_ATTR] = "_DELETE_ATTR", + [_DELETE_ATTR_r10] = "_DELETE_ATTR_r10", [_DELETE_DEREF] = "_DELETE_DEREF", + [_DELETE_DEREF_r00] = "_DELETE_DEREF_r00", [_DELETE_FAST] = "_DELETE_FAST", + [_DELETE_FAST_r00] = "_DELETE_FAST_r00", [_DELETE_GLOBAL] = "_DELETE_GLOBAL", + [_DELETE_GLOBAL_r00] = "_DELETE_GLOBAL_r00", [_DELETE_NAME] = "_DELETE_NAME", + [_DELETE_NAME_r00] = "_DELETE_NAME_r00", [_DELETE_SUBSCR] = "_DELETE_SUBSCR", + [_DELETE_SUBSCR_r20] = "_DELETE_SUBSCR_r20", [_DEOPT] = "_DEOPT", + [_DEOPT_r00] = "_DEOPT_r00", + [_DEOPT_r11] = "_DEOPT_r11", + [_DEOPT_r22] = "_DEOPT_r22", + [_DEOPT_r33] = "_DEOPT_r33", [_DICT_MERGE] = "_DICT_MERGE", + [_DICT_MERGE_r10] = "_DICT_MERGE_r10", [_DICT_UPDATE] = "_DICT_UPDATE", + [_DICT_UPDATE_r10] = "_DICT_UPDATE_r10", [_END_FOR] = "_END_FOR", + [_END_FOR_r10] = "_END_FOR_r10", [_END_SEND] = "_END_SEND", + [_END_SEND_r21] = "_END_SEND_r21", [_ERROR_POP_N] = "_ERROR_POP_N", + [_ERROR_POP_N_r00] = "_ERROR_POP_N_r00", + [_ERROR_POP_N_r11] = "_ERROR_POP_N_r11", + [_ERROR_POP_N_r22] = "_ERROR_POP_N_r22", + [_ERROR_POP_N_r33] = "_ERROR_POP_N_r33", [_EXIT_INIT_CHECK] = "_EXIT_INIT_CHECK", + [_EXIT_INIT_CHECK_r10] = "_EXIT_INIT_CHECK_r10", [_EXIT_TRACE] = "_EXIT_TRACE", + [_EXIT_TRACE_r00] = "_EXIT_TRACE_r00", + [_EXIT_TRACE_r11] = "_EXIT_TRACE_r11", + [_EXIT_TRACE_r22] = "_EXIT_TRACE_r22", + [_EXIT_TRACE_r33] = "_EXIT_TRACE_r33", [_EXPAND_METHOD] = "_EXPAND_METHOD", + [_EXPAND_METHOD_r00] = "_EXPAND_METHOD_r00", [_EXPAND_METHOD_KW] = "_EXPAND_METHOD_KW", + [_EXPAND_METHOD_KW_r00] = "_EXPAND_METHOD_KW_r00", [_FATAL_ERROR] = "_FATAL_ERROR", + [_FATAL_ERROR_r00] = "_FATAL_ERROR_r00", + [_FATAL_ERROR_r11] = "_FATAL_ERROR_r11", + [_FATAL_ERROR_r22] = "_FATAL_ERROR_r22", + [_FATAL_ERROR_r33] = "_FATAL_ERROR_r33", [_FORMAT_SIMPLE] = "_FORMAT_SIMPLE", + [_FORMAT_SIMPLE_r11] = "_FORMAT_SIMPLE_r11", [_FORMAT_WITH_SPEC] = "_FORMAT_WITH_SPEC", + [_FORMAT_WITH_SPEC_r21] = "_FORMAT_WITH_SPEC_r21", [_FOR_ITER_GEN_FRAME] = "_FOR_ITER_GEN_FRAME", + [_FOR_ITER_GEN_FRAME_r23] = "_FOR_ITER_GEN_FRAME_r23", [_FOR_ITER_TIER_TWO] = "_FOR_ITER_TIER_TWO", + [_FOR_ITER_TIER_TWO_r01] = "_FOR_ITER_TIER_TWO_r01", [_GET_AITER] = "_GET_AITER", + [_GET_AITER_r11] = "_GET_AITER_r11", [_GET_ANEXT] = "_GET_ANEXT", + [_GET_ANEXT_r01] = "_GET_ANEXT_r01", [_GET_AWAITABLE] = "_GET_AWAITABLE", + [_GET_AWAITABLE_r11] = "_GET_AWAITABLE_r11", [_GET_ITER] = "_GET_ITER", + [_GET_ITER_r12] = "_GET_ITER_r12", [_GET_LEN] = "_GET_LEN", + [_GET_LEN_r01] = "_GET_LEN_r01", [_GET_YIELD_FROM_ITER] = "_GET_YIELD_FROM_ITER", + [_GET_YIELD_FROM_ITER_r11] = "_GET_YIELD_FROM_ITER_r11", [_GUARD_BINARY_OP_EXTEND] = "_GUARD_BINARY_OP_EXTEND", + [_GUARD_BINARY_OP_EXTEND_r00] = "_GUARD_BINARY_OP_EXTEND_r00", [_GUARD_CALLABLE_ISINSTANCE] = "_GUARD_CALLABLE_ISINSTANCE", + [_GUARD_CALLABLE_ISINSTANCE_r33] = "_GUARD_CALLABLE_ISINSTANCE_r33", [_GUARD_CALLABLE_LEN] = "_GUARD_CALLABLE_LEN", + [_GUARD_CALLABLE_LEN_r33] = "_GUARD_CALLABLE_LEN_r33", [_GUARD_CALLABLE_LIST_APPEND] = "_GUARD_CALLABLE_LIST_APPEND", + [_GUARD_CALLABLE_LIST_APPEND_r33] = "_GUARD_CALLABLE_LIST_APPEND_r33", [_GUARD_CALLABLE_STR_1] = "_GUARD_CALLABLE_STR_1", + [_GUARD_CALLABLE_STR_1_r33] = "_GUARD_CALLABLE_STR_1_r33", [_GUARD_CALLABLE_TUPLE_1] = "_GUARD_CALLABLE_TUPLE_1", + [_GUARD_CALLABLE_TUPLE_1_r33] = "_GUARD_CALLABLE_TUPLE_1_r33", [_GUARD_CALLABLE_TYPE_1] = "_GUARD_CALLABLE_TYPE_1", + [_GUARD_CALLABLE_TYPE_1_r33] = "_GUARD_CALLABLE_TYPE_1_r33", [_GUARD_DORV_NO_DICT] = "_GUARD_DORV_NO_DICT", + [_GUARD_DORV_NO_DICT_r11] = "_GUARD_DORV_NO_DICT_r11", + [_GUARD_DORV_NO_DICT_r00] = "_GUARD_DORV_NO_DICT_r00", + [_GUARD_DORV_NO_DICT_r22] = "_GUARD_DORV_NO_DICT_r22", + [_GUARD_DORV_NO_DICT_r33] = "_GUARD_DORV_NO_DICT_r33", [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT] = "_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT", + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11] = "_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11", + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00] = "_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00", + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22] = "_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22", + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33] = "_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33", [_GUARD_GLOBALS_VERSION] = "_GUARD_GLOBALS_VERSION", + [_GUARD_GLOBALS_VERSION_r00] = "_GUARD_GLOBALS_VERSION_r00", + [_GUARD_GLOBALS_VERSION_r11] = "_GUARD_GLOBALS_VERSION_r11", + [_GUARD_GLOBALS_VERSION_r22] = "_GUARD_GLOBALS_VERSION_r22", + [_GUARD_GLOBALS_VERSION_r33] = "_GUARD_GLOBALS_VERSION_r33", [_GUARD_IS_FALSE_POP] = "_GUARD_IS_FALSE_POP", + [_GUARD_IS_FALSE_POP_r10] = "_GUARD_IS_FALSE_POP_r10", [_GUARD_IS_NONE_POP] = "_GUARD_IS_NONE_POP", + [_GUARD_IS_NONE_POP_r10] = "_GUARD_IS_NONE_POP_r10", [_GUARD_IS_NOT_NONE_POP] = "_GUARD_IS_NOT_NONE_POP", + [_GUARD_IS_NOT_NONE_POP_r10] = "_GUARD_IS_NOT_NONE_POP_r10", [_GUARD_IS_TRUE_POP] = "_GUARD_IS_TRUE_POP", + [_GUARD_IS_TRUE_POP_r10] = "_GUARD_IS_TRUE_POP_r10", [_GUARD_KEYS_VERSION] = "_GUARD_KEYS_VERSION", + [_GUARD_KEYS_VERSION_r11] = "_GUARD_KEYS_VERSION_r11", + [_GUARD_KEYS_VERSION_r00] = "_GUARD_KEYS_VERSION_r00", + [_GUARD_KEYS_VERSION_r22] = "_GUARD_KEYS_VERSION_r22", + [_GUARD_KEYS_VERSION_r33] = "_GUARD_KEYS_VERSION_r33", [_GUARD_NOS_DICT] = "_GUARD_NOS_DICT", + [_GUARD_NOS_DICT_r22] = "_GUARD_NOS_DICT_r22", + [_GUARD_NOS_DICT_r00] = "_GUARD_NOS_DICT_r00", + [_GUARD_NOS_DICT_r11] = "_GUARD_NOS_DICT_r11", + [_GUARD_NOS_DICT_r33] = "_GUARD_NOS_DICT_r33", [_GUARD_NOS_FLOAT] = "_GUARD_NOS_FLOAT", + [_GUARD_NOS_FLOAT_r22] = "_GUARD_NOS_FLOAT_r22", + [_GUARD_NOS_FLOAT_r00] = "_GUARD_NOS_FLOAT_r00", + [_GUARD_NOS_FLOAT_r11] = "_GUARD_NOS_FLOAT_r11", + [_GUARD_NOS_FLOAT_r33] = "_GUARD_NOS_FLOAT_r33", [_GUARD_NOS_INT] = "_GUARD_NOS_INT", + [_GUARD_NOS_INT_r22] = "_GUARD_NOS_INT_r22", + [_GUARD_NOS_INT_r00] = "_GUARD_NOS_INT_r00", + [_GUARD_NOS_INT_r11] = "_GUARD_NOS_INT_r11", + [_GUARD_NOS_INT_r33] = "_GUARD_NOS_INT_r33", [_GUARD_NOS_LIST] = "_GUARD_NOS_LIST", + [_GUARD_NOS_LIST_r22] = "_GUARD_NOS_LIST_r22", + [_GUARD_NOS_LIST_r00] = "_GUARD_NOS_LIST_r00", + [_GUARD_NOS_LIST_r11] = "_GUARD_NOS_LIST_r11", + [_GUARD_NOS_LIST_r33] = "_GUARD_NOS_LIST_r33", [_GUARD_NOS_NOT_NULL] = "_GUARD_NOS_NOT_NULL", + [_GUARD_NOS_NOT_NULL_r22] = "_GUARD_NOS_NOT_NULL_r22", + [_GUARD_NOS_NOT_NULL_r00] = "_GUARD_NOS_NOT_NULL_r00", + [_GUARD_NOS_NOT_NULL_r11] = "_GUARD_NOS_NOT_NULL_r11", + [_GUARD_NOS_NOT_NULL_r33] = "_GUARD_NOS_NOT_NULL_r33", [_GUARD_NOS_NULL] = "_GUARD_NOS_NULL", + [_GUARD_NOS_NULL_r22] = "_GUARD_NOS_NULL_r22", + [_GUARD_NOS_NULL_r00] = "_GUARD_NOS_NULL_r00", + [_GUARD_NOS_NULL_r11] = "_GUARD_NOS_NULL_r11", + [_GUARD_NOS_NULL_r33] = "_GUARD_NOS_NULL_r33", [_GUARD_NOS_TUPLE] = "_GUARD_NOS_TUPLE", + [_GUARD_NOS_TUPLE_r22] = "_GUARD_NOS_TUPLE_r22", + [_GUARD_NOS_TUPLE_r00] = "_GUARD_NOS_TUPLE_r00", + [_GUARD_NOS_TUPLE_r11] = "_GUARD_NOS_TUPLE_r11", + [_GUARD_NOS_TUPLE_r33] = "_GUARD_NOS_TUPLE_r33", [_GUARD_NOS_UNICODE] = "_GUARD_NOS_UNICODE", + [_GUARD_NOS_UNICODE_r22] = "_GUARD_NOS_UNICODE_r22", + [_GUARD_NOS_UNICODE_r00] = "_GUARD_NOS_UNICODE_r00", + [_GUARD_NOS_UNICODE_r11] = "_GUARD_NOS_UNICODE_r11", + [_GUARD_NOS_UNICODE_r33] = "_GUARD_NOS_UNICODE_r33", [_GUARD_NOT_EXHAUSTED_LIST] = "_GUARD_NOT_EXHAUSTED_LIST", + [_GUARD_NOT_EXHAUSTED_LIST_r22] = "_GUARD_NOT_EXHAUSTED_LIST_r22", + [_GUARD_NOT_EXHAUSTED_LIST_r00] = "_GUARD_NOT_EXHAUSTED_LIST_r00", + [_GUARD_NOT_EXHAUSTED_LIST_r11] = "_GUARD_NOT_EXHAUSTED_LIST_r11", + [_GUARD_NOT_EXHAUSTED_LIST_r33] = "_GUARD_NOT_EXHAUSTED_LIST_r33", [_GUARD_NOT_EXHAUSTED_RANGE] = "_GUARD_NOT_EXHAUSTED_RANGE", + [_GUARD_NOT_EXHAUSTED_RANGE_r22] = "_GUARD_NOT_EXHAUSTED_RANGE_r22", + [_GUARD_NOT_EXHAUSTED_RANGE_r00] = "_GUARD_NOT_EXHAUSTED_RANGE_r00", + [_GUARD_NOT_EXHAUSTED_RANGE_r11] = "_GUARD_NOT_EXHAUSTED_RANGE_r11", + [_GUARD_NOT_EXHAUSTED_RANGE_r33] = "_GUARD_NOT_EXHAUSTED_RANGE_r33", [_GUARD_NOT_EXHAUSTED_TUPLE] = "_GUARD_NOT_EXHAUSTED_TUPLE", + [_GUARD_NOT_EXHAUSTED_TUPLE_r22] = "_GUARD_NOT_EXHAUSTED_TUPLE_r22", + [_GUARD_NOT_EXHAUSTED_TUPLE_r00] = "_GUARD_NOT_EXHAUSTED_TUPLE_r00", + [_GUARD_NOT_EXHAUSTED_TUPLE_r11] = "_GUARD_NOT_EXHAUSTED_TUPLE_r11", + [_GUARD_NOT_EXHAUSTED_TUPLE_r33] = "_GUARD_NOT_EXHAUSTED_TUPLE_r33", [_GUARD_THIRD_NULL] = "_GUARD_THIRD_NULL", + [_GUARD_THIRD_NULL_r33] = "_GUARD_THIRD_NULL_r33", [_GUARD_TOS_ANY_SET] = "_GUARD_TOS_ANY_SET", + [_GUARD_TOS_ANY_SET_r11] = "_GUARD_TOS_ANY_SET_r11", + [_GUARD_TOS_ANY_SET_r00] = "_GUARD_TOS_ANY_SET_r00", + [_GUARD_TOS_ANY_SET_r22] = "_GUARD_TOS_ANY_SET_r22", + [_GUARD_TOS_ANY_SET_r33] = "_GUARD_TOS_ANY_SET_r33", [_GUARD_TOS_DICT] = "_GUARD_TOS_DICT", + [_GUARD_TOS_DICT_r11] = "_GUARD_TOS_DICT_r11", + [_GUARD_TOS_DICT_r00] = "_GUARD_TOS_DICT_r00", + [_GUARD_TOS_DICT_r22] = "_GUARD_TOS_DICT_r22", + [_GUARD_TOS_DICT_r33] = "_GUARD_TOS_DICT_r33", [_GUARD_TOS_FLOAT] = "_GUARD_TOS_FLOAT", + [_GUARD_TOS_FLOAT_r11] = "_GUARD_TOS_FLOAT_r11", + [_GUARD_TOS_FLOAT_r00] = "_GUARD_TOS_FLOAT_r00", + [_GUARD_TOS_FLOAT_r22] = "_GUARD_TOS_FLOAT_r22", + [_GUARD_TOS_FLOAT_r33] = "_GUARD_TOS_FLOAT_r33", [_GUARD_TOS_INT] = "_GUARD_TOS_INT", + [_GUARD_TOS_INT_r11] = "_GUARD_TOS_INT_r11", + [_GUARD_TOS_INT_r00] = "_GUARD_TOS_INT_r00", + [_GUARD_TOS_INT_r22] = "_GUARD_TOS_INT_r22", + [_GUARD_TOS_INT_r33] = "_GUARD_TOS_INT_r33", [_GUARD_TOS_LIST] = "_GUARD_TOS_LIST", + [_GUARD_TOS_LIST_r11] = "_GUARD_TOS_LIST_r11", + [_GUARD_TOS_LIST_r00] = "_GUARD_TOS_LIST_r00", + [_GUARD_TOS_LIST_r22] = "_GUARD_TOS_LIST_r22", + [_GUARD_TOS_LIST_r33] = "_GUARD_TOS_LIST_r33", [_GUARD_TOS_SLICE] = "_GUARD_TOS_SLICE", + [_GUARD_TOS_SLICE_r11] = "_GUARD_TOS_SLICE_r11", + [_GUARD_TOS_SLICE_r00] = "_GUARD_TOS_SLICE_r00", + [_GUARD_TOS_SLICE_r22] = "_GUARD_TOS_SLICE_r22", + [_GUARD_TOS_SLICE_r33] = "_GUARD_TOS_SLICE_r33", [_GUARD_TOS_TUPLE] = "_GUARD_TOS_TUPLE", + [_GUARD_TOS_TUPLE_r11] = "_GUARD_TOS_TUPLE_r11", + [_GUARD_TOS_TUPLE_r00] = "_GUARD_TOS_TUPLE_r00", + [_GUARD_TOS_TUPLE_r22] = "_GUARD_TOS_TUPLE_r22", + [_GUARD_TOS_TUPLE_r33] = "_GUARD_TOS_TUPLE_r33", [_GUARD_TOS_UNICODE] = "_GUARD_TOS_UNICODE", + [_GUARD_TOS_UNICODE_r11] = "_GUARD_TOS_UNICODE_r11", + [_GUARD_TOS_UNICODE_r00] = "_GUARD_TOS_UNICODE_r00", + [_GUARD_TOS_UNICODE_r22] = "_GUARD_TOS_UNICODE_r22", + [_GUARD_TOS_UNICODE_r33] = "_GUARD_TOS_UNICODE_r33", [_GUARD_TYPE_VERSION] = "_GUARD_TYPE_VERSION", + [_GUARD_TYPE_VERSION_r11] = "_GUARD_TYPE_VERSION_r11", + [_GUARD_TYPE_VERSION_r00] = "_GUARD_TYPE_VERSION_r00", + [_GUARD_TYPE_VERSION_r22] = "_GUARD_TYPE_VERSION_r22", + [_GUARD_TYPE_VERSION_r33] = "_GUARD_TYPE_VERSION_r33", [_GUARD_TYPE_VERSION_AND_LOCK] = "_GUARD_TYPE_VERSION_AND_LOCK", + [_GUARD_TYPE_VERSION_AND_LOCK_r11] = "_GUARD_TYPE_VERSION_AND_LOCK_r11", + [_GUARD_TYPE_VERSION_AND_LOCK_r00] = "_GUARD_TYPE_VERSION_AND_LOCK_r00", + [_GUARD_TYPE_VERSION_AND_LOCK_r22] = "_GUARD_TYPE_VERSION_AND_LOCK_r22", + [_GUARD_TYPE_VERSION_AND_LOCK_r33] = "_GUARD_TYPE_VERSION_AND_LOCK_r33", [_IMPORT_FROM] = "_IMPORT_FROM", + [_IMPORT_FROM_r01] = "_IMPORT_FROM_r01", [_IMPORT_NAME] = "_IMPORT_NAME", + [_IMPORT_NAME_r21] = "_IMPORT_NAME_r21", [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = "_INIT_CALL_BOUND_METHOD_EXACT_ARGS", + [_INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00] = "_INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00", [_INIT_CALL_PY_EXACT_ARGS] = "_INIT_CALL_PY_EXACT_ARGS", + [_INIT_CALL_PY_EXACT_ARGS_r01] = "_INIT_CALL_PY_EXACT_ARGS_r01", [_INIT_CALL_PY_EXACT_ARGS_0] = "_INIT_CALL_PY_EXACT_ARGS_0", + [_INIT_CALL_PY_EXACT_ARGS_0_r01] = "_INIT_CALL_PY_EXACT_ARGS_0_r01", [_INIT_CALL_PY_EXACT_ARGS_1] = "_INIT_CALL_PY_EXACT_ARGS_1", + [_INIT_CALL_PY_EXACT_ARGS_1_r01] = "_INIT_CALL_PY_EXACT_ARGS_1_r01", [_INIT_CALL_PY_EXACT_ARGS_2] = "_INIT_CALL_PY_EXACT_ARGS_2", + [_INIT_CALL_PY_EXACT_ARGS_2_r01] = "_INIT_CALL_PY_EXACT_ARGS_2_r01", [_INIT_CALL_PY_EXACT_ARGS_3] = "_INIT_CALL_PY_EXACT_ARGS_3", + [_INIT_CALL_PY_EXACT_ARGS_3_r01] = "_INIT_CALL_PY_EXACT_ARGS_3_r01", [_INIT_CALL_PY_EXACT_ARGS_4] = "_INIT_CALL_PY_EXACT_ARGS_4", + [_INIT_CALL_PY_EXACT_ARGS_4_r01] = "_INIT_CALL_PY_EXACT_ARGS_4_r01", [_INSERT_NULL] = "_INSERT_NULL", + [_INSERT_NULL_r10] = "_INSERT_NULL_r10", [_IS_NONE] = "_IS_NONE", + [_IS_NONE_r11] = "_IS_NONE_r11", [_IS_OP] = "_IS_OP", + [_IS_OP_r21] = "_IS_OP_r21", [_ITER_CHECK_LIST] = "_ITER_CHECK_LIST", + [_ITER_CHECK_LIST_r22] = "_ITER_CHECK_LIST_r22", + [_ITER_CHECK_LIST_r00] = "_ITER_CHECK_LIST_r00", + [_ITER_CHECK_LIST_r11] = "_ITER_CHECK_LIST_r11", + [_ITER_CHECK_LIST_r33] = "_ITER_CHECK_LIST_r33", [_ITER_CHECK_RANGE] = "_ITER_CHECK_RANGE", + [_ITER_CHECK_RANGE_r22] = "_ITER_CHECK_RANGE_r22", + [_ITER_CHECK_RANGE_r00] = "_ITER_CHECK_RANGE_r00", + [_ITER_CHECK_RANGE_r11] = "_ITER_CHECK_RANGE_r11", + [_ITER_CHECK_RANGE_r33] = "_ITER_CHECK_RANGE_r33", [_ITER_CHECK_TUPLE] = "_ITER_CHECK_TUPLE", + [_ITER_CHECK_TUPLE_r22] = "_ITER_CHECK_TUPLE_r22", + [_ITER_CHECK_TUPLE_r00] = "_ITER_CHECK_TUPLE_r00", + [_ITER_CHECK_TUPLE_r11] = "_ITER_CHECK_TUPLE_r11", + [_ITER_CHECK_TUPLE_r33] = "_ITER_CHECK_TUPLE_r33", [_ITER_NEXT_LIST_TIER_TWO] = "_ITER_NEXT_LIST_TIER_TWO", + [_ITER_NEXT_LIST_TIER_TWO_r01] = "_ITER_NEXT_LIST_TIER_TWO_r01", [_ITER_NEXT_RANGE] = "_ITER_NEXT_RANGE", + [_ITER_NEXT_RANGE_r23] = "_ITER_NEXT_RANGE_r23", [_ITER_NEXT_TUPLE] = "_ITER_NEXT_TUPLE", + [_ITER_NEXT_TUPLE_r23] = "_ITER_NEXT_TUPLE_r23", [_JUMP_TO_TOP] = "_JUMP_TO_TOP", + [_JUMP_TO_TOP_r00] = "_JUMP_TO_TOP_r00", [_LIST_APPEND] = "_LIST_APPEND", + [_LIST_APPEND_r10] = "_LIST_APPEND_r10", [_LIST_EXTEND] = "_LIST_EXTEND", + [_LIST_EXTEND_r10] = "_LIST_EXTEND_r10", [_LOAD_ATTR] = "_LOAD_ATTR", + [_LOAD_ATTR_r10] = "_LOAD_ATTR_r10", [_LOAD_ATTR_CLASS] = "_LOAD_ATTR_CLASS", + [_LOAD_ATTR_CLASS_r11] = "_LOAD_ATTR_CLASS_r11", [_LOAD_ATTR_INSTANCE_VALUE] = "_LOAD_ATTR_INSTANCE_VALUE", + [_LOAD_ATTR_INSTANCE_VALUE_r11] = "_LOAD_ATTR_INSTANCE_VALUE_r11", [_LOAD_ATTR_METHOD_LAZY_DICT] = "_LOAD_ATTR_METHOD_LAZY_DICT", + [_LOAD_ATTR_METHOD_LAZY_DICT_r12] = "_LOAD_ATTR_METHOD_LAZY_DICT_r12", + [_LOAD_ATTR_METHOD_LAZY_DICT_r01] = "_LOAD_ATTR_METHOD_LAZY_DICT_r01", + [_LOAD_ATTR_METHOD_LAZY_DICT_r23] = "_LOAD_ATTR_METHOD_LAZY_DICT_r23", [_LOAD_ATTR_METHOD_NO_DICT] = "_LOAD_ATTR_METHOD_NO_DICT", + [_LOAD_ATTR_METHOD_NO_DICT_r12] = "_LOAD_ATTR_METHOD_NO_DICT_r12", + [_LOAD_ATTR_METHOD_NO_DICT_r01] = "_LOAD_ATTR_METHOD_NO_DICT_r01", + [_LOAD_ATTR_METHOD_NO_DICT_r23] = "_LOAD_ATTR_METHOD_NO_DICT_r23", [_LOAD_ATTR_METHOD_WITH_VALUES] = "_LOAD_ATTR_METHOD_WITH_VALUES", + [_LOAD_ATTR_METHOD_WITH_VALUES_r12] = "_LOAD_ATTR_METHOD_WITH_VALUES_r12", + [_LOAD_ATTR_METHOD_WITH_VALUES_r01] = "_LOAD_ATTR_METHOD_WITH_VALUES_r01", + [_LOAD_ATTR_METHOD_WITH_VALUES_r23] = "_LOAD_ATTR_METHOD_WITH_VALUES_r23", [_LOAD_ATTR_MODULE] = "_LOAD_ATTR_MODULE", + [_LOAD_ATTR_MODULE_r11] = "_LOAD_ATTR_MODULE_r11", [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = "_LOAD_ATTR_NONDESCRIPTOR_NO_DICT", + [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11] = "_LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11", [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = "_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", + [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11] = "_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11", [_LOAD_ATTR_PROPERTY_FRAME] = "_LOAD_ATTR_PROPERTY_FRAME", + [_LOAD_ATTR_PROPERTY_FRAME_r11] = "_LOAD_ATTR_PROPERTY_FRAME_r11", + [_LOAD_ATTR_PROPERTY_FRAME_r00] = "_LOAD_ATTR_PROPERTY_FRAME_r00", + [_LOAD_ATTR_PROPERTY_FRAME_r22] = "_LOAD_ATTR_PROPERTY_FRAME_r22", + [_LOAD_ATTR_PROPERTY_FRAME_r33] = "_LOAD_ATTR_PROPERTY_FRAME_r33", [_LOAD_ATTR_SLOT] = "_LOAD_ATTR_SLOT", + [_LOAD_ATTR_SLOT_r11] = "_LOAD_ATTR_SLOT_r11", [_LOAD_ATTR_WITH_HINT] = "_LOAD_ATTR_WITH_HINT", + [_LOAD_ATTR_WITH_HINT_r11] = "_LOAD_ATTR_WITH_HINT_r11", [_LOAD_BUILD_CLASS] = "_LOAD_BUILD_CLASS", + [_LOAD_BUILD_CLASS_r01] = "_LOAD_BUILD_CLASS_r01", [_LOAD_COMMON_CONSTANT] = "_LOAD_COMMON_CONSTANT", + [_LOAD_COMMON_CONSTANT_r01] = "_LOAD_COMMON_CONSTANT_r01", + [_LOAD_COMMON_CONSTANT_r12] = "_LOAD_COMMON_CONSTANT_r12", + [_LOAD_COMMON_CONSTANT_r23] = "_LOAD_COMMON_CONSTANT_r23", [_LOAD_CONST] = "_LOAD_CONST", + [_LOAD_CONST_r01] = "_LOAD_CONST_r01", + [_LOAD_CONST_r12] = "_LOAD_CONST_r12", + [_LOAD_CONST_r23] = "_LOAD_CONST_r23", [_LOAD_CONST_INLINE] = "_LOAD_CONST_INLINE", + [_LOAD_CONST_INLINE_r01] = "_LOAD_CONST_INLINE_r01", + [_LOAD_CONST_INLINE_r12] = "_LOAD_CONST_INLINE_r12", + [_LOAD_CONST_INLINE_r23] = "_LOAD_CONST_INLINE_r23", [_LOAD_CONST_INLINE_BORROW] = "_LOAD_CONST_INLINE_BORROW", + [_LOAD_CONST_INLINE_BORROW_r01] = "_LOAD_CONST_INLINE_BORROW_r01", + [_LOAD_CONST_INLINE_BORROW_r12] = "_LOAD_CONST_INLINE_BORROW_r12", + [_LOAD_CONST_INLINE_BORROW_r23] = "_LOAD_CONST_INLINE_BORROW_r23", [_LOAD_CONST_UNDER_INLINE] = "_LOAD_CONST_UNDER_INLINE", + [_LOAD_CONST_UNDER_INLINE_r12] = "_LOAD_CONST_UNDER_INLINE_r12", + [_LOAD_CONST_UNDER_INLINE_r01] = "_LOAD_CONST_UNDER_INLINE_r01", + [_LOAD_CONST_UNDER_INLINE_r23] = "_LOAD_CONST_UNDER_INLINE_r23", [_LOAD_CONST_UNDER_INLINE_BORROW] = "_LOAD_CONST_UNDER_INLINE_BORROW", + [_LOAD_CONST_UNDER_INLINE_BORROW_r12] = "_LOAD_CONST_UNDER_INLINE_BORROW_r12", + [_LOAD_CONST_UNDER_INLINE_BORROW_r01] = "_LOAD_CONST_UNDER_INLINE_BORROW_r01", + [_LOAD_CONST_UNDER_INLINE_BORROW_r23] = "_LOAD_CONST_UNDER_INLINE_BORROW_r23", [_LOAD_DEREF] = "_LOAD_DEREF", + [_LOAD_DEREF_r01] = "_LOAD_DEREF_r01", [_LOAD_FAST] = "_LOAD_FAST", + [_LOAD_FAST_r01] = "_LOAD_FAST_r01", + [_LOAD_FAST_r12] = "_LOAD_FAST_r12", + [_LOAD_FAST_r23] = "_LOAD_FAST_r23", [_LOAD_FAST_0] = "_LOAD_FAST_0", + [_LOAD_FAST_0_r01] = "_LOAD_FAST_0_r01", + [_LOAD_FAST_0_r12] = "_LOAD_FAST_0_r12", + [_LOAD_FAST_0_r23] = "_LOAD_FAST_0_r23", [_LOAD_FAST_1] = "_LOAD_FAST_1", + [_LOAD_FAST_1_r01] = "_LOAD_FAST_1_r01", + [_LOAD_FAST_1_r12] = "_LOAD_FAST_1_r12", + [_LOAD_FAST_1_r23] = "_LOAD_FAST_1_r23", [_LOAD_FAST_2] = "_LOAD_FAST_2", + [_LOAD_FAST_2_r01] = "_LOAD_FAST_2_r01", + [_LOAD_FAST_2_r12] = "_LOAD_FAST_2_r12", + [_LOAD_FAST_2_r23] = "_LOAD_FAST_2_r23", [_LOAD_FAST_3] = "_LOAD_FAST_3", + [_LOAD_FAST_3_r01] = "_LOAD_FAST_3_r01", + [_LOAD_FAST_3_r12] = "_LOAD_FAST_3_r12", + [_LOAD_FAST_3_r23] = "_LOAD_FAST_3_r23", [_LOAD_FAST_4] = "_LOAD_FAST_4", + [_LOAD_FAST_4_r01] = "_LOAD_FAST_4_r01", + [_LOAD_FAST_4_r12] = "_LOAD_FAST_4_r12", + [_LOAD_FAST_4_r23] = "_LOAD_FAST_4_r23", [_LOAD_FAST_5] = "_LOAD_FAST_5", + [_LOAD_FAST_5_r01] = "_LOAD_FAST_5_r01", + [_LOAD_FAST_5_r12] = "_LOAD_FAST_5_r12", + [_LOAD_FAST_5_r23] = "_LOAD_FAST_5_r23", [_LOAD_FAST_6] = "_LOAD_FAST_6", + [_LOAD_FAST_6_r01] = "_LOAD_FAST_6_r01", + [_LOAD_FAST_6_r12] = "_LOAD_FAST_6_r12", + [_LOAD_FAST_6_r23] = "_LOAD_FAST_6_r23", [_LOAD_FAST_7] = "_LOAD_FAST_7", + [_LOAD_FAST_7_r01] = "_LOAD_FAST_7_r01", + [_LOAD_FAST_7_r12] = "_LOAD_FAST_7_r12", + [_LOAD_FAST_7_r23] = "_LOAD_FAST_7_r23", [_LOAD_FAST_AND_CLEAR] = "_LOAD_FAST_AND_CLEAR", + [_LOAD_FAST_AND_CLEAR_r01] = "_LOAD_FAST_AND_CLEAR_r01", + [_LOAD_FAST_AND_CLEAR_r12] = "_LOAD_FAST_AND_CLEAR_r12", + [_LOAD_FAST_AND_CLEAR_r23] = "_LOAD_FAST_AND_CLEAR_r23", [_LOAD_FAST_BORROW] = "_LOAD_FAST_BORROW", + [_LOAD_FAST_BORROW_r01] = "_LOAD_FAST_BORROW_r01", + [_LOAD_FAST_BORROW_r12] = "_LOAD_FAST_BORROW_r12", + [_LOAD_FAST_BORROW_r23] = "_LOAD_FAST_BORROW_r23", [_LOAD_FAST_BORROW_0] = "_LOAD_FAST_BORROW_0", + [_LOAD_FAST_BORROW_0_r01] = "_LOAD_FAST_BORROW_0_r01", + [_LOAD_FAST_BORROW_0_r12] = "_LOAD_FAST_BORROW_0_r12", + [_LOAD_FAST_BORROW_0_r23] = "_LOAD_FAST_BORROW_0_r23", [_LOAD_FAST_BORROW_1] = "_LOAD_FAST_BORROW_1", + [_LOAD_FAST_BORROW_1_r01] = "_LOAD_FAST_BORROW_1_r01", + [_LOAD_FAST_BORROW_1_r12] = "_LOAD_FAST_BORROW_1_r12", + [_LOAD_FAST_BORROW_1_r23] = "_LOAD_FAST_BORROW_1_r23", [_LOAD_FAST_BORROW_2] = "_LOAD_FAST_BORROW_2", + [_LOAD_FAST_BORROW_2_r01] = "_LOAD_FAST_BORROW_2_r01", + [_LOAD_FAST_BORROW_2_r12] = "_LOAD_FAST_BORROW_2_r12", + [_LOAD_FAST_BORROW_2_r23] = "_LOAD_FAST_BORROW_2_r23", [_LOAD_FAST_BORROW_3] = "_LOAD_FAST_BORROW_3", + [_LOAD_FAST_BORROW_3_r01] = "_LOAD_FAST_BORROW_3_r01", + [_LOAD_FAST_BORROW_3_r12] = "_LOAD_FAST_BORROW_3_r12", + [_LOAD_FAST_BORROW_3_r23] = "_LOAD_FAST_BORROW_3_r23", [_LOAD_FAST_BORROW_4] = "_LOAD_FAST_BORROW_4", + [_LOAD_FAST_BORROW_4_r01] = "_LOAD_FAST_BORROW_4_r01", + [_LOAD_FAST_BORROW_4_r12] = "_LOAD_FAST_BORROW_4_r12", + [_LOAD_FAST_BORROW_4_r23] = "_LOAD_FAST_BORROW_4_r23", [_LOAD_FAST_BORROW_5] = "_LOAD_FAST_BORROW_5", + [_LOAD_FAST_BORROW_5_r01] = "_LOAD_FAST_BORROW_5_r01", + [_LOAD_FAST_BORROW_5_r12] = "_LOAD_FAST_BORROW_5_r12", + [_LOAD_FAST_BORROW_5_r23] = "_LOAD_FAST_BORROW_5_r23", [_LOAD_FAST_BORROW_6] = "_LOAD_FAST_BORROW_6", + [_LOAD_FAST_BORROW_6_r01] = "_LOAD_FAST_BORROW_6_r01", + [_LOAD_FAST_BORROW_6_r12] = "_LOAD_FAST_BORROW_6_r12", + [_LOAD_FAST_BORROW_6_r23] = "_LOAD_FAST_BORROW_6_r23", [_LOAD_FAST_BORROW_7] = "_LOAD_FAST_BORROW_7", - [_LOAD_FAST_BORROW_LOAD_FAST_BORROW] = "_LOAD_FAST_BORROW_LOAD_FAST_BORROW", + [_LOAD_FAST_BORROW_7_r01] = "_LOAD_FAST_BORROW_7_r01", + [_LOAD_FAST_BORROW_7_r12] = "_LOAD_FAST_BORROW_7_r12", + [_LOAD_FAST_BORROW_7_r23] = "_LOAD_FAST_BORROW_7_r23", [_LOAD_FAST_CHECK] = "_LOAD_FAST_CHECK", - [_LOAD_FAST_LOAD_FAST] = "_LOAD_FAST_LOAD_FAST", + [_LOAD_FAST_CHECK_r01] = "_LOAD_FAST_CHECK_r01", [_LOAD_FROM_DICT_OR_DEREF] = "_LOAD_FROM_DICT_OR_DEREF", + [_LOAD_FROM_DICT_OR_DEREF_r11] = "_LOAD_FROM_DICT_OR_DEREF_r11", [_LOAD_GLOBAL] = "_LOAD_GLOBAL", + [_LOAD_GLOBAL_r00] = "_LOAD_GLOBAL_r00", [_LOAD_GLOBAL_BUILTINS] = "_LOAD_GLOBAL_BUILTINS", + [_LOAD_GLOBAL_BUILTINS_r01] = "_LOAD_GLOBAL_BUILTINS_r01", + [_LOAD_GLOBAL_BUILTINS_r12] = "_LOAD_GLOBAL_BUILTINS_r12", + [_LOAD_GLOBAL_BUILTINS_r23] = "_LOAD_GLOBAL_BUILTINS_r23", [_LOAD_GLOBAL_MODULE] = "_LOAD_GLOBAL_MODULE", + [_LOAD_GLOBAL_MODULE_r01] = "_LOAD_GLOBAL_MODULE_r01", + [_LOAD_GLOBAL_MODULE_r12] = "_LOAD_GLOBAL_MODULE_r12", + [_LOAD_GLOBAL_MODULE_r23] = "_LOAD_GLOBAL_MODULE_r23", [_LOAD_LOCALS] = "_LOAD_LOCALS", + [_LOAD_LOCALS_r01] = "_LOAD_LOCALS_r01", [_LOAD_NAME] = "_LOAD_NAME", + [_LOAD_NAME_r01] = "_LOAD_NAME_r01", [_LOAD_SMALL_INT] = "_LOAD_SMALL_INT", + [_LOAD_SMALL_INT_r01] = "_LOAD_SMALL_INT_r01", + [_LOAD_SMALL_INT_r12] = "_LOAD_SMALL_INT_r12", + [_LOAD_SMALL_INT_r23] = "_LOAD_SMALL_INT_r23", [_LOAD_SMALL_INT_0] = "_LOAD_SMALL_INT_0", + [_LOAD_SMALL_INT_0_r01] = "_LOAD_SMALL_INT_0_r01", + [_LOAD_SMALL_INT_0_r12] = "_LOAD_SMALL_INT_0_r12", + [_LOAD_SMALL_INT_0_r23] = "_LOAD_SMALL_INT_0_r23", [_LOAD_SMALL_INT_1] = "_LOAD_SMALL_INT_1", + [_LOAD_SMALL_INT_1_r01] = "_LOAD_SMALL_INT_1_r01", + [_LOAD_SMALL_INT_1_r12] = "_LOAD_SMALL_INT_1_r12", + [_LOAD_SMALL_INT_1_r23] = "_LOAD_SMALL_INT_1_r23", [_LOAD_SMALL_INT_2] = "_LOAD_SMALL_INT_2", + [_LOAD_SMALL_INT_2_r01] = "_LOAD_SMALL_INT_2_r01", + [_LOAD_SMALL_INT_2_r12] = "_LOAD_SMALL_INT_2_r12", + [_LOAD_SMALL_INT_2_r23] = "_LOAD_SMALL_INT_2_r23", [_LOAD_SMALL_INT_3] = "_LOAD_SMALL_INT_3", + [_LOAD_SMALL_INT_3_r01] = "_LOAD_SMALL_INT_3_r01", + [_LOAD_SMALL_INT_3_r12] = "_LOAD_SMALL_INT_3_r12", + [_LOAD_SMALL_INT_3_r23] = "_LOAD_SMALL_INT_3_r23", [_LOAD_SPECIAL] = "_LOAD_SPECIAL", + [_LOAD_SPECIAL_r00] = "_LOAD_SPECIAL_r00", [_LOAD_SUPER_ATTR_ATTR] = "_LOAD_SUPER_ATTR_ATTR", + [_LOAD_SUPER_ATTR_ATTR_r31] = "_LOAD_SUPER_ATTR_ATTR_r31", [_LOAD_SUPER_ATTR_METHOD] = "_LOAD_SUPER_ATTR_METHOD", + [_LOAD_SUPER_ATTR_METHOD_r32] = "_LOAD_SUPER_ATTR_METHOD_r32", [_MAKE_CALLARGS_A_TUPLE] = "_MAKE_CALLARGS_A_TUPLE", + [_MAKE_CALLARGS_A_TUPLE_r00] = "_MAKE_CALLARGS_A_TUPLE_r00", [_MAKE_CELL] = "_MAKE_CELL", + [_MAKE_CELL_r00] = "_MAKE_CELL_r00", [_MAKE_FUNCTION] = "_MAKE_FUNCTION", + [_MAKE_FUNCTION_r11] = "_MAKE_FUNCTION_r11", [_MAKE_WARM] = "_MAKE_WARM", + [_MAKE_WARM_r00] = "_MAKE_WARM_r00", + [_MAKE_WARM_r11] = "_MAKE_WARM_r11", + [_MAKE_WARM_r22] = "_MAKE_WARM_r22", + [_MAKE_WARM_r33] = "_MAKE_WARM_r33", [_MAP_ADD] = "_MAP_ADD", + [_MAP_ADD_r20] = "_MAP_ADD_r20", [_MATCH_CLASS] = "_MATCH_CLASS", + [_MATCH_CLASS_r31] = "_MATCH_CLASS_r31", [_MATCH_KEYS] = "_MATCH_KEYS", + [_MATCH_KEYS_r01] = "_MATCH_KEYS_r01", [_MATCH_MAPPING] = "_MATCH_MAPPING", + [_MATCH_MAPPING_r12] = "_MATCH_MAPPING_r12", + [_MATCH_MAPPING_r01] = "_MATCH_MAPPING_r01", + [_MATCH_MAPPING_r23] = "_MATCH_MAPPING_r23", [_MATCH_SEQUENCE] = "_MATCH_SEQUENCE", + [_MATCH_SEQUENCE_r12] = "_MATCH_SEQUENCE_r12", + [_MATCH_SEQUENCE_r01] = "_MATCH_SEQUENCE_r01", + [_MATCH_SEQUENCE_r23] = "_MATCH_SEQUENCE_r23", [_MAYBE_EXPAND_METHOD] = "_MAYBE_EXPAND_METHOD", + [_MAYBE_EXPAND_METHOD_r00] = "_MAYBE_EXPAND_METHOD_r00", [_MAYBE_EXPAND_METHOD_KW] = "_MAYBE_EXPAND_METHOD_KW", + [_MAYBE_EXPAND_METHOD_KW_r00] = "_MAYBE_EXPAND_METHOD_KW_r00", [_NOP] = "_NOP", + [_NOP_r00] = "_NOP_r00", + [_NOP_r11] = "_NOP_r11", + [_NOP_r22] = "_NOP_r22", + [_NOP_r33] = "_NOP_r33", [_POP_CALL] = "_POP_CALL", + [_POP_CALL_r20] = "_POP_CALL_r20", [_POP_CALL_LOAD_CONST_INLINE_BORROW] = "_POP_CALL_LOAD_CONST_INLINE_BORROW", + [_POP_CALL_LOAD_CONST_INLINE_BORROW_r21] = "_POP_CALL_LOAD_CONST_INLINE_BORROW_r21", [_POP_CALL_ONE] = "_POP_CALL_ONE", + [_POP_CALL_ONE_r30] = "_POP_CALL_ONE_r30", [_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW] = "_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW", + [_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31] = "_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31", [_POP_CALL_TWO] = "_POP_CALL_TWO", + [_POP_CALL_TWO_r30] = "_POP_CALL_TWO_r30", [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW] = "_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW", + [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31] = "_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31", [_POP_EXCEPT] = "_POP_EXCEPT", + [_POP_EXCEPT_r10] = "_POP_EXCEPT_r10", [_POP_ITER] = "_POP_ITER", + [_POP_ITER_r20] = "_POP_ITER_r20", [_POP_TOP] = "_POP_TOP", + [_POP_TOP_r10] = "_POP_TOP_r10", [_POP_TOP_LOAD_CONST_INLINE] = "_POP_TOP_LOAD_CONST_INLINE", + [_POP_TOP_LOAD_CONST_INLINE_r11] = "_POP_TOP_LOAD_CONST_INLINE_r11", [_POP_TOP_LOAD_CONST_INLINE_BORROW] = "_POP_TOP_LOAD_CONST_INLINE_BORROW", + [_POP_TOP_LOAD_CONST_INLINE_BORROW_r11] = "_POP_TOP_LOAD_CONST_INLINE_BORROW_r11", [_POP_TWO] = "_POP_TWO", + [_POP_TWO_r20] = "_POP_TWO_r20", [_POP_TWO_LOAD_CONST_INLINE_BORROW] = "_POP_TWO_LOAD_CONST_INLINE_BORROW", + [_POP_TWO_LOAD_CONST_INLINE_BORROW_r21] = "_POP_TWO_LOAD_CONST_INLINE_BORROW_r21", [_PUSH_EXC_INFO] = "_PUSH_EXC_INFO", + [_PUSH_EXC_INFO_r12] = "_PUSH_EXC_INFO_r12", + [_PUSH_EXC_INFO_r01] = "_PUSH_EXC_INFO_r01", + [_PUSH_EXC_INFO_r23] = "_PUSH_EXC_INFO_r23", [_PUSH_FRAME] = "_PUSH_FRAME", + [_PUSH_FRAME_r10] = "_PUSH_FRAME_r10", [_PUSH_NULL] = "_PUSH_NULL", + [_PUSH_NULL_r01] = "_PUSH_NULL_r01", + [_PUSH_NULL_r12] = "_PUSH_NULL_r12", + [_PUSH_NULL_r23] = "_PUSH_NULL_r23", [_PUSH_NULL_CONDITIONAL] = "_PUSH_NULL_CONDITIONAL", + [_PUSH_NULL_CONDITIONAL_r00] = "_PUSH_NULL_CONDITIONAL_r00", [_PY_FRAME_GENERAL] = "_PY_FRAME_GENERAL", + [_PY_FRAME_GENERAL_r01] = "_PY_FRAME_GENERAL_r01", [_PY_FRAME_KW] = "_PY_FRAME_KW", + [_PY_FRAME_KW_r11] = "_PY_FRAME_KW_r11", [_REPLACE_WITH_TRUE] = "_REPLACE_WITH_TRUE", + [_REPLACE_WITH_TRUE_r11] = "_REPLACE_WITH_TRUE_r11", [_RESUME_CHECK] = "_RESUME_CHECK", + [_RESUME_CHECK_r00] = "_RESUME_CHECK_r00", + [_RESUME_CHECK_r11] = "_RESUME_CHECK_r11", + [_RESUME_CHECK_r22] = "_RESUME_CHECK_r22", + [_RESUME_CHECK_r33] = "_RESUME_CHECK_r33", [_RETURN_GENERATOR] = "_RETURN_GENERATOR", + [_RETURN_GENERATOR_r01] = "_RETURN_GENERATOR_r01", [_RETURN_VALUE] = "_RETURN_VALUE", + [_RETURN_VALUE_r11] = "_RETURN_VALUE_r11", [_SAVE_RETURN_OFFSET] = "_SAVE_RETURN_OFFSET", + [_SAVE_RETURN_OFFSET_r00] = "_SAVE_RETURN_OFFSET_r00", + [_SAVE_RETURN_OFFSET_r11] = "_SAVE_RETURN_OFFSET_r11", + [_SAVE_RETURN_OFFSET_r22] = "_SAVE_RETURN_OFFSET_r22", + [_SAVE_RETURN_OFFSET_r33] = "_SAVE_RETURN_OFFSET_r33", [_SEND_GEN_FRAME] = "_SEND_GEN_FRAME", + [_SEND_GEN_FRAME_r22] = "_SEND_GEN_FRAME_r22", + [_SEND_GEN_FRAME_r00] = "_SEND_GEN_FRAME_r00", + [_SEND_GEN_FRAME_r11] = "_SEND_GEN_FRAME_r11", + [_SEND_GEN_FRAME_r33] = "_SEND_GEN_FRAME_r33", [_SETUP_ANNOTATIONS] = "_SETUP_ANNOTATIONS", + [_SETUP_ANNOTATIONS_r00] = "_SETUP_ANNOTATIONS_r00", [_SET_ADD] = "_SET_ADD", + [_SET_ADD_r10] = "_SET_ADD_r10", [_SET_FUNCTION_ATTRIBUTE] = "_SET_FUNCTION_ATTRIBUTE", + [_SET_FUNCTION_ATTRIBUTE_r21] = "_SET_FUNCTION_ATTRIBUTE_r21", + [_SET_FUNCTION_ATTRIBUTE_r10] = "_SET_FUNCTION_ATTRIBUTE_r10", + [_SET_FUNCTION_ATTRIBUTE_r32] = "_SET_FUNCTION_ATTRIBUTE_r32", [_SET_IP] = "_SET_IP", + [_SET_IP_r00] = "_SET_IP_r00", + [_SET_IP_r11] = "_SET_IP_r11", + [_SET_IP_r22] = "_SET_IP_r22", + [_SET_IP_r33] = "_SET_IP_r33", [_SET_UPDATE] = "_SET_UPDATE", + [_SET_UPDATE_r10] = "_SET_UPDATE_r10", + [_SPILL_OR_RELOAD] = "_SPILL_OR_RELOAD", + [_SPILL_OR_RELOAD_r01] = "_SPILL_OR_RELOAD_r01", + [_SPILL_OR_RELOAD_r02] = "_SPILL_OR_RELOAD_r02", + [_SPILL_OR_RELOAD_r03] = "_SPILL_OR_RELOAD_r03", + [_SPILL_OR_RELOAD_r10] = "_SPILL_OR_RELOAD_r10", + [_SPILL_OR_RELOAD_r12] = "_SPILL_OR_RELOAD_r12", + [_SPILL_OR_RELOAD_r13] = "_SPILL_OR_RELOAD_r13", + [_SPILL_OR_RELOAD_r20] = "_SPILL_OR_RELOAD_r20", + [_SPILL_OR_RELOAD_r21] = "_SPILL_OR_RELOAD_r21", + [_SPILL_OR_RELOAD_r23] = "_SPILL_OR_RELOAD_r23", + [_SPILL_OR_RELOAD_r30] = "_SPILL_OR_RELOAD_r30", + [_SPILL_OR_RELOAD_r31] = "_SPILL_OR_RELOAD_r31", + [_SPILL_OR_RELOAD_r32] = "_SPILL_OR_RELOAD_r32", [_START_EXECUTOR] = "_START_EXECUTOR", + [_START_EXECUTOR_r00] = "_START_EXECUTOR_r00", [_STORE_ATTR] = "_STORE_ATTR", + [_STORE_ATTR_r20] = "_STORE_ATTR_r20", [_STORE_ATTR_INSTANCE_VALUE] = "_STORE_ATTR_INSTANCE_VALUE", + [_STORE_ATTR_INSTANCE_VALUE_r20] = "_STORE_ATTR_INSTANCE_VALUE_r20", [_STORE_ATTR_SLOT] = "_STORE_ATTR_SLOT", + [_STORE_ATTR_SLOT_r20] = "_STORE_ATTR_SLOT_r20", [_STORE_ATTR_WITH_HINT] = "_STORE_ATTR_WITH_HINT", + [_STORE_ATTR_WITH_HINT_r20] = "_STORE_ATTR_WITH_HINT_r20", [_STORE_DEREF] = "_STORE_DEREF", + [_STORE_DEREF_r10] = "_STORE_DEREF_r10", [_STORE_FAST] = "_STORE_FAST", + [_STORE_FAST_r10] = "_STORE_FAST_r10", [_STORE_FAST_0] = "_STORE_FAST_0", + [_STORE_FAST_0_r10] = "_STORE_FAST_0_r10", [_STORE_FAST_1] = "_STORE_FAST_1", + [_STORE_FAST_1_r10] = "_STORE_FAST_1_r10", [_STORE_FAST_2] = "_STORE_FAST_2", + [_STORE_FAST_2_r10] = "_STORE_FAST_2_r10", [_STORE_FAST_3] = "_STORE_FAST_3", + [_STORE_FAST_3_r10] = "_STORE_FAST_3_r10", [_STORE_FAST_4] = "_STORE_FAST_4", + [_STORE_FAST_4_r10] = "_STORE_FAST_4_r10", [_STORE_FAST_5] = "_STORE_FAST_5", + [_STORE_FAST_5_r10] = "_STORE_FAST_5_r10", [_STORE_FAST_6] = "_STORE_FAST_6", + [_STORE_FAST_6_r10] = "_STORE_FAST_6_r10", [_STORE_FAST_7] = "_STORE_FAST_7", - [_STORE_FAST_LOAD_FAST] = "_STORE_FAST_LOAD_FAST", - [_STORE_FAST_STORE_FAST] = "_STORE_FAST_STORE_FAST", + [_STORE_FAST_7_r10] = "_STORE_FAST_7_r10", [_STORE_GLOBAL] = "_STORE_GLOBAL", + [_STORE_GLOBAL_r10] = "_STORE_GLOBAL_r10", [_STORE_NAME] = "_STORE_NAME", + [_STORE_NAME_r10] = "_STORE_NAME_r10", [_STORE_SLICE] = "_STORE_SLICE", + [_STORE_SLICE_r30] = "_STORE_SLICE_r30", [_STORE_SUBSCR] = "_STORE_SUBSCR", + [_STORE_SUBSCR_r30] = "_STORE_SUBSCR_r30", [_STORE_SUBSCR_DICT] = "_STORE_SUBSCR_DICT", + [_STORE_SUBSCR_DICT_r30] = "_STORE_SUBSCR_DICT_r30", [_STORE_SUBSCR_LIST_INT] = "_STORE_SUBSCR_LIST_INT", + [_STORE_SUBSCR_LIST_INT_r30] = "_STORE_SUBSCR_LIST_INT_r30", [_SWAP] = "_SWAP", + [_SWAP_r11] = "_SWAP_r11", [_TIER2_RESUME_CHECK] = "_TIER2_RESUME_CHECK", + [_TIER2_RESUME_CHECK_r00] = "_TIER2_RESUME_CHECK_r00", + [_TIER2_RESUME_CHECK_r11] = "_TIER2_RESUME_CHECK_r11", + [_TIER2_RESUME_CHECK_r22] = "_TIER2_RESUME_CHECK_r22", + [_TIER2_RESUME_CHECK_r33] = "_TIER2_RESUME_CHECK_r33", [_TO_BOOL] = "_TO_BOOL", + [_TO_BOOL_r11] = "_TO_BOOL_r11", [_TO_BOOL_BOOL] = "_TO_BOOL_BOOL", + [_TO_BOOL_BOOL_r11] = "_TO_BOOL_BOOL_r11", + [_TO_BOOL_BOOL_r00] = "_TO_BOOL_BOOL_r00", + [_TO_BOOL_BOOL_r22] = "_TO_BOOL_BOOL_r22", + [_TO_BOOL_BOOL_r33] = "_TO_BOOL_BOOL_r33", [_TO_BOOL_INT] = "_TO_BOOL_INT", + [_TO_BOOL_INT_r11] = "_TO_BOOL_INT_r11", [_TO_BOOL_LIST] = "_TO_BOOL_LIST", + [_TO_BOOL_LIST_r11] = "_TO_BOOL_LIST_r11", [_TO_BOOL_NONE] = "_TO_BOOL_NONE", + [_TO_BOOL_NONE_r11] = "_TO_BOOL_NONE_r11", + [_TO_BOOL_NONE_r00] = "_TO_BOOL_NONE_r00", + [_TO_BOOL_NONE_r22] = "_TO_BOOL_NONE_r22", + [_TO_BOOL_NONE_r33] = "_TO_BOOL_NONE_r33", [_TO_BOOL_STR] = "_TO_BOOL_STR", + [_TO_BOOL_STR_r11] = "_TO_BOOL_STR_r11", [_UNARY_INVERT] = "_UNARY_INVERT", + [_UNARY_INVERT_r11] = "_UNARY_INVERT_r11", [_UNARY_NEGATIVE] = "_UNARY_NEGATIVE", + [_UNARY_NEGATIVE_r11] = "_UNARY_NEGATIVE_r11", [_UNARY_NOT] = "_UNARY_NOT", + [_UNARY_NOT_r11] = "_UNARY_NOT_r11", + [_UNARY_NOT_r00] = "_UNARY_NOT_r00", + [_UNARY_NOT_r22] = "_UNARY_NOT_r22", + [_UNARY_NOT_r33] = "_UNARY_NOT_r33", [_UNPACK_EX] = "_UNPACK_EX", + [_UNPACK_EX_r10] = "_UNPACK_EX_r10", [_UNPACK_SEQUENCE] = "_UNPACK_SEQUENCE", + [_UNPACK_SEQUENCE_r10] = "_UNPACK_SEQUENCE_r10", [_UNPACK_SEQUENCE_LIST] = "_UNPACK_SEQUENCE_LIST", + [_UNPACK_SEQUENCE_LIST_r10] = "_UNPACK_SEQUENCE_LIST_r10", [_UNPACK_SEQUENCE_TUPLE] = "_UNPACK_SEQUENCE_TUPLE", + [_UNPACK_SEQUENCE_TUPLE_r10] = "_UNPACK_SEQUENCE_TUPLE_r10", [_UNPACK_SEQUENCE_TWO_TUPLE] = "_UNPACK_SEQUENCE_TWO_TUPLE", + [_UNPACK_SEQUENCE_TWO_TUPLE_r12] = "_UNPACK_SEQUENCE_TWO_TUPLE_r12", [_WITH_EXCEPT_START] = "_WITH_EXCEPT_START", + [_WITH_EXCEPT_START_r01] = "_WITH_EXCEPT_START_r01", [_YIELD_VALUE] = "_YIELD_VALUE", + [_YIELD_VALUE_r11] = "_YIELD_VALUE_r11", + [_YIELD_VALUE_r00] = "_YIELD_VALUE_r00", + [_YIELD_VALUE_r22] = "_YIELD_VALUE_r22", + [_YIELD_VALUE_r33] = "_YIELD_VALUE_r33", }; int _PyUop_num_popped(int opcode, int oparg) { @@ -686,10 +2140,6 @@ int _PyUop_num_popped(int opcode, int oparg) return 0; case _LOAD_FAST_AND_CLEAR: return 0; - case _LOAD_FAST_LOAD_FAST: - return 0; - case _LOAD_FAST_BORROW_LOAD_FAST_BORROW: - return 0; case _LOAD_CONST: return 0; case _LOAD_SMALL_INT_0: @@ -720,10 +2170,6 @@ int _PyUop_num_popped(int opcode, int oparg) return 1; case _STORE_FAST: return 1; - case _STORE_FAST_LOAD_FAST: - return 1; - case _STORE_FAST_STORE_FAST: - return 2; case _POP_TOP: return 1; case _POP_TWO: @@ -1242,6 +2688,8 @@ int _PyUop_num_popped(int opcode, int oparg) return 0; case _TIER2_RESUME_CHECK: return 0; + case _SPILL_OR_RELOAD: + return 0; default: return -1; } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 032e76f72af42c..3551f1c1ec19a2 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -5187,7 +5187,9 @@ dummy_func( _Py_BackoffCounter temperature = exit->temperature; if (!backoff_counter_triggers(temperature)) { exit->temperature = advance_backoff_counter(temperature); + SYNC_SP(); GOTO_TIER_ONE(target); + Py_UNREACHABLE(); } _PyExecutorObject *executor; if (target->op.code == ENTER_EXECUTOR) { @@ -5199,12 +5201,18 @@ dummy_func( int optimized = _PyOptimizer_Optimize(frame, target, &executor, chain_depth); if (optimized <= 0) { exit->temperature = restart_backoff_counter(temperature); + SYNC_SP(); GOTO_TIER_ONE(optimized < 0 ? NULL : target); + Py_UNREACHABLE(); } exit->temperature = initial_temperature_backoff_counter(); } exit->executor = executor; } + /* In future we might want to avoid spilling + * on side exits, so we might not sync the stack + * here and start the side trace with N cached registers */ + SYNC_SP(); GOTO_TIER_TWO(exit->executor); } @@ -5342,6 +5350,9 @@ dummy_func( assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); } + tier2 op(_SPILL_OR_RELOAD, (--)) { + } + label(pop_2_error) { stack_pointer -= 2; assert(WITHIN_STACK_BOUNDS()); diff --git a/Python/ceval.c b/Python/ceval.c index 4cfe4bb88f4e48..ae0637bae4a34a 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1152,14 +1152,21 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int uint64_t trace_uop_execution_counter = 0; #endif - assert(next_uop->opcode == _START_EXECUTOR); +#ifdef Py_DEBUG + int current_cached_values = 0; +#endif + _PyStackRef _tos_cache0 = PyStackRef_NULL; + _PyStackRef _tos_cache1 = PyStackRef_NULL; + _PyStackRef _tos_cache2 = PyStackRef_NULL; + + assert(next_uop->opcode == _START_EXECUTOR_r00); tier2_dispatch: for (;;) { uopcode = next_uop->opcode; #ifdef Py_DEBUG if (frame->lltrace >= 3) { dump_stack(frame, stack_pointer); - if (next_uop->opcode == _START_EXECUTOR) { + if (next_uop->opcode == _START_EXECUTOR_r00) { printf("%4d uop: ", 0); } else { diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index 187ec8fdd26584..30a542d948df7c 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -380,7 +380,7 @@ do { \ _PyExecutorObject *_executor = (EXECUTOR); \ tstate->current_executor = (PyObject *)_executor; \ next_uop = _executor->trace; \ - assert(next_uop->opcode == _START_EXECUTOR); \ + assert(next_uop->opcode == _START_EXECUTOR_r00); \ goto enter_tier_two; \ } while (0) #endif @@ -425,3 +425,9 @@ do { \ _PyObjectArray_Free(NAME - 1, NAME##_temp); #define CONVERSION_FAILED(NAME) ((NAME) == NULL) + +#ifdef Py_DEBUG +#define SET_CURRENT_CACHED_VALUES(N) current_cached_values = (N) +#else +#define SET_CURRENT_CACHED_VALUES(N) ((void)0) +#endif diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 4f772f916d1152..b8bec151ea930c 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -8,11 +8,45 @@ #endif #define TIER_TWO 2 - case _NOP: { + case _NOP_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); break; } - case _CHECK_PERIODIC: { + case _NOP_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + _tos_cache0 = _stack_item_0; + break; + } + + case _NOP_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _NOP_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_PERIODIC_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { @@ -26,7 +60,9 @@ break; } - case _CHECK_PERIODIC_IF_NOT_YIELD_FROM: { + case _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); @@ -47,7 +83,99 @@ /* _LOAD_BYTECODE is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _RESUME_CHECK: { + case _RESUME_CHECK_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + #if defined(__EMSCRIPTEN__) + if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; + #endif + uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); + uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); + assert((version & _PY_EVAL_EVENTS_MASK) == 0); + if (eval_breaker != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #ifdef Py_GIL_DISABLED + if (frame->tlbc_index != + ((_PyThreadStateImpl *)tstate)->tlbc_index) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + break; + } + + case _RESUME_CHECK_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + #if defined(__EMSCRIPTEN__) + if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; + #endif + uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); + uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); + assert((version & _PY_EVAL_EVENTS_MASK) == 0); + if (eval_breaker != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #ifdef Py_GIL_DISABLED + if (frame->tlbc_index != + ((_PyThreadStateImpl *)tstate)->tlbc_index) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache0 = _stack_item_0; + break; + } + + case _RESUME_CHECK_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + #if defined(__EMSCRIPTEN__) + if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; + #endif + uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); + uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); + assert((version & _PY_EVAL_EVENTS_MASK) == 0); + if (eval_breaker != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #ifdef Py_GIL_DISABLED + if (frame->tlbc_index != + ((_PyThreadStateImpl *)tstate)->tlbc_index) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _RESUME_CHECK_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { UOP_STAT_INC(uopcode, miss); @@ -69,12 +197,17 @@ JUMP_TO_JUMP_TARGET(); } #endif + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } /* _MONITOR_RESUME is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _LOAD_FAST_CHECK: { + case _LOAD_FAST_CHECK_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); _PyStackRef value_s = GETLOCAL(oparg); @@ -88,463 +221,1226 @@ JUMP_TO_ERROR(); } value = PyStackRef_DUP(value_s); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _LOAD_FAST_0: { + case _LOAD_FAST_0_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _LOAD_FAST_1: { + case _LOAD_FAST_0_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; - oparg = 1; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 0; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_2: { + case _LOAD_FAST_0_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = 2; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 0; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_3: { + case _LOAD_FAST_1_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; - oparg = 3; + oparg = 1; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _LOAD_FAST_4: { + case _LOAD_FAST_1_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; - oparg = 4; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 1; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_5: { + case _LOAD_FAST_1_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = 5; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 1; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_6: { + case _LOAD_FAST_2_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; - oparg = 6; + oparg = 2; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _LOAD_FAST_7: { + case _LOAD_FAST_2_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; - oparg = 7; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 2; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST: { + case _LOAD_FAST_2_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = CURRENT_OPARG(); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 2; + assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_BORROW_0: { + case _LOAD_FAST_3_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; - oparg = 0; + oparg = 3; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache0 = value; break; } - case _LOAD_FAST_BORROW_1: { + case _LOAD_FAST_3_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; - oparg = 1; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 3; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_BORROW_2: { + case _LOAD_FAST_3_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = 2; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 3; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_BORROW_3: { + case _LOAD_FAST_4_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; - oparg = 3; + oparg = 4; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache0 = value; break; } - case _LOAD_FAST_BORROW_4: { + case _LOAD_FAST_4_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_BORROW_5: { + case _LOAD_FAST_4_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = 5; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 4; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_BORROW_6: { + case _LOAD_FAST_5_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; - oparg = 6; + oparg = 5; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache0 = value; break; } - case _LOAD_FAST_BORROW_7: { + case _LOAD_FAST_5_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; - oparg = 7; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 5; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_BORROW: { + case _LOAD_FAST_5_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = CURRENT_OPARG(); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 5; + assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); - value = PyStackRef_Borrow(GETLOCAL(oparg)); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_FAST_AND_CLEAR: { + case _LOAD_FAST_6_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; - oparg = CURRENT_OPARG(); - value = GETLOCAL(oparg); - GETLOCAL(oparg) = PyStackRef_NULL; - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + oparg = 6; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache0 = value; break; } - case _LOAD_CONST: { + case _LOAD_FAST_6_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; - oparg = CURRENT_OPARG(); - PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); - value = PyStackRef_FromPyObjectBorrow(obj); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 6; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_SMALL_INT_0: { + case _LOAD_FAST_6_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = 0; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 6; assert(oparg == CURRENT_OPARG()); - assert(oparg < _PY_NSMALLPOSINTS); - PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; - value = PyStackRef_FromPyObjectBorrow(obj); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_SMALL_INT_1: { + case _LOAD_FAST_7_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; - oparg = 1; + oparg = 7; assert(oparg == CURRENT_OPARG()); - assert(oparg < _PY_NSMALLPOSINTS); - PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; - value = PyStackRef_FromPyObjectBorrow(obj); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache0 = value; break; } - case _LOAD_SMALL_INT_2: { + case _LOAD_FAST_7_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; - oparg = 2; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 7; assert(oparg == CURRENT_OPARG()); - assert(oparg < _PY_NSMALLPOSINTS); - PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; - value = PyStackRef_FromPyObjectBorrow(obj); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_SMALL_INT_3: { + case _LOAD_FAST_7_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; - oparg = 3; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 7; assert(oparg == CURRENT_OPARG()); - assert(oparg < _PY_NSMALLPOSINTS); - PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; - value = PyStackRef_FromPyObjectBorrow(obj); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_SMALL_INT: { + case _LOAD_FAST_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); - assert(oparg < _PY_NSMALLPOSINTS); - PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; - value = PyStackRef_FromPyObjectBorrow(obj); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache0 = value; break; } - case _STORE_FAST_0: { + case _LOAD_FAST_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_DUP(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_0_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_0_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 0; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_0_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 0; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_1_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 1; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_1_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 1; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_1_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 1; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_2_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 2; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_2_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 2; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_2_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 2; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_3_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 3; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_3_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 3; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_3_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 3; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_4_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 4; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_4_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 4; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_4_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 4; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_5_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 5; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_5_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 5; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_5_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 5; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_6_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 6; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_6_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 6; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_6_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 6; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_7_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 7; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_7_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 7; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_7_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 7; + assert(oparg == CURRENT_OPARG()); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = CURRENT_OPARG(); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_BORROW_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_BORROW_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + assert(!PyStackRef_IsNull(GETLOCAL(oparg))); + value = PyStackRef_Borrow(GETLOCAL(oparg)); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_AND_CLEAR_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = CURRENT_OPARG(); + value = GETLOCAL(oparg); + GETLOCAL(oparg) = PyStackRef_NULL; + _tos_cache0 = value; + break; + } + + case _LOAD_FAST_AND_CLEAR_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + value = GETLOCAL(oparg); + GETLOCAL(oparg) = PyStackRef_NULL; + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_FAST_AND_CLEAR_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + value = GETLOCAL(oparg); + GETLOCAL(oparg) = PyStackRef_NULL; + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_CONST_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = CURRENT_OPARG(); + PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache0 = value; + break; + } + + case _LOAD_CONST_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_CONST_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_0_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 0; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache0 = value; + break; + } + + case _LOAD_SMALL_INT_0_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 0; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_0_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 0; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_1_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 1; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache0 = value; + break; + } + + case _LOAD_SMALL_INT_1_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 1; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_1_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 1; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_2_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 2; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache0 = value; + break; + } + + case _LOAD_SMALL_INT_2_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 2; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_2_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 2; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_3_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = 3; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache0 = value; + break; + } + + case _LOAD_SMALL_INT_3_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 3; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_3_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = 3; + assert(oparg == CURRENT_OPARG()); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + oparg = CURRENT_OPARG(); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache0 = value; + break; + } + + case _LOAD_SMALL_INT_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_SMALL_INT_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + assert(oparg < _PY_NSMALLPOSINTS); + PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; + value = PyStackRef_FromPyObjectBorrow(obj); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _STORE_FAST_0_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = 0; + assert(oparg == CURRENT_OPARG()); + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST_1: { + case _STORE_FAST_1_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST_2: { + case _STORE_FAST_2_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST_3: { + case _STORE_FAST_3_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST_4: { + case _STORE_FAST_4_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST_5: { + case _STORE_FAST_5_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST_6: { + case _STORE_FAST_6_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST_7: { + case _STORE_FAST_7_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; assert(oparg == CURRENT_OPARG()); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _STORE_FAST: { + case _STORE_FAST_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - value = stack_pointer[-1]; + value = _stack_item_0; _PyStackRef tmp = GETLOCAL(oparg); GETLOCAL(oparg) = value; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _POP_TOP: { + case _POP_TOP_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; - value = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _POP_TWO: { + case _POP_TWO_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; _PyStackRef nos; - tos = stack_pointer[-1]; - nos = stack_pointer[-2]; - stack_pointer += -1; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + tos = _stack_item_1; + nos = _stack_item_0; + stack_pointer[0] = nos; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(tos); @@ -557,60 +1453,100 @@ break; } - case _PUSH_NULL: { + case _PUSH_NULL_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; res = PyStackRef_NULL; - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _PUSH_NULL_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + res = PyStackRef_NULL; + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _PUSH_NULL_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + res = PyStackRef_NULL; + _tos_cache2 = res; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _END_FOR: { + case _END_FOR_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; - value = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _POP_ITER: { + case _POP_ITER_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef index_or_null; _PyStackRef iter; - index_or_null = stack_pointer[-1]; - iter = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + index_or_null = _stack_item_1; + iter = _stack_item_0; (void)index_or_null; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iter); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _END_SEND: { + case _END_SEND_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef receiver; _PyStackRef val; - value = stack_pointer[-1]; - receiver = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + value = _stack_item_1; + receiver = _stack_item_0; val = value; - stack_pointer[-2] = val; - stack_pointer += -1; + stack_pointer[0] = val; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(receiver); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = val; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _UNARY_NEGATIVE: { + case _UNARY_NEGATIVE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -623,13 +1559,27 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _UNARY_NOT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + assert(PyStackRef_BoolCheck(value)); + res = PyStackRef_IsFalse(value) + ? PyStackRef_True : PyStackRef_False; + _tos_cache0 = res; break; } - case _UNARY_NOT: { + case _UNARY_NOT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; @@ -640,10 +1590,50 @@ break; } - case _TO_BOOL: { + case _UNARY_NOT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + value = _stack_item_1; + assert(PyStackRef_BoolCheck(value)); + res = PyStackRef_IsFalse(value) + ? PyStackRef_True : PyStackRef_False; + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _UNARY_NOT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + value = _stack_item_2; + assert(PyStackRef_BoolCheck(value)); + res = PyStackRef_IsFalse(value) + ? PyStackRef_True : PyStackRef_False; + _tos_cache2 = res; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _TO_BOOL_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -656,13 +1646,28 @@ JUMP_TO_ERROR(); } res = err ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _TO_BOOL_BOOL_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + if (!PyStackRef_BoolCheck(value)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(TO_BOOL, hit); + _tos_cache0 = value; break; } - case _TO_BOOL_BOOL: { + case _TO_BOOL_BOOL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; if (!PyStackRef_BoolCheck(value)) { @@ -673,10 +1678,49 @@ break; } - case _TO_BOOL_INT: { + case _TO_BOOL_BOOL_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + value = _stack_item_1; + if (!PyStackRef_BoolCheck(value)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(TO_BOOL, hit); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _TO_BOOL_BOOL_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + value = _stack_item_2; + if (!PyStackRef_BoolCheck(value)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(TO_BOOL, hit); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _TO_BOOL_INT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); @@ -688,19 +1732,35 @@ res = PyStackRef_False; } else { - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; - stack_pointer += 1; } - stack_pointer[-1] = res; + _tos_cache0 = res; + break; + } + + case _GUARD_NOS_LIST_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + nos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = nos; break; } - case _GUARD_NOS_LIST: { + case _GUARD_NOS_LIST_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -711,7 +1771,58 @@ break; } - case _GUARD_TOS_LIST: { + case _GUARD_NOS_LIST_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + nos = stack_pointer[-1]; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_LIST_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + nos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = nos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_LIST_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + tos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = tos; + break; + } + + case _GUARD_TOS_LIST_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -722,7 +1833,60 @@ break; } - case _GUARD_TOS_SLICE: { + case _GUARD_TOS_LIST_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + tos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = tos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_LIST_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + tos = _stack_item_2; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = tos; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_SLICE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + tos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PySlice_Check(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = tos; + break; + } + + case _GUARD_TOS_SLICE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -733,24 +1897,88 @@ break; } - case _TO_BOOL_LIST: { + case _GUARD_TOS_SLICE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + tos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PySlice_Check(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = tos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_SLICE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + tos = _stack_item_2; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PySlice_Check(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = tos; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _TO_BOOL_LIST_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); assert(PyList_CheckExact(value_o)); STAT_INC(TO_BOOL, hit); res = PyList_GET_SIZE(value_o) ? PyStackRef_True : PyStackRef_False; + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = res; stack_pointer[-1] = value; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _TO_BOOL_NONE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + if (!PyStackRef_IsNone(value)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(TO_BOOL, hit); + res = PyStackRef_False; + _tos_cache0 = res; break; } - case _TO_BOOL_NONE: { + case _TO_BOOL_NONE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; @@ -764,7 +1992,66 @@ break; } - case _GUARD_NOS_UNICODE: { + case _TO_BOOL_NONE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + value = _stack_item_1; + if (!PyStackRef_IsNone(value)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(TO_BOOL, hit); + res = PyStackRef_False; + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _TO_BOOL_NONE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + value = _stack_item_2; + if (!PyStackRef_IsNone(value)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(TO_BOOL, hit); + res = PyStackRef_False; + _tos_cache2 = res; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_UNICODE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + nos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyUnicode_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = nos; + break; + } + + case _GUARD_NOS_UNICODE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -775,7 +2062,58 @@ break; } - case _GUARD_TOS_UNICODE: { + case _GUARD_NOS_UNICODE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + nos = stack_pointer[-1]; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyUnicode_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_UNICODE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + nos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyUnicode_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = nos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_UNICODE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyUnicode_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = value; + break; + } + + case _GUARD_TOS_UNICODE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -786,10 +2124,49 @@ break; } - case _TO_BOOL_STR: { + case _GUARD_TOS_UNICODE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + value = _stack_item_1; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyUnicode_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_UNICODE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + value = _stack_item_2; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyUnicode_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _TO_BOOL_STR_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; STAT_INC(TO_BOOL, hit); PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (value_o == &_Py_STR(empty)) { @@ -798,38 +2175,40 @@ } else { assert(Py_SIZE(value_o)); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; - stack_pointer += 1; } - stack_pointer[-1] = res; + _tos_cache0 = res; break; } - case _REPLACE_WITH_TRUE: { + case _REPLACE_WITH_TRUE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _UNARY_INVERT: { + case _UNARY_INVERT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -842,13 +2221,30 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _GUARD_NOS_INT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef left; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + left = _stack_item_0; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + if (!PyLong_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = left; break; } - case _GUARD_NOS_INT: { + case _GUARD_NOS_INT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef left; left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -859,7 +2255,58 @@ break; } - case _GUARD_TOS_INT: { + case _GUARD_NOS_INT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef left; + _PyStackRef _stack_item_0 = _tos_cache0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + if (!PyLong_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_INT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef left; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + if (!PyLong_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = left; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_INT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = value; + break; + } + + case _GUARD_TOS_INT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -870,17 +2317,61 @@ break; } - case _BINARY_OP_MULTIPLY_INT: { + case _GUARD_TOS_INT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + value = _stack_item_1; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_INT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + value = _stack_item_2; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _BINARY_OP_MULTIPLY_INT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -892,23 +2383,31 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[-2] = res; - stack_pointer += -1; + _tos_cache0 = res; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); break; } - case _BINARY_OP_ADD_INT: { + case _BINARY_OP_ADD_INT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -920,23 +2419,31 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[-2] = res; - stack_pointer += -1; + _tos_cache0 = res; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); break; } - case _BINARY_OP_SUBTRACT_INT: { + case _BINARY_OP_SUBTRACT_INT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -947,95 +2454,372 @@ assert(WITHIN_STACK_BOUNDS()); JUMP_TO_ERROR(); } - res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + res = PyStackRef_FromPyObjectSteal(res_o); + _tos_cache0 = res; + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _GUARD_NOS_FLOAT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef left; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + left = _stack_item_0; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = left; + break; + } + + case _GUARD_NOS_FLOAT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef left; + left = stack_pointer[-2]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _GUARD_NOS_FLOAT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef left; + _PyStackRef _stack_item_0 = _tos_cache0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_FLOAT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef left; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = left; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_FLOAT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = value; + break; + } + + case _GUARD_TOS_FLOAT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef value; + value = stack_pointer[-1]; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _GUARD_TOS_FLOAT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + value = _stack_item_1; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_FLOAT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + value = _stack_item_2; + PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); + if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _BINARY_OP_MULTIPLY_FLOAT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyFloat_CheckExact(left_o)); + assert(PyFloat_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + double dres = + ((PyFloatObject *)left_o)->ob_fval * + ((PyFloatObject *)right_o)->ob_fval; + res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + if (PyStackRef_IsNull(res)) { + JUMP_TO_ERROR(); + } + _tos_cache0 = res; + break; + } + + case _BINARY_OP_MULTIPLY_FLOAT_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyFloat_CheckExact(left_o)); + assert(PyFloat_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + double dres = + ((PyFloatObject *)left_o)->ob_fval * + ((PyFloatObject *)right_o)->ob_fval; + res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + if (PyStackRef_IsNull(res)) { + stack_pointer[-1] = res; + JUMP_TO_ERROR(); + } + stack_pointer[-1] = res; + break; + } + + case _BINARY_OP_MULTIPLY_FLOAT_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + right = _stack_item_2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyFloat_CheckExact(left_o)); + assert(PyFloat_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + double dres = + ((PyFloatObject *)left_o)->ob_fval * + ((PyFloatObject *)right_o)->ob_fval; + res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + if (PyStackRef_IsNull(res)) { + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = res; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + JUMP_TO_ERROR(); + } + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _BINARY_OP_ADD_FLOAT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyFloat_CheckExact(left_o)); + assert(PyFloat_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + double dres = + ((PyFloatObject *)left_o)->ob_fval + + ((PyFloatObject *)right_o)->ob_fval; + res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + if (PyStackRef_IsNull(res)) { + JUMP_TO_ERROR(); + } + _tos_cache0 = res; + break; + } + + case _BINARY_OP_ADD_FLOAT_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyFloat_CheckExact(left_o)); + assert(PyFloat_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + double dres = + ((PyFloatObject *)left_o)->ob_fval + + ((PyFloatObject *)right_o)->ob_fval; + res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + if (PyStackRef_IsNull(res)) { + stack_pointer[-1] = res; + JUMP_TO_ERROR(); + } + stack_pointer[-1] = res; break; } - case _GUARD_NOS_FLOAT: { + case _BINARY_OP_ADD_FLOAT_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef right; _PyStackRef left; - left = stack_pointer[-2]; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + right = _stack_item_2; + left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - if (!PyFloat_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - break; - } - - case _GUARD_TOS_FLOAT: { - _PyStackRef value; - value = stack_pointer[-1]; - PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); - if (!PyFloat_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyFloat_CheckExact(left_o)); + assert(PyFloat_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + double dres = + ((PyFloatObject *)left_o)->ob_fval + + ((PyFloatObject *)right_o)->ob_fval; + res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + if (PyStackRef_IsNull(res)) { + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = res; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + JUMP_TO_ERROR(); } + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; break; } - case _BINARY_OP_MULTIPLY_FLOAT: { + case _BINARY_OP_SUBTRACT_FLOAT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); assert(PyFloat_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); double dres = - ((PyFloatObject *)left_o)->ob_fval * + ((PyFloatObject *)left_o)->ob_fval - ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); JUMP_TO_ERROR(); } - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _BINARY_OP_ADD_FLOAT: { + case _BINARY_OP_SUBTRACT_FLOAT_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); assert(PyFloat_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); double dres = - ((PyFloatObject *)left_o)->ob_fval + + ((PyFloatObject *)left_o)->ob_fval - ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + stack_pointer[-1] = res; JUMP_TO_ERROR(); } - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + stack_pointer[-1] = res; break; } - case _BINARY_OP_SUBTRACT_FLOAT: { + case _BINARY_OP_SUBTRACT_FLOAT_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + right = _stack_item_2; + left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -1046,23 +2830,81 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - stack_pointer[-2] = res; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = res; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + JUMP_TO_ERROR(); + } + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _BINARY_OP_ADD_UNICODE_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyUnicode_CheckExact(left_o)); + assert(PyUnicode_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = PyUnicode_Concat(left_o, right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); + if (res_o == NULL) { + JUMP_TO_ERROR(); + } + res = PyStackRef_FromPyObjectSteal(res_o); + _tos_cache0 = res; + break; + } + + case _BINARY_OP_ADD_UNICODE_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyUnicode_CheckExact(left_o)); + assert(PyUnicode_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = PyUnicode_Concat(left_o, right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); + if (res_o == NULL) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); JUMP_TO_ERROR(); } - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + res = PyStackRef_FromPyObjectSteal(res_o); + stack_pointer[-1] = res; break; } - case _BINARY_OP_ADD_UNICODE: { + case _BINARY_OP_ADD_UNICODE_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + right = _stack_item_2; + left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyUnicode_CheckExact(left_o)); @@ -1072,22 +2914,26 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); if (res_o == NULL) { - stack_pointer += -2; + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; break; } - case _BINARY_OP_INPLACE_ADD_UNICODE: { + case _BINARY_OP_INPLACE_ADD_UNICODE_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); assert(PyUnicode_CheckExact(left_o)); assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(right))); @@ -1109,8 +2955,6 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local); PyObject *right_o = PyStackRef_AsPyObjectSteal(right); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyUnicode_Append(&temp, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1129,7 +2973,9 @@ break; } - case _GUARD_BINARY_OP_EXTEND: { + case _GUARD_BINARY_OP_EXTEND_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; @@ -1150,18 +2996,26 @@ break; } - case _BINARY_OP_EXTEND: { + case _BINARY_OP_EXTEND_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; STAT_INC(BINARY_OP, hit); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = d->action(left_o, right_o); _PyStackRef tmp = right; @@ -1176,20 +3030,28 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _BINARY_SLICE: { + case _BINARY_SLICE_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef stop; _PyStackRef start; _PyStackRef container; _PyStackRef res; - stop = stack_pointer[-1]; - start = stack_pointer[-2]; - container = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + stop = _stack_item_2; + start = _stack_item_1; + container = _stack_item_0; + stack_pointer[0] = container; + stack_pointer[1] = start; + stack_pointer[2] = stop; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1216,21 +3078,29 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _STORE_SLICE: { + case _STORE_SLICE_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef stop; _PyStackRef start; _PyStackRef container; _PyStackRef v; - stop = stack_pointer[-1]; - start = stack_pointer[-2]; - container = stack_pointer[-3]; - v = stack_pointer[-4]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + stop = _stack_item_2; + start = _stack_item_1; + container = _stack_item_0; + v = stack_pointer[-1]; + stack_pointer[0] = container; + stack_pointer[1] = start; + stack_pointer[2] = stop; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -1266,12 +3136,16 @@ break; } - case _BINARY_OP_SUBSCR_LIST_INT: { + case _BINARY_OP_SUBSCR_LIST_INT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef res; - sub_st = stack_pointer[-1]; - list_st = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + sub_st = _stack_item_1; + list_st = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -1282,6 +3156,10 @@ } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; #ifdef Py_GIL_DISABLED + stack_pointer[0] = list_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyList_GetItemRef((PyListObject*)list, index); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1300,8 +3178,11 @@ PyObject *res_o = PyList_GET_ITEM(list, index); assert(res_o != NULL); res = PyStackRef_FromPyObjectNew(res_o); + stack_pointer += 2; #endif STAT_INC(BINARY_OP, hit); + stack_pointer[-2] = list_st; + stack_pointer[-1] = sub_st; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = list_st; list_st = res; @@ -1314,19 +3195,30 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _BINARY_OP_SUBSCR_LIST_SLICE: { + case _BINARY_OP_SUBSCR_LIST_SLICE_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef res; - sub_st = stack_pointer[-1]; - list_st = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + sub_st = _stack_item_1; + list_st = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PySlice_Check(sub)); assert(PyList_CheckExact(list)); + stack_pointer[0] = list_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyList_SliceSubscript(list, sub); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1347,18 +3239,20 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _BINARY_OP_SUBSCR_STR_INT: { + case _BINARY_OP_SUBSCR_STR_INT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef str_st; _PyStackRef res; - sub_st = stack_pointer[-1]; - str_st = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + sub_st = _stack_item_1; + str_st = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *str = PyStackRef_AsPyObjectBorrow(str_st); assert(PyLong_CheckExact(sub)); @@ -1380,19 +3274,34 @@ STAT_INC(BINARY_OP, hit); PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c]; PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectBorrow(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _GUARD_NOS_TUPLE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + nos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = nos; break; } - case _GUARD_NOS_TUPLE: { + case _GUARD_NOS_TUPLE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -1403,7 +3312,58 @@ break; } - case _GUARD_TOS_TUPLE: { + case _GUARD_NOS_TUPLE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + nos = stack_pointer[-1]; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_TUPLE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + nos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = nos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_TUPLE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + tos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = tos; + break; + } + + case _GUARD_TOS_TUPLE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -1414,12 +3374,52 @@ break; } - case _BINARY_OP_SUBSCR_TUPLE_INT: { + case _GUARD_TOS_TUPLE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + tos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = tos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_TUPLE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + tos = _stack_item_2; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = tos; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _BINARY_OP_SUBSCR_TUPLE_INT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef res; - sub_st = stack_pointer[-1]; - tuple_st = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + sub_st = _stack_item_1; + tuple_st = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); @@ -1438,7 +3438,8 @@ assert(res_o != NULL); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); res = PyStackRef_FromPyObjectNew(res_o); - stack_pointer += -1; + stack_pointer[0] = tuple_st; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; @@ -1446,10 +3447,32 @@ stack_pointer[-1] = tuple_st; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _GUARD_NOS_DICT: { + case _GUARD_NOS_DICT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + nos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = nos; + break; + } + + case _GUARD_NOS_DICT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -1460,7 +3483,58 @@ break; } - case _GUARD_TOS_DICT: { + case _GUARD_NOS_DICT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + nos = stack_pointer[-1]; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_DICT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + nos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = nos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_DICT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + tos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = tos; + break; + } + + case _GUARD_TOS_DICT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -1471,17 +3545,61 @@ break; } - case _BINARY_OP_SUBSCR_DICT: { + case _GUARD_TOS_DICT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + tos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = tos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_DICT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + tos = _stack_item_2; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = tos; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _BINARY_OP_SUBSCR_DICT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef dict_st; _PyStackRef res; - sub_st = stack_pointer[-1]; - dict_st = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + sub_st = _stack_item_1; + dict_st = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); STAT_INC(BINARY_OP, hit); PyObject *res_o; + stack_pointer[0] = dict_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int rc = PyDict_GetItemRef(dict, sub, &res_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1506,16 +3624,18 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _BINARY_OP_SUBSCR_CHECK_FUNC: { + case _BINARY_OP_SUBSCR_CHECK_FUNC_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef container; _PyStackRef getitem; - container = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + container = _stack_item_0; PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container)); if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) { UOP_STAT_INC(uopcode, miss); @@ -1541,55 +3661,63 @@ } getitem = PyStackRef_FromPyObjectNew(getitem_o); STAT_INC(BINARY_OP, hit); - stack_pointer[0] = getitem; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = getitem; + _tos_cache1 = _stack_item_1; + _tos_cache0 = container; break; } - case _BINARY_OP_SUBSCR_INIT_CALL: { + case _BINARY_OP_SUBSCR_INIT_CALL_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef getitem; _PyStackRef sub; _PyStackRef container; _PyStackRef new_frame; - getitem = stack_pointer[-1]; - sub = stack_pointer[-2]; - container = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + getitem = _stack_item_2; + sub = _stack_item_1; + container = _stack_item_0; _PyInterpreterFrame* pushed_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame); pushed_frame->localsplus[0] = container; pushed_frame->localsplus[1] = sub; frame->return_offset = 6 ; new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-3] = new_frame; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = new_frame; break; } - case _LIST_APPEND: { + case _LIST_APPEND_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef list; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = stack_pointer[-1]; - list = stack_pointer[-2 - (oparg-1)]; + v = _stack_item_0; + list = stack_pointer[-1 - (oparg-1)]; int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); JUMP_TO_ERROR(); } - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _SET_ADD: { + case _SET_ADD_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef set; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = stack_pointer[-1]; - set = stack_pointer[-2 - (oparg-1)]; + v = _stack_item_0; + set = stack_pointer[-1 - (oparg-1)]; + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectSteal(v)); @@ -1604,13 +3732,23 @@ break; } - case _STORE_SUBSCR: { + case _STORE_SUBSCR_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef container; _PyStackRef v; - sub = stack_pointer[-1]; - container = stack_pointer[-2]; - v = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + sub = _stack_item_2; + container = _stack_item_1; + v = _stack_item_0; + stack_pointer[0] = v; + stack_pointer[1] = container; + stack_pointer[2] = sub; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = sub; @@ -1634,13 +3772,18 @@ break; } - case _STORE_SUBSCR_LIST_INT: { + case _STORE_SUBSCR_LIST_INT_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef value; - sub_st = stack_pointer[-1]; - list_st = stack_pointer[-2]; - value = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + sub_st = _stack_item_2; + list_st = _stack_item_1; + value = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); @@ -1668,8 +3811,6 @@ assert(old_value != NULL); UNLOCK_OBJECT(list); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); @@ -1677,16 +3818,26 @@ break; } - case _STORE_SUBSCR_DICT: { + case _STORE_SUBSCR_DICT_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef dict_st; _PyStackRef value; - sub = stack_pointer[-1]; - dict_st = stack_pointer[-2]; - value = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + sub = _stack_item_2; + dict_st = _stack_item_1; + value = _stack_item_0; PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); STAT_INC(STORE_SUBSCR, hit); + stack_pointer[0] = value; + stack_pointer[1] = dict_st; + stack_pointer[2] = sub; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2((PyDictObject *)dict, PyStackRef_AsPyObjectSteal(sub), @@ -1703,11 +3854,19 @@ break; } - case _DELETE_SUBSCR: { + case _DELETE_SUBSCR_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef container; - sub = stack_pointer[-1]; - container = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + sub = _stack_item_1; + container = _stack_item_0; + stack_pointer[0] = container; + stack_pointer[1] = sub; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub)); @@ -1728,12 +3887,18 @@ break; } - case _CALL_INTRINSIC_1: { + case _CALL_INTRINSIC_1_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - value = stack_pointer[-1]; + value = _stack_item_0; assert(oparg <= MAX_INTRINSIC_1); + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1746,22 +3911,28 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CALL_INTRINSIC_2: { + case _CALL_INTRINSIC_2_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value1_st; _PyStackRef value2_st; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - value1_st = stack_pointer[-1]; - value2_st = stack_pointer[-2]; + value1_st = _stack_item_1; + value2_st = _stack_item_0; assert(oparg <= MAX_INTRINSIC_2); PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st); PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st); + stack_pointer[0] = value2_st; + stack_pointer[1] = value1_st; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1); _PyStackRef tmp = value1_st; @@ -1779,20 +3950,19 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _RETURN_VALUE: { + case _RETURN_VALUE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef retval; _PyStackRef res; - retval = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + retval = _stack_item_0; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); assert(STACK_LEVEL() == 0); _Py_LeaveRecursiveCallPy(tstate); @@ -1803,16 +3973,17 @@ LOAD_IP(frame->return_offset); res = temp; LLTRACE_RESUME_FRAME(); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _GET_AITER: { + case _GET_AITER_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef obj; _PyStackRef iter; - obj = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + obj = _stack_item_0; unaryfunc getter = NULL; PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj); PyObject *iter_o; @@ -1821,6 +3992,9 @@ getter = type->tp_as_async->am_aiter; } if (getter == NULL) { + stack_pointer[0] = obj; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_TypeError, "'async for' requires an object with " @@ -1834,6 +4008,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_ERROR(); } + stack_pointer[0] = obj; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); iter_o = (*getter)(obj_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1857,13 +4034,13 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); - stack_pointer[0] = iter; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = iter; break; } - case _GET_ANEXT: { + case _GET_ANEXT_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef aiter; _PyStackRef awaitable; aiter = stack_pointer[-1]; @@ -1874,17 +4051,21 @@ JUMP_TO_ERROR(); } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); - stack_pointer[0] = awaitable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = awaitable; break; } - case _GET_AWAITABLE: { + case _GET_AWAITABLE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef iterable; _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - iterable = stack_pointer[-1]; + iterable = _stack_item_0; + stack_pointer[0] = iterable; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1897,15 +4078,50 @@ JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); - stack_pointer[0] = iter; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = iter; break; } /* _SEND is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _SEND_GEN_FRAME: { + case _SEND_GEN_FRAME_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef v; + _PyStackRef receiver; + _PyStackRef gen_frame; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + v = _stack_item_1; + receiver = _stack_item_0; + PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); + if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (gen->gi_frame_state >= FRAME_EXECUTING) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(SEND, hit); + _PyInterpreterFrame *pushed_frame = &gen->gi_iframe; + _PyFrame_StackPush(pushed_frame, PyStackRef_MakeHeapSafe(v)); + gen->gi_frame_state = FRAME_EXECUTING; + gen->gi_exc_state.previous_item = tstate->exc_info; + tstate->exc_info = &gen->gi_exc_state; + assert( 2 + oparg <= UINT16_MAX); + frame->return_offset = (uint16_t)( 2 + oparg); + pushed_frame->previous = frame; + gen_frame = PyStackRef_Wrap(pushed_frame); + _tos_cache1 = gen_frame; + _tos_cache0 = receiver; + break; + } + + case _SEND_GEN_FRAME_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef receiver; _PyStackRef gen_frame; @@ -1935,7 +4151,118 @@ break; } - case _YIELD_VALUE: { + case _SEND_GEN_FRAME_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef v; + _PyStackRef receiver; + _PyStackRef gen_frame; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + v = _stack_item_0; + receiver = stack_pointer[-1]; + PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); + if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (gen->gi_frame_state >= FRAME_EXECUTING) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(SEND, hit); + _PyInterpreterFrame *pushed_frame = &gen->gi_iframe; + _PyFrame_StackPush(pushed_frame, PyStackRef_MakeHeapSafe(v)); + gen->gi_frame_state = FRAME_EXECUTING; + gen->gi_exc_state.previous_item = tstate->exc_info; + tstate->exc_info = &gen->gi_exc_state; + assert( 2 + oparg <= UINT16_MAX); + frame->return_offset = (uint16_t)( 2 + oparg); + pushed_frame->previous = frame; + gen_frame = PyStackRef_Wrap(pushed_frame); + _tos_cache0 = gen_frame; + break; + } + + case _SEND_GEN_FRAME_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef v; + _PyStackRef receiver; + _PyStackRef gen_frame; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + oparg = CURRENT_OPARG(); + v = _stack_item_2; + receiver = _stack_item_1; + PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); + if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (gen->gi_frame_state >= FRAME_EXECUTING) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(SEND, hit); + _PyInterpreterFrame *pushed_frame = &gen->gi_iframe; + _PyFrame_StackPush(pushed_frame, PyStackRef_MakeHeapSafe(v)); + gen->gi_frame_state = FRAME_EXECUTING; + gen->gi_exc_state.previous_item = tstate->exc_info; + tstate->exc_info = &gen->gi_exc_state; + assert( 2 + oparg <= UINT16_MAX); + frame->return_offset = (uint16_t)( 2 + oparg); + pushed_frame->previous = frame; + gen_frame = PyStackRef_Wrap(pushed_frame); + _tos_cache2 = gen_frame; + _tos_cache1 = receiver; + _tos_cache0 = _stack_item_0; + break; + } + + case _YIELD_VALUE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef retval; + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + retval = _stack_item_0; + assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); + frame->instr_ptr++; + PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); + assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1); + assert(oparg == 0 || oparg == 1); + gen->gi_frame_state = FRAME_SUSPENDED + oparg; + _PyStackRef temp = retval; + _PyFrame_SetStackPointer(frame, stack_pointer); + tstate->exc_info = gen->gi_exc_state.previous_item; + gen->gi_exc_state.previous_item = NULL; + _Py_LeaveRecursiveCallPy(tstate); + _PyInterpreterFrame *gen_frame = frame; + frame = tstate->current_frame = frame->previous; + gen_frame->previous = NULL; + assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER); + #if TIER_ONE + assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE || + frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR); + #endif + stack_pointer = _PyFrame_GetStackPointer(frame); + LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); + value = PyStackRef_MakeHeapSafe(temp); + LLTRACE_RESUME_FRAME(); + _tos_cache0 = value; + break; + } + + case _YIELD_VALUE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef retval; _PyStackRef value; oparg = CURRENT_OPARG(); @@ -1975,10 +4302,111 @@ break; } - case _POP_EXCEPT: { + case _YIELD_VALUE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef retval; + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + retval = _stack_item_1; + assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); + frame->instr_ptr++; + PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); + assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1); + assert(oparg == 0 || oparg == 1); + gen->gi_frame_state = FRAME_SUSPENDED + oparg; + _PyStackRef temp = retval; + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + tstate->exc_info = gen->gi_exc_state.previous_item; + gen->gi_exc_state.previous_item = NULL; + _Py_LeaveRecursiveCallPy(tstate); + _PyInterpreterFrame *gen_frame = frame; + frame = tstate->current_frame = frame->previous; + gen_frame->previous = NULL; + assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER); + #if TIER_ONE + assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE || + frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR); + #endif + stack_pointer = _PyFrame_GetStackPointer(frame); + LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); + value = PyStackRef_MakeHeapSafe(temp); + LLTRACE_RESUME_FRAME(); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _YIELD_VALUE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef retval; + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + oparg = CURRENT_OPARG(); + retval = _stack_item_2; + assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); + frame->instr_ptr++; + PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); + assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1); + assert(oparg == 0 || oparg == 1); + gen->gi_frame_state = FRAME_SUSPENDED + oparg; + _PyStackRef temp = retval; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + tstate->exc_info = gen->gi_exc_state.previous_item; + gen->gi_exc_state.previous_item = NULL; + _Py_LeaveRecursiveCallPy(tstate); + _PyInterpreterFrame *gen_frame = frame; + frame = tstate->current_frame = frame->previous; + gen_frame->previous = NULL; + assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER); + #if TIER_ONE + assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE || + frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT || + _PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR); + #endif + stack_pointer = _PyFrame_GetStackPointer(frame); + LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); + value = PyStackRef_MakeHeapSafe(temp); + LLTRACE_RESUME_FRAME(); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _POP_EXCEPT_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef exc_value; - exc_value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + exc_value = _stack_item_0; _PyErr_StackItem *exc_info = tstate->exc_info; + stack_pointer[0] = exc_value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); Py_XSETREF(exc_info->exc_value, PyStackRef_IsNone(exc_value) @@ -1989,18 +4417,48 @@ break; } - case _LOAD_COMMON_CONSTANT: { + case _LOAD_COMMON_CONSTANT_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); assert(oparg < NUM_COMMON_CONSTANTS); value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; + break; + } + + case _LOAD_COMMON_CONSTANT_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + assert(oparg < NUM_COMMON_CONSTANTS); + value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_COMMON_CONSTANT_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + assert(oparg < NUM_COMMON_CONSTANTS); + value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_BUILD_CLASS: { + case _LOAD_BUILD_CLASS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef bc; PyObject *bc_o; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2017,20 +4475,24 @@ JUMP_TO_ERROR(); } bc = PyStackRef_FromPyObjectSteal(bc_o); - stack_pointer[0] = bc; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = bc; break; } - case _STORE_NAME: { + case _STORE_NAME_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = stack_pointer[-1]; + v = _stack_item_0; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); int err; if (ns == NULL) { + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals found when storing %R", name); @@ -2043,11 +4505,17 @@ JUMP_TO_ERROR(); } if (PyDict_CheckExact(ns)) { + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); err = PyDict_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); } else { + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2063,7 +4531,9 @@ break; } - case _DELETE_NAME: { + case _DELETE_NAME_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); @@ -2089,15 +4559,16 @@ break; } - case _UNPACK_SEQUENCE: { + case _UNPACK_SEQUENCE_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *top; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = stack_pointer[-1]; - top = &stack_pointer[-1 + oparg]; + seq = _stack_item_0; + top = &stack_pointer[oparg]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top); Py_DECREF(seq_o); @@ -2110,12 +4581,15 @@ break; } - case _UNPACK_SEQUENCE_TWO_TUPLE: { + case _UNPACK_SEQUENCE_TWO_TUPLE_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef seq; _PyStackRef val1; _PyStackRef val0; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = stack_pointer[-1]; + seq = _stack_item_0; assert(oparg == 2); PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyTuple_CheckExact(seq_o)); @@ -2126,22 +4600,29 @@ STAT_INC(UNPACK_SEQUENCE, hit); val0 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 0)); val1 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 1)); - stack_pointer[-1] = val1; - stack_pointer[0] = val0; - stack_pointer += 1; + stack_pointer[0] = val1; + stack_pointer[1] = val0; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache1 = val0; + _tos_cache0 = val1; + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); break; } - case _UNPACK_SEQUENCE_TUPLE: { + case _UNPACK_SEQUENCE_TUPLE_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = stack_pointer[-1]; - values = &stack_pointer[-1]; + seq = _stack_item_0; + values = &stack_pointer[0]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyTuple_CheckExact(seq_o)); if (PyTuple_GET_SIZE(seq_o) != oparg) { @@ -2153,7 +4634,7 @@ for (int i = oparg; --i >= 0; ) { *values++ = PyStackRef_FromPyObjectNew(items[i]); } - stack_pointer += -1 + oparg; + stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); @@ -2161,12 +4642,15 @@ break; } - case _UNPACK_SEQUENCE_LIST: { + case _UNPACK_SEQUENCE_LIST_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = stack_pointer[-1]; - values = &stack_pointer[-1]; + seq = _stack_item_0; + values = &stack_pointer[0]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyList_CheckExact(seq_o)); if (!LOCK_OBJECT(seq_o)) { @@ -2186,7 +4670,7 @@ *values++ = PyStackRef_FromPyObjectNew(items[i]); } UNLOCK_OBJECT(seq_o); - stack_pointer += -1 + oparg; + stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); @@ -2194,15 +4678,16 @@ break; } - case _UNPACK_EX: { + case _UNPACK_EX_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *top; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = stack_pointer[-1]; - top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)]; + seq = _stack_item_0; + top = &stack_pointer[1 + (oparg & 0xFF) + (oparg >> 8)]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top); Py_DECREF(seq_o); @@ -2215,13 +4700,21 @@ break; } - case _STORE_ATTR: { + case _STORE_ATTR_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef v; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; - v = stack_pointer[-2]; + owner = _stack_item_1; + v = _stack_item_0; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + stack_pointer[0] = v; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner), name, PyStackRef_AsPyObjectBorrow(v)); @@ -2242,11 +4735,17 @@ break; } - case _DELETE_ATTR: { + case _DELETE_ATTR_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; + owner = _stack_item_0; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2261,11 +4760,17 @@ break; } - case _STORE_GLOBAL: { + case _STORE_GLOBAL_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = stack_pointer[-1]; + v = _stack_item_0; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2280,7 +4785,9 @@ break; } - case _DELETE_GLOBAL: { + case _DELETE_GLOBAL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2299,7 +4806,9 @@ break; } - case _LOAD_LOCALS: { + case _LOAD_LOCALS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef locals; PyObject *l = LOCALS(); if (l == NULL) { @@ -2310,15 +4819,15 @@ JUMP_TO_ERROR(); } locals = PyStackRef_FromPyObjectNew(l); - stack_pointer[0] = locals; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = locals; break; } /* _LOAD_FROM_DICT_OR_GLOBALS is not a viable micro-op for tier 2 because it has both popping and not-popping errors */ - case _LOAD_NAME: { + case _LOAD_NAME_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef v; oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); @@ -2329,13 +4838,13 @@ JUMP_TO_ERROR(); } v = PyStackRef_FromPyObjectSteal(v_o); - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = v; break; } - case _LOAD_GLOBAL: { + case _LOAD_GLOBAL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *res; oparg = CURRENT_OPARG(); res = &stack_pointer[0]; @@ -2351,7 +4860,9 @@ break; } - case _PUSH_NULL_CONDITIONAL: { + case _PUSH_NULL_CONDITIONAL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *null; oparg = CURRENT_OPARG(); null = &stack_pointer[0]; @@ -2363,7 +4874,72 @@ break; } - case _GUARD_GLOBALS_VERSION: { + case _GUARD_GLOBALS_VERSION_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + uint16_t version = (uint16_t)CURRENT_OPERAND0(); + PyDictObject *dict = (PyDictObject *)GLOBALS(); + if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(DK_IS_UNICODE(keys)); + break; + } + + case _GUARD_GLOBALS_VERSION_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + uint16_t version = (uint16_t)CURRENT_OPERAND0(); + PyDictObject *dict = (PyDictObject *)GLOBALS(); + if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(DK_IS_UNICODE(keys)); + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_GLOBALS_VERSION_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + uint16_t version = (uint16_t)CURRENT_OPERAND0(); + PyDictObject *dict = (PyDictObject *)GLOBALS(); + if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(DK_IS_UNICODE(keys)); + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_GLOBALS_VERSION_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { @@ -2376,10 +4952,15 @@ JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_GLOBAL_MODULE: { + case _LOAD_GLOBAL_MODULE_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); @@ -2411,13 +4992,95 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _LOAD_GLOBAL_MODULE_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + uint16_t version = (uint16_t)CURRENT_OPERAND0(); + uint16_t index = (uint16_t)CURRENT_OPERAND1(); + PyDictObject *dict = (PyDictObject *)GLOBALS(); + if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(DK_IS_UNICODE(keys)); + PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); + assert(index < DK_SIZE(keys)); + PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); + if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #if Py_GIL_DISABLED + int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); + if (!increfed) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #else + res = PyStackRef_FromPyObjectNew(res_o); + #endif + STAT_INC(LOAD_GLOBAL, hit); + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_GLOBAL_MODULE_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + uint16_t version = (uint16_t)CURRENT_OPERAND0(); + uint16_t index = (uint16_t)CURRENT_OPERAND1(); + PyDictObject *dict = (PyDictObject *)GLOBALS(); + if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(DK_IS_UNICODE(keys)); + PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); + assert(index < DK_SIZE(keys)); + PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); + if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #if Py_GIL_DISABLED + int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); + if (!increfed) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #else + res = PyStackRef_FromPyObjectNew(res_o); + #endif + STAT_INC(LOAD_GLOBAL, hit); + _tos_cache2 = res; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_GLOBAL_BUILTINS: { + case _LOAD_GLOBAL_BUILTINS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); @@ -2448,13 +5111,93 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _LOAD_GLOBAL_BUILTINS_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + uint16_t version = (uint16_t)CURRENT_OPERAND0(); + uint16_t index = (uint16_t)CURRENT_OPERAND1(); + PyDictObject *dict = (PyDictObject *)BUILTINS(); + if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(DK_IS_UNICODE(keys)); + PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); + PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); + if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #if Py_GIL_DISABLED + int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); + if (!increfed) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #else + res = PyStackRef_FromPyObjectNew(res_o); + #endif + STAT_INC(LOAD_GLOBAL, hit); + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_GLOBAL_BUILTINS_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + uint16_t version = (uint16_t)CURRENT_OPERAND0(); + uint16_t index = (uint16_t)CURRENT_OPERAND1(); + PyDictObject *dict = (PyDictObject *)BUILTINS(); + if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(DK_IS_UNICODE(keys)); + PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); + PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); + if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #if Py_GIL_DISABLED + int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); + if (!increfed) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #else + res = PyStackRef_FromPyObjectNew(res_o); + #endif + STAT_INC(LOAD_GLOBAL, hit); + _tos_cache2 = res; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _DELETE_FAST: { + case _DELETE_FAST_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); _PyStackRef v = GETLOCAL(oparg); if (PyStackRef_IsNull(v)) { @@ -2474,7 +5217,9 @@ break; } - case _MAKE_CELL: { + case _MAKE_CELL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *initial = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *cell = PyCell_New(initial); @@ -2489,7 +5234,9 @@ break; } - case _DELETE_DEREF: { + case _DELETE_DEREF_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *cell = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *oldobj = PyCell_SwapTakeRef((PyCellObject *)cell, NULL); @@ -2505,17 +5252,23 @@ break; } - case _LOAD_FROM_DICT_OR_DEREF: { + case _LOAD_FROM_DICT_OR_DEREF_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef class_dict_st; _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - class_dict_st = stack_pointer[-1]; + class_dict_st = _stack_item_0; PyObject *value_o; PyObject *name; PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st); assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); name = PyTuple_GET_ITEM(_PyFrame_GetCode(frame)->co_localsplusnames, oparg); + stack_pointer[0] = class_dict_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(class_dict, name, &value_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2538,13 +5291,13 @@ PyStackRef_CLOSE(class_dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _LOAD_DEREF: { + case _LOAD_DEREF_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); @@ -2560,17 +5313,21 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_ERROR(); } - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _STORE_DEREF: { + case _STORE_DEREF_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = stack_pointer[-1]; + v = _stack_item_0; PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2579,7 +5336,69 @@ break; } - case _COPY_FREE_VARS: { + case _COPY_FREE_VARS_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + oparg = CURRENT_OPARG(); + PyCodeObject *co = _PyFrame_GetCode(frame); + assert(PyStackRef_FunctionCheck(frame->f_funcobj)); + PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + PyObject *closure = func->func_closure; + assert(oparg == co->co_nfreevars); + int offset = co->co_nlocalsplus - oparg; + for (int i = 0; i < oparg; ++i) { + PyObject *o = PyTuple_GET_ITEM(closure, i); + frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); + } + break; + } + + case _COPY_FREE_VARS_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + PyCodeObject *co = _PyFrame_GetCode(frame); + assert(PyStackRef_FunctionCheck(frame->f_funcobj)); + PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + PyObject *closure = func->func_closure; + assert(oparg == co->co_nfreevars); + int offset = co->co_nlocalsplus - oparg; + for (int i = 0; i < oparg; ++i) { + PyObject *o = PyTuple_GET_ITEM(closure, i); + frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _COPY_FREE_VARS_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + PyCodeObject *co = _PyFrame_GetCode(frame); + assert(PyStackRef_FunctionCheck(frame->f_funcobj)); + PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + PyObject *closure = func->func_closure; + assert(oparg == co->co_nfreevars); + int offset = co->co_nlocalsplus - oparg; + for (int i = 0; i < oparg; ++i) { + PyObject *o = PyTuple_GET_ITEM(closure, i); + frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _COPY_FREE_VARS_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); @@ -2591,10 +5410,15 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _BUILD_STRING: { + case _BUILD_STRING_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *pieces; _PyStackRef str; oparg = CURRENT_OPARG(); @@ -2629,13 +5453,13 @@ JUMP_TO_ERROR(); } str = PyStackRef_FromPyObjectSteal(str_o); - stack_pointer[0] = str; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = str; break; } - case _BUILD_INTERPOLATION: { + case _BUILD_INTERPOLATION_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *format; _PyStackRef str; _PyStackRef value; @@ -2681,20 +5505,26 @@ JUMP_TO_ERROR(); } interpolation = PyStackRef_FromPyObjectSteal(interpolation_o); - stack_pointer[0] = interpolation; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = interpolation; break; } - case _BUILD_TEMPLATE: { + case _BUILD_TEMPLATE_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef interpolations; _PyStackRef strings; _PyStackRef template; - interpolations = stack_pointer[-1]; - strings = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + interpolations = _stack_item_1; + strings = _stack_item_0; PyObject *strings_o = PyStackRef_AsPyObjectBorrow(strings); PyObject *interpolations_o = PyStackRef_AsPyObjectBorrow(interpolations); + stack_pointer[0] = strings; + stack_pointer[1] = interpolations; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *template_o = _PyTemplate_Build(strings_o, interpolations_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2712,13 +5542,13 @@ JUMP_TO_ERROR(); } template = PyStackRef_FromPyObjectSteal(template_o); - stack_pointer[0] = template; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = template; break; } - case _BUILD_TUPLE: { + case _BUILD_TUPLE_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef tup; oparg = CURRENT_OPARG(); @@ -2728,13 +5558,15 @@ JUMP_TO_ERROR(); } tup = PyStackRef_FromPyObjectStealMortal(tup_o); - stack_pointer[-oparg] = tup; - stack_pointer += 1 - oparg; + _tos_cache0 = tup; + stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _BUILD_LIST: { + case _BUILD_LIST_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef list; oparg = CURRENT_OPARG(); @@ -2746,20 +5578,26 @@ JUMP_TO_ERROR(); } list = PyStackRef_FromPyObjectStealMortal(list_o); - stack_pointer[-oparg] = list; - stack_pointer += 1 - oparg; + _tos_cache0 = list; + stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _LIST_EXTEND: { + case _LIST_EXTEND_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef iterable_st; _PyStackRef list_st; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - iterable_st = stack_pointer[-1]; - list_st = stack_pointer[-2 - (oparg-1)]; + iterable_st = _stack_item_0; + list_st = stack_pointer[-1 - (oparg-1)]; PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st); + stack_pointer[0] = iterable_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2793,12 +5631,18 @@ break; } - case _SET_UPDATE: { + case _SET_UPDATE_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef iterable; _PyStackRef set; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - iterable = stack_pointer[-1]; - set = stack_pointer[-2 - (oparg-1)]; + iterable = _stack_item_0; + set = stack_pointer[-1 - (oparg-1)]; + stack_pointer[0] = iterable; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectBorrow(iterable)); @@ -2814,7 +5658,9 @@ break; } - case _BUILD_SET: { + case _BUILD_SET_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef set; oparg = CURRENT_OPARG(); @@ -2859,13 +5705,15 @@ JUMP_TO_ERROR(); } set = PyStackRef_FromPyObjectStealMortal(set_o); - stack_pointer[-oparg] = set; - stack_pointer += 1 - oparg; + _tos_cache0 = set; + stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _BUILD_MAP: { + case _BUILD_MAP_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef map; oparg = CURRENT_OPARG(); @@ -2905,13 +5753,13 @@ JUMP_TO_ERROR(); } map = PyStackRef_FromPyObjectStealMortal(map_o); - stack_pointer[0] = map; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = map; break; } - case _SETUP_ANNOTATIONS: { + case _SETUP_ANNOTATIONS_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); PyObject *ann_dict; if (LOCALS() == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -2950,14 +5798,20 @@ break; } - case _DICT_UPDATE: { + case _DICT_UPDATE_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef update; _PyStackRef dict; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - update = stack_pointer[-1]; - dict = stack_pointer[-2 - (oparg - 1)]; + update = _stack_item_0; + dict = stack_pointer[-1 - (oparg - 1)]; PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); + stack_pointer[0] = update; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_Update(dict_o, update_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2987,17 +5841,23 @@ break; } - case _DICT_MERGE: { + case _DICT_MERGE_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef update; _PyStackRef dict; _PyStackRef callable; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - update = stack_pointer[-1]; - dict = stack_pointer[-2 - (oparg - 1)]; - callable = stack_pointer[-5 - (oparg - 1)]; + update = _stack_item_0; + dict = stack_pointer[-1 - (oparg - 1)]; + callable = stack_pointer[-4 - (oparg - 1)]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); + stack_pointer[0] = update; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_MergeEx(dict_o, update_o, 2); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3020,16 +5880,24 @@ break; } - case _MAP_ADD: { + case _MAP_ADD_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef key; _PyStackRef dict_st; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - value = stack_pointer[-1]; - key = stack_pointer[-2]; - dict_st = stack_pointer[-3 - (oparg - 1)]; + value = _stack_item_1; + key = _stack_item_0; + dict_st = stack_pointer[-1 - (oparg - 1)]; PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); + stack_pointer[0] = key; + stack_pointer[1] = value; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2( (PyDictObject *)dict, @@ -3047,15 +5915,20 @@ break; } - case _LOAD_SUPER_ATTR_ATTR: { + case _LOAD_SUPER_ATTR_ATTR_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef self_st; _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef attr_st; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - self_st = stack_pointer[-1]; - class_st = stack_pointer[-2]; - global_super_st = stack_pointer[-3]; + self_st = _stack_item_2; + class_st = _stack_item_1; + global_super_st = _stack_item_0; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -3070,6 +5943,11 @@ } STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); + stack_pointer[0] = global_super_st; + stack_pointer[1] = class_st; + stack_pointer[2] = self_st; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); _PyStackRef tmp = self_st; @@ -3091,22 +5969,25 @@ JUMP_TO_ERROR(); } attr_st = PyStackRef_FromPyObjectSteal(attr); - stack_pointer[0] = attr_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = attr_st; break; } - case _LOAD_SUPER_ATTR_METHOD: { + case _LOAD_SUPER_ATTR_METHOD_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef self_st; _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef attr; _PyStackRef self_or_null; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - self_st = stack_pointer[-1]; - class_st = stack_pointer[-2]; - global_super_st = stack_pointer[-3]; + self_st = _stack_item_2; + class_st = _stack_item_1; + global_super_st = _stack_item_0; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); @@ -3123,6 +6004,11 @@ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); PyTypeObject *cls = (PyTypeObject *)class; int method_found = 0; + stack_pointer[0] = global_super_st; + stack_pointer[1] = class_st; + stack_pointer[2] = self_st; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PySuper_Lookup(cls, self, name, Py_TYPE(self)->tp_getattro == PyObject_GenericGetAttr ? &method_found : NULL); @@ -3156,24 +6042,28 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); attr = PyStackRef_FromPyObjectSteal(attr_o); - stack_pointer[0] = attr; - stack_pointer[1] = self_or_null; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = self_or_null; + _tos_cache0 = attr; break; } - case _LOAD_ATTR: { + case _LOAD_ATTR_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef attr; _PyStackRef *self_or_null; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; - self_or_null = &stack_pointer[0]; + owner = _stack_item_0; + self_or_null = &stack_pointer[1]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); PyObject *attr_o; if (oparg & 1) { attr_o = NULL; + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int is_meth = _PyObject_GetMethod(PyStackRef_AsPyObjectBorrow(owner), name, &attr_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3195,6 +6085,9 @@ } } else { + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); attr_o = PyObject_GetAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3215,7 +6108,26 @@ break; } - case _GUARD_TYPE_VERSION: { + case _GUARD_TYPE_VERSION_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); + assert(type_version != 0); + if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = owner; + break; + } + + case _GUARD_TYPE_VERSION_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); @@ -3228,7 +6140,74 @@ break; } - case _GUARD_TYPE_VERSION_AND_LOCK: { + case _GUARD_TYPE_VERSION_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); + assert(type_version != 0); + if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TYPE_VERSION_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); + assert(type_version != 0); + if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TYPE_VERSION_AND_LOCK_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(type_version != 0); + if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyTypeObject *tp = Py_TYPE(owner_o); + if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UNLOCK_OBJECT(owner_o); + if (true) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + } + _tos_cache0 = owner; + break; + } + + case _GUARD_TYPE_VERSION_AND_LOCK_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); @@ -3249,7 +6228,82 @@ break; } - case _CHECK_MANAGED_OBJECT_HAS_VALUES: { + case _GUARD_TYPE_VERSION_AND_LOCK_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(type_version != 0); + if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyTypeObject *tp = Py_TYPE(owner_o); + if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UNLOCK_OBJECT(owner_o); + if (true) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + } + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TYPE_VERSION_AND_LOCK_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(type_version != 0); + if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyTypeObject *tp = Py_TYPE(owner_o); + if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UNLOCK_OBJECT(owner_o); + if (true) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_MANAGED_OBJECT_HAS_VALUES_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_dictoffset < 0); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = owner; + break; + } + + case _CHECK_MANAGED_OBJECT_HAS_VALUES_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -3262,10 +6316,53 @@ break; } - case _LOAD_ATTR_INSTANCE_VALUE: { + case _CHECK_MANAGED_OBJECT_HAS_VALUES_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_dictoffset < 0); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_MANAGED_OBJECT_HAS_VALUES_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_dictoffset < 0); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_ATTR_INSTANCE_VALUE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; - owner = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; uint16_t offset = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset); @@ -3286,17 +6383,25 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - stack_pointer[-1] = attr; + stack_pointer[0] = attr; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = attr; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_ATTR_MODULE: { + case _LOAD_ATTR_MODULE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; - owner = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; uint32_t dict_version = (uint32_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -3331,18 +6436,26 @@ attr = PyStackRef_FromPyObjectNew(attr_o); #endif STAT_INC(LOAD_ATTR, hit); - stack_pointer[-1] = attr; + stack_pointer[0] = attr; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = attr; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_ATTR_WITH_HINT: { + case _LOAD_ATTR_WITH_HINT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; + owner = _stack_item_0; uint16_t hint = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -3399,47 +6512,129 @@ #else attr = PyStackRef_FromPyObjectNew(attr_o); #endif - stack_pointer[-1] = attr; + stack_pointer[0] = attr; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = attr; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _LOAD_ATTR_SLOT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef attr; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + uint16_t index = (uint16_t)CURRENT_OPERAND0(); + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + PyObject **addr = (PyObject **)((char *)owner_o + index); + PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr); + if (attr_o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #ifdef Py_GIL_DISABLED + int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr); + if (!increfed) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #else + attr = PyStackRef_FromPyObjectNew(attr_o); + #endif + STAT_INC(LOAD_ATTR, hit); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyStackRef tmp = owner; + owner = attr; + stack_pointer[-1] = owner; + PyStackRef_CLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = attr; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _CHECK_ATTR_CLASS_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + if (!PyType_Check(owner_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(type_version != 0); + if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = owner; + break; + } + + case _CHECK_ATTR_CLASS_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef owner; + owner = stack_pointer[-1]; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + if (!PyType_Check(owner_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(type_version != 0); + if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } break; } - case _LOAD_ATTR_SLOT: { + case _CHECK_ATTR_CLASS_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; - _PyStackRef attr; - owner = stack_pointer[-1]; - uint16_t index = (uint16_t)CURRENT_OPERAND0(); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); - PyObject **addr = (PyObject **)((char *)owner_o + index); - PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr); - if (attr_o == NULL) { + if (!PyType_Check(owner_o)) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } - #ifdef Py_GIL_DISABLED - int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr); - if (!increfed) { + assert(type_version != 0); + if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } - #else - attr = PyStackRef_FromPyObjectNew(attr_o); - #endif - STAT_INC(LOAD_ATTR, hit); - _PyFrame_SetStackPointer(frame, stack_pointer); - _PyStackRef tmp = owner; - owner = attr; - stack_pointer[-1] = owner; - PyStackRef_CLOSE(tmp); - stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; break; } - case _CHECK_ATTR_CLASS: { + case _CHECK_ATTR_CLASS_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; - owner = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { @@ -3451,27 +6646,78 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_ATTR_CLASS: { + case _LOAD_ATTR_CLASS_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; - owner = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; PyObject *descr = (PyObject *)CURRENT_OPERAND0(); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); attr = PyStackRef_FromPyObjectNew(descr); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = owner; owner = attr; stack_pointer[-1] = owner; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = attr; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _LOAD_ATTR_PROPERTY_FRAME_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef new_frame; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + owner = _stack_item_0; + PyObject *fget = (PyObject *)CURRENT_OPERAND0(); + assert((oparg & 1) == 0); + assert(Py_IS_TYPE(fget, &PyFunction_Type)); + PyFunctionObject *f = (PyFunctionObject *)fget; + PyCodeObject *code = (PyCodeObject *)f->func_code; + if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (code->co_kwonlyargcount) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (code->co_argcount != 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(LOAD_ATTR, hit); + _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); + pushed_frame->localsplus[0] = owner; + new_frame = PyStackRef_Wrap(pushed_frame); + _tos_cache0 = new_frame; break; } - case _LOAD_ATTR_PROPERTY_FRAME: { + case _LOAD_ATTR_PROPERTY_FRAME_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef new_frame; oparg = CURRENT_OPARG(); @@ -3505,9 +6751,112 @@ break; } + case _LOAD_ATTR_PROPERTY_FRAME_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef new_frame; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + owner = _stack_item_1; + PyObject *fget = (PyObject *)CURRENT_OPERAND0(); + assert((oparg & 1) == 0); + assert(Py_IS_TYPE(fget, &PyFunction_Type)); + PyFunctionObject *f = (PyFunctionObject *)fget; + PyCodeObject *code = (PyCodeObject *)f->func_code; + if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (code->co_kwonlyargcount) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (code->co_argcount != 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(LOAD_ATTR, hit); + _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); + pushed_frame->localsplus[0] = owner; + new_frame = PyStackRef_Wrap(pushed_frame); + _tos_cache1 = new_frame; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_ATTR_PROPERTY_FRAME_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef new_frame; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + oparg = CURRENT_OPARG(); + owner = _stack_item_2; + PyObject *fget = (PyObject *)CURRENT_OPERAND0(); + assert((oparg & 1) == 0); + assert(Py_IS_TYPE(fget, &PyFunction_Type)); + PyFunctionObject *f = (PyFunctionObject *)fget; + PyCodeObject *code = (PyCodeObject *)f->func_code; + if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (code->co_kwonlyargcount) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (code->co_argcount != 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(LOAD_ATTR, hit); + _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); + pushed_frame->localsplus[0] = owner; + new_frame = PyStackRef_Wrap(pushed_frame); + _tos_cache2 = new_frame; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + /* _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN is not a viable micro-op for tier 2 because it has too many cache entries */ - case _GUARD_DORV_NO_DICT: { + case _GUARD_DORV_NO_DICT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_dictoffset < 0); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + if (_PyObject_GetManagedDict(owner_o) || + !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + UNLOCK_OBJECT(owner_o); + if (true) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + } + _tos_cache0 = owner; + break; + } + + case _GUARD_DORV_NO_DICT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -3524,11 +6873,63 @@ break; } - case _STORE_ATTR_INSTANCE_VALUE: { + case _GUARD_DORV_NO_DICT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_dictoffset < 0); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + if (_PyObject_GetManagedDict(owner_o) || + !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + UNLOCK_OBJECT(owner_o); + if (true) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + } + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_DORV_NO_DICT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_dictoffset < 0); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + if (_PyObject_GetManagedDict(owner_o) || + !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + UNLOCK_OBJECT(owner_o); + if (true) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _STORE_ATTR_INSTANCE_VALUE_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; - owner = stack_pointer[-1]; - value = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + value = _stack_item_0; uint16_t offset = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); STAT_INC(STORE_ATTR, hit); @@ -3542,8 +6943,6 @@ _PyDictValues_AddToInsertionOrder(values, index); } UNLOCK_OBJECT(owner_o); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -3551,12 +6950,16 @@ break; } - case _STORE_ATTR_WITH_HINT: { + case _STORE_ATTR_WITH_HINT_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; - value = stack_pointer[-2]; + owner = _stack_item_1; + value = _stack_item_0; uint16_t hint = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); @@ -3604,6 +7007,10 @@ JUMP_TO_JUMP_TARGET(); } } + stack_pointer[0] = value; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyDict_NotifyEvent(tstate->interp, PyDict_EVENT_MODIFIED, dict, name, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3619,11 +7026,15 @@ break; } - case _STORE_ATTR_SLOT: { + case _STORE_ATTR_SLOT_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; - owner = stack_pointer[-1]; - value = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + value = _stack_item_0; uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { @@ -3635,8 +7046,6 @@ PyObject *old_value = *(PyObject **)addr; FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, PyStackRef_AsPyObjectSteal(value)); UNLOCK_OBJECT(owner_o); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -3644,16 +7053,24 @@ break; } - case _COMPARE_OP: { + case _COMPARE_OP_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert((oparg >> 5) <= Py_GE); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5); _PyStackRef tmp = right; @@ -3683,41 +7100,162 @@ else { res = PyStackRef_FromPyObjectSteal(res_o); } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _COMPARE_OP_FLOAT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + right = _stack_item_1; + left = _stack_item_0; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + STAT_INC(COMPARE_OP, hit); + double dleft = PyFloat_AS_DOUBLE(left_o); + double dright = PyFloat_AS_DOUBLE(right_o); + int sign_ish = COMPARISON_BIT(dleft, dright); + PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); + res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; + _tos_cache0 = res; + break; + } + + case _COMPARE_OP_FLOAT_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + STAT_INC(COMPARE_OP, hit); + double dleft = PyFloat_AS_DOUBLE(left_o); + double dright = PyFloat_AS_DOUBLE(right_o); + int sign_ish = COMPARISON_BIT(dleft, dright); + PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); + res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; + stack_pointer[-1] = res; + break; + } + + case _COMPARE_OP_FLOAT_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + oparg = CURRENT_OPARG(); + right = _stack_item_2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + STAT_INC(COMPARE_OP, hit); + double dleft = PyFloat_AS_DOUBLE(left_o); + double dright = PyFloat_AS_DOUBLE(right_o); + int sign_ish = COMPARISON_BIT(dleft, dright); + PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); + res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; + break; + } + + case _COMPARE_OP_INT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + right = _stack_item_1; + left = _stack_item_0; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + if (!_PyLong_IsCompact((PyLongObject *)left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (!_PyLong_IsCompact((PyLongObject *)right_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + STAT_INC(COMPARE_OP, hit); + assert(_PyLong_DigitCount((PyLongObject *)left_o) <= 1 && + _PyLong_DigitCount((PyLongObject *)right_o) <= 1); + Py_ssize_t ileft = _PyLong_CompactValue((PyLongObject *)left_o); + Py_ssize_t iright = _PyLong_CompactValue((PyLongObject *)right_o); + int sign_ish = COMPARISON_BIT(ileft, iright); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; + _tos_cache0 = res; break; } - case _COMPARE_OP_FLOAT: { + case _COMPARE_OP_INT_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_0; + left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + if (!_PyLong_IsCompact((PyLongObject *)left_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (!_PyLong_IsCompact((PyLongObject *)right_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } STAT_INC(COMPARE_OP, hit); - double dleft = PyFloat_AS_DOUBLE(left_o); - double dright = PyFloat_AS_DOUBLE(right_o); - int sign_ish = COMPARISON_BIT(dleft, dright); - PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); - res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + assert(_PyLong_DigitCount((PyLongObject *)left_o) <= 1 && + _PyLong_DigitCount((PyLongObject *)right_o) <= 1); + Py_ssize_t ileft = _PyLong_CompactValue((PyLongObject *)left_o); + Py_ssize_t iright = _PyLong_CompactValue((PyLongObject *)right_o); + int sign_ish = COMPARISON_BIT(ileft, iright); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; + stack_pointer[-1] = res; break; } - case _COMPARE_OP_INT: { + case _COMPARE_OP_INT_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_2; + left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { @@ -3737,19 +7275,22 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; break; } - case _COMPARE_OP_STR: { + case _COMPARE_OP_STR_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -3761,48 +7302,108 @@ assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS); assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-2] = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _COMPARE_OP_STR_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + STAT_INC(COMPARE_OP, hit); + int eq = _PyUnicode_Equal(left_o, right_o); + assert((oparg >> 5) == Py_EQ || (oparg >> 5) == Py_NE); + PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); + assert(eq == 0 || eq == 1); + assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS); + assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); + res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; + stack_pointer[-1] = res; + break; + } + + case _COMPARE_OP_STR_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + oparg = CURRENT_OPARG(); + right = _stack_item_2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + STAT_INC(COMPARE_OP, hit); + int eq = _PyUnicode_Equal(left_o, right_o); + assert((oparg >> 5) == Py_EQ || (oparg >> 5) == Py_NE); + PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); + assert(eq == 0 || eq == 1); + assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS); + assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); + res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; break; } - case _IS_OP: { + case _IS_OP_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef b; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_1; + left = _stack_item_0; int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = right; right = PyStackRef_NULL; - stack_pointer[-1] = right; + stack_pointer[0] = left; + stack_pointer[1] = right; PyStackRef_CLOSE(tmp); tmp = left; left = PyStackRef_NULL; - stack_pointer[-2] = left; + stack_pointer[0] = left; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); b = res ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = b; break; } - case _CONTAINS_OP: { + case _CONTAINS_OP_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef b; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = PySequence_Contains(right_o, left_o); _PyStackRef tmp = right; @@ -3820,13 +7421,28 @@ JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = b; + break; + } + + case _GUARD_TOS_ANY_SET_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + tos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyAnySet_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = tos; break; } - case _GUARD_TOS_ANY_SET: { + case _GUARD_TOS_ANY_SET_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -3837,17 +7453,61 @@ break; } - case _CONTAINS_OP_SET: { + case _GUARD_TOS_ANY_SET_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + tos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyAnySet_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = tos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_TOS_ANY_SET_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef tos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + tos = _stack_item_2; + PyObject *o = PyStackRef_AsPyObjectBorrow(tos); + if (!PyAnySet_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = tos; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _CONTAINS_OP_SET_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef b; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyAnySet_CheckExact(right_o)); STAT_INC(CONTAINS_OP, hit); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PySet_Contains((PySetObject *)right_o, left_o); _PyStackRef tmp = right; @@ -3865,23 +7525,29 @@ JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = b; break; } - case _CONTAINS_OP_DICT: { + case _CONTAINS_OP_DICT_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef b; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = stack_pointer[-1]; - left = stack_pointer[-2]; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyDict_CheckExact(right_o)); STAT_INC(CONTAINS_OP, hit); + stack_pointer[0] = left; + stack_pointer[1] = right; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = PyDict_Contains(right_o, left_o); _PyStackRef tmp = right; @@ -3899,21 +7565,27 @@ JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = b; break; } - case _CHECK_EG_MATCH: { + case _CHECK_EG_MATCH_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef match_type_st; _PyStackRef exc_value_st; _PyStackRef rest; _PyStackRef match; - match_type_st = stack_pointer[-1]; - exc_value_st = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + match_type_st = _stack_item_1; + exc_value_st = _stack_item_0; PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st); + stack_pointer[0] = exc_value_st; + stack_pointer[1] = match_type_st; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptStarTypeValid(tstate, match_type); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3962,22 +7634,26 @@ } rest = PyStackRef_FromPyObjectSteal(rest_o); match = PyStackRef_FromPyObjectSteal(match_o); - stack_pointer[0] = rest; - stack_pointer[1] = match; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = match; + _tos_cache0 = rest; break; } - case _CHECK_EXC_MATCH: { + case _CHECK_EXC_MATCH_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef b; - right = stack_pointer[-1]; - left = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyExceptionInstance_Check(left_o)); + stack_pointer[0] = right; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptTypeValid(tstate, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3993,20 +7669,26 @@ PyStackRef_CLOSE(right); stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = b; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = b; break; } - case _IMPORT_NAME: { + case _IMPORT_NAME_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef fromlist; _PyStackRef level; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - fromlist = stack_pointer[-1]; - level = stack_pointer[-2]; + fromlist = _stack_item_1; + level = _stack_item_0; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + stack_pointer[0] = level; + stack_pointer[1] = fromlist; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportName(tstate, frame, name, PyStackRef_AsPyObjectBorrow(fromlist), @@ -4026,13 +7708,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _IMPORT_FROM: { + case _IMPORT_FROM_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef from; _PyStackRef res; oparg = CURRENT_OPARG(); @@ -4045,9 +7727,7 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } @@ -4055,27 +7735,36 @@ /* _POP_JUMP_IF_TRUE is not a viable micro-op for tier 2 because it is replaced */ - case _IS_NONE: { + case _IS_NONE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef b; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; if (PyStackRef_IsNone(value)) { b = PyStackRef_True; } else { b = PyStackRef_False; + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = value; value = b; stack_pointer[-1] = value; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; } - stack_pointer[-1] = b; + _tos_cache0 = b; break; } - case _GET_LEN: { + case _GET_LEN_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef obj; _PyStackRef len; obj = stack_pointer[-1]; @@ -4090,22 +7779,30 @@ JUMP_TO_ERROR(); } len = PyStackRef_FromPyObjectSteal(len_o); - stack_pointer[0] = len; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = len; break; } - case _MATCH_CLASS: { + case _MATCH_CLASS_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef names; _PyStackRef type; _PyStackRef subject; _PyStackRef attrs; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - names = stack_pointer[-1]; - type = stack_pointer[-2]; - subject = stack_pointer[-3]; + names = _stack_item_2; + type = _stack_item_1; + subject = _stack_item_0; assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names))); + stack_pointer[0] = subject; + stack_pointer[1] = type; + stack_pointer[2] = names; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attrs_o = _PyEval_MatchClass(tstate, PyStackRef_AsPyObjectBorrow(subject), @@ -4136,37 +7833,97 @@ } attrs = PyStackRef_None; } - stack_pointer[0] = attrs; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = attrs; + break; + } + + case _MATCH_MAPPING_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef subject; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + subject = _stack_item_0; + int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; + res = match ? PyStackRef_True : PyStackRef_False; + _tos_cache1 = res; + _tos_cache0 = subject; break; } - case _MATCH_MAPPING: { + case _MATCH_MAPPING_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _MATCH_MAPPING_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef subject; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + subject = _stack_item_1; + int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; + res = match ? PyStackRef_True : PyStackRef_False; + _tos_cache2 = res; + _tos_cache1 = subject; + _tos_cache0 = _stack_item_0; + break; + } + + case _MATCH_SEQUENCE_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef subject; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + subject = _stack_item_0; + int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; + res = match ? PyStackRef_True : PyStackRef_False; + _tos_cache1 = res; + _tos_cache0 = subject; break; } - case _MATCH_SEQUENCE: { + case _MATCH_SEQUENCE_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? PyStackRef_True : PyStackRef_False; - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _MATCH_KEYS: { + case _MATCH_SEQUENCE_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef subject; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + subject = _stack_item_1; + int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; + res = match ? PyStackRef_True : PyStackRef_False; + _tos_cache2 = res; + _tos_cache1 = subject; + _tos_cache0 = _stack_item_0; + break; + } + + case _MATCH_KEYS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef keys; _PyStackRef subject; _PyStackRef values_or_none; @@ -4180,18 +7937,22 @@ JUMP_TO_ERROR(); } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); - stack_pointer[0] = values_or_none; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = values_or_none; break; } - case _GET_ITER: { + case _GET_ITER_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef iterable; _PyStackRef iter; _PyStackRef index_or_null; - iterable = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + iterable = _stack_item_0; #ifdef Py_STATS + stack_pointer[0] = iterable; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _Py_GatherStats_GetIter(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4218,20 +7979,26 @@ index_or_null = PyStackRef_NULL; stack_pointer += 1; } - stack_pointer[-1] = iter; - stack_pointer[0] = index_or_null; - stack_pointer += 1; + _tos_cache1 = index_or_null; + _tos_cache0 = iter; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); break; } - case _GET_YIELD_FROM_ITER: { + case _GET_YIELD_FROM_ITER_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef iterable; _PyStackRef iter; - iterable = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + iterable = _stack_item_0; PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); if (PyCoro_CheckExact(iterable_o)) { if (!(_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))) { + stack_pointer[0] = iterable; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_TypeError, "cannot 'yield from' a coroutine object " @@ -4245,6 +8012,9 @@ iter = iterable; } else { + stack_pointer[0] = iterable; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(iterable_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4258,46 +8028,124 @@ stack_pointer[-1] = iterable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + } + _tos_cache0 = iter; + break; + } + + /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */ + + case _FOR_ITER_TIER_TWO_r01: { + assert(current_cached_values == 0); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef next; + null_or_index = stack_pointer[-1]; + iter = stack_pointer[-2]; + _PyFrame_SetStackPointer(frame, stack_pointer); + _PyStackRef item = _PyForIter_VirtualIteratorNext(tstate, frame, iter, &null_or_index); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (!PyStackRef_IsValid(item)) { + if (PyStackRef_IsError(item)) { + JUMP_TO_ERROR(); + } + if (true) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + } + next = item; + _tos_cache0 = next; + stack_pointer[-1] = null_or_index; + SET_CURRENT_CACHED_VALUES(1); + break; + } + + /* _INSTRUMENTED_FOR_ITER is not a viable micro-op for tier 2 because it is instrumented */ + + case _ITER_CHECK_LIST_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null_or_index = _stack_item_1; + iter = _stack_item_0; + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(iter_o) != &PyList_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(PyStackRef_IsTaggedInt(null_or_index)); + #ifdef Py_GIL_DISABLED + if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache1 = null_or_index; + _tos_cache0 = iter; + break; + } + + case _ITER_CHECK_LIST_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef null_or_index; + _PyStackRef iter; + null_or_index = stack_pointer[-1]; + iter = stack_pointer[-2]; + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(iter_o) != &PyList_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(PyStackRef_IsTaggedInt(null_or_index)); + #ifdef Py_GIL_DISABLED + if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); } - stack_pointer[-1] = iter; + #endif break; } - /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */ - - case _FOR_ITER_TIER_TWO: { + case _ITER_CHECK_LIST_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; - _PyStackRef next; - null_or_index = stack_pointer[-1]; - iter = stack_pointer[-2]; - _PyFrame_SetStackPointer(frame, stack_pointer); - _PyStackRef item = _PyForIter_VirtualIteratorNext(tstate, frame, iter, &null_or_index); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (!PyStackRef_IsValid(item)) { - if (PyStackRef_IsError(item)) { - JUMP_TO_ERROR(); - } - if (true) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } + _PyStackRef _stack_item_0 = _tos_cache0; + null_or_index = _stack_item_0; + iter = stack_pointer[-1]; + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(iter_o) != &PyList_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); } - next = item; - stack_pointer[-1] = null_or_index; - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + assert(PyStackRef_IsTaggedInt(null_or_index)); + #ifdef Py_GIL_DISABLED + if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache0 = null_or_index; break; } - /* _INSTRUMENTED_FOR_ITER is not a viable micro-op for tier 2 because it is instrumented */ - - case _ITER_CHECK_LIST: { + case _ITER_CHECK_LIST_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; - null_or_index = stack_pointer[-1]; - iter = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + null_or_index = _stack_item_2; + iter = _stack_item_1; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { UOP_STAT_INC(uopcode, miss); @@ -4310,12 +8158,38 @@ JUMP_TO_JUMP_TARGET(); } #endif + _tos_cache2 = null_or_index; + _tos_cache1 = iter; + _tos_cache0 = _stack_item_0; break; } /* _ITER_JUMP_LIST is not a viable micro-op for tier 2 because it is replaced */ - case _GUARD_NOT_EXHAUSTED_LIST: { + case _GUARD_NOT_EXHAUSTED_LIST_r22: { + assert(current_cached_values == 2); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null_or_index = _stack_item_1; + iter = _stack_item_0; + #ifndef Py_GIL_DISABLED + PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(list_o) == &PyList_Type); + if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache1 = null_or_index; + _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(2); + break; + } + + case _GUARD_NOT_EXHAUSTED_LIST_r00: { + assert(current_cached_values == 0); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -4328,12 +8202,59 @@ JUMP_TO_JUMP_TARGET(); } #endif + SET_CURRENT_CACHED_VALUES(0); + break; + } + + case _GUARD_NOT_EXHAUSTED_LIST_r11: { + assert(current_cached_values == 1); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + null_or_index = _stack_item_0; + iter = stack_pointer[-1]; + #ifndef Py_GIL_DISABLED + PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(list_o) == &PyList_Type); + if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache0 = null_or_index; + SET_CURRENT_CACHED_VALUES(1); + break; + } + + case _GUARD_NOT_EXHAUSTED_LIST_r33: { + assert(current_cached_values == 3); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + null_or_index = _stack_item_2; + iter = _stack_item_1; + #ifndef Py_GIL_DISABLED + PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(list_o) == &PyList_Type); + if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache2 = null_or_index; + _tos_cache1 = iter; + _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } /* _ITER_NEXT_LIST is not a viable micro-op for tier 2 because it is replaced */ - case _ITER_NEXT_LIST_TIER_TWO: { + case _ITER_NEXT_LIST_TIER_TWO_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -4357,14 +8278,34 @@ next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(list_o, PyStackRef_UntagInt(null_or_index))); #endif null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index); + _tos_cache0 = next; stack_pointer[-1] = null_or_index; - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _ITER_CHECK_TUPLE: { + case _ITER_CHECK_TUPLE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null_or_index = _stack_item_1; + iter = _stack_item_0; + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(iter_o) != &PyTuple_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(PyStackRef_IsTaggedInt(null_or_index)); + _tos_cache1 = null_or_index; + _tos_cache0 = iter; + break; + } + + case _ITER_CHECK_TUPLE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -4378,9 +8319,70 @@ break; } + case _ITER_CHECK_TUPLE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + null_or_index = _stack_item_0; + iter = stack_pointer[-1]; + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(iter_o) != &PyTuple_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(PyStackRef_IsTaggedInt(null_or_index)); + _tos_cache0 = null_or_index; + break; + } + + case _ITER_CHECK_TUPLE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + null_or_index = _stack_item_2; + iter = _stack_item_1; + PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(iter_o) != &PyTuple_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(PyStackRef_IsTaggedInt(null_or_index)); + _tos_cache2 = null_or_index; + _tos_cache1 = iter; + _tos_cache0 = _stack_item_0; + break; + } + /* _ITER_JUMP_TUPLE is not a viable micro-op for tier 2 because it is replaced */ - case _GUARD_NOT_EXHAUSTED_TUPLE: { + case _GUARD_NOT_EXHAUSTED_TUPLE_r22: { + assert(current_cached_values == 2); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null_or_index = _stack_item_1; + iter = _stack_item_0; + PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(tuple_o) == &PyTuple_Type); + if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = null_or_index; + _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(2); + break; + } + + case _GUARD_NOT_EXHAUSTED_TUPLE_r00: { + assert(current_cached_values == 0); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -4391,29 +8393,98 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _ITER_NEXT_TUPLE: { + case _GUARD_NOT_EXHAUSTED_TUPLE_r11: { + assert(current_cached_values == 1); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + null_or_index = _stack_item_0; + iter = stack_pointer[-1]; + PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(tuple_o) == &PyTuple_Type); + if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = null_or_index; + SET_CURRENT_CACHED_VALUES(1); + break; + } + + case _GUARD_NOT_EXHAUSTED_TUPLE_r33: { + assert(current_cached_values == 3); + _PyStackRef null_or_index; + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + null_or_index = _stack_item_2; + iter = _stack_item_1; + PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(tuple_o) == &PyTuple_Type); + if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = null_or_index; + _tos_cache1 = iter; + _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); + break; + } + + case _ITER_NEXT_TUPLE_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; - null_or_index = stack_pointer[-1]; - iter = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null_or_index = _stack_item_1; + iter = _stack_item_0; PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); uintptr_t i = PyStackRef_UntagInt(null_or_index); assert((size_t)i < (size_t)PyTuple_GET_SIZE(tuple_o)); next = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(tuple_o, i)); null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index); - stack_pointer[-1] = null_or_index; - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = next; + _tos_cache1 = null_or_index; + _tos_cache0 = iter; + break; + } + + case _ITER_CHECK_RANGE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + iter = _stack_item_0; + _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(r) != &PyRangeIter_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #ifdef Py_GIL_DISABLED + if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache1 = _stack_item_1; + _tos_cache0 = iter; break; } - case _ITER_CHECK_RANGE: { + case _ITER_CHECK_RANGE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef iter; iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); @@ -4430,9 +8501,74 @@ break; } + case _ITER_CHECK_RANGE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + iter = stack_pointer[-1]; + _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(r) != &PyRangeIter_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #ifdef Py_GIL_DISABLED + if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache0 = _stack_item_0; + break; + } + + case _ITER_CHECK_RANGE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + iter = _stack_item_1; + _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); + if (Py_TYPE(r) != &PyRangeIter_Type) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #ifdef Py_GIL_DISABLED + if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + #endif + _tos_cache2 = _stack_item_2; + _tos_cache1 = iter; + _tos_cache0 = _stack_item_0; + break; + } + /* _ITER_JUMP_RANGE is not a viable micro-op for tier 2 because it is replaced */ - case _GUARD_NOT_EXHAUSTED_RANGE: { + case _GUARD_NOT_EXHAUSTED_RANGE_r22: { + assert(current_cached_values == 2); + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + iter = _stack_item_0; + _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(r) == &PyRangeIter_Type); + if (r->len <= 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(2); + break; + } + + case _GUARD_NOT_EXHAUSTED_RANGE_r00: { + assert(current_cached_values == 0); _PyStackRef iter; iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); @@ -4441,13 +8577,54 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); + break; + } + + case _GUARD_NOT_EXHAUSTED_RANGE_r11: { + assert(current_cached_values == 1); + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + iter = stack_pointer[-1]; + _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(r) == &PyRangeIter_Type); + if (r->len <= 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); + break; + } + + case _GUARD_NOT_EXHAUSTED_RANGE_r33: { + assert(current_cached_values == 3); + _PyStackRef iter; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + iter = _stack_item_1; + _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); + assert(Py_TYPE(r) == &PyRangeIter_Type); + if (r->len <= 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = iter; + _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } - case _ITER_NEXT_RANGE: { + case _ITER_NEXT_RANGE_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef iter; _PyStackRef next; - iter = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + iter = _stack_item_0; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); #ifdef Py_GIL_DISABLED @@ -4459,20 +8636,28 @@ r->len--; PyObject *res = PyLong_FromLong(value); if (res == NULL) { + stack_pointer[0] = iter; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); JUMP_TO_ERROR(); } next = PyStackRef_FromPyObjectSteal(res); - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = next; + _tos_cache1 = _stack_item_1; + _tos_cache0 = iter; break; } - case _FOR_ITER_GEN_FRAME: { + case _FOR_ITER_GEN_FRAME_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef iter; _PyStackRef gen_frame; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - iter = stack_pointer[-2]; + iter = _stack_item_0; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(gen) != &PyGen_Type) { UOP_STAT_INC(uopcode, miss); @@ -4498,25 +8683,30 @@ pushed_frame->previous = frame; frame->return_offset = (uint16_t)( 2 + oparg); gen_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[0] = gen_frame; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = gen_frame; + _tos_cache1 = _stack_item_1; + _tos_cache0 = iter; break; } - case _INSERT_NULL: { + case _INSERT_NULL_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self; _PyStackRef *method_and_self; - self = stack_pointer[-1]; - method_and_self = &stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + self = _stack_item_0; + method_and_self = &stack_pointer[0]; method_and_self[1] = self; method_and_self[0] = PyStackRef_NULL; - stack_pointer += 1; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_SPECIAL: { + case _LOAD_SPECIAL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *method_and_self; oparg = CURRENT_OPARG(); method_and_self = &stack_pointer[-2]; @@ -4543,7 +8733,9 @@ break; } - case _WITH_EXCEPT_START: { + case _WITH_EXCEPT_START_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef val; _PyStackRef lasti; _PyStackRef exit_self; @@ -4575,13 +8767,36 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + break; + } + + case _PUSH_EXC_INFO_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef exc; + _PyStackRef prev_exc; + _PyStackRef new_exc; + _PyStackRef _stack_item_0 = _tos_cache0; + exc = _stack_item_0; + _PyErr_StackItem *exc_info = tstate->exc_info; + if (exc_info->exc_value != NULL) { + prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value); + } + else { + prev_exc = PyStackRef_None; + } + assert(PyStackRef_ExceptionInstanceCheck(exc)); + exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); + new_exc = exc; + _tos_cache1 = new_exc; + _tos_cache0 = prev_exc; break; } - case _PUSH_EXC_INFO: { + case _PUSH_EXC_INFO_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; @@ -4596,14 +8811,56 @@ assert(PyStackRef_ExceptionInstanceCheck(exc)); exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); new_exc = exc; + _tos_cache0 = new_exc; stack_pointer[-1] = prev_exc; - stack_pointer[0] = new_exc; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT: { + case _PUSH_EXC_INFO_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef exc; + _PyStackRef prev_exc; + _PyStackRef new_exc; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + exc = _stack_item_1; + _PyErr_StackItem *exc_info = tstate->exc_info; + if (exc_info->exc_value != NULL) { + prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value); + } + else { + prev_exc = PyStackRef_None; + } + assert(PyStackRef_ExceptionInstanceCheck(exc)); + exc_info->exc_value = PyStackRef_AsPyObjectNew(exc); + new_exc = exc; + _tos_cache2 = new_exc; + _tos_cache1 = prev_exc; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + PyDictValues *ivs = _PyObject_InlineValues(owner_o); + if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = owner; + break; + } + + case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -4616,7 +8873,67 @@ break; } - case _GUARD_KEYS_VERSION: { + case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + PyDictValues *ivs = _PyObject_InlineValues(owner_o); + if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; + PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); + assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); + PyDictValues *ivs = _PyObject_InlineValues(owner_o); + if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_KEYS_VERSION_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + uint32_t keys_version = (uint32_t)CURRENT_OPERAND0(); + PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); + PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; + PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = owner; + break; + } + + case _GUARD_KEYS_VERSION_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t keys_version = (uint32_t)CURRENT_OPERAND0(); @@ -4630,7 +8947,72 @@ break; } - case _LOAD_ATTR_METHOD_WITH_VALUES: { + case _GUARD_KEYS_VERSION_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + uint32_t keys_version = (uint32_t)CURRENT_OPERAND0(); + PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); + PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; + PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_KEYS_VERSION_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; + uint32_t keys_version = (uint32_t)CURRENT_OPERAND0(); + PyTypeObject *owner_cls = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); + PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; + PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; + if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_ATTR_METHOD_WITH_VALUES_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef attr; + _PyStackRef self; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + owner = _stack_item_0; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); + assert(oparg & 1); + STAT_INC(LOAD_ATTR, hit); + assert(descr != NULL); + assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); + attr = PyStackRef_FromPyObjectNew(descr); + self = owner; + _tos_cache1 = self; + _tos_cache0 = attr; + break; + } + + case _LOAD_ATTR_METHOD_WITH_VALUES_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -4643,14 +9025,59 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; + _tos_cache0 = self; stack_pointer[-1] = attr; - stack_pointer[0] = self; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_ATTR_METHOD_NO_DICT: { + case _LOAD_ATTR_METHOD_WITH_VALUES_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef attr; + _PyStackRef self; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + owner = _stack_item_1; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); + assert(oparg & 1); + STAT_INC(LOAD_ATTR, hit); + assert(descr != NULL); + assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); + attr = PyStackRef_FromPyObjectNew(descr); + self = owner; + _tos_cache2 = self; + _tos_cache1 = attr; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_ATTR_METHOD_NO_DICT_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef attr; + _PyStackRef self; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + owner = _stack_item_0; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); + assert(oparg & 1); + assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); + STAT_INC(LOAD_ATTR, hit); + assert(descr != NULL); + assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); + attr = PyStackRef_FromPyObjectNew(descr); + self = owner; + _tos_cache1 = self; + _tos_cache0 = attr; + break; + } + + case _LOAD_ATTR_METHOD_NO_DICT_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -4664,57 +9091,96 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; + _tos_cache0 = self; stack_pointer[-1] = attr; - stack_pointer[0] = self; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES: { + case _LOAD_ATTR_METHOD_NO_DICT_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef attr; + _PyStackRef self; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; + owner = _stack_item_1; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); + assert(oparg & 1); + assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); + STAT_INC(LOAD_ATTR, hit); + assert(descr != NULL); + assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); + attr = PyStackRef_FromPyObjectNew(descr); + self = owner; + _tos_cache2 = self; + _tos_cache1 = attr; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef attr; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + owner = _stack_item_0; PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); - stack_pointer[0] = attr; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = attr; break; } - case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT: { + case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; + owner = _stack_item_0; PyObject *descr = (PyObject *)CURRENT_OPERAND0(); assert((oparg & 1) == 0); assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); - stack_pointer[0] = attr; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = attr; + break; + } + + case _CHECK_ATTR_METHOD_LAZY_DICT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + owner = _stack_item_0; + uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0(); + char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; + PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); + if (dict != NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = owner; break; } - case _CHECK_ATTR_METHOD_LAZY_DICT: { + case _CHECK_ATTR_METHOD_LAZY_DICT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0(); @@ -4727,7 +9193,70 @@ break; } - case _LOAD_ATTR_METHOD_LAZY_DICT: { + case _CHECK_ATTR_METHOD_LAZY_DICT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0(); + char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; + PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); + if (dict != NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = owner; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_ATTR_METHOD_LAZY_DICT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + owner = _stack_item_2; + uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0(); + char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; + PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); + if (dict != NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = owner; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_ATTR_METHOD_LAZY_DICT_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef owner; + _PyStackRef attr; + _PyStackRef self; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + owner = _stack_item_0; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); + assert(oparg & 1); + STAT_INC(LOAD_ATTR, hit); + assert(descr != NULL); + assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); + attr = PyStackRef_FromPyObjectNew(descr); + self = owner; + _tos_cache1 = self; + _tos_cache0 = attr; + break; + } + + case _LOAD_ATTR_METHOD_LAZY_DICT_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -4740,14 +9269,37 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); attr = PyStackRef_FromPyObjectNew(descr); self = owner; + _tos_cache0 = self; stack_pointer[-1] = attr; - stack_pointer[0] = self; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _MAYBE_EXPAND_METHOD: { + case _LOAD_ATTR_METHOD_LAZY_DICT_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef owner; + _PyStackRef attr; + _PyStackRef self; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + owner = _stack_item_1; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); + assert(oparg & 1); + STAT_INC(LOAD_ATTR, hit); + assert(descr != NULL); + assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); + attr = PyStackRef_FromPyObjectNew(descr); + self = owner; + _tos_cache2 = self; + _tos_cache1 = attr; + _tos_cache0 = _stack_item_0; + break; + } + + case _MAYBE_EXPAND_METHOD_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -4775,7 +9327,9 @@ /* _MONITOR_CALL is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _PY_FRAME_GENERAL: { + case _PY_FRAME_GENERAL_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -4804,32 +9358,85 @@ if (temp == NULL) { JUMP_TO_ERROR(); } - new_frame = PyStackRef_Wrap(temp); - stack_pointer[0] = new_frame; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + new_frame = PyStackRef_Wrap(temp); + _tos_cache0 = new_frame; + break; + } + + case _CHECK_FUNCTION_VERSION_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef callable; + oparg = CURRENT_OPARG(); + callable = stack_pointer[-2 - oparg]; + uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); + if (!PyFunction_Check(callable_o)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + PyFunctionObject *func = (PyFunctionObject *)callable_o; + if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _CHECK_FUNCTION_VERSION_INLINE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *callable_o = (PyObject *)CURRENT_OPERAND1(); + assert(PyFunction_Check(callable_o)); + PyFunctionObject *func = (PyFunctionObject *)callable_o; + if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } break; } - case _CHECK_FUNCTION_VERSION: { - _PyStackRef callable; - oparg = CURRENT_OPARG(); - callable = stack_pointer[-2 - oparg]; + case _CHECK_FUNCTION_VERSION_INLINE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); - PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); - if (!PyFunction_Check(callable_o)) { + PyObject *callable_o = (PyObject *)CURRENT_OPERAND1(); + assert(PyFunction_Check(callable_o)); + PyFunctionObject *func = (PyFunctionObject *)callable_o; + if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_FUNCTION_VERSION_INLINE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); + PyObject *callable_o = (PyObject *)CURRENT_OPERAND1(); + assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _CHECK_FUNCTION_VERSION_INLINE: { + case _CHECK_FUNCTION_VERSION_INLINE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = (PyObject *)CURRENT_OPERAND1(); assert(PyFunction_Check(callable_o)); @@ -4838,10 +9445,15 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _CHECK_METHOD_VERSION: { + case _CHECK_METHOD_VERSION_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -4869,7 +9481,9 @@ break; } - case _EXPAND_METHOD: { + case _EXPAND_METHOD_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -4890,7 +9504,9 @@ break; } - case _CHECK_IS_NOT_PY_CALLABLE: { + case _CHECK_IS_NOT_PY_CALLABLE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -4906,7 +9522,9 @@ break; } - case _CALL_NON_PY_GENERAL: { + case _CALL_NON_PY_GENERAL_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -4977,13 +9595,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CHECK_CALL_BOUND_METHOD_EXACT_ARGS: { + case _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -5000,7 +9618,9 @@ break; } - case _INIT_CALL_BOUND_METHOD_EXACT_ARGS: { + case _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -5020,15 +9640,61 @@ break; } - case _CHECK_PEP_523: { + case _CHECK_PEP_523_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + if (tstate->interp->eval_frame) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _CHECK_PEP_523_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + if (tstate->interp->eval_frame) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_PEP_523_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + if (tstate->interp->eval_frame) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_PEP_523_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; if (tstate->interp->eval_frame) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _CHECK_FUNCTION_EXACT_ARGS: { + case _CHECK_FUNCTION_EXACT_ARGS_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -5045,7 +9711,9 @@ break; } - case _CHECK_STACK_SPACE: { + case _CHECK_STACK_SPACE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -5059,15 +9727,61 @@ break; } - case _CHECK_RECURSION_REMAINING: { + case _CHECK_RECURSION_REMAINING_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _CHECK_RECURSION_REMAINING_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_RECURSION_REMAINING_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; if (tstate->py_recursion_remaining <= 1) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _INIT_CALL_PY_EXACT_ARGS_0: { + case _CHECK_RECURSION_REMAINING_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _INIT_CALL_PY_EXACT_ARGS_0_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5086,13 +9800,15 @@ first_non_self_local[i] = args[i]; } new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-2 - oparg] = new_frame; - stack_pointer += -1 - oparg; + _tos_cache0 = new_frame; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _INIT_CALL_PY_EXACT_ARGS_1: { + case _INIT_CALL_PY_EXACT_ARGS_1_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5111,13 +9827,15 @@ first_non_self_local[i] = args[i]; } new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-2 - oparg] = new_frame; - stack_pointer += -1 - oparg; + _tos_cache0 = new_frame; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _INIT_CALL_PY_EXACT_ARGS_2: { + case _INIT_CALL_PY_EXACT_ARGS_2_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5136,13 +9854,15 @@ first_non_self_local[i] = args[i]; } new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-2 - oparg] = new_frame; - stack_pointer += -1 - oparg; + _tos_cache0 = new_frame; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _INIT_CALL_PY_EXACT_ARGS_3: { + case _INIT_CALL_PY_EXACT_ARGS_3_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5161,13 +9881,15 @@ first_non_self_local[i] = args[i]; } new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-2 - oparg] = new_frame; - stack_pointer += -1 - oparg; + _tos_cache0 = new_frame; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _INIT_CALL_PY_EXACT_ARGS_4: { + case _INIT_CALL_PY_EXACT_ARGS_4_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5186,13 +9908,15 @@ first_non_self_local[i] = args[i]; } new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-2 - oparg] = new_frame; - stack_pointer += -1 - oparg; + _tos_cache0 = new_frame; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _INIT_CALL_PY_EXACT_ARGS: { + case _INIT_CALL_PY_EXACT_ARGS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5210,19 +9934,20 @@ first_non_self_local[i] = args[i]; } new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-2 - oparg] = new_frame; - stack_pointer += -1 - oparg; + _tos_cache0 = new_frame; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); break; } - case _PUSH_FRAME: { + case _PUSH_FRAME_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef new_frame; - new_frame = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + new_frame = _stack_item_0; assert(tstate->interp->eval_frame == NULL); _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); assert(temp->previous == frame || temp->previous->previous == frame); CALL_STAT_INC(inlined_py_calls); @@ -5234,7 +9959,25 @@ break; } - case _GUARD_NOS_NULL: { + case _GUARD_NOS_NULL_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef null; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null = _stack_item_0; + if (!PyStackRef_IsNull(null)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = null; + break; + } + + case _GUARD_NOS_NULL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; null = stack_pointer[-2]; if (!PyStackRef_IsNull(null)) { @@ -5244,7 +9987,58 @@ break; } - case _GUARD_NOS_NOT_NULL: { + case _GUARD_NOS_NULL_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef null; + _PyStackRef _stack_item_0 = _tos_cache0; + null = stack_pointer[-1]; + if (!PyStackRef_IsNull(null)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_NULL_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef null; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + null = _stack_item_1; + if (!PyStackRef_IsNull(null)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = null; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_NOT_NULL_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + nos = _stack_item_0; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = nos; + break; + } + + case _GUARD_NOS_NOT_NULL_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -5255,74 +10049,150 @@ break; } - case _GUARD_THIRD_NULL: { + case _GUARD_NOS_NOT_NULL_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + nos = stack_pointer[-1]; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_NOS_NOT_NULL_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef nos; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + nos = _stack_item_1; + PyObject *o = PyStackRef_AsPyObjectBorrow(nos); + if (o == NULL) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = nos; + _tos_cache0 = _stack_item_0; + break; + } + + case _GUARD_THIRD_NULL_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef null; - null = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + null = _stack_item_0; if (!PyStackRef_IsNull(null)) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = null; break; } - case _GUARD_CALLABLE_TYPE_1: { + case _GUARD_CALLABLE_TYPE_1_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; - callable = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (callable_o != (PyObject *)&PyType_Type) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = callable; break; } - case _CALL_TYPE_1: { + case _CALL_TYPE_1_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + arg = _stack_item_2; + null = _stack_item_1; + callable = _stack_item_0; PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); (void)callable; (void)null; STAT_INC(CALL, hit); res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o)); - stack_pointer[-3] = res; - stack_pointer += -2; + stack_pointer[0] = res; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _GUARD_CALLABLE_STR_1: { + case _GUARD_CALLABLE_STR_1_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; - callable = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (callable_o != (PyObject *)&PyUnicode_Type) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = callable; break; } - case _CALL_STR_1: { + case _CALL_STR_1_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + arg = _stack_item_2; + null = _stack_item_1; + callable = _stack_item_0; PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); STAT_INC(CALL, hit); + stack_pointer[0] = callable; + stack_pointer[1] = null; + stack_pointer[2] = arg; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Str(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5337,35 +10207,51 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _GUARD_CALLABLE_TUPLE_1: { + case _GUARD_CALLABLE_TUPLE_1_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; - callable = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (callable_o != (PyObject *)&PyTuple_Type) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = callable; break; } - case _CALL_TUPLE_1: { + case _CALL_TUPLE_1_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + arg = _stack_item_2; + null = _stack_item_1; + callable = _stack_item_0; PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); STAT_INC(CALL, hit); + stack_pointer[0] = callable; + stack_pointer[1] = null; + stack_pointer[2] = arg; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PySequence_Tuple(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5380,13 +10266,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CHECK_AND_ALLOCATE_OBJECT: { + case _CHECK_AND_ALLOCATE_OBJECT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -5435,7 +10321,9 @@ break; } - case _CREATE_INIT_FRAME: { + case _CREATE_INIT_FRAME_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self; _PyStackRef init; @@ -5466,16 +10354,20 @@ frame->return_offset = 1 + INLINE_CACHE_ENTRIES_CALL; tstate->py_recursion_remaining--; init_frame = PyStackRef_Wrap(temp); - stack_pointer[0] = init_frame; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = init_frame; break; } - case _EXIT_INIT_CHECK: { + case _EXIT_INIT_CHECK_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef should_be_none; - should_be_none = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + should_be_none = _stack_item_0; if (!PyStackRef_IsNone(should_be_none)) { + stack_pointer[0] = should_be_none; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyErr_Format(PyExc_TypeError, "__init__() should return None, not '%.200s'", @@ -5483,12 +10375,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); JUMP_TO_ERROR(); } - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _CALL_BUILTIN_CLASS: { + case _CALL_BUILTIN_CLASS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5562,13 +10454,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CALL_BUILTIN_O: { + case _CALL_BUILTIN_O_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5619,13 +10511,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CALL_BUILTIN_FAST: { + case _CALL_BUILTIN_FAST_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5703,13 +10595,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CALL_BUILTIN_FAST_WITH_KEYWORDS: { + case _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -5787,35 +10679,51 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _GUARD_CALLABLE_LEN: { + case _GUARD_CALLABLE_LEN_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; - callable = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.len) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = callable; break; } - case _CALL_LEN: { + case _CALL_LEN_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; _PyStackRef res; - arg = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + arg = _stack_item_2; + null = _stack_item_1; + callable = _stack_item_0; (void)null; STAT_INC(CALL, hit); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); + stack_pointer[0] = callable; + stack_pointer[1] = null; + stack_pointer[2] = arg; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); Py_ssize_t len_i = PyObject_Length(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5838,37 +10746,53 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _GUARD_CALLABLE_ISINSTANCE: { + case _GUARD_CALLABLE_ISINSTANCE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; - callable = stack_pointer[-4]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + callable = stack_pointer[-1]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.isinstance) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _CALL_ISINSTANCE: { + case _CALL_ISINSTANCE_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef cls; _PyStackRef instance; _PyStackRef null; _PyStackRef callable; _PyStackRef res; - cls = stack_pointer[-1]; - instance = stack_pointer[-2]; - null = stack_pointer[-3]; - callable = stack_pointer[-4]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + cls = _stack_item_2; + instance = _stack_item_1; + null = _stack_item_0; + callable = stack_pointer[-1]; STAT_INC(CALL, hit); PyObject *inst_o = PyStackRef_AsPyObjectBorrow(instance); PyObject *cls_o = PyStackRef_AsPyObjectBorrow(cls); + stack_pointer[0] = null; + stack_pointer[1] = instance; + stack_pointer[2] = cls; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int retval = PyObject_IsInstance(inst_o, cls_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5893,32 +10817,43 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = retval ? PyStackRef_True : PyStackRef_False; assert((!PyStackRef_IsNull(res)) ^ (_PyErr_Occurred(tstate) != NULL)); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _GUARD_CALLABLE_LIST_APPEND: { + case _GUARD_CALLABLE_LIST_APPEND_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; - callable = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.list_append) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = callable; break; } - case _CALL_LIST_APPEND: { + case _CALL_LIST_APPEND_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = stack_pointer[-1]; - self = stack_pointer[-2]; - callable = stack_pointer[-3]; + arg = _stack_item_2; + self = _stack_item_1; + callable = _stack_item_0; assert(oparg == 1); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); if (!PyList_CheckExact(self_o)) { @@ -5932,7 +10867,8 @@ STAT_INC(CALL, hit); int err = _PyList_AppendTakeRef((PyListObject *)self_o, PyStackRef_AsPyObjectSteal(arg)); UNLOCK_OBJECT(self_o); - stack_pointer += -2; + stack_pointer[0] = callable; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); @@ -5953,7 +10889,9 @@ break; } - case _CALL_METHOD_DESCRIPTOR_O: { + case _CALL_METHOD_DESCRIPTOR_O_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -6025,13 +10963,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: { + case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -6121,13 +11059,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CALL_METHOD_DESCRIPTOR_NOARGS: { + case _CALL_METHOD_DESCRIPTOR_NOARGS_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -6186,13 +11124,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _CALL_METHOD_DESCRIPTOR_FAST: { + case _CALL_METHOD_DESCRIPTOR_FAST_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -6280,15 +11218,15 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } /* _MONITOR_CALL_KW is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _MAYBE_EXPAND_METHOD_KW: { + case _MAYBE_EXPAND_METHOD_KW_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -6314,17 +11252,20 @@ /* _DO_CALL_KW is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _PY_FRAME_KW: { + case _PY_FRAME_KW_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef kwnames; _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; _PyStackRef new_frame; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - kwnames = stack_pointer[-1]; - args = &stack_pointer[-1 - oparg]; - self_or_null = stack_pointer[-2 - oparg]; - callable = stack_pointer[-3 - oparg]; + kwnames = _stack_item_0; + args = &stack_pointer[-oparg]; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; @@ -6337,6 +11278,9 @@ assert(Py_TYPE(callable_o) == &PyFunction_Type); int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); + stack_pointer[0] = kwnames; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, callable, locals, @@ -6354,16 +11298,17 @@ JUMP_TO_ERROR(); } new_frame = PyStackRef_Wrap(temp); - stack_pointer[0] = new_frame; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = new_frame; break; } - case _CHECK_FUNCTION_VERSION_KW: { + case _CHECK_FUNCTION_VERSION_KW_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef callable; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - callable = stack_pointer[-3 - oparg]; + callable = stack_pointer[-2 - oparg]; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { @@ -6375,15 +11320,19 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache0 = _stack_item_0; break; } - case _CHECK_METHOD_VERSION_KW: { + case _CHECK_METHOD_VERSION_KW_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef callable; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - null = stack_pointer[-2 - oparg]; - callable = stack_pointer[-3 - oparg]; + null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { @@ -6403,10 +11352,13 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache0 = _stack_item_0; break; } - case _EXPAND_METHOD_KW: { + case _EXPAND_METHOD_KW_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -6427,10 +11379,13 @@ break; } - case _CHECK_IS_NOT_PY_CALLABLE_KW: { + case _CHECK_IS_NOT_PY_CALLABLE_KW_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef callable; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - callable = stack_pointer[-3 - oparg]; + callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); @@ -6440,20 +11395,24 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache0 = _stack_item_0; break; } - case _CALL_KW_NON_PY: { + case _CALL_KW_NON_PY_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef kwnames; _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - kwnames = stack_pointer[-1]; - args = &stack_pointer[-1 - oparg]; - self_or_null = stack_pointer[-2 - oparg]; - callable = stack_pointer[-3 - oparg]; + kwnames = _stack_item_0; + args = &stack_pointer[-oparg]; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -6469,7 +11428,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - stack_pointer[-1] = kwnames; + stack_pointer[0] = kwnames; PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -6478,19 +11437,22 @@ } tmp = self_or_null; self_or_null = PyStackRef_NULL; - stack_pointer[-2 - oparg] = self_or_null; + stack_pointer[-1 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); tmp = callable; callable = PyStackRef_NULL; - stack_pointer[-3 - oparg] = callable; + stack_pointer[-2 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -3 - oparg; + stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); JUMP_TO_ERROR(); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o); + stack_pointer[0] = kwnames; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -6526,13 +11488,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _MAKE_CALLARGS_A_TUPLE: { + case _MAKE_CALLARGS_A_TUPLE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef callargs; _PyStackRef func; callargs = stack_pointer[-2]; @@ -6564,11 +11526,17 @@ /* _DO_CALL_FUNCTION_EX is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _MAKE_FUNCTION: { + case _MAKE_FUNCTION_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef codeobj_st; _PyStackRef func; - codeobj_st = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + codeobj_st = _stack_item_0; PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st); + stack_pointer[0] = codeobj_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); @@ -6584,19 +11552,21 @@ _PyFunction_SetVersion( func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); - stack_pointer[0] = func; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = func; break; } - case _SET_FUNCTION_ATTRIBUTE: { + case _SET_FUNCTION_ATTRIBUTE_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - func_in = stack_pointer[-1]; - attr_st = stack_pointer[-2]; + func_in = _stack_item_1; + attr_st = _stack_item_0; PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); func_out = func_in; @@ -6606,13 +11576,62 @@ PyObject **ptr = (PyObject **)(((char *)func) + offset); assert(*ptr == NULL); *ptr = attr; - stack_pointer[-2] = func_out; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = func_out; + break; + } + + case _SET_FUNCTION_ATTRIBUTE_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef func_in; + _PyStackRef attr_st; + _PyStackRef func_out; + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + func_in = _stack_item_0; + attr_st = stack_pointer[-1]; + PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); + PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); + func_out = func_in; + assert(PyFunction_Check(func)); + size_t offset = _Py_FunctionAttributeOffsets[oparg]; + assert(offset != 0); + PyObject **ptr = (PyObject **)(((char *)func) + offset); + assert(*ptr == NULL); + *ptr = attr; + stack_pointer[-1] = func_out; + break; + } + + case _SET_FUNCTION_ATTRIBUTE_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef func_in; + _PyStackRef attr_st; + _PyStackRef func_out; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + oparg = CURRENT_OPARG(); + func_in = _stack_item_2; + attr_st = _stack_item_1; + PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); + PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); + func_out = func_in; + assert(PyFunction_Check(func)); + size_t offset = _Py_FunctionAttributeOffsets[oparg]; + assert(offset != 0); + PyObject **ptr = (PyObject **)(((char *)func) + offset); + assert(*ptr == NULL); + *ptr = attr; + _tos_cache1 = func_out; + _tos_cache0 = _stack_item_0; break; } - case _RETURN_GENERATOR: { + case _RETURN_GENERATOR_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); @@ -6638,13 +11657,13 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _BUILD_SLICE: { + case _BUILD_SLICE_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef slice; oparg = CURRENT_OPARG(); @@ -6667,20 +11686,24 @@ JUMP_TO_ERROR(); } slice = PyStackRef_FromPyObjectStealMortal(slice_o); - stack_pointer[0] = slice; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = slice; break; } - case _CONVERT_VALUE: { + case _CONVERT_VALUE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef result; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - value = stack_pointer[-1]; + value = _stack_item_0; conversion_func conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = _PyEval_ConversionFuncs[oparg]; + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *result_o = conv_fn(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6693,18 +11716,22 @@ JUMP_TO_ERROR(); } result = PyStackRef_FromPyObjectSteal(result_o); - stack_pointer[0] = result; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = result; break; } - case _FORMAT_SIMPLE: { + case _FORMAT_SIMPLE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; - value = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + stack_pointer[0] = value; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(value_o, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6720,20 +11747,25 @@ } else { res = value; - stack_pointer += -1; } - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _FORMAT_WITH_SPEC: { + case _FORMAT_WITH_SPEC_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef fmt_spec; _PyStackRef value; _PyStackRef res; - fmt_spec = stack_pointer[-1]; - value = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + fmt_spec = _stack_item_1; + value = _stack_item_0; + stack_pointer[0] = value; + stack_pointer[1] = fmt_spec; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec)); _PyStackRef tmp = fmt_spec; @@ -6751,35 +11783,41 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; break; } - case _COPY: { + case _COPY_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef bottom; _PyStackRef top; oparg = CURRENT_OPARG(); bottom = stack_pointer[-1 - (oparg-1)]; assert(oparg > 0); top = PyStackRef_DUP(bottom); - stack_pointer[0] = top; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = top; break; } - case _BINARY_OP: { + case _BINARY_OP_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef rhs; _PyStackRef lhs; _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - rhs = stack_pointer[-1]; - lhs = stack_pointer[-2]; + rhs = _stack_item_1; + lhs = _stack_item_0; PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs); PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs); assert(_PyEval_BinaryOps[oparg]); + stack_pointer[0] = lhs; + stack_pointer[1] = rhs; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_BinaryOps[oparg](lhs_o, rhs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6799,21 +11837,27 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _SWAP: { + case _SWAP_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef top; _PyStackRef bottom; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - top = stack_pointer[-1]; - bottom = stack_pointer[-2 - (oparg-2)]; + top = _stack_item_0; + bottom = stack_pointer[-1 - (oparg-2)]; _PyStackRef temp = bottom; bottom = top; top = temp; assert(oparg >= 2); - stack_pointer[-2 - (oparg-2)] = bottom; - stack_pointer[-1] = top; + _tos_cache0 = top; + stack_pointer[-1 - (oparg-2)] = bottom; break; } @@ -6835,12 +11879,13 @@ /* _INSTRUMENTED_POP_JUMP_IF_NOT_NONE is not a viable micro-op for tier 2 because it is instrumented */ - case _GUARD_IS_TRUE_POP: { + case _GUARD_IS_TRUE_POP_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; - flag = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + flag = _stack_item_0; int is_true = PyStackRef_IsTrue(flag); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); if (!is_true) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -6848,12 +11893,13 @@ break; } - case _GUARD_IS_FALSE_POP: { + case _GUARD_IS_FALSE_POP_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; - flag = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + flag = _stack_item_0; int is_false = PyStackRef_IsFalse(flag); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); if (!is_false) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); @@ -6861,13 +11907,14 @@ break; } - case _GUARD_IS_NONE_POP: { + case _GUARD_IS_NONE_POP_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef val; - val = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + val = _stack_item_0; int is_none = PyStackRef_IsNone(val); if (!is_none) { - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6876,64 +11923,436 @@ JUMP_TO_JUMP_TARGET(); } } - stack_pointer += -1; + break; + } + + case _GUARD_IS_NOT_NONE_POP_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef val; + _PyStackRef _stack_item_0 = _tos_cache0; + val = _stack_item_0; + int is_none = PyStackRef_IsNone(val); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(val); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (is_none) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _JUMP_TO_TOP_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_JUMP_TARGET(); + break; + } + + case _SET_IP_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); + frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; + break; + } + + case _SET_IP_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); + frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; + _tos_cache0 = _stack_item_0; + break; + } + + case _SET_IP_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); + frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _SET_IP_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); + frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_STACK_SPACE_OPERAND_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); + assert(framesize <= INT_MAX); + if (!_PyThreadState_HasStackSpace(tstate, framesize)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _CHECK_STACK_SPACE_OPERAND_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); + assert(framesize <= INT_MAX); + if (!_PyThreadState_HasStackSpace(tstate, framesize)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_STACK_SPACE_OPERAND_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); + assert(framesize <= INT_MAX); + if (!_PyThreadState_HasStackSpace(tstate, framesize)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_STACK_SPACE_OPERAND_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); + assert(framesize <= INT_MAX); + if (!_PyThreadState_HasStackSpace(tstate, framesize)) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _SAVE_RETURN_OFFSET_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + oparg = CURRENT_OPARG(); + #if TIER_ONE + frame->return_offset = (uint16_t)(next_instr - this_instr); + #endif + #if TIER_TWO + frame->return_offset = oparg; + #endif + break; + } + + case _SAVE_RETURN_OFFSET_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + #if TIER_ONE + frame->return_offset = (uint16_t)(next_instr - this_instr); + #endif + #if TIER_TWO + frame->return_offset = oparg; + #endif + _tos_cache0 = _stack_item_0; + break; + } + + case _SAVE_RETURN_OFFSET_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + #if TIER_ONE + frame->return_offset = (uint16_t)(next_instr - this_instr); + #endif + #if TIER_TWO + frame->return_offset = oparg; + #endif + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _SAVE_RETURN_OFFSET_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + oparg = CURRENT_OPARG(); + #if TIER_ONE + frame->return_offset = (uint16_t)(next_instr - this_instr); + #endif + #if TIER_TWO + frame->return_offset = oparg; + #endif + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _EXIT_TRACE_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); + _PyExitData *exit = (_PyExitData *)exit_p; + PyCodeObject *code = _PyFrame_GetCode(frame); + _Py_CODEUNIT *target = _PyFrame_GetBytecode(frame) + exit->target; + #if defined(Py_DEBUG) && !defined(_Py_JIT) + OPT_HIST(trace_uop_execution_counter, trace_run_length_hist); + if (frame->lltrace >= 2) { + _PyFrame_SetStackPointer(frame, stack_pointer); + printf("SIDE EXIT: [UOp "); + _PyUOpPrint(&next_uop[-1]); + printf(", exit %lu, temp %d, target %d -> %s]\n", + exit - current_executor->exits, exit->temperature.value_and_backoff, + (int)(target - _PyFrame_GetBytecode(frame)), + _PyOpcode_OpName[target->op.code]); + stack_pointer = _PyFrame_GetStackPointer(frame); + } + #endif + if (exit->executor && !exit->executor->vm_data.valid) { + exit->temperature = initial_temperature_backoff_counter(); + _PyFrame_SetStackPointer(frame, stack_pointer); + Py_CLEAR(exit->executor); + stack_pointer = _PyFrame_GetStackPointer(frame); + } + if (exit->executor == NULL) { + _Py_BackoffCounter temperature = exit->temperature; + if (!backoff_counter_triggers(temperature)) { + exit->temperature = advance_backoff_counter(temperature); + GOTO_TIER_ONE(target); + Py_UNREACHABLE();} + _PyExecutorObject *executor; + if (target->op.code == ENTER_EXECUTOR) { + executor = code->co_executors->executors[target->op.arg]; + Py_INCREF(executor); + } + else { + int chain_depth = current_executor->vm_data.chain_depth + 1; + _PyFrame_SetStackPointer(frame, stack_pointer); + int optimized = _PyOptimizer_Optimize(frame, target, &executor, chain_depth); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (optimized <= 0) { + exit->temperature = restart_backoff_counter(temperature); + GOTO_TIER_ONE(optimized < 0 ? NULL : target); + Py_UNREACHABLE();} + exit->temperature = initial_temperature_backoff_counter(); + } + exit->executor = executor; + } + GOTO_TIER_TWO(exit->executor); + break; + } + + case _EXIT_TRACE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); + _PyExitData *exit = (_PyExitData *)exit_p; + PyCodeObject *code = _PyFrame_GetCode(frame); + _Py_CODEUNIT *target = _PyFrame_GetBytecode(frame) + exit->target; + #if defined(Py_DEBUG) && !defined(_Py_JIT) + OPT_HIST(trace_uop_execution_counter, trace_run_length_hist); + if (frame->lltrace >= 2) { + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + printf("SIDE EXIT: [UOp "); + _PyUOpPrint(&next_uop[-1]); + printf(", exit %lu, temp %d, target %d -> %s]\n", + exit - current_executor->exits, exit->temperature.value_and_backoff, + (int)(target - _PyFrame_GetBytecode(frame)), + _PyOpcode_OpName[target->op.code]); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + } + #endif + if (exit->executor && !exit->executor->vm_data.valid) { + exit->temperature = initial_temperature_backoff_counter(); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + Py_CLEAR(exit->executor); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + } + if (exit->executor == NULL) { + _Py_BackoffCounter temperature = exit->temperature; + if (!backoff_counter_triggers(temperature)) { + exit->temperature = advance_backoff_counter(temperature); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + GOTO_TIER_ONE(target); + Py_UNREACHABLE();} + _PyExecutorObject *executor; + if (target->op.code == ENTER_EXECUTOR) { + executor = code->co_executors->executors[target->op.arg]; + Py_INCREF(executor); + } + else { + int chain_depth = current_executor->vm_data.chain_depth + 1; + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + int optimized = _PyOptimizer_Optimize(frame, target, &executor, chain_depth); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (optimized <= 0) { + exit->temperature = restart_backoff_counter(temperature); + GOTO_TIER_ONE(optimized < 0 ? NULL : target); + Py_UNREACHABLE();} + exit->temperature = initial_temperature_backoff_counter(); + stack_pointer += -1; + } + exit->executor = executor; + } + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _GUARD_IS_NOT_NONE_POP: { - _PyStackRef val; - val = stack_pointer[-1]; - int is_none = PyStackRef_IsNone(val); + GOTO_TIER_TWO(exit->executor); + _tos_cache0 = stack_pointer[-1]; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(val); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (is_none) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - break; - } - - case _JUMP_TO_TOP: { - JUMP_TO_JUMP_TARGET(); - break; - } - - case _SET_IP: { - PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); - frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; break; } - case _CHECK_STACK_SPACE_OPERAND: { - uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); - assert(framesize <= INT_MAX); - if (!_PyThreadState_HasStackSpace(tstate, framesize)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); + case _EXIT_TRACE_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); + _PyExitData *exit = (_PyExitData *)exit_p; + PyCodeObject *code = _PyFrame_GetCode(frame); + _Py_CODEUNIT *target = _PyFrame_GetBytecode(frame) + exit->target; + #if defined(Py_DEBUG) && !defined(_Py_JIT) + OPT_HIST(trace_uop_execution_counter, trace_run_length_hist); + if (frame->lltrace >= 2) { + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + printf("SIDE EXIT: [UOp "); + _PyUOpPrint(&next_uop[-1]); + printf(", exit %lu, temp %d, target %d -> %s]\n", + exit - current_executor->exits, exit->temperature.value_and_backoff, + (int)(target - _PyFrame_GetBytecode(frame)), + _PyOpcode_OpName[target->op.code]); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -2; } - break; - } - - case _SAVE_RETURN_OFFSET: { - oparg = CURRENT_OPARG(); - #if TIER_ONE - frame->return_offset = (uint16_t)(next_instr - this_instr); - #endif - #if TIER_TWO - frame->return_offset = oparg; #endif + if (exit->executor && !exit->executor->vm_data.valid) { + exit->temperature = initial_temperature_backoff_counter(); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + Py_CLEAR(exit->executor); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -2; + } + if (exit->executor == NULL) { + _Py_BackoffCounter temperature = exit->temperature; + if (!backoff_counter_triggers(temperature)) { + exit->temperature = advance_backoff_counter(temperature); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + GOTO_TIER_ONE(target); + Py_UNREACHABLE();} + _PyExecutorObject *executor; + if (target->op.code == ENTER_EXECUTOR) { + executor = code->co_executors->executors[target->op.arg]; + Py_INCREF(executor); + } + else { + int chain_depth = current_executor->vm_data.chain_depth + 1; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + int optimized = _PyOptimizer_Optimize(frame, target, &executor, chain_depth); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (optimized <= 0) { + exit->temperature = restart_backoff_counter(temperature); + GOTO_TIER_ONE(optimized < 0 ? NULL : target); + Py_UNREACHABLE();} + exit->temperature = initial_temperature_backoff_counter(); + stack_pointer += -2; + } + exit->executor = executor; + } + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + GOTO_TIER_TWO(exit->executor); + _tos_cache1 = stack_pointer[-1]; + _tos_cache0 = stack_pointer[-2]; + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); break; } - case _EXIT_TRACE: { + case _EXIT_TRACE_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); _PyExitData *exit = (_PyExitData *)exit_p; PyCodeObject *code = _PyFrame_GetCode(frame); @@ -6941,6 +12360,11 @@ #if defined(Py_DEBUG) && !defined(_Py_JIT) OPT_HIST(trace_uop_execution_counter, trace_run_length_hist); if (frame->lltrace >= 2) { + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); printf("SIDE EXIT: [UOp "); _PyUOpPrint(&next_uop[-1]); @@ -6949,20 +12373,32 @@ (int)(target - _PyFrame_GetBytecode(frame)), _PyOpcode_OpName[target->op.code]); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -3; } #endif if (exit->executor && !exit->executor->vm_data.valid) { exit->temperature = initial_temperature_backoff_counter(); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); Py_CLEAR(exit->executor); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -3; } if (exit->executor == NULL) { _Py_BackoffCounter temperature = exit->temperature; if (!backoff_counter_triggers(temperature)) { exit->temperature = advance_backoff_counter(temperature); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_ONE(target); - } + Py_UNREACHABLE();} _PyExecutorObject *executor; if (target->op.code == ENTER_EXECUTOR) { executor = code->co_executors->executors[target->op.arg]; @@ -6970,88 +12406,208 @@ } else { int chain_depth = current_executor->vm_data.chain_depth + 1; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int optimized = _PyOptimizer_Optimize(frame, target, &executor, chain_depth); stack_pointer = _PyFrame_GetStackPointer(frame); if (optimized <= 0) { exit->temperature = restart_backoff_counter(temperature); GOTO_TIER_ONE(optimized < 0 ? NULL : target); - } + Py_UNREACHABLE();} exit->temperature = initial_temperature_backoff_counter(); + stack_pointer += -3; } exit->executor = executor; } + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); + _tos_cache2 = stack_pointer[-1]; + _tos_cache1 = stack_pointer[-2]; + _tos_cache0 = stack_pointer[-3]; + stack_pointer += -3; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _CHECK_VALIDITY_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + if (!current_executor->vm_data.valid) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _CHECK_VALIDITY_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + if (!current_executor->vm_data.valid) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_VALIDITY_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + if (!current_executor->vm_data.valid) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _CHECK_VALIDITY: { + case _CHECK_VALIDITY_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; if (!current_executor->vm_data.valid) { UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _LOAD_CONST_INLINE: { + case _LOAD_CONST_INLINE_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectNew(ptr); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; + break; + } + + case _LOAD_CONST_INLINE_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + value = PyStackRef_FromPyObjectNew(ptr); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_CONST_INLINE_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + value = PyStackRef_FromPyObjectNew(ptr); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _POP_TOP_LOAD_CONST_INLINE: { + case _POP_TOP_LOAD_CONST_INLINE_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef value; - pop = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + pop = _stack_item_0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectNew(ptr); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _LOAD_CONST_INLINE_BORROW: { + case _LOAD_CONST_INLINE_BORROW_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectBorrow(ptr); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; + break; + } + + case _LOAD_CONST_INLINE_BORROW_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + value = PyStackRef_FromPyObjectBorrow(ptr); + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _LOAD_CONST_INLINE_BORROW_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + value = PyStackRef_FromPyObjectBorrow(ptr); + _tos_cache2 = value; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _POP_CALL: { + case _POP_CALL_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; - null = stack_pointer[-1]; - callable = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null = _stack_item_1; + callable = _stack_item_0; (void)null; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); break; } - case _POP_CALL_ONE: { + case _POP_CALL_ONE_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef pop; _PyStackRef null; _PyStackRef callable; - pop = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; - stack_pointer += -1; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + pop = _stack_item_2; + null = _stack_item_1; + callable = _stack_item_0; + stack_pointer[0] = callable; + stack_pointer[1] = null; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); @@ -7065,16 +12621,23 @@ break; } - case _POP_CALL_TWO: { + case _POP_CALL_TWO_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef pop2; _PyStackRef pop1; _PyStackRef null; _PyStackRef callable; - pop2 = stack_pointer[-1]; - pop1 = stack_pointer[-2]; - null = stack_pointer[-3]; - callable = stack_pointer[-4]; - stack_pointer += -1; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + pop2 = _stack_item_2; + pop1 = _stack_item_1; + null = _stack_item_0; + callable = stack_pointer[-1]; + stack_pointer[0] = null; + stack_pointer[1] = pop1; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop2); @@ -7093,31 +12656,35 @@ break; } - case _POP_TOP_LOAD_CONST_INLINE_BORROW: { + case _POP_TOP_LOAD_CONST_INLINE_BORROW_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef value; - pop = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + pop = _stack_item_0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _POP_TWO_LOAD_CONST_INLINE_BORROW: { + case _POP_TWO_LOAD_CONST_INLINE_BORROW_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop2; _PyStackRef pop1; _PyStackRef value; - pop2 = stack_pointer[-1]; - pop1 = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + pop2 = _stack_item_1; + pop1 = _stack_item_0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); - stack_pointer += -1; + stack_pointer[0] = pop1; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop2); @@ -7128,42 +12695,47 @@ PyStackRef_CLOSE(pop1); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _POP_CALL_LOAD_CONST_INLINE_BORROW: { + case _POP_CALL_LOAD_CONST_INLINE_BORROW_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef callable; _PyStackRef value; - null = stack_pointer[-1]; - callable = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + null = _stack_item_1; + callable = _stack_item_0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); (void)null; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = value; break; } - case _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW: { + case _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef null; _PyStackRef callable; _PyStackRef value; - pop = stack_pointer[-1]; - null = stack_pointer[-2]; - callable = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + pop = _stack_item_2; + null = _stack_item_1; + callable = _stack_item_0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); - stack_pointer += -1; + stack_pointer[0] = callable; + stack_pointer[1] = null; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(pop); @@ -7175,77 +12747,198 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); - stack_pointer[0] = value; - stack_pointer += 1; + _tos_cache0 = value; + break; + } + + case _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef pop2; + _PyStackRef pop1; + _PyStackRef null; + _PyStackRef callable; + _PyStackRef value; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + pop2 = _stack_item_2; + pop1 = _stack_item_1; + null = _stack_item_0; + callable = stack_pointer[-1]; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + stack_pointer[0] = null; + stack_pointer[1] = pop1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(pop2); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(pop1); + stack_pointer = _PyFrame_GetStackPointer(frame); + (void)null; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyStackRef_CLOSE(callable); + stack_pointer = _PyFrame_GetStackPointer(frame); + value = PyStackRef_FromPyObjectBorrow(ptr); + _tos_cache0 = value; + break; + } + + case _LOAD_CONST_UNDER_INLINE_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef old; + _PyStackRef value; + _PyStackRef new; + _PyStackRef _stack_item_0 = _tos_cache0; + old = _stack_item_0; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + new = old; + value = PyStackRef_FromPyObjectNew(ptr); + _tos_cache1 = new; + _tos_cache0 = value; + break; + } + + case _LOAD_CONST_UNDER_INLINE_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef old; + _PyStackRef value; + _PyStackRef new; + old = stack_pointer[-1]; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + new = old; + value = PyStackRef_FromPyObjectNew(ptr); + _tos_cache0 = new; + stack_pointer[-1] = value; + break; + } + + case _LOAD_CONST_UNDER_INLINE_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef old; + _PyStackRef value; + _PyStackRef new; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + old = _stack_item_1; + PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); + new = old; + value = PyStackRef_FromPyObjectNew(ptr); + _tos_cache2 = new; + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; break; } - case _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW: { - _PyStackRef pop2; - _PyStackRef pop1; - _PyStackRef null; - _PyStackRef callable; + case _LOAD_CONST_UNDER_INLINE_BORROW_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef old; _PyStackRef value; - pop2 = stack_pointer[-1]; - pop1 = stack_pointer[-2]; - null = stack_pointer[-3]; - callable = stack_pointer[-4]; + _PyStackRef new; + _PyStackRef _stack_item_0 = _tos_cache0; + old = _stack_item_0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(pop2); - stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(pop1); - stack_pointer = _PyFrame_GetStackPointer(frame); - (void)null; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyStackRef_CLOSE(callable); - stack_pointer = _PyFrame_GetStackPointer(frame); + new = old; value = PyStackRef_FromPyObjectBorrow(ptr); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = new; + _tos_cache0 = value; break; } - case _LOAD_CONST_UNDER_INLINE: { + case _LOAD_CONST_UNDER_INLINE_BORROW_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef old; _PyStackRef value; _PyStackRef new; old = stack_pointer[-1]; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); new = old; - value = PyStackRef_FromPyObjectNew(ptr); + value = PyStackRef_FromPyObjectBorrow(ptr); + _tos_cache0 = new; stack_pointer[-1] = value; - stack_pointer[0] = new; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_CONST_UNDER_INLINE_BORROW: { + case _LOAD_CONST_UNDER_INLINE_BORROW_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); _PyStackRef old; _PyStackRef value; _PyStackRef new; - old = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + old = _stack_item_1; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); new = old; value = PyStackRef_FromPyObjectBorrow(ptr); - stack_pointer[-1] = value; - stack_pointer[0] = new; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = new; + _tos_cache1 = value; + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_FUNCTION_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); + assert(PyStackRef_FunctionCheck(frame->f_funcobj)); + PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + break; + } + + case _CHECK_FUNCTION_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); + assert(PyStackRef_FunctionCheck(frame->f_funcobj)); + PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _CHECK_FUNCTION_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); + assert(PyStackRef_FunctionCheck(frame->f_funcobj)); + PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); + if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _CHECK_FUNCTION: { + case _CHECK_FUNCTION_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); @@ -7253,10 +12946,15 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _START_EXECUTOR: { + case _START_EXECUTOR_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); PyObject *executor = (PyObject *)CURRENT_OPERAND0(); #ifndef _Py_JIT current_executor = (_PyExecutorObject*)executor; @@ -7265,35 +12963,285 @@ break; } - case _MAKE_WARM: { + case _MAKE_WARM_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + current_executor->vm_data.warm = true; + if (--tstate->interp->trace_run_counter == 0) { + _Py_set_eval_breaker_bit(tstate, _PY_EVAL_JIT_INVALIDATE_COLD_BIT); + } + break; + } + + case _MAKE_WARM_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + current_executor->vm_data.warm = true; + if (--tstate->interp->trace_run_counter == 0) { + _Py_set_eval_breaker_bit(tstate, _PY_EVAL_JIT_INVALIDATE_COLD_BIT); + } + _tos_cache0 = _stack_item_0; + break; + } + + case _MAKE_WARM_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; current_executor->vm_data.warm = true; if (--tstate->interp->trace_run_counter == 0) { _Py_set_eval_breaker_bit(tstate, _PY_EVAL_JIT_INVALIDATE_COLD_BIT); } + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _MAKE_WARM_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + current_executor->vm_data.warm = true; + if (--tstate->interp->trace_run_counter == 0) { + _Py_set_eval_breaker_bit(tstate, _PY_EVAL_JIT_INVALIDATE_COLD_BIT); + } + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _FATAL_ERROR_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + assert(0); + Py_FatalError("Fatal error uop executed."); + break; + } + + case _FATAL_ERROR_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + assert(0); + Py_FatalError("Fatal error uop executed."); + _tos_cache0 = _stack_item_0; + break; + } + + case _FATAL_ERROR_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + assert(0); + Py_FatalError("Fatal error uop executed."); + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _FATAL_ERROR: { + case _FATAL_ERROR_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; assert(0); Py_FatalError("Fatal error uop executed."); + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _DEOPT_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); + break; + } + + case _DEOPT_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); + _tos_cache0 = _stack_item_0; + break; + } + + case _DEOPT_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _DEOPT: { + case _DEOPT_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _ERROR_POP_N_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + oparg = CURRENT_OPARG(); + uint32_t target = (uint32_t)CURRENT_OPERAND0(); + assert(oparg == 0); + frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; + GOTO_TIER_ONE(NULL); + break; + } + + case _ERROR_POP_N_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + oparg = CURRENT_OPARG(); + uint32_t target = (uint32_t)CURRENT_OPERAND0(); + assert(oparg == 0); + frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + GOTO_TIER_ONE(NULL); + _tos_cache0 = stack_pointer[-1]; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _ERROR_POP_N_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + oparg = CURRENT_OPARG(); + uint32_t target = (uint32_t)CURRENT_OPERAND0(); + assert(oparg == 0); + frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + GOTO_TIER_ONE(NULL); + _tos_cache1 = stack_pointer[-1]; + _tos_cache0 = stack_pointer[-2]; + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); break; } - case _ERROR_POP_N: { + case _ERROR_POP_N_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); uint32_t target = (uint32_t)CURRENT_OPERAND0(); assert(oparg == 0); frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_ONE(NULL); + _tos_cache2 = stack_pointer[-1]; + _tos_cache1 = stack_pointer[-2]; + _tos_cache0 = stack_pointer[-3]; + stack_pointer += -3; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _TIER2_RESUME_CHECK_r00: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(0); + #if defined(__EMSCRIPTEN__) + if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; + #endif + uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); + if (eval_breaker & _PY_EVAL_EVENTS_MASK) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); + break; + } + + case _TIER2_RESUME_CHECK_r11: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + #if defined(__EMSCRIPTEN__) + if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; + #endif + uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); + if (eval_breaker & _PY_EVAL_EVENTS_MASK) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); + _tos_cache0 = _stack_item_0; + break; + } + + case _TIER2_RESUME_CHECK_r22: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + #if defined(__EMSCRIPTEN__) + if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; + #endif + uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); + if (eval_breaker & _PY_EVAL_EVENTS_MASK) { + UOP_STAT_INC(uopcode, miss); + JUMP_TO_JUMP_TARGET(); + } + assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; break; } - case _TIER2_RESUME_CHECK: { + case _TIER2_RESUME_CHECK_r33: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { UOP_STAT_INC(uopcode, miss); @@ -7307,6 +13255,151 @@ JUMP_TO_JUMP_TARGET(); } assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); + _tos_cache2 = _stack_item_2; + _tos_cache1 = _stack_item_1; + _tos_cache0 = _stack_item_0; + break; + } + + case _SPILL_OR_RELOAD_r01: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(1); + _tos_cache0 = stack_pointer[-1]; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r02: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(2); + _tos_cache1 = stack_pointer[-1]; + _tos_cache0 = stack_pointer[-2]; + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r03: { + assert(current_cached_values == 0); + SET_CURRENT_CACHED_VALUES(3); + _tos_cache2 = stack_pointer[-1]; + _tos_cache1 = stack_pointer[-2]; + _tos_cache0 = stack_pointer[-3]; + stack_pointer += -3; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r10: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef _stack_item_0 = _tos_cache0; + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r12: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _tos_cache1 = _stack_item_0; + _tos_cache0 = stack_pointer[-1]; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r13: { + assert(current_cached_values == 1); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _tos_cache2 = _stack_item_0; + _tos_cache1 = stack_pointer[-1]; + _tos_cache0 = stack_pointer[-2]; + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r20: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r21: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _tos_cache0 = _stack_item_1; + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r23: { + assert(current_cached_values == 2); + SET_CURRENT_CACHED_VALUES(3); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _tos_cache2 = _stack_item_1; + _tos_cache1 = _stack_item_0; + _tos_cache0 = stack_pointer[-1]; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r30: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r31: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(1); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + _tos_cache0 = _stack_item_2; + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _SPILL_OR_RELOAD_r32: { + assert(current_cached_values == 3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + _tos_cache1 = _stack_item_2; + _tos_cache0 = _stack_item_1; + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } diff --git a/Python/optimizer.c b/Python/optimizer.c index dde3dd8ebe745a..9b356e8a3da248 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -277,7 +277,7 @@ uop_dealloc(PyObject *op) { const char * _PyUOpName(int index) { - if (index < 0 || index > MAX_UOP_ID) { + if (index < 0 || index > MAX_UOP_REGS_ID) { return NULL; } return _PyOpcode_uop_name[index]; @@ -995,17 +995,40 @@ count_exits(_PyUOpInstruction *buffer, int length) { int exit_count = 0; for (int i = 0; i < length; i++) { - int opcode = buffer[i].opcode; - if (opcode == _EXIT_TRACE) { + uint16_t base_opcode = _PyUop_Uncached[buffer[i].opcode]; + if (base_opcode == _EXIT_TRACE) { exit_count++; } } return exit_count; } -static void make_exit(_PyUOpInstruction *inst, int opcode, int target) +static int +get_exit_depth(_PyUOpInstruction *src) +{ + // TO DO -- Add another generated table for this? + int base_opcode = _PyUop_Uncached[src->opcode]; + assert(base_opcode != 0); + int input = -1; + for (int i = 0; i < 4; i++) { + if (_PyUop_Caching[base_opcode].opcodes[i] == src->opcode) { + input = i; + break; + } + } + if (input == -1) { + return -1; + } + if (is_for_iter_test[base_opcode]) { + return input; + } + return input + _PyUop_Caching[base_opcode].delta; +} + +static void make_exit(_PyUOpInstruction *inst, int opcode, int target, _PyUOpInstruction *src) { - inst->opcode = opcode; + int depth = get_exit_depth(src); + inst->opcode = _PyUop_Caching[opcode].opcodes[depth]; inst->oparg = 0; inst->operand0 = 0; inst->format = UOP_FORMAT_TARGET; @@ -1041,13 +1064,14 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) int next_spare = length; for (int i = 0; i < length; i++) { _PyUOpInstruction *inst = &buffer[i]; - int opcode = inst->opcode; + int base_opcode = _PyUop_Uncached[inst->opcode]; + assert(inst->opcode != _NOP); int32_t target = (int32_t)uop_get_target(inst); - if (_PyUop_Flags[opcode] & (HAS_EXIT_FLAG | HAS_DEOPT_FLAG)) { - uint16_t exit_op = (_PyUop_Flags[opcode] & HAS_EXIT_FLAG) ? + if (_PyUop_Flags[base_opcode] & (HAS_EXIT_FLAG | HAS_DEOPT_FLAG)) { + uint16_t exit_op = (_PyUop_Flags[base_opcode] & HAS_EXIT_FLAG) ? _EXIT_TRACE : _DEOPT; int32_t jump_target = target; - if (is_for_iter_test[opcode]) { + if (is_for_iter_test[base_opcode]) { /* Target the POP_TOP immediately after the END_FOR, * leaving only the iterator on the stack. */ int extended_arg = inst->oparg > 255; @@ -1055,7 +1079,7 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) jump_target = next_inst + inst->oparg + 1; } if (jump_target != current_jump_target || current_exit_op != exit_op) { - make_exit(&buffer[next_spare], exit_op, jump_target); + make_exit(&buffer[next_spare], exit_op, jump_target, inst); current_exit_op = exit_op; current_jump_target = jump_target; current_jump = next_spare; @@ -1064,14 +1088,14 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) buffer[i].jump_target = current_jump; buffer[i].format = UOP_FORMAT_JUMP; } - if (_PyUop_Flags[opcode] & HAS_ERROR_FLAG) { - int popped = (_PyUop_Flags[opcode] & HAS_ERROR_NO_POP_FLAG) ? - 0 : _PyUop_num_popped(opcode, inst->oparg); + if (_PyUop_Flags[base_opcode] & HAS_ERROR_FLAG) { + int popped = (_PyUop_Flags[base_opcode] & HAS_ERROR_NO_POP_FLAG) ? + 0 : _PyUop_num_popped(base_opcode, inst->oparg); if (target != current_error_target || popped != current_popped) { current_popped = popped; current_error = next_spare; current_error_target = target; - make_exit(&buffer[next_spare], _ERROR_POP_N, 0); + make_exit(&buffer[next_spare], _ERROR_POP_N, 0, inst); buffer[next_spare].operand0 = target; next_spare++; } @@ -1081,8 +1105,8 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) buffer[i].jump_target = 0; } } - if (opcode == _JUMP_TO_TOP) { - assert(buffer[0].opcode == _START_EXECUTOR); + if (base_opcode == _JUMP_TO_TOP) { + assert(buffer[0].opcode == _START_EXECUTOR_r00); buffer[i].format = UOP_FORMAT_JUMP; buffer[i].jump_target = 1; } @@ -1129,25 +1153,29 @@ sanity_check(_PyExecutorObject *executor) } bool ended = false; uint32_t i = 0; - CHECK(executor->trace[0].opcode == _START_EXECUTOR); + CHECK(executor->trace[0].opcode == _START_EXECUTOR_r00); for (; i < executor->code_size; i++) { const _PyUOpInstruction *inst = &executor->trace[i]; uint16_t opcode = inst->opcode; - CHECK(opcode <= MAX_UOP_ID); - CHECK(_PyOpcode_uop_name[opcode] != NULL); + uint16_t base_opcode = _PyUop_Uncached[opcode]; + CHECK(opcode > MAX_UOP_ID); + CHECK(opcode <= MAX_UOP_REGS_ID); + CHECK(base_opcode <= MAX_UOP_ID); + CHECK(base_opcode != 0); + CHECK(_PyOpcode_uop_name[base_opcode] != NULL); switch(inst->format) { case UOP_FORMAT_TARGET: - CHECK(target_unused(opcode)); + CHECK(target_unused(base_opcode)); break; case UOP_FORMAT_JUMP: CHECK(inst->jump_target < executor->code_size); break; } - if (_PyUop_Flags[opcode] & HAS_ERROR_FLAG) { + if (_PyUop_Flags[base_opcode] & HAS_ERROR_FLAG) { CHECK(inst->format == UOP_FORMAT_JUMP); CHECK(inst->error_target < executor->code_size); } - if (is_terminator(inst)) { + if (base_opcode == _EXIT_TRACE || base_opcode == _JUMP_TO_TOP) { ended = true; i++; break; @@ -1156,11 +1184,11 @@ sanity_check(_PyExecutorObject *executor) CHECK(ended); for (; i < executor->code_size; i++) { const _PyUOpInstruction *inst = &executor->trace[i]; - uint16_t opcode = inst->opcode; + uint16_t base_opcode = _PyUop_Uncached[inst->opcode]; CHECK( - opcode == _DEOPT || - opcode == _EXIT_TRACE || - opcode == _ERROR_POP_N); + base_opcode == _DEOPT || + base_opcode == _EXIT_TRACE || + base_opcode == _ERROR_POP_N); } } @@ -1188,14 +1216,14 @@ make_executor_from_uops(_PyUOpInstruction *buffer, int length, const _PyBloomFil } int next_exit = exit_count-1; _PyUOpInstruction *dest = (_PyUOpInstruction *)&executor->trace[length]; - assert(buffer[0].opcode == _START_EXECUTOR); + assert(buffer[0].opcode == _START_EXECUTOR_r00); buffer[0].operand0 = (uint64_t)executor; for (int i = length-1; i >= 0; i--) { - int opcode = buffer[i].opcode; + uint16_t base_opcode = _PyUop_Uncached[buffer[i].opcode]; dest--; *dest = buffer[i]; - assert(opcode != _POP_JUMP_IF_FALSE && opcode != _POP_JUMP_IF_TRUE); - if (opcode == _EXIT_TRACE) { + assert(base_opcode != _POP_JUMP_IF_FALSE && base_opcode != _POP_JUMP_IF_TRUE); + if (base_opcode == _EXIT_TRACE) { _PyExitData *exit = &executor->exits[next_exit]; exit->target = buffer[i].target; dest->operand0 = (uint64_t)exit; @@ -1204,7 +1232,7 @@ make_executor_from_uops(_PyUOpInstruction *buffer, int length, const _PyBloomFil } assert(next_exit == -1); assert(dest == executor->trace); - assert(dest->opcode == _START_EXECUTOR); + assert(dest->opcode == _START_EXECUTOR_r00); _Py_ExecutorInit(executor, dependencies); #ifdef Py_DEBUG char *python_lltrace = Py_GETENV("PYTHON_LLTRACE"); @@ -1258,6 +1286,48 @@ int effective_trace_length(_PyUOpInstruction *buffer, int length) } #endif +static int +stack_allocate(_PyUOpInstruction *buffer, int length) +{ + for (int i = length-1; i >= 0; i--) { + buffer[i*2].format = UOP_FORMAT_TARGET; + buffer[i*2].oparg = 0; + buffer[i*2].target = 0; + buffer[i*2+1] = buffer[i]; + } + int depth = 0; + for (int i = 0; i < length; i++) { + _PyUOpInstruction *spill_or_reload = &buffer[i*2]; + int uop = buffer[i*2+1].opcode; + if (uop == _NOP) { + // leave _NOPs to be cleaned up later + spill_or_reload->opcode = _NOP; + continue; + } + if (_PyUop_Caching[uop].opcodes[depth] > 0) { + spill_or_reload->opcode = _NOP; + } + else { + int min_depth = _PyUop_Caching[uop].min_input; + int max_depth = _PyUop_Caching[uop].max_input; + if (depth < min_depth) { + spill_or_reload->opcode = _PyUop_SpillsAndReloads[depth][min_depth]; + depth = min_depth; + } + else { + assert(depth != max_depth); + spill_or_reload->opcode = _PyUop_SpillsAndReloads[depth][max_depth]; + depth = max_depth; + } + } + assert(_PyUop_Caching[uop].opcodes[depth] != 0); + assert(spill_or_reload->opcode != 0); + buffer[i*2+1].opcode = _PyUop_Caching[uop].opcodes[depth]; + depth += _PyUop_Caching[uop].delta; + } + return length*2; +} + static int uop_optimize( _PyInterpreterFrame *frame, @@ -1270,12 +1340,12 @@ uop_optimize( _Py_BloomFilter_Init(&dependencies); _PyUOpInstruction buffer[UOP_MAX_TRACE_LENGTH]; OPT_STAT_INC(attempts); - int length = translate_bytecode_to_trace(frame, instr, buffer, UOP_MAX_TRACE_LENGTH, &dependencies, progress_needed); + int length = translate_bytecode_to_trace(frame, instr, buffer, UOP_MAX_TRACE_LENGTH/2, &dependencies, progress_needed); if (length <= 0) { // Error or nothing translated return length; } - assert(length < UOP_MAX_TRACE_LENGTH); + assert(length < UOP_MAX_TRACE_LENGTH/2); OPT_STAT_INC(traces_created); char *env_var = Py_GETENV("PYTHON_UOPS_OPTIMIZE"); if (env_var == NULL || *env_var == '\0' || *env_var > '0') { @@ -1286,7 +1356,7 @@ uop_optimize( return length; } } - assert(length < UOP_MAX_TRACE_LENGTH); + assert(length < UOP_MAX_TRACE_LENGTH/2); assert(length >= 1); /* Fix up */ for (int pc = 0; pc < length; pc++) { @@ -1302,6 +1372,7 @@ uop_optimize( assert(_PyOpcode_uop_name[buffer[pc].opcode]); } OPT_HIST(effective_trace_length(buffer, length), optimized_trace_length_hist); + length = stack_allocate(buffer, length); length = prepare_for_execution(buffer, length); assert(length <= UOP_MAX_TRACE_LENGTH); _PyExecutorObject *executor = make_executor_from_uops(buffer, length, &dependencies); @@ -1681,13 +1752,14 @@ executor_to_gv(_PyExecutorObject *executor, FILE *out) * https://graphviz.readthedocs.io/en/stable/manual.html#node-ports-compass */ _PyUOpInstruction const *inst = &executor->trace[i]; - const char *opname = _PyOpcode_uop_name[inst->opcode]; + uint16_t base_opcode = _PyUop_Uncached[inst->opcode]; + const char *opname = _PyOpcode_uop_name[base_opcode]; #ifdef Py_STATS fprintf(out, " %s -- %" PRIu64 "\n", i, opname, inst->execution_count); #else fprintf(out, " %s\n", i, opname); #endif - if (inst->opcode == _EXIT_TRACE || inst->opcode == _JUMP_TO_TOP) { + if (base_opcode == _EXIT_TRACE || base_opcode == _JUMP_TO_TOP) { break; } } @@ -1697,21 +1769,22 @@ executor_to_gv(_PyExecutorObject *executor, FILE *out) /* Write all the outgoing edges */ for (uint32_t i = 0; i < executor->code_size; i++) { _PyUOpInstruction const *inst = &executor->trace[i]; - uint16_t flags = _PyUop_Flags[inst->opcode]; + uint16_t base_opcode = _PyUop_Uncached[inst->opcode]; + uint16_t flags = _PyUop_Flags[base_opcode]; _PyExitData *exit = NULL; - if (inst->opcode == _EXIT_TRACE) { + if (base_opcode == _EXIT_TRACE) { exit = (_PyExitData *)inst->operand0; } else if (flags & HAS_EXIT_FLAG) { assert(inst->format == UOP_FORMAT_JUMP); _PyUOpInstruction const *exit_inst = &executor->trace[inst->jump_target]; - assert(exit_inst->opcode == _EXIT_TRACE); + assert(_PyUop_Uncached[exit_inst->opcode] == _EXIT_TRACE); exit = (_PyExitData *)exit_inst->operand0; } if (exit != NULL && exit->executor != NULL) { fprintf(out, "executor_%p:i%d -> executor_%p:start\n", executor, i, exit->executor); } - if (inst->opcode == _EXIT_TRACE || inst->opcode == _JUMP_TO_TOP) { + if (base_opcode == _EXIT_TRACE || base_opcode == _JUMP_TO_TOP) { break; } } diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index adab110c5ced66..2d83f32b71202f 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -2764,3 +2764,7 @@ break; } + case _SPILL_OR_RELOAD: { + break; + } + diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index fca9b29f9ebc2e..3236867ef2e235 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1183,6 +1183,59 @@ def analyze_forest(forest: list[parser.AstNode]) -> Analysis: ) +def get_uop_cache_depths(uop: Uop): + if uop.name == "_SPILL_OR_RELOAD": + for inputs in range(4): + for outputs in range(4): + if inputs != outputs: + yield inputs, outputs + return + if uop.name in ("_EXIT_TRACE", "_DEOPT", "_ERROR_POP_N"): + for i in range(4): + yield i, i + return + if uop.name in ("_START_EXECUTOR", "_JUMP_TO_TOP"): + yield 0, 0 + return + ideal_inputs = 0 + has_array = False + for item in reversed(uop.stack.inputs): + if item.size: + has_array = True + break + if item.peek and uop.properties.escapes: + break + ideal_inputs += 1 + ideal_outputs = 0 + for item in reversed(uop.stack.outputs): + if item.size: + has_array = True + break + if item.peek and uop.properties.escapes: + break + ideal_outputs += 1 + + if ideal_inputs > 3: + ideal_inputs = 3 + if ideal_outputs > 3: + ideal_outputs = 3 + yield ideal_inputs, ideal_outputs + if uop.properties.escapes or uop.properties.stores_sp or has_array: + return + if ideal_inputs >= 3 or ideal_outputs >= 3: + return + inputs, outputs = ideal_inputs, ideal_outputs + if inputs < outputs: + inputs, outputs = 0, outputs-inputs + else: + inputs, outputs = inputs-outputs, 0 + while inputs <= 3 and outputs <= 3: + if inputs != ideal_inputs: + yield inputs, outputs + inputs += 1 + outputs += 1 + + def analyze_files(filenames: list[str]) -> Analysis: return analyze_forest(parser.parse_files(filenames)) @@ -1202,6 +1255,7 @@ def dump_analysis(analysis: Analysis) -> None: p.dump(" ") + if __name__ == "__main__": import sys diff --git a/Tools/cases_generator/generators_common.py b/Tools/cases_generator/generators_common.py index 47de205c0e9120..b1e2e1866eb085 100644 --- a/Tools/cases_generator/generators_common.py +++ b/Tools/cases_generator/generators_common.py @@ -124,6 +124,7 @@ def __init__(self, out: CWriter, labels: dict[str, Label]): "DISPATCH": self.dispatch, "INSTRUCTION_SIZE": self.instruction_size, "stack_pointer": self.stack_pointer, + "Py_UNREACHABLE": self.unreachable, } self.out = out self.labels = labels @@ -142,6 +143,19 @@ def dispatch( self.emit(tkn) return False + def unreachable( + self, + tkn: Token, + tkn_iter: TokenIterator, + uop: CodeSection, + storage: Storage, + inst: Instruction | None, + ) -> bool: + self.emit(tkn) + emit_to(self.out, tkn_iter, "SEMI") + self.emit(";") + return False + def deopt_if( self, tkn: Token, diff --git a/Tools/cases_generator/stack.py b/Tools/cases_generator/stack.py index 3a0e7e5d0d5636..c1f5e85e3ecd61 100644 --- a/Tools/cases_generator/stack.py +++ b/Tools/cases_generator/stack.py @@ -222,6 +222,13 @@ def __init__(self) -> None: self.logical_sp = PointerOffset.zero() self.variables: list[Local] = [] + + def push_cache(self, cached_items:list[str], out: CWriter) -> None: + for i, name in enumerate(cached_items): + out.start_line() + out.emit(f"_PyStackRef _stack_item_{i} = {name};\n") + self.push(Local.register(f"_stack_item_{i}")) + def drop(self, var: StackItem, check_liveness: bool) -> None: self.logical_sp = self.logical_sp.pop(var) if self.variables: @@ -499,6 +506,7 @@ def locals_cached(self) -> bool: return False def flush(self, out: CWriter) -> None: + self._print(out) self.clear_dead_inputs() self._push_defined_outputs() self.stack.flush(out) diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 276f306dfffa18..a0830a3e32010e 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -14,6 +14,7 @@ analyze_files, StackItem, analysis_error, + get_uop_cache_depths, ) from generators_common import ( DEFAULT_INPUT, @@ -133,7 +134,7 @@ def oparg( return True -def write_uop(uop: Uop, emitter: Emitter, stack: Stack) -> Stack: +def write_uop(uop: Uop, emitter: Emitter, stack: Stack, cached_items:int=0) -> Stack: locals: dict[str, Local] = {} try: emitter.out.start_line() @@ -155,6 +156,12 @@ def write_uop(uop: Uop, emitter: Emitter, stack: Stack) -> Stack: emitter.emit(f"{type}{cache.name} = ({cast})CURRENT_OPERAND{idx}();\n") idx += 1 _, storage = emitter.emit_tokens(uop, storage, None, False) + storage.stack._print(emitter.out) + while cached_items > 0: + emitter.out.start_line() + item = StackItem(f"_tos_cache{cached_items-1}", "", False, True) + storage.stack.pop(item, emitter.out) + cached_items -= 1 storage.flush(emitter.out) except StackError as ex: raise analysis_error(ex.args[0], uop.body.open) from None @@ -162,6 +169,11 @@ def write_uop(uop: Uop, emitter: Emitter, stack: Stack) -> Stack: SKIPS = ("_EXTENDED_ARG",) +def is_for_iter_test(uop: Uop): + return uop.name in ( + "_GUARD_NOT_EXHAUSTED_RANGE", "_GUARD_NOT_EXHAUSTED_LIST", + "_GUARD_NOT_EXHAUSTED_TUPLE", "_FOR_ITER_TIER_TWO" + ) def generate_tier2( filenames: list[str], analysis: Analysis, outfile: TextIO, lines: bool @@ -189,16 +201,24 @@ def generate_tier2( f"/* {uop.name} is not a viable micro-op for tier 2 because it {why_not_viable} */\n\n" ) continue - out.emit(f"case {uop.name}: {{\n") - declare_variables(uop, out) - stack = Stack() - stack = write_uop(uop, emitter, stack) - out.start_line() - if not uop.properties.always_exits: - out.emit("break;\n") - out.start_line() - out.emit("}") - out.emit("\n\n") + for inputs, outputs in get_uop_cache_depths(uop): + out.emit(f"case {uop.name}_r{inputs}{outputs}: {{\n") + out.emit(f"assert(current_cached_values == {inputs});\n") + if not is_for_iter_test(uop): + out.emit(f"SET_CURRENT_CACHED_VALUES({outputs});\n") + declare_variables(uop, out) + stack = Stack() + stack.push_cache([f"_tos_cache{i}" for i in range(inputs)], out) + stack._print(out) + stack = write_uop(uop, emitter, stack, outputs) + out.start_line() + if is_for_iter_test(uop): + out.emit(f"SET_CURRENT_CACHED_VALUES({outputs});\n") + if not uop.properties.always_exits: + out.emit("break;\n") + out.start_line() + out.emit("}") + out.emit("\n\n") outfile.write("#undef TIER_TWO\n") diff --git a/Tools/cases_generator/uop_id_generator.py b/Tools/cases_generator/uop_id_generator.py index aae89faaa928e1..41f39900fb5b6b 100644 --- a/Tools/cases_generator/uop_id_generator.py +++ b/Tools/cases_generator/uop_id_generator.py @@ -8,6 +8,7 @@ from analyzer import ( Analysis, analyze_files, + get_uop_cache_depths, ) from generators_common import ( DEFAULT_INPUT, @@ -38,17 +39,21 @@ def generate_uop_ids( uops = [(uop.name, uop) for uop in analysis.uops.values()] # Sort so that _BASE comes immediately before _BASE_0, etc. for name, uop in sorted(uops): - if name in PRE_DEFINED: - continue - if uop.properties.tier == 1: + if name in PRE_DEFINED or uop.is_super() or uop.properties.tier == 1: continue if uop.implicitly_created and not distinct_namespace and not uop.replicated: out.emit(f"#define {name} {name[1:]}\n") else: out.emit(f"#define {name} {next_id}\n") next_id += 1 - out.emit(f"#define MAX_UOP_ID {next_id-1}\n") + for name, uop in sorted(uops): + if uop.properties.tier == 1: + continue + for inputs, outputs in sorted(get_uop_cache_depths(uop)): + out.emit(f"#define {name}_r{inputs}{outputs} {next_id}\n") + next_id += 1 + out.emit(f"#define MAX_UOP_REGS_ID {next_id-1}\n") arg_parser = argparse.ArgumentParser( diff --git a/Tools/cases_generator/uop_metadata_generator.py b/Tools/cases_generator/uop_metadata_generator.py index 6f995e5c46bfcf..b85c8e90bff1ff 100644 --- a/Tools/cases_generator/uop_metadata_generator.py +++ b/Tools/cases_generator/uop_metadata_generator.py @@ -8,6 +8,8 @@ from analyzer import ( Analysis, analyze_files, + get_uop_cache_depths, + Uop, ) from generators_common import ( DEFAULT_INPUT, @@ -21,16 +23,38 @@ DEFAULT_OUTPUT = ROOT / "Include/internal/pycore_uop_metadata.h" +def uop_cache_info(uop: Uop) -> str | None: + if uop.name == "_SPILL_OR_RELOAD": + return None + min_inputs = 4 + uops = [ "0" ] * 4 + for inputs, outputs in get_uop_cache_depths(uop): + delta = outputs - inputs + uops[inputs] = f"{uop.name}_r{inputs}{outputs}" + for i in range(4): + if uops[i] != "0": + max_inputs = i + if i < min_inputs: + min_inputs = i + return f"{{ {min_inputs}, {max_inputs}, {delta}, {{ {", ".join(uops)} }} }}" + def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: out.emit("extern const uint16_t _PyUop_Flags[MAX_UOP_ID+1];\n") out.emit("extern const uint8_t _PyUop_Replication[MAX_UOP_ID+1];\n") - out.emit("extern const char * const _PyOpcode_uop_name[MAX_UOP_ID+1];\n\n") + out.emit("extern const char * const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1];\n\n") out.emit("extern int _PyUop_num_popped(int opcode, int oparg);\n\n") + out.emit("typedef struct _pyuop_info {\n") + out.emit("int8_t min_input; int8_t max_input;\n") + out.emit("int8_t delta; uint16_t opcodes[4];\n") + out.emit("} _PyUopCachingInfo;\n") + out.emit("extern const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1];\n\n") + out.emit("extern const uint16_t _PyUop_SpillsAndReloads[4][4];\n") + out.emit("extern const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1];\n\n") out.emit("#ifdef NEED_OPCODE_METADATA\n") out.emit("const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {\n") for uop in analysis.uops.values(): - if uop.is_viable() and uop.properties.tier != 1: + if uop.is_viable() and uop.properties.tier != 1 and not uop.is_super(): out.emit(f"[{uop.name}] = {cflags(uop.properties)},\n") out.emit("};\n\n") @@ -40,16 +64,37 @@ def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: out.emit(f"[{uop.name}] = {uop.replicated},\n") out.emit("};\n\n") - out.emit("const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = {\n") + out.emit("const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = {\n") + for uop in analysis.uops.values(): + if uop.is_viable() and uop.properties.tier != 1 and not uop.is_super(): + info = uop_cache_info(uop) + if info is not None: + out.emit(f"[{uop.name}] = {info},\n") + out.emit("};\n\n") + out.emit("const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = {\n"); + for uop in analysis.uops.values(): + if uop.is_viable() and uop.properties.tier != 1 and not uop.is_super(): + for inputs, outputs in get_uop_cache_depths(uop): + out.emit(f"[{uop.name}_r{inputs}{outputs}] = {uop.name},\n") + out.emit("};\n\n") + out.emit("const uint16_t _PyUop_SpillsAndReloads[4][4] = {\n") + for i in range(4): + for j in range(4): + if i != j: + out.emit(f"[{i}][{j}] = _SPILL_OR_RELOAD_r{i}{j},\n") + out.emit("};\n\n") + out.emit("const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {\n") for uop in sorted(analysis.uops.values(), key=lambda t: t.name): - if uop.is_viable() and uop.properties.tier != 1: + if uop.is_viable() and uop.properties.tier != 1 and not uop.is_super(): out.emit(f'[{uop.name}] = "{uop.name}",\n') + for inputs, outputs in get_uop_cache_depths(uop): + out.emit(f'[{uop.name}_r{inputs}{outputs}] = "{uop.name}_r{inputs}{outputs}",\n') out.emit("};\n") out.emit("int _PyUop_num_popped(int opcode, int oparg)\n{\n") out.emit("switch(opcode) {\n") null = CWriter.null() for uop in analysis.uops.values(): - if uop.is_viable() and uop.properties.tier != 1: + if uop.is_viable() and uop.properties.tier != 1 and not uop.is_super(): stack = Stack() for var in reversed(uop.stack.inputs): if var.peek: From 489e5105e48ad65debb96859323dae61caab2257 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 10:49:00 +0100 Subject: [PATCH 02/14] Tier 2 TOS caching, working for interpreter. --- Include/internal/pycore_uop_ids.h | 1064 ++++++----- Include/internal/pycore_uop_metadata.h | 234 ++- Python/bytecodes.c | 1 + Python/ceval.c | 25 +- Python/executor_cases.c.h | 1972 +++++++++++--------- Python/optimizer.c | 35 +- Tools/cases_generator/analyzer.py | 13 +- Tools/cases_generator/generators_common.py | 11 +- Tools/cases_generator/tier2_generator.py | 12 +- 9 files changed, 1799 insertions(+), 1568 deletions(-) diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index ce9e36903fb84a..1d13d3d13ad017 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -346,18 +346,18 @@ extern "C" { #define _BINARY_OP_ADD_UNICODE_r21 539 #define _BINARY_OP_ADD_UNICODE_r32 540 #define _BINARY_OP_EXTEND_r21 541 -#define _BINARY_OP_INPLACE_ADD_UNICODE_r20 542 +#define _BINARY_OP_INPLACE_ADD_UNICODE_r00 542 #define _BINARY_OP_MULTIPLY_FLOAT_r10 543 #define _BINARY_OP_MULTIPLY_FLOAT_r21 544 #define _BINARY_OP_MULTIPLY_FLOAT_r32 545 #define _BINARY_OP_MULTIPLY_INT_r21 546 -#define _BINARY_OP_SUBSCR_CHECK_FUNC_r23 547 +#define _BINARY_OP_SUBSCR_CHECK_FUNC_r22 547 #define _BINARY_OP_SUBSCR_DICT_r21 548 #define _BINARY_OP_SUBSCR_INIT_CALL_r31 549 -#define _BINARY_OP_SUBSCR_LIST_INT_r21 550 +#define _BINARY_OP_SUBSCR_LIST_INT_r11 550 #define _BINARY_OP_SUBSCR_LIST_SLICE_r21 551 -#define _BINARY_OP_SUBSCR_STR_INT_r21 552 -#define _BINARY_OP_SUBSCR_TUPLE_INT_r21 553 +#define _BINARY_OP_SUBSCR_STR_INT_r11 552 +#define _BINARY_OP_SUBSCR_TUPLE_INT_r11 553 #define _BINARY_OP_SUBTRACT_FLOAT_r10 554 #define _BINARY_OP_SUBTRACT_FLOAT_r21 555 #define _BINARY_OP_SUBTRACT_FLOAT_r32 556 @@ -371,20 +371,20 @@ extern "C" { #define _BUILD_STRING_r01 564 #define _BUILD_TEMPLATE_r21 565 #define _BUILD_TUPLE_r01 566 -#define _CALL_BUILTIN_CLASS_r01 567 -#define _CALL_BUILTIN_FAST_r01 568 -#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01 569 -#define _CALL_BUILTIN_O_r01 570 +#define _CALL_BUILTIN_CLASS_r00 567 +#define _CALL_BUILTIN_FAST_r00 568 +#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00 569 +#define _CALL_BUILTIN_O_r00 570 #define _CALL_INTRINSIC_1_r11 571 #define _CALL_INTRINSIC_2_r21 572 #define _CALL_ISINSTANCE_r31 573 #define _CALL_KW_NON_PY_r11 574 #define _CALL_LEN_r31 575 -#define _CALL_LIST_APPEND_r30 576 -#define _CALL_METHOD_DESCRIPTOR_FAST_r01 577 -#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01 578 -#define _CALL_METHOD_DESCRIPTOR_NOARGS_r01 579 -#define _CALL_METHOD_DESCRIPTOR_O_r01 580 +#define _CALL_LIST_APPEND_r00 576 +#define _CALL_METHOD_DESCRIPTOR_FAST_r00 577 +#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 578 +#define _CALL_METHOD_DESCRIPTOR_NOARGS_r00 579 +#define _CALL_METHOD_DESCRIPTOR_O_r00 580 #define _CALL_NON_PY_GENERAL_r01 581 #define _CALL_STR_1_r31 582 #define _CALL_TUPLE_1_r31 583 @@ -443,530 +443,518 @@ extern "C" { #define _COMPARE_OP_FLOAT_r10 636 #define _COMPARE_OP_FLOAT_r21 637 #define _COMPARE_OP_FLOAT_r32 638 -#define _COMPARE_OP_INT_r10 639 -#define _COMPARE_OP_INT_r21 640 -#define _COMPARE_OP_INT_r32 641 -#define _COMPARE_OP_STR_r10 642 -#define _COMPARE_OP_STR_r21 643 -#define _COMPARE_OP_STR_r32 644 -#define _CONTAINS_OP_r21 645 -#define _CONTAINS_OP_DICT_r21 646 -#define _CONTAINS_OP_SET_r21 647 -#define _CONVERT_VALUE_r11 648 -#define _COPY_r01 649 -#define _COPY_FREE_VARS_r00 650 -#define _COPY_FREE_VARS_r11 651 -#define _COPY_FREE_VARS_r22 652 -#define _COPY_FREE_VARS_r33 653 -#define _CREATE_INIT_FRAME_r01 654 -#define _DELETE_ATTR_r10 655 -#define _DELETE_DEREF_r00 656 -#define _DELETE_FAST_r00 657 -#define _DELETE_GLOBAL_r00 658 -#define _DELETE_NAME_r00 659 -#define _DELETE_SUBSCR_r20 660 -#define _DEOPT_r00 661 -#define _DEOPT_r11 662 -#define _DEOPT_r22 663 -#define _DEOPT_r33 664 -#define _DICT_MERGE_r10 665 -#define _DICT_UPDATE_r10 666 -#define _DO_CALL_r01 667 -#define _DO_CALL_FUNCTION_EX_r31 668 -#define _DO_CALL_KW_r11 669 -#define _END_FOR_r10 670 -#define _END_SEND_r21 671 -#define _ERROR_POP_N_r00 672 -#define _ERROR_POP_N_r11 673 -#define _ERROR_POP_N_r22 674 -#define _ERROR_POP_N_r33 675 -#define _EXIT_INIT_CHECK_r10 676 -#define _EXIT_TRACE_r00 677 -#define _EXIT_TRACE_r11 678 -#define _EXIT_TRACE_r22 679 -#define _EXIT_TRACE_r33 680 -#define _EXPAND_METHOD_r00 681 -#define _EXPAND_METHOD_KW_r00 682 -#define _FATAL_ERROR_r00 683 -#define _FATAL_ERROR_r11 684 -#define _FATAL_ERROR_r22 685 -#define _FATAL_ERROR_r33 686 -#define _FORMAT_SIMPLE_r11 687 -#define _FORMAT_WITH_SPEC_r21 688 -#define _FOR_ITER_r01 689 -#define _FOR_ITER_GEN_FRAME_r23 690 -#define _FOR_ITER_TIER_TWO_r01 691 -#define _GET_AITER_r11 692 -#define _GET_ANEXT_r01 693 -#define _GET_AWAITABLE_r11 694 -#define _GET_ITER_r12 695 -#define _GET_LEN_r01 696 -#define _GET_YIELD_FROM_ITER_r11 697 -#define _GUARD_BINARY_OP_EXTEND_r00 698 -#define _GUARD_CALLABLE_ISINSTANCE_r33 699 -#define _GUARD_CALLABLE_LEN_r33 700 -#define _GUARD_CALLABLE_LIST_APPEND_r33 701 -#define _GUARD_CALLABLE_STR_1_r33 702 -#define _GUARD_CALLABLE_TUPLE_1_r33 703 -#define _GUARD_CALLABLE_TYPE_1_r33 704 -#define _GUARD_DORV_NO_DICT_r00 705 -#define _GUARD_DORV_NO_DICT_r11 706 -#define _GUARD_DORV_NO_DICT_r22 707 -#define _GUARD_DORV_NO_DICT_r33 708 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00 709 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 710 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 711 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 712 -#define _GUARD_GLOBALS_VERSION_r00 713 -#define _GUARD_GLOBALS_VERSION_r11 714 -#define _GUARD_GLOBALS_VERSION_r22 715 -#define _GUARD_GLOBALS_VERSION_r33 716 -#define _GUARD_IS_FALSE_POP_r10 717 -#define _GUARD_IS_NONE_POP_r10 718 -#define _GUARD_IS_NOT_NONE_POP_r10 719 -#define _GUARD_IS_TRUE_POP_r10 720 -#define _GUARD_KEYS_VERSION_r00 721 -#define _GUARD_KEYS_VERSION_r11 722 -#define _GUARD_KEYS_VERSION_r22 723 -#define _GUARD_KEYS_VERSION_r33 724 -#define _GUARD_NOS_DICT_r00 725 -#define _GUARD_NOS_DICT_r11 726 -#define _GUARD_NOS_DICT_r22 727 -#define _GUARD_NOS_DICT_r33 728 -#define _GUARD_NOS_FLOAT_r00 729 -#define _GUARD_NOS_FLOAT_r11 730 -#define _GUARD_NOS_FLOAT_r22 731 -#define _GUARD_NOS_FLOAT_r33 732 -#define _GUARD_NOS_INT_r00 733 -#define _GUARD_NOS_INT_r11 734 -#define _GUARD_NOS_INT_r22 735 -#define _GUARD_NOS_INT_r33 736 -#define _GUARD_NOS_LIST_r00 737 -#define _GUARD_NOS_LIST_r11 738 -#define _GUARD_NOS_LIST_r22 739 -#define _GUARD_NOS_LIST_r33 740 -#define _GUARD_NOS_NOT_NULL_r00 741 -#define _GUARD_NOS_NOT_NULL_r11 742 -#define _GUARD_NOS_NOT_NULL_r22 743 -#define _GUARD_NOS_NOT_NULL_r33 744 -#define _GUARD_NOS_NULL_r00 745 -#define _GUARD_NOS_NULL_r11 746 -#define _GUARD_NOS_NULL_r22 747 -#define _GUARD_NOS_NULL_r33 748 -#define _GUARD_NOS_TUPLE_r00 749 -#define _GUARD_NOS_TUPLE_r11 750 -#define _GUARD_NOS_TUPLE_r22 751 -#define _GUARD_NOS_TUPLE_r33 752 -#define _GUARD_NOS_UNICODE_r00 753 -#define _GUARD_NOS_UNICODE_r11 754 -#define _GUARD_NOS_UNICODE_r22 755 -#define _GUARD_NOS_UNICODE_r33 756 -#define _GUARD_NOT_EXHAUSTED_LIST_r00 757 -#define _GUARD_NOT_EXHAUSTED_LIST_r11 758 -#define _GUARD_NOT_EXHAUSTED_LIST_r22 759 -#define _GUARD_NOT_EXHAUSTED_LIST_r33 760 -#define _GUARD_NOT_EXHAUSTED_RANGE_r00 761 -#define _GUARD_NOT_EXHAUSTED_RANGE_r11 762 -#define _GUARD_NOT_EXHAUSTED_RANGE_r22 763 -#define _GUARD_NOT_EXHAUSTED_RANGE_r33 764 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r00 765 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r11 766 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 767 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 768 -#define _GUARD_THIRD_NULL_r33 769 -#define _GUARD_TOS_ANY_SET_r00 770 -#define _GUARD_TOS_ANY_SET_r11 771 -#define _GUARD_TOS_ANY_SET_r22 772 -#define _GUARD_TOS_ANY_SET_r33 773 -#define _GUARD_TOS_DICT_r00 774 -#define _GUARD_TOS_DICT_r11 775 -#define _GUARD_TOS_DICT_r22 776 -#define _GUARD_TOS_DICT_r33 777 -#define _GUARD_TOS_FLOAT_r00 778 -#define _GUARD_TOS_FLOAT_r11 779 -#define _GUARD_TOS_FLOAT_r22 780 -#define _GUARD_TOS_FLOAT_r33 781 -#define _GUARD_TOS_INT_r00 782 -#define _GUARD_TOS_INT_r11 783 -#define _GUARD_TOS_INT_r22 784 -#define _GUARD_TOS_INT_r33 785 -#define _GUARD_TOS_LIST_r00 786 -#define _GUARD_TOS_LIST_r11 787 -#define _GUARD_TOS_LIST_r22 788 -#define _GUARD_TOS_LIST_r33 789 -#define _GUARD_TOS_SLICE_r00 790 -#define _GUARD_TOS_SLICE_r11 791 -#define _GUARD_TOS_SLICE_r22 792 -#define _GUARD_TOS_SLICE_r33 793 -#define _GUARD_TOS_TUPLE_r00 794 -#define _GUARD_TOS_TUPLE_r11 795 -#define _GUARD_TOS_TUPLE_r22 796 -#define _GUARD_TOS_TUPLE_r33 797 -#define _GUARD_TOS_UNICODE_r00 798 -#define _GUARD_TOS_UNICODE_r11 799 -#define _GUARD_TOS_UNICODE_r22 800 -#define _GUARD_TOS_UNICODE_r33 801 -#define _GUARD_TYPE_VERSION_r00 802 -#define _GUARD_TYPE_VERSION_r11 803 -#define _GUARD_TYPE_VERSION_r22 804 -#define _GUARD_TYPE_VERSION_r33 805 -#define _GUARD_TYPE_VERSION_AND_LOCK_r00 806 -#define _GUARD_TYPE_VERSION_AND_LOCK_r11 807 -#define _GUARD_TYPE_VERSION_AND_LOCK_r22 808 -#define _GUARD_TYPE_VERSION_AND_LOCK_r33 809 -#define _IMPORT_FROM_r01 810 -#define _IMPORT_NAME_r21 811 -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 812 -#define _INIT_CALL_PY_EXACT_ARGS_r01 813 -#define _INIT_CALL_PY_EXACT_ARGS_0_r01 814 -#define _INIT_CALL_PY_EXACT_ARGS_1_r01 815 -#define _INIT_CALL_PY_EXACT_ARGS_2_r01 816 -#define _INIT_CALL_PY_EXACT_ARGS_3_r01 817 -#define _INIT_CALL_PY_EXACT_ARGS_4_r01 818 -#define _INSERT_NULL_r10 819 -#define _INSTRUMENTED_FOR_ITER_r01 820 -#define _INSTRUMENTED_INSTRUCTION_r00 821 -#define _INSTRUMENTED_JUMP_FORWARD_r00 822 -#define _INSTRUMENTED_JUMP_FORWARD_r11 823 -#define _INSTRUMENTED_JUMP_FORWARD_r22 824 -#define _INSTRUMENTED_JUMP_FORWARD_r33 825 -#define _INSTRUMENTED_LINE_r00 826 -#define _INSTRUMENTED_NOT_TAKEN_r00 827 -#define _INSTRUMENTED_NOT_TAKEN_r11 828 -#define _INSTRUMENTED_NOT_TAKEN_r22 829 -#define _INSTRUMENTED_NOT_TAKEN_r33 830 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 831 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 832 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 833 -#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 834 -#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 835 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 836 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 837 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 838 -#define _IS_NONE_r11 839 -#define _IS_OP_r21 840 -#define _ITER_CHECK_LIST_r00 841 -#define _ITER_CHECK_LIST_r11 842 -#define _ITER_CHECK_LIST_r22 843 -#define _ITER_CHECK_LIST_r33 844 -#define _ITER_CHECK_RANGE_r00 845 -#define _ITER_CHECK_RANGE_r11 846 -#define _ITER_CHECK_RANGE_r22 847 -#define _ITER_CHECK_RANGE_r33 848 -#define _ITER_CHECK_TUPLE_r00 849 -#define _ITER_CHECK_TUPLE_r11 850 -#define _ITER_CHECK_TUPLE_r22 851 -#define _ITER_CHECK_TUPLE_r33 852 -#define _ITER_JUMP_LIST_r00 853 -#define _ITER_JUMP_LIST_r11 854 -#define _ITER_JUMP_LIST_r22 855 -#define _ITER_JUMP_LIST_r33 856 -#define _ITER_JUMP_RANGE_r00 857 -#define _ITER_JUMP_RANGE_r11 858 -#define _ITER_JUMP_RANGE_r22 859 -#define _ITER_JUMP_RANGE_r33 860 -#define _ITER_JUMP_TUPLE_r00 861 -#define _ITER_JUMP_TUPLE_r11 862 -#define _ITER_JUMP_TUPLE_r22 863 -#define _ITER_JUMP_TUPLE_r33 864 -#define _ITER_NEXT_LIST_r01 865 -#define _ITER_NEXT_LIST_TIER_TWO_r01 866 -#define _ITER_NEXT_RANGE_r23 867 -#define _ITER_NEXT_TUPLE_r23 868 -#define _JUMP_TO_TOP_r00 869 -#define _LIST_APPEND_r10 870 -#define _LIST_EXTEND_r10 871 -#define _LOAD_ATTR_r10 872 -#define _LOAD_ATTR_CLASS_r11 873 -#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 874 -#define _LOAD_ATTR_INSTANCE_VALUE_r11 875 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r01 876 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 877 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 878 -#define _LOAD_ATTR_METHOD_NO_DICT_r01 879 -#define _LOAD_ATTR_METHOD_NO_DICT_r12 880 -#define _LOAD_ATTR_METHOD_NO_DICT_r23 881 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r01 882 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 883 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 884 -#define _LOAD_ATTR_MODULE_r11 885 -#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 886 -#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 887 -#define _LOAD_ATTR_PROPERTY_FRAME_r00 888 -#define _LOAD_ATTR_PROPERTY_FRAME_r11 889 -#define _LOAD_ATTR_PROPERTY_FRAME_r22 890 -#define _LOAD_ATTR_PROPERTY_FRAME_r33 891 -#define _LOAD_ATTR_SLOT_r11 892 -#define _LOAD_ATTR_WITH_HINT_r11 893 -#define _LOAD_BUILD_CLASS_r01 894 -#define _LOAD_BYTECODE_r00 895 -#define _LOAD_COMMON_CONSTANT_r01 896 -#define _LOAD_COMMON_CONSTANT_r12 897 -#define _LOAD_COMMON_CONSTANT_r23 898 -#define _LOAD_CONST_r01 899 -#define _LOAD_CONST_r12 900 -#define _LOAD_CONST_r23 901 -#define _LOAD_CONST_INLINE_r01 902 -#define _LOAD_CONST_INLINE_r12 903 -#define _LOAD_CONST_INLINE_r23 904 -#define _LOAD_CONST_INLINE_BORROW_r01 905 -#define _LOAD_CONST_INLINE_BORROW_r12 906 -#define _LOAD_CONST_INLINE_BORROW_r23 907 -#define _LOAD_CONST_UNDER_INLINE_r01 908 -#define _LOAD_CONST_UNDER_INLINE_r12 909 -#define _LOAD_CONST_UNDER_INLINE_r23 910 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r01 911 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 912 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 913 -#define _LOAD_DEREF_r01 914 -#define _LOAD_FAST_r01 915 -#define _LOAD_FAST_r12 916 -#define _LOAD_FAST_r23 917 -#define _LOAD_FAST_0_r01 918 -#define _LOAD_FAST_0_r12 919 -#define _LOAD_FAST_0_r23 920 -#define _LOAD_FAST_1_r01 921 -#define _LOAD_FAST_1_r12 922 -#define _LOAD_FAST_1_r23 923 -#define _LOAD_FAST_2_r01 924 -#define _LOAD_FAST_2_r12 925 -#define _LOAD_FAST_2_r23 926 -#define _LOAD_FAST_3_r01 927 -#define _LOAD_FAST_3_r12 928 -#define _LOAD_FAST_3_r23 929 -#define _LOAD_FAST_4_r01 930 -#define _LOAD_FAST_4_r12 931 -#define _LOAD_FAST_4_r23 932 -#define _LOAD_FAST_5_r01 933 -#define _LOAD_FAST_5_r12 934 -#define _LOAD_FAST_5_r23 935 -#define _LOAD_FAST_6_r01 936 -#define _LOAD_FAST_6_r12 937 -#define _LOAD_FAST_6_r23 938 -#define _LOAD_FAST_7_r01 939 -#define _LOAD_FAST_7_r12 940 -#define _LOAD_FAST_7_r23 941 -#define _LOAD_FAST_AND_CLEAR_r01 942 -#define _LOAD_FAST_AND_CLEAR_r12 943 -#define _LOAD_FAST_AND_CLEAR_r23 944 -#define _LOAD_FAST_BORROW_r01 945 -#define _LOAD_FAST_BORROW_r12 946 -#define _LOAD_FAST_BORROW_r23 947 -#define _LOAD_FAST_BORROW_0_r01 948 -#define _LOAD_FAST_BORROW_0_r12 949 -#define _LOAD_FAST_BORROW_0_r23 950 -#define _LOAD_FAST_BORROW_1_r01 951 -#define _LOAD_FAST_BORROW_1_r12 952 -#define _LOAD_FAST_BORROW_1_r23 953 -#define _LOAD_FAST_BORROW_2_r01 954 -#define _LOAD_FAST_BORROW_2_r12 955 -#define _LOAD_FAST_BORROW_2_r23 956 -#define _LOAD_FAST_BORROW_3_r01 957 -#define _LOAD_FAST_BORROW_3_r12 958 -#define _LOAD_FAST_BORROW_3_r23 959 -#define _LOAD_FAST_BORROW_4_r01 960 -#define _LOAD_FAST_BORROW_4_r12 961 -#define _LOAD_FAST_BORROW_4_r23 962 -#define _LOAD_FAST_BORROW_5_r01 963 -#define _LOAD_FAST_BORROW_5_r12 964 -#define _LOAD_FAST_BORROW_5_r23 965 -#define _LOAD_FAST_BORROW_6_r01 966 -#define _LOAD_FAST_BORROW_6_r12 967 -#define _LOAD_FAST_BORROW_6_r23 968 -#define _LOAD_FAST_BORROW_7_r01 969 -#define _LOAD_FAST_BORROW_7_r12 970 -#define _LOAD_FAST_BORROW_7_r23 971 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 972 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 973 -#define _LOAD_FAST_CHECK_r01 974 -#define _LOAD_FAST_LOAD_FAST_r02 975 -#define _LOAD_FAST_LOAD_FAST_r13 976 -#define _LOAD_FROM_DICT_OR_DEREF_r11 977 -#define _LOAD_FROM_DICT_OR_GLOBALS_r11 978 -#define _LOAD_GLOBAL_r00 979 -#define _LOAD_GLOBAL_BUILTINS_r01 980 -#define _LOAD_GLOBAL_BUILTINS_r12 981 -#define _LOAD_GLOBAL_BUILTINS_r23 982 -#define _LOAD_GLOBAL_MODULE_r01 983 -#define _LOAD_GLOBAL_MODULE_r12 984 -#define _LOAD_GLOBAL_MODULE_r23 985 -#define _LOAD_LOCALS_r01 986 -#define _LOAD_NAME_r01 987 -#define _LOAD_SMALL_INT_r01 988 -#define _LOAD_SMALL_INT_r12 989 -#define _LOAD_SMALL_INT_r23 990 -#define _LOAD_SMALL_INT_0_r01 991 -#define _LOAD_SMALL_INT_0_r12 992 -#define _LOAD_SMALL_INT_0_r23 993 -#define _LOAD_SMALL_INT_1_r01 994 -#define _LOAD_SMALL_INT_1_r12 995 -#define _LOAD_SMALL_INT_1_r23 996 -#define _LOAD_SMALL_INT_2_r01 997 -#define _LOAD_SMALL_INT_2_r12 998 -#define _LOAD_SMALL_INT_2_r23 999 -#define _LOAD_SMALL_INT_3_r01 1000 -#define _LOAD_SMALL_INT_3_r12 1001 -#define _LOAD_SMALL_INT_3_r23 1002 -#define _LOAD_SPECIAL_r00 1003 -#define _LOAD_SUPER_ATTR_ATTR_r31 1004 -#define _LOAD_SUPER_ATTR_METHOD_r32 1005 -#define _MAKE_CALLARGS_A_TUPLE_r00 1006 -#define _MAKE_CELL_r00 1007 -#define _MAKE_FUNCTION_r11 1008 -#define _MAKE_WARM_r00 1009 -#define _MAKE_WARM_r11 1010 -#define _MAKE_WARM_r22 1011 -#define _MAKE_WARM_r33 1012 -#define _MAP_ADD_r20 1013 -#define _MATCH_CLASS_r31 1014 -#define _MATCH_KEYS_r01 1015 -#define _MATCH_MAPPING_r01 1016 -#define _MATCH_MAPPING_r12 1017 -#define _MATCH_MAPPING_r23 1018 -#define _MATCH_SEQUENCE_r01 1019 -#define _MATCH_SEQUENCE_r12 1020 -#define _MATCH_SEQUENCE_r23 1021 -#define _MAYBE_EXPAND_METHOD_r00 1022 -#define _MAYBE_EXPAND_METHOD_KW_r00 1023 -#define _MONITOR_CALL_r00 1024 -#define _MONITOR_CALL_KW_r00 1025 -#define _MONITOR_JUMP_BACKWARD_r00 1026 -#define _MONITOR_JUMP_BACKWARD_r11 1027 -#define _MONITOR_JUMP_BACKWARD_r22 1028 -#define _MONITOR_JUMP_BACKWARD_r33 1029 -#define _MONITOR_RESUME_r00 1030 -#define _NOP_r00 1031 -#define _NOP_r11 1032 -#define _NOP_r22 1033 -#define _NOP_r33 1034 -#define _POP_CALL_r20 1035 -#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1036 -#define _POP_CALL_ONE_r30 1037 -#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1038 -#define _POP_CALL_TWO_r30 1039 -#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1040 -#define _POP_EXCEPT_r10 1041 -#define _POP_ITER_r20 1042 -#define _POP_JUMP_IF_FALSE_r10 1043 -#define _POP_JUMP_IF_FALSE_r21 1044 -#define _POP_JUMP_IF_FALSE_r32 1045 -#define _POP_JUMP_IF_TRUE_r10 1046 -#define _POP_JUMP_IF_TRUE_r21 1047 -#define _POP_JUMP_IF_TRUE_r32 1048 -#define _POP_TOP_r10 1049 -#define _POP_TOP_LOAD_CONST_INLINE_r11 1050 -#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1051 -#define _POP_TWO_r20 1052 -#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1053 -#define _PUSH_EXC_INFO_r01 1054 -#define _PUSH_EXC_INFO_r12 1055 -#define _PUSH_EXC_INFO_r23 1056 -#define _PUSH_FRAME_r10 1057 -#define _PUSH_NULL_r01 1058 -#define _PUSH_NULL_r12 1059 -#define _PUSH_NULL_r23 1060 -#define _PUSH_NULL_CONDITIONAL_r00 1061 -#define _PY_FRAME_GENERAL_r01 1062 -#define _PY_FRAME_KW_r11 1063 -#define _QUICKEN_RESUME_r00 1064 -#define _QUICKEN_RESUME_r11 1065 -#define _QUICKEN_RESUME_r22 1066 -#define _QUICKEN_RESUME_r33 1067 -#define _REPLACE_WITH_TRUE_r11 1068 -#define _RESUME_CHECK_r00 1069 -#define _RESUME_CHECK_r11 1070 -#define _RESUME_CHECK_r22 1071 -#define _RESUME_CHECK_r33 1072 -#define _RETURN_GENERATOR_r01 1073 -#define _RETURN_VALUE_r11 1074 -#define _SAVE_RETURN_OFFSET_r00 1075 -#define _SAVE_RETURN_OFFSET_r11 1076 -#define _SAVE_RETURN_OFFSET_r22 1077 -#define _SAVE_RETURN_OFFSET_r33 1078 -#define _SEND_r11 1079 -#define _SEND_GEN_FRAME_r00 1080 -#define _SEND_GEN_FRAME_r11 1081 -#define _SEND_GEN_FRAME_r22 1082 -#define _SEND_GEN_FRAME_r33 1083 -#define _SETUP_ANNOTATIONS_r00 1084 -#define _SET_ADD_r10 1085 -#define _SET_FUNCTION_ATTRIBUTE_r10 1086 -#define _SET_FUNCTION_ATTRIBUTE_r21 1087 -#define _SET_FUNCTION_ATTRIBUTE_r32 1088 -#define _SET_IP_r00 1089 -#define _SET_IP_r11 1090 -#define _SET_IP_r22 1091 -#define _SET_IP_r33 1092 -#define _SET_UPDATE_r10 1093 -#define _SPILL_OR_RELOAD_r01 1094 -#define _SPILL_OR_RELOAD_r02 1095 -#define _SPILL_OR_RELOAD_r03 1096 -#define _SPILL_OR_RELOAD_r10 1097 -#define _SPILL_OR_RELOAD_r12 1098 -#define _SPILL_OR_RELOAD_r13 1099 -#define _SPILL_OR_RELOAD_r20 1100 -#define _SPILL_OR_RELOAD_r21 1101 -#define _SPILL_OR_RELOAD_r23 1102 -#define _SPILL_OR_RELOAD_r30 1103 -#define _SPILL_OR_RELOAD_r31 1104 -#define _SPILL_OR_RELOAD_r32 1105 -#define _START_EXECUTOR_r00 1106 -#define _STORE_ATTR_r20 1107 -#define _STORE_ATTR_INSTANCE_VALUE_r20 1108 -#define _STORE_ATTR_SLOT_r20 1109 -#define _STORE_ATTR_WITH_HINT_r20 1110 -#define _STORE_DEREF_r10 1111 -#define _STORE_FAST_r10 1112 -#define _STORE_FAST_0_r10 1113 -#define _STORE_FAST_1_r10 1114 -#define _STORE_FAST_2_r10 1115 -#define _STORE_FAST_3_r10 1116 -#define _STORE_FAST_4_r10 1117 -#define _STORE_FAST_5_r10 1118 -#define _STORE_FAST_6_r10 1119 -#define _STORE_FAST_7_r10 1120 -#define _STORE_FAST_LOAD_FAST_r11 1121 -#define _STORE_FAST_STORE_FAST_r20 1122 -#define _STORE_GLOBAL_r10 1123 -#define _STORE_NAME_r10 1124 -#define _STORE_SLICE_r30 1125 -#define _STORE_SUBSCR_r30 1126 -#define _STORE_SUBSCR_DICT_r30 1127 -#define _STORE_SUBSCR_LIST_INT_r30 1128 -#define _SWAP_r11 1129 -#define _TIER2_RESUME_CHECK_r00 1130 -#define _TIER2_RESUME_CHECK_r11 1131 -#define _TIER2_RESUME_CHECK_r22 1132 -#define _TIER2_RESUME_CHECK_r33 1133 -#define _TO_BOOL_r11 1134 -#define _TO_BOOL_BOOL_r00 1135 -#define _TO_BOOL_BOOL_r11 1136 -#define _TO_BOOL_BOOL_r22 1137 -#define _TO_BOOL_BOOL_r33 1138 -#define _TO_BOOL_INT_r11 1139 -#define _TO_BOOL_LIST_r11 1140 -#define _TO_BOOL_NONE_r00 1141 -#define _TO_BOOL_NONE_r11 1142 -#define _TO_BOOL_NONE_r22 1143 -#define _TO_BOOL_NONE_r33 1144 -#define _TO_BOOL_STR_r11 1145 -#define _UNARY_INVERT_r11 1146 -#define _UNARY_NEGATIVE_r11 1147 -#define _UNARY_NOT_r00 1148 -#define _UNARY_NOT_r11 1149 -#define _UNARY_NOT_r22 1150 -#define _UNARY_NOT_r33 1151 -#define _UNPACK_EX_r10 1152 -#define _UNPACK_SEQUENCE_r10 1153 -#define _UNPACK_SEQUENCE_LIST_r10 1154 -#define _UNPACK_SEQUENCE_TUPLE_r10 1155 -#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1156 -#define _WITH_EXCEPT_START_r01 1157 -#define _YIELD_VALUE_r00 1158 -#define _YIELD_VALUE_r11 1159 -#define _YIELD_VALUE_r22 1160 -#define _YIELD_VALUE_r33 1161 -#define MAX_UOP_REGS_ID 1161 +#define _COMPARE_OP_INT_r11 639 +#define _COMPARE_OP_STR_r10 640 +#define _COMPARE_OP_STR_r21 641 +#define _COMPARE_OP_STR_r32 642 +#define _CONTAINS_OP_r21 643 +#define _CONTAINS_OP_DICT_r21 644 +#define _CONTAINS_OP_SET_r21 645 +#define _CONVERT_VALUE_r11 646 +#define _COPY_r01 647 +#define _COPY_FREE_VARS_r00 648 +#define _COPY_FREE_VARS_r11 649 +#define _COPY_FREE_VARS_r22 650 +#define _COPY_FREE_VARS_r33 651 +#define _CREATE_INIT_FRAME_r01 652 +#define _DELETE_ATTR_r10 653 +#define _DELETE_DEREF_r00 654 +#define _DELETE_FAST_r00 655 +#define _DELETE_GLOBAL_r00 656 +#define _DELETE_NAME_r00 657 +#define _DELETE_SUBSCR_r20 658 +#define _DEOPT_r00 659 +#define _DICT_MERGE_r10 660 +#define _DICT_UPDATE_r10 661 +#define _DO_CALL_r01 662 +#define _DO_CALL_FUNCTION_EX_r31 663 +#define _DO_CALL_KW_r11 664 +#define _END_FOR_r10 665 +#define _END_SEND_r21 666 +#define _ERROR_POP_N_r00 667 +#define _EXIT_INIT_CHECK_r10 668 +#define _EXIT_TRACE_r00 669 +#define _EXIT_TRACE_r10 670 +#define _EXIT_TRACE_r20 671 +#define _EXIT_TRACE_r30 672 +#define _EXPAND_METHOD_r00 673 +#define _EXPAND_METHOD_KW_r00 674 +#define _FATAL_ERROR_r00 675 +#define _FATAL_ERROR_r11 676 +#define _FATAL_ERROR_r22 677 +#define _FATAL_ERROR_r33 678 +#define _FORMAT_SIMPLE_r11 679 +#define _FORMAT_WITH_SPEC_r21 680 +#define _FOR_ITER_r01 681 +#define _FOR_ITER_GEN_FRAME_r22 682 +#define _FOR_ITER_TIER_TWO_r00 683 +#define _GET_AITER_r11 684 +#define _GET_ANEXT_r01 685 +#define _GET_AWAITABLE_r11 686 +#define _GET_ITER_r12 687 +#define _GET_LEN_r01 688 +#define _GET_YIELD_FROM_ITER_r11 689 +#define _GUARD_BINARY_OP_EXTEND_r00 690 +#define _GUARD_CALLABLE_ISINSTANCE_r33 691 +#define _GUARD_CALLABLE_LEN_r33 692 +#define _GUARD_CALLABLE_LIST_APPEND_r33 693 +#define _GUARD_CALLABLE_STR_1_r33 694 +#define _GUARD_CALLABLE_TUPLE_1_r33 695 +#define _GUARD_CALLABLE_TYPE_1_r33 696 +#define _GUARD_DORV_NO_DICT_r00 697 +#define _GUARD_DORV_NO_DICT_r11 698 +#define _GUARD_DORV_NO_DICT_r22 699 +#define _GUARD_DORV_NO_DICT_r33 700 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00 701 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 702 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 703 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 704 +#define _GUARD_GLOBALS_VERSION_r00 705 +#define _GUARD_GLOBALS_VERSION_r11 706 +#define _GUARD_GLOBALS_VERSION_r22 707 +#define _GUARD_GLOBALS_VERSION_r33 708 +#define _GUARD_IS_FALSE_POP_r00 709 +#define _GUARD_IS_NONE_POP_r00 710 +#define _GUARD_IS_NOT_NONE_POP_r00 711 +#define _GUARD_IS_TRUE_POP_r00 712 +#define _GUARD_KEYS_VERSION_r00 713 +#define _GUARD_KEYS_VERSION_r11 714 +#define _GUARD_KEYS_VERSION_r22 715 +#define _GUARD_KEYS_VERSION_r33 716 +#define _GUARD_NOS_DICT_r00 717 +#define _GUARD_NOS_DICT_r11 718 +#define _GUARD_NOS_DICT_r22 719 +#define _GUARD_NOS_DICT_r33 720 +#define _GUARD_NOS_FLOAT_r00 721 +#define _GUARD_NOS_FLOAT_r11 722 +#define _GUARD_NOS_FLOAT_r22 723 +#define _GUARD_NOS_FLOAT_r33 724 +#define _GUARD_NOS_INT_r00 725 +#define _GUARD_NOS_INT_r11 726 +#define _GUARD_NOS_INT_r22 727 +#define _GUARD_NOS_INT_r33 728 +#define _GUARD_NOS_LIST_r00 729 +#define _GUARD_NOS_LIST_r11 730 +#define _GUARD_NOS_LIST_r22 731 +#define _GUARD_NOS_LIST_r33 732 +#define _GUARD_NOS_NOT_NULL_r00 733 +#define _GUARD_NOS_NOT_NULL_r11 734 +#define _GUARD_NOS_NOT_NULL_r22 735 +#define _GUARD_NOS_NOT_NULL_r33 736 +#define _GUARD_NOS_NULL_r00 737 +#define _GUARD_NOS_NULL_r11 738 +#define _GUARD_NOS_NULL_r22 739 +#define _GUARD_NOS_NULL_r33 740 +#define _GUARD_NOS_TUPLE_r00 741 +#define _GUARD_NOS_TUPLE_r11 742 +#define _GUARD_NOS_TUPLE_r22 743 +#define _GUARD_NOS_TUPLE_r33 744 +#define _GUARD_NOS_UNICODE_r00 745 +#define _GUARD_NOS_UNICODE_r11 746 +#define _GUARD_NOS_UNICODE_r22 747 +#define _GUARD_NOS_UNICODE_r33 748 +#define _GUARD_NOT_EXHAUSTED_LIST_r00 749 +#define _GUARD_NOT_EXHAUSTED_LIST_r11 750 +#define _GUARD_NOT_EXHAUSTED_LIST_r22 751 +#define _GUARD_NOT_EXHAUSTED_LIST_r33 752 +#define _GUARD_NOT_EXHAUSTED_RANGE_r00 753 +#define _GUARD_NOT_EXHAUSTED_RANGE_r11 754 +#define _GUARD_NOT_EXHAUSTED_RANGE_r22 755 +#define _GUARD_NOT_EXHAUSTED_RANGE_r33 756 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r00 757 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r11 758 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 759 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 760 +#define _GUARD_THIRD_NULL_r33 761 +#define _GUARD_TOS_ANY_SET_r00 762 +#define _GUARD_TOS_ANY_SET_r11 763 +#define _GUARD_TOS_ANY_SET_r22 764 +#define _GUARD_TOS_ANY_SET_r33 765 +#define _GUARD_TOS_DICT_r00 766 +#define _GUARD_TOS_DICT_r11 767 +#define _GUARD_TOS_DICT_r22 768 +#define _GUARD_TOS_DICT_r33 769 +#define _GUARD_TOS_FLOAT_r00 770 +#define _GUARD_TOS_FLOAT_r11 771 +#define _GUARD_TOS_FLOAT_r22 772 +#define _GUARD_TOS_FLOAT_r33 773 +#define _GUARD_TOS_INT_r00 774 +#define _GUARD_TOS_INT_r11 775 +#define _GUARD_TOS_INT_r22 776 +#define _GUARD_TOS_INT_r33 777 +#define _GUARD_TOS_LIST_r00 778 +#define _GUARD_TOS_LIST_r11 779 +#define _GUARD_TOS_LIST_r22 780 +#define _GUARD_TOS_LIST_r33 781 +#define _GUARD_TOS_SLICE_r00 782 +#define _GUARD_TOS_SLICE_r11 783 +#define _GUARD_TOS_SLICE_r22 784 +#define _GUARD_TOS_SLICE_r33 785 +#define _GUARD_TOS_TUPLE_r00 786 +#define _GUARD_TOS_TUPLE_r11 787 +#define _GUARD_TOS_TUPLE_r22 788 +#define _GUARD_TOS_TUPLE_r33 789 +#define _GUARD_TOS_UNICODE_r00 790 +#define _GUARD_TOS_UNICODE_r11 791 +#define _GUARD_TOS_UNICODE_r22 792 +#define _GUARD_TOS_UNICODE_r33 793 +#define _GUARD_TYPE_VERSION_r00 794 +#define _GUARD_TYPE_VERSION_r11 795 +#define _GUARD_TYPE_VERSION_r22 796 +#define _GUARD_TYPE_VERSION_r33 797 +#define _GUARD_TYPE_VERSION_AND_LOCK_r00 798 +#define _GUARD_TYPE_VERSION_AND_LOCK_r11 799 +#define _GUARD_TYPE_VERSION_AND_LOCK_r22 800 +#define _GUARD_TYPE_VERSION_AND_LOCK_r33 801 +#define _IMPORT_FROM_r01 802 +#define _IMPORT_NAME_r21 803 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 804 +#define _INIT_CALL_PY_EXACT_ARGS_r01 805 +#define _INIT_CALL_PY_EXACT_ARGS_0_r01 806 +#define _INIT_CALL_PY_EXACT_ARGS_1_r01 807 +#define _INIT_CALL_PY_EXACT_ARGS_2_r01 808 +#define _INIT_CALL_PY_EXACT_ARGS_3_r01 809 +#define _INIT_CALL_PY_EXACT_ARGS_4_r01 810 +#define _INSERT_NULL_r10 811 +#define _INSTRUMENTED_FOR_ITER_r01 812 +#define _INSTRUMENTED_INSTRUCTION_r00 813 +#define _INSTRUMENTED_JUMP_FORWARD_r00 814 +#define _INSTRUMENTED_JUMP_FORWARD_r11 815 +#define _INSTRUMENTED_JUMP_FORWARD_r22 816 +#define _INSTRUMENTED_JUMP_FORWARD_r33 817 +#define _INSTRUMENTED_LINE_r00 818 +#define _INSTRUMENTED_NOT_TAKEN_r00 819 +#define _INSTRUMENTED_NOT_TAKEN_r11 820 +#define _INSTRUMENTED_NOT_TAKEN_r22 821 +#define _INSTRUMENTED_NOT_TAKEN_r33 822 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 823 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 824 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 825 +#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 826 +#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 827 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 828 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 829 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 830 +#define _IS_NONE_r11 831 +#define _IS_OP_r21 832 +#define _ITER_CHECK_LIST_r00 833 +#define _ITER_CHECK_LIST_r11 834 +#define _ITER_CHECK_LIST_r22 835 +#define _ITER_CHECK_LIST_r33 836 +#define _ITER_CHECK_RANGE_r00 837 +#define _ITER_CHECK_RANGE_r11 838 +#define _ITER_CHECK_RANGE_r22 839 +#define _ITER_CHECK_RANGE_r33 840 +#define _ITER_CHECK_TUPLE_r00 841 +#define _ITER_CHECK_TUPLE_r11 842 +#define _ITER_CHECK_TUPLE_r22 843 +#define _ITER_CHECK_TUPLE_r33 844 +#define _ITER_JUMP_LIST_r00 845 +#define _ITER_JUMP_LIST_r11 846 +#define _ITER_JUMP_LIST_r22 847 +#define _ITER_JUMP_LIST_r33 848 +#define _ITER_JUMP_RANGE_r00 849 +#define _ITER_JUMP_RANGE_r11 850 +#define _ITER_JUMP_RANGE_r22 851 +#define _ITER_JUMP_RANGE_r33 852 +#define _ITER_JUMP_TUPLE_r00 853 +#define _ITER_JUMP_TUPLE_r11 854 +#define _ITER_JUMP_TUPLE_r22 855 +#define _ITER_JUMP_TUPLE_r33 856 +#define _ITER_NEXT_LIST_r00 857 +#define _ITER_NEXT_LIST_TIER_TWO_r00 858 +#define _ITER_NEXT_RANGE_r23 859 +#define _ITER_NEXT_TUPLE_r23 860 +#define _JUMP_TO_TOP_r00 861 +#define _LIST_APPEND_r10 862 +#define _LIST_EXTEND_r10 863 +#define _LOAD_ATTR_r10 864 +#define _LOAD_ATTR_CLASS_r11 865 +#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 866 +#define _LOAD_ATTR_INSTANCE_VALUE_r11 867 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r01 868 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 869 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 870 +#define _LOAD_ATTR_METHOD_NO_DICT_r01 871 +#define _LOAD_ATTR_METHOD_NO_DICT_r12 872 +#define _LOAD_ATTR_METHOD_NO_DICT_r23 873 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r01 874 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 875 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 876 +#define _LOAD_ATTR_MODULE_r11 877 +#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 878 +#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 879 +#define _LOAD_ATTR_PROPERTY_FRAME_r00 880 +#define _LOAD_ATTR_PROPERTY_FRAME_r11 881 +#define _LOAD_ATTR_PROPERTY_FRAME_r22 882 +#define _LOAD_ATTR_PROPERTY_FRAME_r33 883 +#define _LOAD_ATTR_SLOT_r11 884 +#define _LOAD_ATTR_WITH_HINT_r11 885 +#define _LOAD_BUILD_CLASS_r01 886 +#define _LOAD_BYTECODE_r00 887 +#define _LOAD_COMMON_CONSTANT_r01 888 +#define _LOAD_COMMON_CONSTANT_r12 889 +#define _LOAD_COMMON_CONSTANT_r23 890 +#define _LOAD_CONST_r01 891 +#define _LOAD_CONST_r12 892 +#define _LOAD_CONST_r23 893 +#define _LOAD_CONST_INLINE_r01 894 +#define _LOAD_CONST_INLINE_r12 895 +#define _LOAD_CONST_INLINE_r23 896 +#define _LOAD_CONST_INLINE_BORROW_r01 897 +#define _LOAD_CONST_INLINE_BORROW_r12 898 +#define _LOAD_CONST_INLINE_BORROW_r23 899 +#define _LOAD_CONST_UNDER_INLINE_r01 900 +#define _LOAD_CONST_UNDER_INLINE_r12 901 +#define _LOAD_CONST_UNDER_INLINE_r23 902 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r01 903 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 904 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 905 +#define _LOAD_DEREF_r01 906 +#define _LOAD_FAST_r01 907 +#define _LOAD_FAST_r12 908 +#define _LOAD_FAST_r23 909 +#define _LOAD_FAST_0_r01 910 +#define _LOAD_FAST_0_r12 911 +#define _LOAD_FAST_0_r23 912 +#define _LOAD_FAST_1_r01 913 +#define _LOAD_FAST_1_r12 914 +#define _LOAD_FAST_1_r23 915 +#define _LOAD_FAST_2_r01 916 +#define _LOAD_FAST_2_r12 917 +#define _LOAD_FAST_2_r23 918 +#define _LOAD_FAST_3_r01 919 +#define _LOAD_FAST_3_r12 920 +#define _LOAD_FAST_3_r23 921 +#define _LOAD_FAST_4_r01 922 +#define _LOAD_FAST_4_r12 923 +#define _LOAD_FAST_4_r23 924 +#define _LOAD_FAST_5_r01 925 +#define _LOAD_FAST_5_r12 926 +#define _LOAD_FAST_5_r23 927 +#define _LOAD_FAST_6_r01 928 +#define _LOAD_FAST_6_r12 929 +#define _LOAD_FAST_6_r23 930 +#define _LOAD_FAST_7_r01 931 +#define _LOAD_FAST_7_r12 932 +#define _LOAD_FAST_7_r23 933 +#define _LOAD_FAST_AND_CLEAR_r01 934 +#define _LOAD_FAST_AND_CLEAR_r12 935 +#define _LOAD_FAST_AND_CLEAR_r23 936 +#define _LOAD_FAST_BORROW_r01 937 +#define _LOAD_FAST_BORROW_r12 938 +#define _LOAD_FAST_BORROW_r23 939 +#define _LOAD_FAST_BORROW_0_r01 940 +#define _LOAD_FAST_BORROW_0_r12 941 +#define _LOAD_FAST_BORROW_0_r23 942 +#define _LOAD_FAST_BORROW_1_r01 943 +#define _LOAD_FAST_BORROW_1_r12 944 +#define _LOAD_FAST_BORROW_1_r23 945 +#define _LOAD_FAST_BORROW_2_r01 946 +#define _LOAD_FAST_BORROW_2_r12 947 +#define _LOAD_FAST_BORROW_2_r23 948 +#define _LOAD_FAST_BORROW_3_r01 949 +#define _LOAD_FAST_BORROW_3_r12 950 +#define _LOAD_FAST_BORROW_3_r23 951 +#define _LOAD_FAST_BORROW_4_r01 952 +#define _LOAD_FAST_BORROW_4_r12 953 +#define _LOAD_FAST_BORROW_4_r23 954 +#define _LOAD_FAST_BORROW_5_r01 955 +#define _LOAD_FAST_BORROW_5_r12 956 +#define _LOAD_FAST_BORROW_5_r23 957 +#define _LOAD_FAST_BORROW_6_r01 958 +#define _LOAD_FAST_BORROW_6_r12 959 +#define _LOAD_FAST_BORROW_6_r23 960 +#define _LOAD_FAST_BORROW_7_r01 961 +#define _LOAD_FAST_BORROW_7_r12 962 +#define _LOAD_FAST_BORROW_7_r23 963 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 964 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 965 +#define _LOAD_FAST_CHECK_r01 966 +#define _LOAD_FAST_LOAD_FAST_r02 967 +#define _LOAD_FAST_LOAD_FAST_r13 968 +#define _LOAD_FROM_DICT_OR_DEREF_r11 969 +#define _LOAD_FROM_DICT_OR_GLOBALS_r11 970 +#define _LOAD_GLOBAL_r00 971 +#define _LOAD_GLOBAL_BUILTINS_r00 972 +#define _LOAD_GLOBAL_MODULE_r00 973 +#define _LOAD_LOCALS_r01 974 +#define _LOAD_NAME_r01 975 +#define _LOAD_SMALL_INT_r01 976 +#define _LOAD_SMALL_INT_r12 977 +#define _LOAD_SMALL_INT_r23 978 +#define _LOAD_SMALL_INT_0_r01 979 +#define _LOAD_SMALL_INT_0_r12 980 +#define _LOAD_SMALL_INT_0_r23 981 +#define _LOAD_SMALL_INT_1_r01 982 +#define _LOAD_SMALL_INT_1_r12 983 +#define _LOAD_SMALL_INT_1_r23 984 +#define _LOAD_SMALL_INT_2_r01 985 +#define _LOAD_SMALL_INT_2_r12 986 +#define _LOAD_SMALL_INT_2_r23 987 +#define _LOAD_SMALL_INT_3_r01 988 +#define _LOAD_SMALL_INT_3_r12 989 +#define _LOAD_SMALL_INT_3_r23 990 +#define _LOAD_SPECIAL_r00 991 +#define _LOAD_SUPER_ATTR_ATTR_r11 992 +#define _LOAD_SUPER_ATTR_METHOD_r22 993 +#define _MAKE_CALLARGS_A_TUPLE_r00 994 +#define _MAKE_CELL_r00 995 +#define _MAKE_FUNCTION_r11 996 +#define _MAKE_WARM_r00 997 +#define _MAKE_WARM_r11 998 +#define _MAKE_WARM_r22 999 +#define _MAKE_WARM_r33 1000 +#define _MAP_ADD_r20 1001 +#define _MATCH_CLASS_r31 1002 +#define _MATCH_KEYS_r01 1003 +#define _MATCH_MAPPING_r01 1004 +#define _MATCH_MAPPING_r12 1005 +#define _MATCH_MAPPING_r23 1006 +#define _MATCH_SEQUENCE_r01 1007 +#define _MATCH_SEQUENCE_r12 1008 +#define _MATCH_SEQUENCE_r23 1009 +#define _MAYBE_EXPAND_METHOD_r00 1010 +#define _MAYBE_EXPAND_METHOD_KW_r00 1011 +#define _MONITOR_CALL_r00 1012 +#define _MONITOR_CALL_KW_r00 1013 +#define _MONITOR_JUMP_BACKWARD_r00 1014 +#define _MONITOR_JUMP_BACKWARD_r11 1015 +#define _MONITOR_JUMP_BACKWARD_r22 1016 +#define _MONITOR_JUMP_BACKWARD_r33 1017 +#define _MONITOR_RESUME_r00 1018 +#define _NOP_r00 1019 +#define _NOP_r11 1020 +#define _NOP_r22 1021 +#define _NOP_r33 1022 +#define _POP_CALL_r20 1023 +#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1024 +#define _POP_CALL_ONE_r30 1025 +#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1026 +#define _POP_CALL_TWO_r30 1027 +#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1028 +#define _POP_EXCEPT_r10 1029 +#define _POP_ITER_r20 1030 +#define _POP_JUMP_IF_FALSE_r10 1031 +#define _POP_JUMP_IF_FALSE_r21 1032 +#define _POP_JUMP_IF_FALSE_r32 1033 +#define _POP_JUMP_IF_TRUE_r10 1034 +#define _POP_JUMP_IF_TRUE_r21 1035 +#define _POP_JUMP_IF_TRUE_r32 1036 +#define _POP_TOP_r10 1037 +#define _POP_TOP_LOAD_CONST_INLINE_r11 1038 +#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1039 +#define _POP_TWO_r20 1040 +#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1041 +#define _PUSH_EXC_INFO_r01 1042 +#define _PUSH_EXC_INFO_r12 1043 +#define _PUSH_EXC_INFO_r23 1044 +#define _PUSH_FRAME_r10 1045 +#define _PUSH_NULL_r01 1046 +#define _PUSH_NULL_r12 1047 +#define _PUSH_NULL_r23 1048 +#define _PUSH_NULL_CONDITIONAL_r00 1049 +#define _PY_FRAME_GENERAL_r01 1050 +#define _PY_FRAME_KW_r11 1051 +#define _QUICKEN_RESUME_r00 1052 +#define _QUICKEN_RESUME_r11 1053 +#define _QUICKEN_RESUME_r22 1054 +#define _QUICKEN_RESUME_r33 1055 +#define _REPLACE_WITH_TRUE_r11 1056 +#define _RESUME_CHECK_r00 1057 +#define _RESUME_CHECK_r11 1058 +#define _RESUME_CHECK_r22 1059 +#define _RESUME_CHECK_r33 1060 +#define _RETURN_GENERATOR_r01 1061 +#define _RETURN_VALUE_r11 1062 +#define _SAVE_RETURN_OFFSET_r00 1063 +#define _SAVE_RETURN_OFFSET_r11 1064 +#define _SAVE_RETURN_OFFSET_r22 1065 +#define _SAVE_RETURN_OFFSET_r33 1066 +#define _SEND_r11 1067 +#define _SEND_GEN_FRAME_r00 1068 +#define _SEND_GEN_FRAME_r11 1069 +#define _SEND_GEN_FRAME_r22 1070 +#define _SEND_GEN_FRAME_r33 1071 +#define _SETUP_ANNOTATIONS_r00 1072 +#define _SET_ADD_r10 1073 +#define _SET_FUNCTION_ATTRIBUTE_r10 1074 +#define _SET_FUNCTION_ATTRIBUTE_r21 1075 +#define _SET_FUNCTION_ATTRIBUTE_r32 1076 +#define _SET_IP_r00 1077 +#define _SET_IP_r11 1078 +#define _SET_IP_r22 1079 +#define _SET_IP_r33 1080 +#define _SET_UPDATE_r10 1081 +#define _SPILL_OR_RELOAD_r01 1082 +#define _SPILL_OR_RELOAD_r02 1083 +#define _SPILL_OR_RELOAD_r03 1084 +#define _SPILL_OR_RELOAD_r10 1085 +#define _SPILL_OR_RELOAD_r12 1086 +#define _SPILL_OR_RELOAD_r13 1087 +#define _SPILL_OR_RELOAD_r20 1088 +#define _SPILL_OR_RELOAD_r21 1089 +#define _SPILL_OR_RELOAD_r23 1090 +#define _SPILL_OR_RELOAD_r30 1091 +#define _SPILL_OR_RELOAD_r31 1092 +#define _SPILL_OR_RELOAD_r32 1093 +#define _START_EXECUTOR_r00 1094 +#define _STORE_ATTR_r20 1095 +#define _STORE_ATTR_INSTANCE_VALUE_r20 1096 +#define _STORE_ATTR_SLOT_r00 1097 +#define _STORE_ATTR_WITH_HINT_r00 1098 +#define _STORE_DEREF_r10 1099 +#define _STORE_FAST_r10 1100 +#define _STORE_FAST_0_r10 1101 +#define _STORE_FAST_1_r10 1102 +#define _STORE_FAST_2_r10 1103 +#define _STORE_FAST_3_r10 1104 +#define _STORE_FAST_4_r10 1105 +#define _STORE_FAST_5_r10 1106 +#define _STORE_FAST_6_r10 1107 +#define _STORE_FAST_7_r10 1108 +#define _STORE_FAST_LOAD_FAST_r11 1109 +#define _STORE_FAST_STORE_FAST_r20 1110 +#define _STORE_GLOBAL_r10 1111 +#define _STORE_NAME_r10 1112 +#define _STORE_SLICE_r30 1113 +#define _STORE_SUBSCR_r30 1114 +#define _STORE_SUBSCR_DICT_r30 1115 +#define _STORE_SUBSCR_LIST_INT_r00 1116 +#define _SWAP_r11 1117 +#define _TIER2_RESUME_CHECK_r00 1118 +#define _TIER2_RESUME_CHECK_r11 1119 +#define _TIER2_RESUME_CHECK_r22 1120 +#define _TIER2_RESUME_CHECK_r33 1121 +#define _TO_BOOL_r11 1122 +#define _TO_BOOL_BOOL_r00 1123 +#define _TO_BOOL_BOOL_r11 1124 +#define _TO_BOOL_BOOL_r22 1125 +#define _TO_BOOL_BOOL_r33 1126 +#define _TO_BOOL_INT_r11 1127 +#define _TO_BOOL_LIST_r11 1128 +#define _TO_BOOL_NONE_r00 1129 +#define _TO_BOOL_NONE_r11 1130 +#define _TO_BOOL_NONE_r22 1131 +#define _TO_BOOL_NONE_r33 1132 +#define _TO_BOOL_STR_r11 1133 +#define _UNARY_INVERT_r11 1134 +#define _UNARY_NEGATIVE_r11 1135 +#define _UNARY_NOT_r00 1136 +#define _UNARY_NOT_r11 1137 +#define _UNARY_NOT_r22 1138 +#define _UNARY_NOT_r33 1139 +#define _UNPACK_EX_r10 1140 +#define _UNPACK_SEQUENCE_r10 1141 +#define _UNPACK_SEQUENCE_LIST_r00 1142 +#define _UNPACK_SEQUENCE_TUPLE_r00 1143 +#define _UNPACK_SEQUENCE_TWO_TUPLE_r11 1144 +#define _WITH_EXCEPT_START_r01 1145 +#define _YIELD_VALUE_r00 1146 +#define _YIELD_VALUE_r11 1147 +#define _YIELD_VALUE_r22 1148 +#define _YIELD_VALUE_r33 1149 +#define MAX_UOP_REGS_ID 1149 #ifdef __cplusplus } diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h index bf251c2d16688f..cbb4ccaef862b7 100644 --- a/Include/internal/pycore_uop_metadata.h +++ b/Include/internal/pycore_uop_metadata.h @@ -409,26 +409,26 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_BINARY_OP_ADD_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_ADD_FLOAT_r10, _BINARY_OP_ADD_FLOAT_r21, _BINARY_OP_ADD_FLOAT_r32 } }, [_BINARY_OP_SUBTRACT_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_SUBTRACT_FLOAT_r10, _BINARY_OP_SUBTRACT_FLOAT_r21, _BINARY_OP_SUBTRACT_FLOAT_r32 } }, [_BINARY_OP_ADD_UNICODE] = { 1, 3, -1, { 0, _BINARY_OP_ADD_UNICODE_r10, _BINARY_OP_ADD_UNICODE_r21, _BINARY_OP_ADD_UNICODE_r32 } }, - [_BINARY_OP_INPLACE_ADD_UNICODE] = { 2, 2, -2, { 0, 0, _BINARY_OP_INPLACE_ADD_UNICODE_r20, 0 } }, + [_BINARY_OP_INPLACE_ADD_UNICODE] = { 0, 0, 0, { _BINARY_OP_INPLACE_ADD_UNICODE_r00, 0, 0, 0 } }, [_GUARD_BINARY_OP_EXTEND] = { 0, 0, 0, { _GUARD_BINARY_OP_EXTEND_r00, 0, 0, 0 } }, [_BINARY_OP_EXTEND] = { 2, 2, -1, { 0, 0, _BINARY_OP_EXTEND_r21, 0 } }, [_BINARY_SLICE] = { 3, 3, -2, { 0, 0, 0, _BINARY_SLICE_r31 } }, [_STORE_SLICE] = { 3, 3, -3, { 0, 0, 0, _STORE_SLICE_r30 } }, - [_BINARY_OP_SUBSCR_LIST_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_LIST_INT_r21, 0 } }, + [_BINARY_OP_SUBSCR_LIST_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_LIST_INT_r11, 0, 0 } }, [_BINARY_OP_SUBSCR_LIST_SLICE] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_LIST_SLICE_r21, 0 } }, - [_BINARY_OP_SUBSCR_STR_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_STR_INT_r21, 0 } }, + [_BINARY_OP_SUBSCR_STR_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_STR_INT_r11, 0, 0 } }, [_GUARD_NOS_TUPLE] = { 0, 3, 0, { _GUARD_NOS_TUPLE_r00, _GUARD_NOS_TUPLE_r11, _GUARD_NOS_TUPLE_r22, _GUARD_NOS_TUPLE_r33 } }, [_GUARD_TOS_TUPLE] = { 0, 3, 0, { _GUARD_TOS_TUPLE_r00, _GUARD_TOS_TUPLE_r11, _GUARD_TOS_TUPLE_r22, _GUARD_TOS_TUPLE_r33 } }, - [_BINARY_OP_SUBSCR_TUPLE_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_TUPLE_INT_r21, 0 } }, + [_BINARY_OP_SUBSCR_TUPLE_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_TUPLE_INT_r11, 0, 0 } }, [_GUARD_NOS_DICT] = { 0, 3, 0, { _GUARD_NOS_DICT_r00, _GUARD_NOS_DICT_r11, _GUARD_NOS_DICT_r22, _GUARD_NOS_DICT_r33 } }, [_GUARD_TOS_DICT] = { 0, 3, 0, { _GUARD_TOS_DICT_r00, _GUARD_TOS_DICT_r11, _GUARD_TOS_DICT_r22, _GUARD_TOS_DICT_r33 } }, [_BINARY_OP_SUBSCR_DICT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_DICT_r21, 0 } }, - [_BINARY_OP_SUBSCR_CHECK_FUNC] = { 2, 2, 1, { 0, 0, _BINARY_OP_SUBSCR_CHECK_FUNC_r23, 0 } }, + [_BINARY_OP_SUBSCR_CHECK_FUNC] = { 2, 2, 0, { 0, 0, _BINARY_OP_SUBSCR_CHECK_FUNC_r22, 0 } }, [_BINARY_OP_SUBSCR_INIT_CALL] = { 3, 3, -2, { 0, 0, 0, _BINARY_OP_SUBSCR_INIT_CALL_r31 } }, [_LIST_APPEND] = { 1, 1, -1, { 0, _LIST_APPEND_r10, 0, 0 } }, [_SET_ADD] = { 1, 1, -1, { 0, _SET_ADD_r10, 0, 0 } }, [_STORE_SUBSCR] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_r30 } }, - [_STORE_SUBSCR_LIST_INT] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_LIST_INT_r30 } }, + [_STORE_SUBSCR_LIST_INT] = { 0, 0, 0, { _STORE_SUBSCR_LIST_INT_r00, 0, 0, 0 } }, [_STORE_SUBSCR_DICT] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_DICT_r30 } }, [_DELETE_SUBSCR] = { 2, 2, -2, { 0, 0, _DELETE_SUBSCR_r20, 0 } }, [_CALL_INTRINSIC_1] = { 1, 1, 0, { 0, _CALL_INTRINSIC_1_r11, 0, 0 } }, @@ -445,9 +445,9 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_STORE_NAME] = { 1, 1, -1, { 0, _STORE_NAME_r10, 0, 0 } }, [_DELETE_NAME] = { 0, 0, 0, { _DELETE_NAME_r00, 0, 0, 0 } }, [_UNPACK_SEQUENCE] = { 1, 1, -1, { 0, _UNPACK_SEQUENCE_r10, 0, 0 } }, - [_UNPACK_SEQUENCE_TWO_TUPLE] = { 1, 1, 1, { 0, _UNPACK_SEQUENCE_TWO_TUPLE_r12, 0, 0 } }, - [_UNPACK_SEQUENCE_TUPLE] = { 1, 1, -1, { 0, _UNPACK_SEQUENCE_TUPLE_r10, 0, 0 } }, - [_UNPACK_SEQUENCE_LIST] = { 1, 1, -1, { 0, _UNPACK_SEQUENCE_LIST_r10, 0, 0 } }, + [_UNPACK_SEQUENCE_TWO_TUPLE] = { 1, 1, 0, { 0, _UNPACK_SEQUENCE_TWO_TUPLE_r11, 0, 0 } }, + [_UNPACK_SEQUENCE_TUPLE] = { 0, 0, 0, { _UNPACK_SEQUENCE_TUPLE_r00, 0, 0, 0 } }, + [_UNPACK_SEQUENCE_LIST] = { 0, 0, 0, { _UNPACK_SEQUENCE_LIST_r00, 0, 0, 0 } }, [_UNPACK_EX] = { 1, 1, -1, { 0, _UNPACK_EX_r10, 0, 0 } }, [_STORE_ATTR] = { 2, 2, -2, { 0, 0, _STORE_ATTR_r20, 0 } }, [_DELETE_ATTR] = { 1, 1, -1, { 0, _DELETE_ATTR_r10, 0, 0 } }, @@ -458,8 +458,8 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_LOAD_GLOBAL] = { 0, 0, 0, { _LOAD_GLOBAL_r00, 0, 0, 0 } }, [_PUSH_NULL_CONDITIONAL] = { 0, 0, 0, { _PUSH_NULL_CONDITIONAL_r00, 0, 0, 0 } }, [_GUARD_GLOBALS_VERSION] = { 0, 3, 0, { _GUARD_GLOBALS_VERSION_r00, _GUARD_GLOBALS_VERSION_r11, _GUARD_GLOBALS_VERSION_r22, _GUARD_GLOBALS_VERSION_r33 } }, - [_LOAD_GLOBAL_MODULE] = { 0, 2, 1, { _LOAD_GLOBAL_MODULE_r01, _LOAD_GLOBAL_MODULE_r12, _LOAD_GLOBAL_MODULE_r23, 0 } }, - [_LOAD_GLOBAL_BUILTINS] = { 0, 2, 1, { _LOAD_GLOBAL_BUILTINS_r01, _LOAD_GLOBAL_BUILTINS_r12, _LOAD_GLOBAL_BUILTINS_r23, 0 } }, + [_LOAD_GLOBAL_MODULE] = { 0, 0, 0, { _LOAD_GLOBAL_MODULE_r00, 0, 0, 0 } }, + [_LOAD_GLOBAL_BUILTINS] = { 0, 0, 0, { _LOAD_GLOBAL_BUILTINS_r00, 0, 0, 0 } }, [_DELETE_FAST] = { 0, 0, 0, { _DELETE_FAST_r00, 0, 0, 0 } }, [_MAKE_CELL] = { 0, 0, 0, { _MAKE_CELL_r00, 0, 0, 0 } }, [_DELETE_DEREF] = { 0, 0, 0, { _DELETE_DEREF_r00, 0, 0, 0 } }, @@ -480,8 +480,8 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_DICT_UPDATE] = { 1, 1, -1, { 0, _DICT_UPDATE_r10, 0, 0 } }, [_DICT_MERGE] = { 1, 1, -1, { 0, _DICT_MERGE_r10, 0, 0 } }, [_MAP_ADD] = { 2, 2, -2, { 0, 0, _MAP_ADD_r20, 0 } }, - [_LOAD_SUPER_ATTR_ATTR] = { 3, 3, -2, { 0, 0, 0, _LOAD_SUPER_ATTR_ATTR_r31 } }, - [_LOAD_SUPER_ATTR_METHOD] = { 3, 3, -1, { 0, 0, 0, _LOAD_SUPER_ATTR_METHOD_r32 } }, + [_LOAD_SUPER_ATTR_ATTR] = { 1, 1, 0, { 0, _LOAD_SUPER_ATTR_ATTR_r11, 0, 0 } }, + [_LOAD_SUPER_ATTR_METHOD] = { 2, 2, 0, { 0, 0, _LOAD_SUPER_ATTR_METHOD_r22, 0 } }, [_LOAD_ATTR] = { 1, 1, -1, { 0, _LOAD_ATTR_r10, 0, 0 } }, [_GUARD_TYPE_VERSION] = { 0, 3, 0, { _GUARD_TYPE_VERSION_r00, _GUARD_TYPE_VERSION_r11, _GUARD_TYPE_VERSION_r22, _GUARD_TYPE_VERSION_r33 } }, [_GUARD_TYPE_VERSION_AND_LOCK] = { 0, 3, 0, { _GUARD_TYPE_VERSION_AND_LOCK_r00, _GUARD_TYPE_VERSION_AND_LOCK_r11, _GUARD_TYPE_VERSION_AND_LOCK_r22, _GUARD_TYPE_VERSION_AND_LOCK_r33 } }, @@ -495,11 +495,11 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_LOAD_ATTR_PROPERTY_FRAME] = { 0, 3, 0, { _LOAD_ATTR_PROPERTY_FRAME_r00, _LOAD_ATTR_PROPERTY_FRAME_r11, _LOAD_ATTR_PROPERTY_FRAME_r22, _LOAD_ATTR_PROPERTY_FRAME_r33 } }, [_GUARD_DORV_NO_DICT] = { 0, 3, 0, { _GUARD_DORV_NO_DICT_r00, _GUARD_DORV_NO_DICT_r11, _GUARD_DORV_NO_DICT_r22, _GUARD_DORV_NO_DICT_r33 } }, [_STORE_ATTR_INSTANCE_VALUE] = { 2, 2, -2, { 0, 0, _STORE_ATTR_INSTANCE_VALUE_r20, 0 } }, - [_STORE_ATTR_WITH_HINT] = { 2, 2, -2, { 0, 0, _STORE_ATTR_WITH_HINT_r20, 0 } }, - [_STORE_ATTR_SLOT] = { 2, 2, -2, { 0, 0, _STORE_ATTR_SLOT_r20, 0 } }, + [_STORE_ATTR_WITH_HINT] = { 0, 0, 0, { _STORE_ATTR_WITH_HINT_r00, 0, 0, 0 } }, + [_STORE_ATTR_SLOT] = { 0, 0, 0, { _STORE_ATTR_SLOT_r00, 0, 0, 0 } }, [_COMPARE_OP] = { 2, 2, -1, { 0, 0, _COMPARE_OP_r21, 0 } }, [_COMPARE_OP_FLOAT] = { 1, 3, -1, { 0, _COMPARE_OP_FLOAT_r10, _COMPARE_OP_FLOAT_r21, _COMPARE_OP_FLOAT_r32 } }, - [_COMPARE_OP_INT] = { 1, 3, -1, { 0, _COMPARE_OP_INT_r10, _COMPARE_OP_INT_r21, _COMPARE_OP_INT_r32 } }, + [_COMPARE_OP_INT] = { 1, 1, 0, { 0, _COMPARE_OP_INT_r11, 0, 0 } }, [_COMPARE_OP_STR] = { 1, 3, -1, { 0, _COMPARE_OP_STR_r10, _COMPARE_OP_STR_r21, _COMPARE_OP_STR_r32 } }, [_IS_OP] = { 2, 2, -1, { 0, 0, _IS_OP_r21, 0 } }, [_CONTAINS_OP] = { 2, 2, -1, { 0, 0, _CONTAINS_OP_r21, 0 } }, @@ -518,17 +518,17 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_MATCH_KEYS] = { 0, 0, 1, { _MATCH_KEYS_r01, 0, 0, 0 } }, [_GET_ITER] = { 1, 1, 1, { 0, _GET_ITER_r12, 0, 0 } }, [_GET_YIELD_FROM_ITER] = { 1, 1, 0, { 0, _GET_YIELD_FROM_ITER_r11, 0, 0 } }, - [_FOR_ITER_TIER_TWO] = { 0, 0, 1, { _FOR_ITER_TIER_TWO_r01, 0, 0, 0 } }, + [_FOR_ITER_TIER_TWO] = { 0, 0, 0, { _FOR_ITER_TIER_TWO_r00, 0, 0, 0 } }, [_ITER_CHECK_LIST] = { 0, 3, 0, { _ITER_CHECK_LIST_r00, _ITER_CHECK_LIST_r11, _ITER_CHECK_LIST_r22, _ITER_CHECK_LIST_r33 } }, [_GUARD_NOT_EXHAUSTED_LIST] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_LIST_r00, _GUARD_NOT_EXHAUSTED_LIST_r11, _GUARD_NOT_EXHAUSTED_LIST_r22, _GUARD_NOT_EXHAUSTED_LIST_r33 } }, - [_ITER_NEXT_LIST_TIER_TWO] = { 0, 0, 1, { _ITER_NEXT_LIST_TIER_TWO_r01, 0, 0, 0 } }, + [_ITER_NEXT_LIST_TIER_TWO] = { 0, 0, 0, { _ITER_NEXT_LIST_TIER_TWO_r00, 0, 0, 0 } }, [_ITER_CHECK_TUPLE] = { 0, 3, 0, { _ITER_CHECK_TUPLE_r00, _ITER_CHECK_TUPLE_r11, _ITER_CHECK_TUPLE_r22, _ITER_CHECK_TUPLE_r33 } }, [_GUARD_NOT_EXHAUSTED_TUPLE] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_TUPLE_r00, _GUARD_NOT_EXHAUSTED_TUPLE_r11, _GUARD_NOT_EXHAUSTED_TUPLE_r22, _GUARD_NOT_EXHAUSTED_TUPLE_r33 } }, [_ITER_NEXT_TUPLE] = { 2, 2, 1, { 0, 0, _ITER_NEXT_TUPLE_r23, 0 } }, [_ITER_CHECK_RANGE] = { 0, 3, 0, { _ITER_CHECK_RANGE_r00, _ITER_CHECK_RANGE_r11, _ITER_CHECK_RANGE_r22, _ITER_CHECK_RANGE_r33 } }, [_GUARD_NOT_EXHAUSTED_RANGE] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_RANGE_r00, _GUARD_NOT_EXHAUSTED_RANGE_r11, _GUARD_NOT_EXHAUSTED_RANGE_r22, _GUARD_NOT_EXHAUSTED_RANGE_r33 } }, [_ITER_NEXT_RANGE] = { 2, 2, 1, { 0, 0, _ITER_NEXT_RANGE_r23, 0 } }, - [_FOR_ITER_GEN_FRAME] = { 2, 2, 1, { 0, 0, _FOR_ITER_GEN_FRAME_r23, 0 } }, + [_FOR_ITER_GEN_FRAME] = { 2, 2, 0, { 0, 0, _FOR_ITER_GEN_FRAME_r22, 0 } }, [_INSERT_NULL] = { 1, 1, -1, { 0, _INSERT_NULL_r10, 0, 0 } }, [_LOAD_SPECIAL] = { 0, 0, 0, { _LOAD_SPECIAL_r00, 0, 0, 0 } }, [_WITH_EXCEPT_START] = { 0, 0, 1, { _WITH_EXCEPT_START_r01, 0, 0, 0 } }, @@ -574,20 +574,20 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_CHECK_AND_ALLOCATE_OBJECT] = { 0, 0, 0, { _CHECK_AND_ALLOCATE_OBJECT_r00, 0, 0, 0 } }, [_CREATE_INIT_FRAME] = { 0, 0, 1, { _CREATE_INIT_FRAME_r01, 0, 0, 0 } }, [_EXIT_INIT_CHECK] = { 1, 1, -1, { 0, _EXIT_INIT_CHECK_r10, 0, 0 } }, - [_CALL_BUILTIN_CLASS] = { 0, 0, 1, { _CALL_BUILTIN_CLASS_r01, 0, 0, 0 } }, - [_CALL_BUILTIN_O] = { 0, 0, 1, { _CALL_BUILTIN_O_r01, 0, 0, 0 } }, - [_CALL_BUILTIN_FAST] = { 0, 0, 1, { _CALL_BUILTIN_FAST_r01, 0, 0, 0 } }, - [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_CLASS] = { 0, 0, 0, { _CALL_BUILTIN_CLASS_r00, 0, 0, 0 } }, + [_CALL_BUILTIN_O] = { 0, 0, 0, { _CALL_BUILTIN_O_r00, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST] = { 0, 0, 0, { _CALL_BUILTIN_FAST_r00, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = { 0, 0, 0, { _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00, 0, 0, 0 } }, [_GUARD_CALLABLE_LEN] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LEN_r33 } }, [_CALL_LEN] = { 3, 3, -2, { 0, 0, 0, _CALL_LEN_r31 } }, [_GUARD_CALLABLE_ISINSTANCE] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_ISINSTANCE_r33 } }, [_CALL_ISINSTANCE] = { 3, 3, -2, { 0, 0, 0, _CALL_ISINSTANCE_r31 } }, [_GUARD_CALLABLE_LIST_APPEND] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LIST_APPEND_r33 } }, - [_CALL_LIST_APPEND] = { 3, 3, -3, { 0, 0, 0, _CALL_LIST_APPEND_r30 } }, - [_CALL_METHOD_DESCRIPTOR_O] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_O_r01, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_NOARGS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_NOARGS_r01, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_FAST] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_r01, 0, 0, 0 } }, + [_CALL_LIST_APPEND] = { 0, 0, 0, { _CALL_LIST_APPEND_r00, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_O] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_O_r00, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_NOARGS] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_NOARGS_r00, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_FAST_r00, 0, 0, 0 } }, [_MAYBE_EXPAND_METHOD_KW] = { 0, 0, 0, { _MAYBE_EXPAND_METHOD_KW_r00, 0, 0, 0 } }, [_PY_FRAME_KW] = { 1, 1, 0, { 0, _PY_FRAME_KW_r11, 0, 0 } }, [_CHECK_FUNCTION_VERSION_KW] = { 1, 1, 0, { 0, _CHECK_FUNCTION_VERSION_KW_r11, 0, 0 } }, @@ -606,15 +606,15 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_COPY] = { 0, 0, 1, { _COPY_r01, 0, 0, 0 } }, [_BINARY_OP] = { 2, 2, -1, { 0, 0, _BINARY_OP_r21, 0 } }, [_SWAP] = { 1, 1, 0, { 0, _SWAP_r11, 0, 0 } }, - [_GUARD_IS_TRUE_POP] = { 1, 1, -1, { 0, _GUARD_IS_TRUE_POP_r10, 0, 0 } }, - [_GUARD_IS_FALSE_POP] = { 1, 1, -1, { 0, _GUARD_IS_FALSE_POP_r10, 0, 0 } }, - [_GUARD_IS_NONE_POP] = { 1, 1, -1, { 0, _GUARD_IS_NONE_POP_r10, 0, 0 } }, - [_GUARD_IS_NOT_NONE_POP] = { 1, 1, -1, { 0, _GUARD_IS_NOT_NONE_POP_r10, 0, 0 } }, + [_GUARD_IS_TRUE_POP] = { 0, 0, 0, { _GUARD_IS_TRUE_POP_r00, 0, 0, 0 } }, + [_GUARD_IS_FALSE_POP] = { 0, 0, 0, { _GUARD_IS_FALSE_POP_r00, 0, 0, 0 } }, + [_GUARD_IS_NONE_POP] = { 0, 0, 0, { _GUARD_IS_NONE_POP_r00, 0, 0, 0 } }, + [_GUARD_IS_NOT_NONE_POP] = { 0, 0, 0, { _GUARD_IS_NOT_NONE_POP_r00, 0, 0, 0 } }, [_JUMP_TO_TOP] = { 0, 0, 0, { _JUMP_TO_TOP_r00, 0, 0, 0 } }, [_SET_IP] = { 0, 3, 0, { _SET_IP_r00, _SET_IP_r11, _SET_IP_r22, _SET_IP_r33 } }, [_CHECK_STACK_SPACE_OPERAND] = { 0, 3, 0, { _CHECK_STACK_SPACE_OPERAND_r00, _CHECK_STACK_SPACE_OPERAND_r11, _CHECK_STACK_SPACE_OPERAND_r22, _CHECK_STACK_SPACE_OPERAND_r33 } }, [_SAVE_RETURN_OFFSET] = { 0, 3, 0, { _SAVE_RETURN_OFFSET_r00, _SAVE_RETURN_OFFSET_r11, _SAVE_RETURN_OFFSET_r22, _SAVE_RETURN_OFFSET_r33 } }, - [_EXIT_TRACE] = { 0, 3, 0, { _EXIT_TRACE_r00, _EXIT_TRACE_r11, _EXIT_TRACE_r22, _EXIT_TRACE_r33 } }, + [_EXIT_TRACE] = { 0, 3, -3, { _EXIT_TRACE_r00, _EXIT_TRACE_r10, _EXIT_TRACE_r20, _EXIT_TRACE_r30 } }, [_CHECK_VALIDITY] = { 0, 3, 0, { _CHECK_VALIDITY_r00, _CHECK_VALIDITY_r11, _CHECK_VALIDITY_r22, _CHECK_VALIDITY_r33 } }, [_LOAD_CONST_INLINE] = { 0, 2, 1, { _LOAD_CONST_INLINE_r01, _LOAD_CONST_INLINE_r12, _LOAD_CONST_INLINE_r23, 0 } }, [_POP_TOP_LOAD_CONST_INLINE] = { 1, 1, 0, { 0, _POP_TOP_LOAD_CONST_INLINE_r11, 0, 0 } }, @@ -633,8 +633,8 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_START_EXECUTOR] = { 0, 0, 0, { _START_EXECUTOR_r00, 0, 0, 0 } }, [_MAKE_WARM] = { 0, 3, 0, { _MAKE_WARM_r00, _MAKE_WARM_r11, _MAKE_WARM_r22, _MAKE_WARM_r33 } }, [_FATAL_ERROR] = { 0, 3, 0, { _FATAL_ERROR_r00, _FATAL_ERROR_r11, _FATAL_ERROR_r22, _FATAL_ERROR_r33 } }, - [_DEOPT] = { 0, 3, 0, { _DEOPT_r00, _DEOPT_r11, _DEOPT_r22, _DEOPT_r33 } }, - [_ERROR_POP_N] = { 0, 3, 0, { _ERROR_POP_N_r00, _ERROR_POP_N_r11, _ERROR_POP_N_r22, _ERROR_POP_N_r33 } }, + [_DEOPT] = { 0, 0, 0, { _DEOPT_r00, 0, 0, 0 } }, + [_ERROR_POP_N] = { 0, 0, 0, { _ERROR_POP_N_r00, 0, 0, 0 } }, [_TIER2_RESUME_CHECK] = { 0, 3, 0, { _TIER2_RESUME_CHECK_r00, _TIER2_RESUME_CHECK_r11, _TIER2_RESUME_CHECK_r22, _TIER2_RESUME_CHECK_r33 } }, }; @@ -812,14 +812,14 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_ADD_UNICODE_r21] = _BINARY_OP_ADD_UNICODE, [_BINARY_OP_ADD_UNICODE_r10] = _BINARY_OP_ADD_UNICODE, [_BINARY_OP_ADD_UNICODE_r32] = _BINARY_OP_ADD_UNICODE, - [_BINARY_OP_INPLACE_ADD_UNICODE_r20] = _BINARY_OP_INPLACE_ADD_UNICODE, + [_BINARY_OP_INPLACE_ADD_UNICODE_r00] = _BINARY_OP_INPLACE_ADD_UNICODE, [_GUARD_BINARY_OP_EXTEND_r00] = _GUARD_BINARY_OP_EXTEND, [_BINARY_OP_EXTEND_r21] = _BINARY_OP_EXTEND, [_BINARY_SLICE_r31] = _BINARY_SLICE, [_STORE_SLICE_r30] = _STORE_SLICE, - [_BINARY_OP_SUBSCR_LIST_INT_r21] = _BINARY_OP_SUBSCR_LIST_INT, + [_BINARY_OP_SUBSCR_LIST_INT_r11] = _BINARY_OP_SUBSCR_LIST_INT, [_BINARY_OP_SUBSCR_LIST_SLICE_r21] = _BINARY_OP_SUBSCR_LIST_SLICE, - [_BINARY_OP_SUBSCR_STR_INT_r21] = _BINARY_OP_SUBSCR_STR_INT, + [_BINARY_OP_SUBSCR_STR_INT_r11] = _BINARY_OP_SUBSCR_STR_INT, [_GUARD_NOS_TUPLE_r22] = _GUARD_NOS_TUPLE, [_GUARD_NOS_TUPLE_r00] = _GUARD_NOS_TUPLE, [_GUARD_NOS_TUPLE_r11] = _GUARD_NOS_TUPLE, @@ -828,7 +828,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_TUPLE_r00] = _GUARD_TOS_TUPLE, [_GUARD_TOS_TUPLE_r22] = _GUARD_TOS_TUPLE, [_GUARD_TOS_TUPLE_r33] = _GUARD_TOS_TUPLE, - [_BINARY_OP_SUBSCR_TUPLE_INT_r21] = _BINARY_OP_SUBSCR_TUPLE_INT, + [_BINARY_OP_SUBSCR_TUPLE_INT_r11] = _BINARY_OP_SUBSCR_TUPLE_INT, [_GUARD_NOS_DICT_r22] = _GUARD_NOS_DICT, [_GUARD_NOS_DICT_r00] = _GUARD_NOS_DICT, [_GUARD_NOS_DICT_r11] = _GUARD_NOS_DICT, @@ -838,12 +838,12 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_DICT_r22] = _GUARD_TOS_DICT, [_GUARD_TOS_DICT_r33] = _GUARD_TOS_DICT, [_BINARY_OP_SUBSCR_DICT_r21] = _BINARY_OP_SUBSCR_DICT, - [_BINARY_OP_SUBSCR_CHECK_FUNC_r23] = _BINARY_OP_SUBSCR_CHECK_FUNC, + [_BINARY_OP_SUBSCR_CHECK_FUNC_r22] = _BINARY_OP_SUBSCR_CHECK_FUNC, [_BINARY_OP_SUBSCR_INIT_CALL_r31] = _BINARY_OP_SUBSCR_INIT_CALL, [_LIST_APPEND_r10] = _LIST_APPEND, [_SET_ADD_r10] = _SET_ADD, [_STORE_SUBSCR_r30] = _STORE_SUBSCR, - [_STORE_SUBSCR_LIST_INT_r30] = _STORE_SUBSCR_LIST_INT, + [_STORE_SUBSCR_LIST_INT_r00] = _STORE_SUBSCR_LIST_INT, [_STORE_SUBSCR_DICT_r30] = _STORE_SUBSCR_DICT, [_DELETE_SUBSCR_r20] = _DELETE_SUBSCR, [_CALL_INTRINSIC_1_r11] = _CALL_INTRINSIC_1, @@ -868,9 +868,9 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_STORE_NAME_r10] = _STORE_NAME, [_DELETE_NAME_r00] = _DELETE_NAME, [_UNPACK_SEQUENCE_r10] = _UNPACK_SEQUENCE, - [_UNPACK_SEQUENCE_TWO_TUPLE_r12] = _UNPACK_SEQUENCE_TWO_TUPLE, - [_UNPACK_SEQUENCE_TUPLE_r10] = _UNPACK_SEQUENCE_TUPLE, - [_UNPACK_SEQUENCE_LIST_r10] = _UNPACK_SEQUENCE_LIST, + [_UNPACK_SEQUENCE_TWO_TUPLE_r11] = _UNPACK_SEQUENCE_TWO_TUPLE, + [_UNPACK_SEQUENCE_TUPLE_r00] = _UNPACK_SEQUENCE_TUPLE, + [_UNPACK_SEQUENCE_LIST_r00] = _UNPACK_SEQUENCE_LIST, [_UNPACK_EX_r10] = _UNPACK_EX, [_STORE_ATTR_r20] = _STORE_ATTR, [_DELETE_ATTR_r10] = _DELETE_ATTR, @@ -884,12 +884,8 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_GLOBALS_VERSION_r11] = _GUARD_GLOBALS_VERSION, [_GUARD_GLOBALS_VERSION_r22] = _GUARD_GLOBALS_VERSION, [_GUARD_GLOBALS_VERSION_r33] = _GUARD_GLOBALS_VERSION, - [_LOAD_GLOBAL_MODULE_r01] = _LOAD_GLOBAL_MODULE, - [_LOAD_GLOBAL_MODULE_r12] = _LOAD_GLOBAL_MODULE, - [_LOAD_GLOBAL_MODULE_r23] = _LOAD_GLOBAL_MODULE, - [_LOAD_GLOBAL_BUILTINS_r01] = _LOAD_GLOBAL_BUILTINS, - [_LOAD_GLOBAL_BUILTINS_r12] = _LOAD_GLOBAL_BUILTINS, - [_LOAD_GLOBAL_BUILTINS_r23] = _LOAD_GLOBAL_BUILTINS, + [_LOAD_GLOBAL_MODULE_r00] = _LOAD_GLOBAL_MODULE, + [_LOAD_GLOBAL_BUILTINS_r00] = _LOAD_GLOBAL_BUILTINS, [_DELETE_FAST_r00] = _DELETE_FAST, [_MAKE_CELL_r00] = _MAKE_CELL, [_DELETE_DEREF_r00] = _DELETE_DEREF, @@ -913,8 +909,8 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_DICT_UPDATE_r10] = _DICT_UPDATE, [_DICT_MERGE_r10] = _DICT_MERGE, [_MAP_ADD_r20] = _MAP_ADD, - [_LOAD_SUPER_ATTR_ATTR_r31] = _LOAD_SUPER_ATTR_ATTR, - [_LOAD_SUPER_ATTR_METHOD_r32] = _LOAD_SUPER_ATTR_METHOD, + [_LOAD_SUPER_ATTR_ATTR_r11] = _LOAD_SUPER_ATTR_ATTR, + [_LOAD_SUPER_ATTR_METHOD_r22] = _LOAD_SUPER_ATTR_METHOD, [_LOAD_ATTR_r10] = _LOAD_ATTR, [_GUARD_TYPE_VERSION_r11] = _GUARD_TYPE_VERSION, [_GUARD_TYPE_VERSION_r00] = _GUARD_TYPE_VERSION, @@ -946,15 +942,13 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_DORV_NO_DICT_r22] = _GUARD_DORV_NO_DICT, [_GUARD_DORV_NO_DICT_r33] = _GUARD_DORV_NO_DICT, [_STORE_ATTR_INSTANCE_VALUE_r20] = _STORE_ATTR_INSTANCE_VALUE, - [_STORE_ATTR_WITH_HINT_r20] = _STORE_ATTR_WITH_HINT, - [_STORE_ATTR_SLOT_r20] = _STORE_ATTR_SLOT, + [_STORE_ATTR_WITH_HINT_r00] = _STORE_ATTR_WITH_HINT, + [_STORE_ATTR_SLOT_r00] = _STORE_ATTR_SLOT, [_COMPARE_OP_r21] = _COMPARE_OP, [_COMPARE_OP_FLOAT_r21] = _COMPARE_OP_FLOAT, [_COMPARE_OP_FLOAT_r10] = _COMPARE_OP_FLOAT, [_COMPARE_OP_FLOAT_r32] = _COMPARE_OP_FLOAT, - [_COMPARE_OP_INT_r21] = _COMPARE_OP_INT, - [_COMPARE_OP_INT_r10] = _COMPARE_OP_INT, - [_COMPARE_OP_INT_r32] = _COMPARE_OP_INT, + [_COMPARE_OP_INT_r11] = _COMPARE_OP_INT, [_COMPARE_OP_STR_r21] = _COMPARE_OP_STR, [_COMPARE_OP_STR_r10] = _COMPARE_OP_STR, [_COMPARE_OP_STR_r32] = _COMPARE_OP_STR, @@ -982,7 +976,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_MATCH_KEYS_r01] = _MATCH_KEYS, [_GET_ITER_r12] = _GET_ITER, [_GET_YIELD_FROM_ITER_r11] = _GET_YIELD_FROM_ITER, - [_FOR_ITER_TIER_TWO_r01] = _FOR_ITER_TIER_TWO, + [_FOR_ITER_TIER_TWO_r00] = _FOR_ITER_TIER_TWO, [_ITER_CHECK_LIST_r22] = _ITER_CHECK_LIST, [_ITER_CHECK_LIST_r00] = _ITER_CHECK_LIST, [_ITER_CHECK_LIST_r11] = _ITER_CHECK_LIST, @@ -991,7 +985,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_NOT_EXHAUSTED_LIST_r00] = _GUARD_NOT_EXHAUSTED_LIST, [_GUARD_NOT_EXHAUSTED_LIST_r11] = _GUARD_NOT_EXHAUSTED_LIST, [_GUARD_NOT_EXHAUSTED_LIST_r33] = _GUARD_NOT_EXHAUSTED_LIST, - [_ITER_NEXT_LIST_TIER_TWO_r01] = _ITER_NEXT_LIST_TIER_TWO, + [_ITER_NEXT_LIST_TIER_TWO_r00] = _ITER_NEXT_LIST_TIER_TWO, [_ITER_CHECK_TUPLE_r22] = _ITER_CHECK_TUPLE, [_ITER_CHECK_TUPLE_r00] = _ITER_CHECK_TUPLE, [_ITER_CHECK_TUPLE_r11] = _ITER_CHECK_TUPLE, @@ -1010,7 +1004,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_NOT_EXHAUSTED_RANGE_r11] = _GUARD_NOT_EXHAUSTED_RANGE, [_GUARD_NOT_EXHAUSTED_RANGE_r33] = _GUARD_NOT_EXHAUSTED_RANGE, [_ITER_NEXT_RANGE_r23] = _ITER_NEXT_RANGE, - [_FOR_ITER_GEN_FRAME_r23] = _FOR_ITER_GEN_FRAME, + [_FOR_ITER_GEN_FRAME_r22] = _FOR_ITER_GEN_FRAME, [_INSERT_NULL_r10] = _INSERT_NULL, [_LOAD_SPECIAL_r00] = _LOAD_SPECIAL, [_WITH_EXCEPT_START_r01] = _WITH_EXCEPT_START, @@ -1088,20 +1082,20 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_CHECK_AND_ALLOCATE_OBJECT_r00] = _CHECK_AND_ALLOCATE_OBJECT, [_CREATE_INIT_FRAME_r01] = _CREATE_INIT_FRAME, [_EXIT_INIT_CHECK_r10] = _EXIT_INIT_CHECK, - [_CALL_BUILTIN_CLASS_r01] = _CALL_BUILTIN_CLASS, - [_CALL_BUILTIN_O_r01] = _CALL_BUILTIN_O, - [_CALL_BUILTIN_FAST_r01] = _CALL_BUILTIN_FAST, - [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01] = _CALL_BUILTIN_FAST_WITH_KEYWORDS, + [_CALL_BUILTIN_CLASS_r00] = _CALL_BUILTIN_CLASS, + [_CALL_BUILTIN_O_r00] = _CALL_BUILTIN_O, + [_CALL_BUILTIN_FAST_r00] = _CALL_BUILTIN_FAST, + [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r00] = _CALL_BUILTIN_FAST_WITH_KEYWORDS, [_GUARD_CALLABLE_LEN_r33] = _GUARD_CALLABLE_LEN, [_CALL_LEN_r31] = _CALL_LEN, [_GUARD_CALLABLE_ISINSTANCE_r33] = _GUARD_CALLABLE_ISINSTANCE, [_CALL_ISINSTANCE_r31] = _CALL_ISINSTANCE, [_GUARD_CALLABLE_LIST_APPEND_r33] = _GUARD_CALLABLE_LIST_APPEND, - [_CALL_LIST_APPEND_r30] = _CALL_LIST_APPEND, - [_CALL_METHOD_DESCRIPTOR_O_r01] = _CALL_METHOD_DESCRIPTOR_O, - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01] = _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, - [_CALL_METHOD_DESCRIPTOR_NOARGS_r01] = _CALL_METHOD_DESCRIPTOR_NOARGS, - [_CALL_METHOD_DESCRIPTOR_FAST_r01] = _CALL_METHOD_DESCRIPTOR_FAST, + [_CALL_LIST_APPEND_r00] = _CALL_LIST_APPEND, + [_CALL_METHOD_DESCRIPTOR_O_r00] = _CALL_METHOD_DESCRIPTOR_O, + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00] = _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, + [_CALL_METHOD_DESCRIPTOR_NOARGS_r00] = _CALL_METHOD_DESCRIPTOR_NOARGS, + [_CALL_METHOD_DESCRIPTOR_FAST_r00] = _CALL_METHOD_DESCRIPTOR_FAST, [_MAYBE_EXPAND_METHOD_KW_r00] = _MAYBE_EXPAND_METHOD_KW, [_PY_FRAME_KW_r11] = _PY_FRAME_KW, [_CHECK_FUNCTION_VERSION_KW_r11] = _CHECK_FUNCTION_VERSION_KW, @@ -1122,10 +1116,10 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_COPY_r01] = _COPY, [_BINARY_OP_r21] = _BINARY_OP, [_SWAP_r11] = _SWAP, - [_GUARD_IS_TRUE_POP_r10] = _GUARD_IS_TRUE_POP, - [_GUARD_IS_FALSE_POP_r10] = _GUARD_IS_FALSE_POP, - [_GUARD_IS_NONE_POP_r10] = _GUARD_IS_NONE_POP, - [_GUARD_IS_NOT_NONE_POP_r10] = _GUARD_IS_NOT_NONE_POP, + [_GUARD_IS_TRUE_POP_r00] = _GUARD_IS_TRUE_POP, + [_GUARD_IS_FALSE_POP_r00] = _GUARD_IS_FALSE_POP, + [_GUARD_IS_NONE_POP_r00] = _GUARD_IS_NONE_POP, + [_GUARD_IS_NOT_NONE_POP_r00] = _GUARD_IS_NOT_NONE_POP, [_JUMP_TO_TOP_r00] = _JUMP_TO_TOP, [_SET_IP_r00] = _SET_IP, [_SET_IP_r11] = _SET_IP, @@ -1140,9 +1134,9 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_SAVE_RETURN_OFFSET_r22] = _SAVE_RETURN_OFFSET, [_SAVE_RETURN_OFFSET_r33] = _SAVE_RETURN_OFFSET, [_EXIT_TRACE_r00] = _EXIT_TRACE, - [_EXIT_TRACE_r11] = _EXIT_TRACE, - [_EXIT_TRACE_r22] = _EXIT_TRACE, - [_EXIT_TRACE_r33] = _EXIT_TRACE, + [_EXIT_TRACE_r10] = _EXIT_TRACE, + [_EXIT_TRACE_r20] = _EXIT_TRACE, + [_EXIT_TRACE_r30] = _EXIT_TRACE, [_CHECK_VALIDITY_r00] = _CHECK_VALIDITY, [_CHECK_VALIDITY_r11] = _CHECK_VALIDITY, [_CHECK_VALIDITY_r22] = _CHECK_VALIDITY, @@ -1182,13 +1176,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_FATAL_ERROR_r22] = _FATAL_ERROR, [_FATAL_ERROR_r33] = _FATAL_ERROR, [_DEOPT_r00] = _DEOPT, - [_DEOPT_r11] = _DEOPT, - [_DEOPT_r22] = _DEOPT, - [_DEOPT_r33] = _DEOPT, [_ERROR_POP_N_r00] = _ERROR_POP_N, - [_ERROR_POP_N_r11] = _ERROR_POP_N, - [_ERROR_POP_N_r22] = _ERROR_POP_N, - [_ERROR_POP_N_r33] = _ERROR_POP_N, [_TIER2_RESUME_CHECK_r00] = _TIER2_RESUME_CHECK, [_TIER2_RESUME_CHECK_r11] = _TIER2_RESUME_CHECK, [_TIER2_RESUME_CHECK_r22] = _TIER2_RESUME_CHECK, @@ -1238,7 +1226,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_EXTEND] = "_BINARY_OP_EXTEND", [_BINARY_OP_EXTEND_r21] = "_BINARY_OP_EXTEND_r21", [_BINARY_OP_INPLACE_ADD_UNICODE] = "_BINARY_OP_INPLACE_ADD_UNICODE", - [_BINARY_OP_INPLACE_ADD_UNICODE_r20] = "_BINARY_OP_INPLACE_ADD_UNICODE_r20", + [_BINARY_OP_INPLACE_ADD_UNICODE_r00] = "_BINARY_OP_INPLACE_ADD_UNICODE_r00", [_BINARY_OP_MULTIPLY_FLOAT] = "_BINARY_OP_MULTIPLY_FLOAT", [_BINARY_OP_MULTIPLY_FLOAT_r21] = "_BINARY_OP_MULTIPLY_FLOAT_r21", [_BINARY_OP_MULTIPLY_FLOAT_r10] = "_BINARY_OP_MULTIPLY_FLOAT_r10", @@ -1246,19 +1234,19 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", [_BINARY_OP_MULTIPLY_INT_r21] = "_BINARY_OP_MULTIPLY_INT_r21", [_BINARY_OP_SUBSCR_CHECK_FUNC] = "_BINARY_OP_SUBSCR_CHECK_FUNC", - [_BINARY_OP_SUBSCR_CHECK_FUNC_r23] = "_BINARY_OP_SUBSCR_CHECK_FUNC_r23", + [_BINARY_OP_SUBSCR_CHECK_FUNC_r22] = "_BINARY_OP_SUBSCR_CHECK_FUNC_r22", [_BINARY_OP_SUBSCR_DICT] = "_BINARY_OP_SUBSCR_DICT", [_BINARY_OP_SUBSCR_DICT_r21] = "_BINARY_OP_SUBSCR_DICT_r21", [_BINARY_OP_SUBSCR_INIT_CALL] = "_BINARY_OP_SUBSCR_INIT_CALL", [_BINARY_OP_SUBSCR_INIT_CALL_r31] = "_BINARY_OP_SUBSCR_INIT_CALL_r31", [_BINARY_OP_SUBSCR_LIST_INT] = "_BINARY_OP_SUBSCR_LIST_INT", - [_BINARY_OP_SUBSCR_LIST_INT_r21] = "_BINARY_OP_SUBSCR_LIST_INT_r21", + [_BINARY_OP_SUBSCR_LIST_INT_r11] = "_BINARY_OP_SUBSCR_LIST_INT_r11", [_BINARY_OP_SUBSCR_LIST_SLICE] = "_BINARY_OP_SUBSCR_LIST_SLICE", [_BINARY_OP_SUBSCR_LIST_SLICE_r21] = "_BINARY_OP_SUBSCR_LIST_SLICE_r21", [_BINARY_OP_SUBSCR_STR_INT] = "_BINARY_OP_SUBSCR_STR_INT", - [_BINARY_OP_SUBSCR_STR_INT_r21] = "_BINARY_OP_SUBSCR_STR_INT_r21", + [_BINARY_OP_SUBSCR_STR_INT_r11] = "_BINARY_OP_SUBSCR_STR_INT_r11", [_BINARY_OP_SUBSCR_TUPLE_INT] = "_BINARY_OP_SUBSCR_TUPLE_INT", - [_BINARY_OP_SUBSCR_TUPLE_INT_r21] = "_BINARY_OP_SUBSCR_TUPLE_INT_r21", + [_BINARY_OP_SUBSCR_TUPLE_INT_r11] = "_BINARY_OP_SUBSCR_TUPLE_INT_r11", [_BINARY_OP_SUBTRACT_FLOAT] = "_BINARY_OP_SUBTRACT_FLOAT", [_BINARY_OP_SUBTRACT_FLOAT_r21] = "_BINARY_OP_SUBTRACT_FLOAT_r21", [_BINARY_OP_SUBTRACT_FLOAT_r10] = "_BINARY_OP_SUBTRACT_FLOAT_r10", @@ -1284,13 +1272,13 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BUILD_TUPLE] = "_BUILD_TUPLE", [_BUILD_TUPLE_r01] = "_BUILD_TUPLE_r01", [_CALL_BUILTIN_CLASS] = "_CALL_BUILTIN_CLASS", - [_CALL_BUILTIN_CLASS_r01] = "_CALL_BUILTIN_CLASS_r01", + [_CALL_BUILTIN_CLASS_r00] = "_CALL_BUILTIN_CLASS_r00", [_CALL_BUILTIN_FAST] = "_CALL_BUILTIN_FAST", - [_CALL_BUILTIN_FAST_r01] = "_CALL_BUILTIN_FAST_r01", + [_CALL_BUILTIN_FAST_r00] = "_CALL_BUILTIN_FAST_r00", [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS", - [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01", + [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r00] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS_r00", [_CALL_BUILTIN_O] = "_CALL_BUILTIN_O", - [_CALL_BUILTIN_O_r01] = "_CALL_BUILTIN_O_r01", + [_CALL_BUILTIN_O_r00] = "_CALL_BUILTIN_O_r00", [_CALL_INTRINSIC_1] = "_CALL_INTRINSIC_1", [_CALL_INTRINSIC_1_r11] = "_CALL_INTRINSIC_1_r11", [_CALL_INTRINSIC_2] = "_CALL_INTRINSIC_2", @@ -1302,15 +1290,15 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_CALL_LEN] = "_CALL_LEN", [_CALL_LEN_r31] = "_CALL_LEN_r31", [_CALL_LIST_APPEND] = "_CALL_LIST_APPEND", - [_CALL_LIST_APPEND_r30] = "_CALL_LIST_APPEND_r30", + [_CALL_LIST_APPEND_r00] = "_CALL_LIST_APPEND_r00", [_CALL_METHOD_DESCRIPTOR_FAST] = "_CALL_METHOD_DESCRIPTOR_FAST", - [_CALL_METHOD_DESCRIPTOR_FAST_r01] = "_CALL_METHOD_DESCRIPTOR_FAST_r01", + [_CALL_METHOD_DESCRIPTOR_FAST_r00] = "_CALL_METHOD_DESCRIPTOR_FAST_r00", [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01", + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00", [_CALL_METHOD_DESCRIPTOR_NOARGS] = "_CALL_METHOD_DESCRIPTOR_NOARGS", - [_CALL_METHOD_DESCRIPTOR_NOARGS_r01] = "_CALL_METHOD_DESCRIPTOR_NOARGS_r01", + [_CALL_METHOD_DESCRIPTOR_NOARGS_r00] = "_CALL_METHOD_DESCRIPTOR_NOARGS_r00", [_CALL_METHOD_DESCRIPTOR_O] = "_CALL_METHOD_DESCRIPTOR_O", - [_CALL_METHOD_DESCRIPTOR_O_r01] = "_CALL_METHOD_DESCRIPTOR_O_r01", + [_CALL_METHOD_DESCRIPTOR_O_r00] = "_CALL_METHOD_DESCRIPTOR_O_r00", [_CALL_NON_PY_GENERAL] = "_CALL_NON_PY_GENERAL", [_CALL_NON_PY_GENERAL_r01] = "_CALL_NON_PY_GENERAL_r01", [_CALL_STR_1] = "_CALL_STR_1", @@ -1399,9 +1387,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_COMPARE_OP_FLOAT_r10] = "_COMPARE_OP_FLOAT_r10", [_COMPARE_OP_FLOAT_r32] = "_COMPARE_OP_FLOAT_r32", [_COMPARE_OP_INT] = "_COMPARE_OP_INT", - [_COMPARE_OP_INT_r21] = "_COMPARE_OP_INT_r21", - [_COMPARE_OP_INT_r10] = "_COMPARE_OP_INT_r10", - [_COMPARE_OP_INT_r32] = "_COMPARE_OP_INT_r32", + [_COMPARE_OP_INT_r11] = "_COMPARE_OP_INT_r11", [_COMPARE_OP_STR] = "_COMPARE_OP_STR", [_COMPARE_OP_STR_r21] = "_COMPARE_OP_STR_r21", [_COMPARE_OP_STR_r10] = "_COMPARE_OP_STR_r10", @@ -1437,9 +1423,6 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_DELETE_SUBSCR_r20] = "_DELETE_SUBSCR_r20", [_DEOPT] = "_DEOPT", [_DEOPT_r00] = "_DEOPT_r00", - [_DEOPT_r11] = "_DEOPT_r11", - [_DEOPT_r22] = "_DEOPT_r22", - [_DEOPT_r33] = "_DEOPT_r33", [_DICT_MERGE] = "_DICT_MERGE", [_DICT_MERGE_r10] = "_DICT_MERGE_r10", [_DICT_UPDATE] = "_DICT_UPDATE", @@ -1450,16 +1433,13 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_END_SEND_r21] = "_END_SEND_r21", [_ERROR_POP_N] = "_ERROR_POP_N", [_ERROR_POP_N_r00] = "_ERROR_POP_N_r00", - [_ERROR_POP_N_r11] = "_ERROR_POP_N_r11", - [_ERROR_POP_N_r22] = "_ERROR_POP_N_r22", - [_ERROR_POP_N_r33] = "_ERROR_POP_N_r33", [_EXIT_INIT_CHECK] = "_EXIT_INIT_CHECK", [_EXIT_INIT_CHECK_r10] = "_EXIT_INIT_CHECK_r10", [_EXIT_TRACE] = "_EXIT_TRACE", [_EXIT_TRACE_r00] = "_EXIT_TRACE_r00", - [_EXIT_TRACE_r11] = "_EXIT_TRACE_r11", - [_EXIT_TRACE_r22] = "_EXIT_TRACE_r22", - [_EXIT_TRACE_r33] = "_EXIT_TRACE_r33", + [_EXIT_TRACE_r10] = "_EXIT_TRACE_r10", + [_EXIT_TRACE_r20] = "_EXIT_TRACE_r20", + [_EXIT_TRACE_r30] = "_EXIT_TRACE_r30", [_EXPAND_METHOD] = "_EXPAND_METHOD", [_EXPAND_METHOD_r00] = "_EXPAND_METHOD_r00", [_EXPAND_METHOD_KW] = "_EXPAND_METHOD_KW", @@ -1474,9 +1454,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_FORMAT_WITH_SPEC] = "_FORMAT_WITH_SPEC", [_FORMAT_WITH_SPEC_r21] = "_FORMAT_WITH_SPEC_r21", [_FOR_ITER_GEN_FRAME] = "_FOR_ITER_GEN_FRAME", - [_FOR_ITER_GEN_FRAME_r23] = "_FOR_ITER_GEN_FRAME_r23", + [_FOR_ITER_GEN_FRAME_r22] = "_FOR_ITER_GEN_FRAME_r22", [_FOR_ITER_TIER_TWO] = "_FOR_ITER_TIER_TWO", - [_FOR_ITER_TIER_TWO_r01] = "_FOR_ITER_TIER_TWO_r01", + [_FOR_ITER_TIER_TWO_r00] = "_FOR_ITER_TIER_TWO_r00", [_GET_AITER] = "_GET_AITER", [_GET_AITER_r11] = "_GET_AITER_r11", [_GET_ANEXT] = "_GET_ANEXT", @@ -1519,13 +1499,13 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_GUARD_GLOBALS_VERSION_r22] = "_GUARD_GLOBALS_VERSION_r22", [_GUARD_GLOBALS_VERSION_r33] = "_GUARD_GLOBALS_VERSION_r33", [_GUARD_IS_FALSE_POP] = "_GUARD_IS_FALSE_POP", - [_GUARD_IS_FALSE_POP_r10] = "_GUARD_IS_FALSE_POP_r10", + [_GUARD_IS_FALSE_POP_r00] = "_GUARD_IS_FALSE_POP_r00", [_GUARD_IS_NONE_POP] = "_GUARD_IS_NONE_POP", - [_GUARD_IS_NONE_POP_r10] = "_GUARD_IS_NONE_POP_r10", + [_GUARD_IS_NONE_POP_r00] = "_GUARD_IS_NONE_POP_r00", [_GUARD_IS_NOT_NONE_POP] = "_GUARD_IS_NOT_NONE_POP", - [_GUARD_IS_NOT_NONE_POP_r10] = "_GUARD_IS_NOT_NONE_POP_r10", + [_GUARD_IS_NOT_NONE_POP_r00] = "_GUARD_IS_NOT_NONE_POP_r00", [_GUARD_IS_TRUE_POP] = "_GUARD_IS_TRUE_POP", - [_GUARD_IS_TRUE_POP_r10] = "_GUARD_IS_TRUE_POP_r10", + [_GUARD_IS_TRUE_POP_r00] = "_GUARD_IS_TRUE_POP_r00", [_GUARD_KEYS_VERSION] = "_GUARD_KEYS_VERSION", [_GUARD_KEYS_VERSION_r11] = "_GUARD_KEYS_VERSION_r11", [_GUARD_KEYS_VERSION_r00] = "_GUARD_KEYS_VERSION_r00", @@ -1678,7 +1658,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_ITER_CHECK_TUPLE_r11] = "_ITER_CHECK_TUPLE_r11", [_ITER_CHECK_TUPLE_r33] = "_ITER_CHECK_TUPLE_r33", [_ITER_NEXT_LIST_TIER_TWO] = "_ITER_NEXT_LIST_TIER_TWO", - [_ITER_NEXT_LIST_TIER_TWO_r01] = "_ITER_NEXT_LIST_TIER_TWO_r01", + [_ITER_NEXT_LIST_TIER_TWO_r00] = "_ITER_NEXT_LIST_TIER_TWO_r00", [_ITER_NEXT_RANGE] = "_ITER_NEXT_RANGE", [_ITER_NEXT_RANGE_r23] = "_ITER_NEXT_RANGE_r23", [_ITER_NEXT_TUPLE] = "_ITER_NEXT_TUPLE", @@ -1833,13 +1813,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_LOAD_GLOBAL] = "_LOAD_GLOBAL", [_LOAD_GLOBAL_r00] = "_LOAD_GLOBAL_r00", [_LOAD_GLOBAL_BUILTINS] = "_LOAD_GLOBAL_BUILTINS", - [_LOAD_GLOBAL_BUILTINS_r01] = "_LOAD_GLOBAL_BUILTINS_r01", - [_LOAD_GLOBAL_BUILTINS_r12] = "_LOAD_GLOBAL_BUILTINS_r12", - [_LOAD_GLOBAL_BUILTINS_r23] = "_LOAD_GLOBAL_BUILTINS_r23", + [_LOAD_GLOBAL_BUILTINS_r00] = "_LOAD_GLOBAL_BUILTINS_r00", [_LOAD_GLOBAL_MODULE] = "_LOAD_GLOBAL_MODULE", - [_LOAD_GLOBAL_MODULE_r01] = "_LOAD_GLOBAL_MODULE_r01", - [_LOAD_GLOBAL_MODULE_r12] = "_LOAD_GLOBAL_MODULE_r12", - [_LOAD_GLOBAL_MODULE_r23] = "_LOAD_GLOBAL_MODULE_r23", + [_LOAD_GLOBAL_MODULE_r00] = "_LOAD_GLOBAL_MODULE_r00", [_LOAD_LOCALS] = "_LOAD_LOCALS", [_LOAD_LOCALS_r01] = "_LOAD_LOCALS_r01", [_LOAD_NAME] = "_LOAD_NAME", @@ -1867,9 +1843,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_LOAD_SPECIAL] = "_LOAD_SPECIAL", [_LOAD_SPECIAL_r00] = "_LOAD_SPECIAL_r00", [_LOAD_SUPER_ATTR_ATTR] = "_LOAD_SUPER_ATTR_ATTR", - [_LOAD_SUPER_ATTR_ATTR_r31] = "_LOAD_SUPER_ATTR_ATTR_r31", + [_LOAD_SUPER_ATTR_ATTR_r11] = "_LOAD_SUPER_ATTR_ATTR_r11", [_LOAD_SUPER_ATTR_METHOD] = "_LOAD_SUPER_ATTR_METHOD", - [_LOAD_SUPER_ATTR_METHOD_r32] = "_LOAD_SUPER_ATTR_METHOD_r32", + [_LOAD_SUPER_ATTR_METHOD_r22] = "_LOAD_SUPER_ATTR_METHOD_r22", [_MAKE_CALLARGS_A_TUPLE] = "_MAKE_CALLARGS_A_TUPLE", [_MAKE_CALLARGS_A_TUPLE_r00] = "_MAKE_CALLARGS_A_TUPLE_r00", [_MAKE_CELL] = "_MAKE_CELL", @@ -2002,9 +1978,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_STORE_ATTR_INSTANCE_VALUE] = "_STORE_ATTR_INSTANCE_VALUE", [_STORE_ATTR_INSTANCE_VALUE_r20] = "_STORE_ATTR_INSTANCE_VALUE_r20", [_STORE_ATTR_SLOT] = "_STORE_ATTR_SLOT", - [_STORE_ATTR_SLOT_r20] = "_STORE_ATTR_SLOT_r20", + [_STORE_ATTR_SLOT_r00] = "_STORE_ATTR_SLOT_r00", [_STORE_ATTR_WITH_HINT] = "_STORE_ATTR_WITH_HINT", - [_STORE_ATTR_WITH_HINT_r20] = "_STORE_ATTR_WITH_HINT_r20", + [_STORE_ATTR_WITH_HINT_r00] = "_STORE_ATTR_WITH_HINT_r00", [_STORE_DEREF] = "_STORE_DEREF", [_STORE_DEREF_r10] = "_STORE_DEREF_r10", [_STORE_FAST] = "_STORE_FAST", @@ -2036,7 +2012,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_STORE_SUBSCR_DICT] = "_STORE_SUBSCR_DICT", [_STORE_SUBSCR_DICT_r30] = "_STORE_SUBSCR_DICT_r30", [_STORE_SUBSCR_LIST_INT] = "_STORE_SUBSCR_LIST_INT", - [_STORE_SUBSCR_LIST_INT_r30] = "_STORE_SUBSCR_LIST_INT_r30", + [_STORE_SUBSCR_LIST_INT_r00] = "_STORE_SUBSCR_LIST_INT_r00", [_SWAP] = "_SWAP", [_SWAP_r11] = "_SWAP_r11", [_TIER2_RESUME_CHECK] = "_TIER2_RESUME_CHECK", @@ -2076,11 +2052,11 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_UNPACK_SEQUENCE] = "_UNPACK_SEQUENCE", [_UNPACK_SEQUENCE_r10] = "_UNPACK_SEQUENCE_r10", [_UNPACK_SEQUENCE_LIST] = "_UNPACK_SEQUENCE_LIST", - [_UNPACK_SEQUENCE_LIST_r10] = "_UNPACK_SEQUENCE_LIST_r10", + [_UNPACK_SEQUENCE_LIST_r00] = "_UNPACK_SEQUENCE_LIST_r00", [_UNPACK_SEQUENCE_TUPLE] = "_UNPACK_SEQUENCE_TUPLE", - [_UNPACK_SEQUENCE_TUPLE_r10] = "_UNPACK_SEQUENCE_TUPLE_r10", + [_UNPACK_SEQUENCE_TUPLE_r00] = "_UNPACK_SEQUENCE_TUPLE_r00", [_UNPACK_SEQUENCE_TWO_TUPLE] = "_UNPACK_SEQUENCE_TWO_TUPLE", - [_UNPACK_SEQUENCE_TWO_TUPLE_r12] = "_UNPACK_SEQUENCE_TWO_TUPLE_r12", + [_UNPACK_SEQUENCE_TWO_TUPLE_r11] = "_UNPACK_SEQUENCE_TWO_TUPLE_r11", [_WITH_EXCEPT_START] = "_WITH_EXCEPT_START", [_WITH_EXCEPT_START_r01] = "_WITH_EXCEPT_START_r01", [_YIELD_VALUE] = "_YIELD_VALUE", diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 3551f1c1ec19a2..d9a2768e5b5ba4 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -5328,6 +5328,7 @@ dummy_func( } tier2 op(_DEOPT, (--)) { + SYNC_SP(); GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); } diff --git a/Python/ceval.c b/Python/ceval.c index ae0637bae4a34a..42064786b2fb8f 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -164,13 +164,26 @@ dump_item(_PyStackRef item) printf("%" PRId64, (int64_t)PyStackRef_UntagInt(item)); return; } - PyObject *obj = PyStackRef_AsPyObjectBorrow(item); - if (obj == NULL) { - printf(""); - return; + if (PyStackRef_IsValid(item)) { + PyObject *obj = PyStackRef_AsPyObjectBorrow(item); + if (obj == NULL) { + printf(""); + return; + } + // Don't call __repr__(), it might recurse into the interpreter. + printf("<%s at %p>", Py_TYPE(obj)->tp_name, (void *)obj); + } + else { + /* Already handled NULL */ + if (PyStackRef_IsError(item)) { + printf("ERROR"); + } + else { + // Wrapped item + void *ptr = PyStackRef_Unwrap(item); + printf("Wrapped(pointer %p)", ptr); + } } - // Don't call __repr__(), it might recurse into the interpreter. - printf("<%s at %p>", Py_TYPE(obj)->tp_name, (void *)obj); } static void diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index b8bec151ea930c..e804fd477ebdf8 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -54,6 +54,8 @@ int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } } @@ -72,6 +74,8 @@ int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } } @@ -88,7 +92,7 @@ SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; @@ -97,13 +101,13 @@ uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); assert((version & _PY_EVAL_EVENTS_MASK) == 0); if (eval_breaker != version) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif @@ -116,7 +120,10 @@ _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; @@ -125,13 +132,19 @@ uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); assert((version & _PY_EVAL_EVENTS_MASK) == 0); if (eval_breaker != version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif @@ -146,7 +159,11 @@ _PyStackRef _stack_item_1 = _tos_cache1; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; @@ -155,13 +172,21 @@ uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); assert((version & _PY_EVAL_EVENTS_MASK) == 0); if (eval_breaker != version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif @@ -178,7 +203,12 @@ _PyStackRef _stack_item_2 = _tos_cache2; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; @@ -187,13 +217,23 @@ uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); assert((version & _PY_EVAL_EVENTS_MASK) == 0); if (eval_breaker != version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif @@ -218,6 +258,8 @@ PyTuple_GetItem(_PyFrame_GetCode(frame)->co_localsplusnames, oparg) ); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } value = PyStackRef_DUP(value_s); @@ -1556,6 +1598,8 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -1643,6 +1687,8 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = err ? PyStackRef_True : PyStackRef_False; @@ -1657,7 +1703,6 @@ _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; if (!PyStackRef_BoolCheck(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1671,7 +1716,6 @@ _PyStackRef value; value = stack_pointer[-1]; if (!PyStackRef_BoolCheck(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1686,7 +1730,6 @@ _PyStackRef _stack_item_1 = _tos_cache1; value = _stack_item_1; if (!PyStackRef_BoolCheck(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1704,7 +1747,6 @@ _PyStackRef _stack_item_2 = _tos_cache2; value = _stack_item_2; if (!PyStackRef_BoolCheck(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1723,7 +1765,6 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1750,7 +1791,6 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -1765,7 +1805,6 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -1779,7 +1818,6 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -1796,7 +1834,6 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -1813,7 +1850,6 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -1827,7 +1863,6 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -1842,7 +1877,6 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -1860,7 +1894,6 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -1877,7 +1910,6 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -1891,7 +1923,6 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -1906,7 +1937,6 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -1924,7 +1954,6 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -1967,7 +1996,6 @@ _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; if (!PyStackRef_IsNone(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1983,7 +2011,6 @@ _PyStackRef res; value = stack_pointer[-1]; if (!PyStackRef_IsNone(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2001,7 +2028,6 @@ _PyStackRef _stack_item_1 = _tos_cache1; value = _stack_item_1; if (!PyStackRef_IsNone(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2021,7 +2047,6 @@ _PyStackRef _stack_item_2 = _tos_cache2; value = _stack_item_2; if (!PyStackRef_IsNone(value)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2041,7 +2066,6 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2056,7 +2080,6 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2070,7 +2093,6 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2087,7 +2109,6 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2104,7 +2125,6 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2118,7 +2138,6 @@ value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2133,7 +2152,6 @@ value = _stack_item_1; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2151,7 +2169,6 @@ value = _stack_item_2; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2218,6 +2235,8 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -2234,7 +2253,6 @@ left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2249,7 +2267,6 @@ left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2263,7 +2280,6 @@ left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2280,7 +2296,6 @@ left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2297,7 +2312,6 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2311,7 +2325,6 @@ value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2326,7 +2339,6 @@ value = _stack_item_1; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2344,7 +2356,6 @@ value = _stack_item_2; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2380,6 +2391,8 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -2416,6 +2429,8 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -2452,6 +2467,8 @@ if (res_o == NULL) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -2470,7 +2487,6 @@ left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2485,7 +2501,6 @@ left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2499,7 +2514,6 @@ left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2516,7 +2530,6 @@ left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2533,7 +2546,6 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2547,7 +2559,6 @@ value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2562,7 +2573,6 @@ value = _stack_item_1; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2580,7 +2590,6 @@ value = _stack_item_2; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2609,6 +2618,8 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _tos_cache0 = res; @@ -2635,6 +2646,8 @@ res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { stack_pointer[-1] = res; + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer[-1] = res; @@ -2666,6 +2679,8 @@ stack_pointer[1] = res; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _tos_cache1 = res; @@ -2693,6 +2708,8 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _tos_cache0 = res; @@ -2719,6 +2736,8 @@ res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { stack_pointer[-1] = res; + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer[-1] = res; @@ -2750,6 +2769,8 @@ stack_pointer[1] = res; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _tos_cache1 = res; @@ -2777,6 +2798,8 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _tos_cache0 = res; @@ -2803,6 +2826,8 @@ res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { stack_pointer[-1] = res; + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer[-1] = res; @@ -2834,6 +2859,8 @@ stack_pointer[1] = res; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _tos_cache1 = res; @@ -2860,6 +2887,8 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -2887,6 +2916,8 @@ if (res_o == NULL) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -2917,6 +2948,8 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -2925,15 +2958,13 @@ break; } - case _BINARY_OP_INPLACE_ADD_UNICODE_r20: { - assert(current_cached_values == 2); + case _BINARY_OP_INPLACE_ADD_UNICODE_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - right = _stack_item_1; - left = _stack_item_0; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); assert(PyUnicode_CheckExact(left_o)); assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(right))); @@ -2947,7 +2978,7 @@ _PyStackRef *target_local = &GETLOCAL(next_oparg); assert(PyUnicode_CheckExact(left_o)); if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(BINARY_OP, hit); @@ -2955,6 +2986,8 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local); PyObject *right_o = PyStackRef_AsPyObjectSteal(right); + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyUnicode_Append(&temp, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2963,6 +2996,8 @@ Py_DECREF(right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(*target_local)) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } #if TIER_ONE @@ -2990,7 +3025,7 @@ int res = d->guard(left_o, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (!res) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -3075,6 +3110,8 @@ PyStackRef_CLOSE(container); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -3131,58 +3168,62 @@ stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; } - case _BINARY_OP_SUBSCR_LIST_INT_r21: { - assert(current_cached_values == 2); + case _BINARY_OP_SUBSCR_LIST_INT_r11: { + assert(current_cached_values == 1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - sub_st = _stack_item_1; - list_st = _stack_item_0; + sub_st = _stack_item_0; + list_st = stack_pointer[-1]; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); assert(PyList_CheckExact(list)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = sub_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; #ifdef Py_GIL_DISABLED - stack_pointer[0] = list_st; - stack_pointer[1] = sub_st; - stack_pointer += 2; + stack_pointer[0] = sub_st; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyList_GetItemRef((PyListObject*)list, index); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(BINARY_OP, hit); res = PyStackRef_FromPyObjectSteal(res_o); #else if (index >= PyList_GET_SIZE(list)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = sub_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(BINARY_OP, hit); PyObject *res_o = PyList_GET_ITEM(list, index); assert(res_o != NULL); res = PyStackRef_FromPyObjectNew(res_o); - stack_pointer += 2; + stack_pointer += 1; #endif STAT_INC(BINARY_OP, hit); - stack_pointer[-2] = list_st; - stack_pointer[-1] = sub_st; _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = list_st; list_st = res; @@ -3236,6 +3277,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -3243,37 +3286,47 @@ break; } - case _BINARY_OP_SUBSCR_STR_INT_r21: { - assert(current_cached_values == 2); + case _BINARY_OP_SUBSCR_STR_INT_r11: { + assert(current_cached_values == 1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef str_st; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - sub_st = _stack_item_1; - str_st = _stack_item_0; + sub_st = _stack_item_0; + str_st = stack_pointer[-1]; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *str = PyStackRef_AsPyObjectBorrow(str_st); assert(PyLong_CheckExact(sub)); assert(PyUnicode_CheckExact(str)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = sub_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (PyUnicode_GET_LENGTH(str) <= index) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = sub_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_UCS4 c = PyUnicode_READ_CHAR(str, index); if (Py_ARRAY_LENGTH(_Py_SINGLETON(strings).ascii) <= c) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = sub_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(BINARY_OP, hit); PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c]; PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3291,7 +3344,6 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -3306,7 +3358,6 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3320,7 +3371,6 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -3337,7 +3387,6 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -3354,7 +3403,6 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -3368,7 +3416,6 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3383,7 +3430,6 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -3401,7 +3447,6 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -3410,27 +3455,32 @@ break; } - case _BINARY_OP_SUBSCR_TUPLE_INT_r21: { - assert(current_cached_values == 2); + case _BINARY_OP_SUBSCR_TUPLE_INT_r11: { + assert(current_cached_values == 1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - sub_st = _stack_item_1; - tuple_st = _stack_item_0; + sub_st = _stack_item_0; + tuple_st = stack_pointer[-1]; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); assert(PyTuple_CheckExact(tuple)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = sub_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (index >= PyTuple_GET_SIZE(tuple)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = sub_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(BINARY_OP, hit); @@ -3438,9 +3488,6 @@ assert(res_o != NULL); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); res = PyStackRef_FromPyObjectNew(res_o); - stack_pointer[0] = tuple_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; tuple_st = res; @@ -3462,7 +3509,6 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -3477,7 +3523,6 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3491,7 +3536,6 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -3508,7 +3552,6 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -3525,7 +3568,6 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -3539,7 +3581,6 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3554,7 +3595,6 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -3572,7 +3612,6 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -3621,6 +3660,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (rc <= 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -3628,9 +3669,9 @@ break; } - case _BINARY_OP_SUBSCR_CHECK_FUNC_r23: { + case _BINARY_OP_SUBSCR_CHECK_FUNC_r22: { assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef container; _PyStackRef getitem; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3638,32 +3679,50 @@ container = _stack_item_0; PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container)); if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = container; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyHeapTypeObject *ht = (PyHeapTypeObject *)tp; PyObject *getitem_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(ht->_spec_cache.getitem); if (getitem_o == NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = container; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(PyFunction_Check(getitem_o)); uint32_t cached_version = FT_ATOMIC_LOAD_UINT32_RELAXED(ht->_spec_cache.getitem_version); if (((PyFunctionObject *)getitem_o)->func_version != cached_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = container; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyCodeObject *code = (PyCodeObject *)PyFunction_GET_CODE(getitem_o); assert(code->co_argcount == 2); if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = container; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } getitem = PyStackRef_FromPyObjectNew(getitem_o); STAT_INC(BINARY_OP, hit); - _tos_cache2 = getitem; - _tos_cache1 = _stack_item_1; - _tos_cache0 = container; + _tos_cache1 = getitem; + _tos_cache0 = _stack_item_1; + stack_pointer[0] = container; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -3701,6 +3760,8 @@ int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -3725,6 +3786,8 @@ if (err) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += -1; @@ -3767,40 +3830,39 @@ stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; } - case _STORE_SUBSCR_LIST_INT_r30: { - assert(current_cached_values == 3); + case _STORE_SUBSCR_LIST_INT_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef value; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - sub_st = _stack_item_2; - list_st = _stack_item_1; - value = _stack_item_0; + sub_st = stack_pointer[-1]; + list_st = stack_pointer[-2]; + value = stack_pointer[-3]; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); assert(PyList_CheckExact(list)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (!LOCK_OBJECT(list)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (index >= PyList_GET_SIZE(list)) { UNLOCK_OBJECT(list); if (true) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -3811,6 +3873,8 @@ assert(old_value != NULL); UNLOCK_OBJECT(list); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); + stack_pointer += -3; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); @@ -3849,6 +3913,8 @@ PyStackRef_CLOSE(dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -3882,6 +3948,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -3908,6 +3976,8 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -3947,6 +4017,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -4006,6 +4078,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer[0] = obj; @@ -4020,6 +4094,8 @@ PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (Py_TYPE(iter_o)->tp_as_async == NULL || @@ -4031,6 +4107,8 @@ Py_TYPE(iter_o)->tp_name); Py_DECREF(iter_o); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); @@ -4048,6 +4126,8 @@ PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter)); stack_pointer = _PyFrame_GetStackPointer(frame); if (awaitable_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); @@ -4075,6 +4155,8 @@ PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); @@ -4097,11 +4179,19 @@ receiver = _stack_item_0; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = receiver; + stack_pointer[1] = v; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (gen->gi_frame_state >= FRAME_EXECUTING) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = receiver; + stack_pointer[1] = v; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(SEND, hit); @@ -4130,11 +4220,11 @@ receiver = stack_pointer[-2]; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (gen->gi_frame_state >= FRAME_EXECUTING) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(SEND, hit); @@ -4163,11 +4253,17 @@ receiver = stack_pointer[-1]; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (gen->gi_frame_state >= FRAME_EXECUTING) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = v; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(SEND, hit); @@ -4198,11 +4294,21 @@ receiver = _stack_item_1; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = receiver; + stack_pointer[2] = v; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (gen->gi_frame_state >= FRAME_EXECUTING) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = receiver; + stack_pointer[2] = v; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(SEND, hit); @@ -4465,6 +4571,8 @@ int err = PyMapping_GetOptionalItem(BUILTINS(), &_Py_ID(__build_class__), &bc_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (bc_o == NULL) { @@ -4472,6 +4580,8 @@ _PyErr_SetString(tstate, PyExc_NameError, "__build_class__ not found"); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } bc = PyStackRef_FromPyObjectSteal(bc_o); @@ -4502,6 +4612,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (PyDict_CheckExact(ns)) { @@ -4526,6 +4638,8 @@ PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -4543,6 +4657,8 @@ _PyErr_Format(tstate, PyExc_SystemError, "no locals when deleting %R", name); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4554,6 +4670,8 @@ NAME_ERROR_MSG, name); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -4574,6 +4692,8 @@ Py_DECREF(seq_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res == 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += oparg; @@ -4581,9 +4701,9 @@ break; } - case _UNPACK_SEQUENCE_TWO_TUPLE_r12: { + case _UNPACK_SEQUENCE_TWO_TUPLE_r11: { assert(current_cached_values == 1); - SET_CURRENT_CACHED_VALUES(2); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef seq; _PyStackRef val1; _PyStackRef val0; @@ -4594,7 +4714,10 @@ PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyTuple_CheckExact(seq_o)); if (PyTuple_GET_SIZE(seq_o) != 2) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = seq; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(UNPACK_SEQUENCE, hit); @@ -4607,26 +4730,24 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - _tos_cache1 = val0; - _tos_cache0 = val1; - stack_pointer += -2; + _tos_cache0 = val0; + stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); break; } - case _UNPACK_SEQUENCE_TUPLE_r10: { - assert(current_cached_values == 1); + case _UNPACK_SEQUENCE_TUPLE_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = _stack_item_0; - values = &stack_pointer[0]; + seq = stack_pointer[-1]; + values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyTuple_CheckExact(seq_o)); if (PyTuple_GET_SIZE(seq_o) != oparg) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(UNPACK_SEQUENCE, hit); @@ -4634,7 +4755,7 @@ for (int i = oparg; --i >= 0; ) { *values++ = PyStackRef_FromPyObjectNew(items[i]); } - stack_pointer += oparg; + stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); @@ -4642,25 +4763,24 @@ break; } - case _UNPACK_SEQUENCE_LIST_r10: { - assert(current_cached_values == 1); + case _UNPACK_SEQUENCE_LIST_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = _stack_item_0; - values = &stack_pointer[0]; + seq = stack_pointer[-1]; + values = &stack_pointer[-1]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyList_CheckExact(seq_o)); if (!LOCK_OBJECT(seq_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (PyList_GET_SIZE(seq_o) != oparg) { UNLOCK_OBJECT(seq_o); if (true) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -4670,7 +4790,7 @@ *values++ = PyStackRef_FromPyObjectNew(items[i]); } UNLOCK_OBJECT(seq_o); - stack_pointer += oparg; + stack_pointer += -1 + oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); @@ -4693,6 +4813,8 @@ Py_DECREF(seq_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res == 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); @@ -4730,6 +4852,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -4755,6 +4879,8 @@ PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -4780,6 +4906,8 @@ PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -4794,6 +4922,8 @@ int err = PyDict_Pop(GLOBALS(), name, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (err == 0) { @@ -4801,6 +4931,8 @@ _PyEval_FormatExcCheckArg(tstate, PyExc_NameError, NAME_ERROR_MSG, name); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -4816,6 +4948,8 @@ _PyErr_SetString(tstate, PyExc_SystemError, "no locals found"); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } locals = PyStackRef_FromPyObjectNew(l); @@ -4835,6 +4969,8 @@ PyObject *v_o = _PyEval_LoadName(tstate, frame, name); stack_pointer = _PyFrame_GetStackPointer(frame); if (v_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } v = PyStackRef_FromPyObjectSteal(v_o); @@ -4853,6 +4989,8 @@ _PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(*res)) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += 1; @@ -4880,12 +5018,12 @@ uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); @@ -4899,12 +5037,18 @@ uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); @@ -4920,12 +5064,20 @@ uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); @@ -4943,12 +5095,22 @@ uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); @@ -4958,59 +5120,20 @@ break; } - case _LOAD_GLOBAL_MODULE_r01: { + case _LOAD_GLOBAL_MODULE_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); - _PyStackRef res; - uint16_t version = (uint16_t)CURRENT_OPERAND0(); - uint16_t index = (uint16_t)CURRENT_OPERAND1(); - PyDictObject *dict = (PyDictObject *)GLOBALS(); - if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); - if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - assert(DK_IS_UNICODE(keys)); - PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); - assert(index < DK_SIZE(keys)); - PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); - if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #if Py_GIL_DISABLED - int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); - if (!increfed) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #else - res = PyStackRef_FromPyObjectNew(res_o); - #endif - STAT_INC(LOAD_GLOBAL, hit); - _tos_cache0 = res; - break; - } - - case _LOAD_GLOBAL_MODULE_r12: { - assert(current_cached_values == 1); - SET_CURRENT_CACHED_VALUES(2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; uint16_t version = (uint16_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); @@ -5018,180 +5141,61 @@ assert(index < DK_SIZE(keys)); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #else res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - break; - } - - case _LOAD_GLOBAL_MODULE_r23: { - assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(3); - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - uint16_t version = (uint16_t)CURRENT_OPERAND0(); - uint16_t index = (uint16_t)CURRENT_OPERAND1(); - PyDictObject *dict = (PyDictObject *)GLOBALS(); - if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); - if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - assert(DK_IS_UNICODE(keys)); - PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); - assert(index < DK_SIZE(keys)); - PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); - if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #if Py_GIL_DISABLED - int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); - if (!increfed) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #else - res = PyStackRef_FromPyObjectNew(res_o); - #endif - STAT_INC(LOAD_GLOBAL, hit); - _tos_cache2 = res; - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_GLOBAL_BUILTINS_r01: { + case _LOAD_GLOBAL_BUILTINS_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); - _PyStackRef res; - uint16_t version = (uint16_t)CURRENT_OPERAND0(); - uint16_t index = (uint16_t)CURRENT_OPERAND1(); - PyDictObject *dict = (PyDictObject *)BUILTINS(); - if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); - if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - assert(DK_IS_UNICODE(keys)); - PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); - PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); - if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #if Py_GIL_DISABLED - int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); - if (!increfed) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #else - res = PyStackRef_FromPyObjectNew(res_o); - #endif - STAT_INC(LOAD_GLOBAL, hit); - _tos_cache0 = res; - break; - } - - case _LOAD_GLOBAL_BUILTINS_r12: { - assert(current_cached_values == 1); - SET_CURRENT_CACHED_VALUES(2); - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - uint16_t version = (uint16_t)CURRENT_OPERAND0(); - uint16_t index = (uint16_t)CURRENT_OPERAND1(); - PyDictObject *dict = (PyDictObject *)BUILTINS(); - if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); - if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - assert(DK_IS_UNICODE(keys)); - PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); - PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); - if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #if Py_GIL_DISABLED - int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); - if (!increfed) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - #else - res = PyStackRef_FromPyObjectNew(res_o); - #endif - STAT_INC(LOAD_GLOBAL, hit); - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - break; - } - - case _LOAD_GLOBAL_BUILTINS_r23: { - assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; uint16_t version = (uint16_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyDictObject *dict = (PyDictObject *)BUILTINS(); if (!PyDict_CheckExact(dict)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #else res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - _tos_cache2 = res; - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -5207,6 +5211,8 @@ PyTuple_GetItem(_PyFrame_GetCode(frame)->co_localsplusnames, oparg) ); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyStackRef tmp = GETLOCAL(oparg); @@ -5224,6 +5230,8 @@ PyObject *initial = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *cell = PyCell_New(initial); if (cell == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyStackRef tmp = GETLOCAL(oparg); @@ -5244,6 +5252,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5273,6 +5283,8 @@ int err = PyMapping_GetOptionalItem(class_dict, name, &value_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (!value_o) { @@ -5282,6 +5294,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } } @@ -5311,6 +5325,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _tos_cache0 = value; @@ -5435,6 +5451,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *str_o = _PyUnicode_JoinArray(&_Py_STR(empty), pieces_o, oparg); @@ -5450,6 +5468,8 @@ stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); if (str_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } str = PyStackRef_FromPyObjectSteal(str_o); @@ -5502,6 +5522,8 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (interpolation_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } interpolation = PyStackRef_FromPyObjectSteal(interpolation_o); @@ -5539,6 +5561,8 @@ PyStackRef_CLOSE(strings); stack_pointer = _PyFrame_GetStackPointer(frame); if (template_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } template = PyStackRef_FromPyObjectSteal(template_o); @@ -5555,6 +5579,8 @@ values = &stack_pointer[-oparg]; PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg); if (tup_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } tup = PyStackRef_FromPyObjectStealMortal(tup_o); @@ -5575,6 +5601,8 @@ PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); if (list_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } list = PyStackRef_FromPyObjectStealMortal(list_o); @@ -5620,6 +5648,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } assert(Py_IsNone(none_val)); @@ -5653,6 +5683,8 @@ PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -5679,6 +5711,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } int err = 0; @@ -5702,6 +5736,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(set_o); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } set = PyStackRef_FromPyObjectStealMortal(set_o); @@ -5730,6 +5766,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5750,6 +5788,8 @@ stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); if (map_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } map = PyStackRef_FromPyObjectStealMortal(map_o); @@ -5766,12 +5806,16 @@ _PyErr_Format(tstate, PyExc_SystemError, "no locals found when setting up annotations"); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(LOCALS(), &_Py_ID(__annotations__), &ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (ann_dict == NULL) { @@ -5779,6 +5823,8 @@ ann_dict = PyDict_New(); stack_pointer = _PyFrame_GetStackPointer(frame); if (ann_dict == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5787,6 +5833,8 @@ Py_DECREF(ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } } @@ -5831,6 +5879,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += -1; @@ -5870,6 +5920,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += -1; @@ -5908,6 +5960,8 @@ if (err != 0) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += -2; @@ -5915,38 +5969,40 @@ break; } - case _LOAD_SUPER_ATTR_ATTR_r31: { - assert(current_cached_values == 3); + case _LOAD_SUPER_ATTR_ATTR_r11: { + assert(current_cached_values == 1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef self_st; _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef attr_st; _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - self_st = _stack_item_2; - class_st = _stack_item_1; - global_super_st = _stack_item_0; + self_st = _stack_item_0; + class_st = stack_pointer[-1]; + global_super_st = stack_pointer[-2]; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(!(oparg & 1)); if (global_super != (PyObject *)&PySuper_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = self_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyType_Check(class)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = self_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); - stack_pointer[0] = global_super_st; - stack_pointer[1] = class_st; - stack_pointer[2] = self_st; - stack_pointer += 3; + stack_pointer[0] = self_st; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); @@ -5966,6 +6022,8 @@ stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); if (attr == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } attr_st = PyStackRef_FromPyObjectSteal(attr); @@ -5973,8 +6031,8 @@ break; } - case _LOAD_SUPER_ATTR_METHOD_r32: { - assert(current_cached_values == 3); + case _LOAD_SUPER_ATTR_METHOD_r22: { + assert(current_cached_values == 2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef self_st; _PyStackRef class_st; @@ -5983,37 +6041,45 @@ _PyStackRef self_or_null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - self_st = _stack_item_2; - class_st = _stack_item_1; - global_super_st = _stack_item_0; + self_st = _stack_item_1; + class_st = _stack_item_0; + global_super_st = stack_pointer[-1]; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(oparg & 1); if (global_super != (PyObject *)&PySuper_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = class_st; + stack_pointer[1] = self_st; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyType_Check(class)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = class_st; + stack_pointer[1] = self_st; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); PyTypeObject *cls = (PyTypeObject *)class; int method_found = 0; - stack_pointer[0] = global_super_st; - stack_pointer[1] = class_st; - stack_pointer[2] = self_st; - stack_pointer += 3; + stack_pointer[0] = class_st; + stack_pointer[1] = self_st; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PySuper_Lookup(cls, self, name, Py_TYPE(self)->tp_getattro == PyObject_GenericGetAttr ? &method_found : NULL); stack_pointer = _PyFrame_GetStackPointer(frame); if (attr_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (method_found) { @@ -6078,6 +6144,8 @@ PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (attr_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } self_or_null[0] = PyStackRef_NULL; @@ -6097,6 +6165,8 @@ PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (attr_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += 1; @@ -6118,7 +6188,6 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -6134,7 +6203,6 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -6151,7 +6219,6 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -6171,7 +6238,6 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -6190,14 +6256,12 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6214,14 +6278,12 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6239,14 +6301,12 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6267,14 +6327,12 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6294,7 +6352,10 @@ assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -6310,7 +6371,7 @@ assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -6327,7 +6388,11 @@ assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -6347,7 +6412,12 @@ assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -6368,14 +6438,20 @@ PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset); PyObject *attr_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(*value_ptr); if (attr_o == NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(value_ptr, attr_o, &attr); if (!increfed) { if (true) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -6406,14 +6482,20 @@ uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (Py_TYPE(owner_o)->tp_getattro != PyModule_Type.tp_getattro) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictObject *dict = (PyDictObject *)((PyModuleObject *)owner_o)->md_dict; assert(dict != NULL); PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != dict_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(keys->dk_kind == DICT_KEYS_UNICODE); @@ -6421,14 +6503,20 @@ PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(keys) + index; PyObject *attr_o = FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_value); if (attr_o == NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr); if (!increfed) { if (true) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -6461,42 +6549,60 @@ assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); PyDictObject *dict = _PyObject_GetManagedDict(owner_o); if (dict == NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *dk = FT_ATOMIC_LOAD_PTR(dict->ma_keys); assert(PyDict_CheckExact((PyObject *)dict)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread((PyObject *)dict) && !_PyObject_GC_IS_SHARED(dict)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif PyObject *attr_o; if (hint >= (size_t)FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_nentries)) { if (true) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1); if (dk->dk_kind != DICT_KEYS_UNICODE) { if (true) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(dk) + hint; if (FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_key) != name) { if (true) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } attr_o = FT_ATOMIC_LOAD_PTR(ep->me_value); if (attr_o == NULL) { if (true) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -6505,7 +6611,10 @@ int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr); if (!increfed) { if (true) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -6536,13 +6645,19 @@ PyObject **addr = (PyObject **)((char *)owner_o + index); PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr); if (attr_o == NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr); if (!increfed) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #else @@ -6573,12 +6688,10 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -6593,12 +6706,10 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -6614,12 +6725,10 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -6638,12 +6747,10 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -6692,19 +6799,31 @@ PyFunctionObject *f = (PyFunctionObject *)fget; PyCodeObject *code = (PyCodeObject *)f->func_code; if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_kwonlyargcount) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_argcount != 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(LOAD_ATTR, hit); @@ -6728,19 +6847,19 @@ PyFunctionObject *f = (PyFunctionObject *)fget; PyCodeObject *code = (PyCodeObject *)f->func_code; if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_kwonlyargcount) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_argcount != 1) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(LOAD_ATTR, hit); @@ -6766,19 +6885,35 @@ PyFunctionObject *f = (PyFunctionObject *)fget; PyCodeObject *code = (PyCodeObject *)f->func_code; if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_kwonlyargcount) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_argcount != 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(LOAD_ATTR, hit); @@ -6806,19 +6941,39 @@ PyFunctionObject *f = (PyFunctionObject *)fget; PyCodeObject *code = (PyCodeObject *)f->func_code; if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_kwonlyargcount) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_argcount != 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(LOAD_ATTR, hit); @@ -6846,7 +7001,6 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6866,7 +7020,6 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6887,7 +7040,6 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6911,7 +7063,6 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6950,33 +7101,31 @@ break; } - case _STORE_ATTR_WITH_HINT_r20: { - assert(current_cached_values == 2); + case _STORE_ATTR_WITH_HINT_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - owner = _stack_item_1; - value = _stack_item_0; + owner = stack_pointer[-1]; + value = stack_pointer[-2]; uint16_t hint = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); PyDictObject *dict = _PyObject_GetManagedDict(owner_o); if (dict == NULL) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!LOCK_OBJECT(dict)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (dict != _PyObject_GetManagedDict(owner_o)) { UNLOCK_OBJECT(dict); if (true) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -6987,7 +7136,7 @@ !DK_IS_UNICODE(dict->ma_keys)) { UNLOCK_OBJECT(dict); if (true) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -6995,7 +7144,7 @@ if (ep->me_key != name) { UNLOCK_OBJECT(dict); if (true) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -7003,14 +7152,10 @@ if (old_value == NULL) { UNLOCK_OBJECT(dict); if (true) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } - stack_pointer[0] = value; - stack_pointer[1] = owner; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyDict_NotifyEvent(tstate->interp, PyDict_EVENT_MODIFIED, dict, name, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7026,19 +7171,17 @@ break; } - case _STORE_ATTR_SLOT_r20: { - assert(current_cached_values == 2); + case _STORE_ATTR_SLOT_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - owner = _stack_item_1; - value = _stack_item_0; + owner = stack_pointer[-1]; + value = stack_pointer[-2]; uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } char *addr = (char *)owner_o + index; @@ -7046,6 +7189,8 @@ PyObject *old_value = *(PyObject **)addr; FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, PyStackRef_AsPyObjectSteal(value)); UNLOCK_OBJECT(owner_o); + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -7085,6 +7230,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (oparg & 16) { @@ -7093,6 +7240,8 @@ Py_DECREF(res_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_bool < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = res_bool ? PyStackRef_True : PyStackRef_False; @@ -7177,43 +7326,9 @@ break; } - case _COMPARE_OP_INT_r21: { - assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - oparg = CURRENT_OPARG(); - right = _stack_item_1; - left = _stack_item_0; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - if (!_PyLong_IsCompact((PyLongObject *)left_o)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - if (!_PyLong_IsCompact((PyLongObject *)right_o)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(COMPARE_OP, hit); - assert(_PyLong_DigitCount((PyLongObject *)left_o) <= 1 && - _PyLong_DigitCount((PyLongObject *)right_o) <= 1); - Py_ssize_t ileft = _PyLong_CompactValue((PyLongObject *)left_o); - Py_ssize_t iright = _PyLong_CompactValue((PyLongObject *)right_o); - int sign_ish = COMPARISON_BIT(ileft, iright); - PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); - res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - _tos_cache0 = res; - break; - } - - case _COMPARE_OP_INT_r10: { + case _COMPARE_OP_INT_r11: { assert(current_cached_values == 1); - SET_CURRENT_CACHED_VALUES(0); + SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7224,46 +7339,17 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - if (!_PyLong_IsCompact((PyLongObject *)right_o)) { - UOP_STAT_INC(uopcode, miss); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(COMPARE_OP, hit); - assert(_PyLong_DigitCount((PyLongObject *)left_o) <= 1 && - _PyLong_DigitCount((PyLongObject *)right_o) <= 1); - Py_ssize_t ileft = _PyLong_CompactValue((PyLongObject *)left_o); - Py_ssize_t iright = _PyLong_CompactValue((PyLongObject *)right_o); - int sign_ish = COMPARISON_BIT(ileft, iright); - PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); - res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-1] = res; - break; - } - - case _COMPARE_OP_INT_r32: { - assert(current_cached_values == 3); - SET_CURRENT_CACHED_VALUES(2); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - right = _stack_item_2; - left = _stack_item_1; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - if (!_PyLong_IsCompact((PyLongObject *)left_o)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = right; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!_PyLong_IsCompact((PyLongObject *)right_o)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = right; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(COMPARE_OP, hit); @@ -7275,8 +7361,9 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; + _tos_cache0 = res; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -7418,6 +7505,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; @@ -7433,7 +7522,10 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyAnySet_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = tos; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -7447,7 +7539,7 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyAnySet_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -7462,7 +7554,11 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyAnySet_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = tos; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -7480,7 +7576,12 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyAnySet_CheckExact(o)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = tos; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -7522,6 +7623,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; @@ -7562,6 +7665,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; @@ -7602,6 +7707,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *match_o = NULL; @@ -7621,10 +7728,14 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } assert((match_o == NULL) == (rest_o == NULL)); if (match_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (!Py_IsNone(match_o)) { @@ -7658,6 +7769,8 @@ int err = _PyEval_CheckExceptTypeValid(tstate, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -7705,6 +7818,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -7724,6 +7839,8 @@ PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -7772,10 +7889,14 @@ Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj)); stack_pointer = _PyFrame_GetStackPointer(frame); if (len_i < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *len_o = PyLong_FromSsize_t(len_i); if (len_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } len = PyStackRef_FromPyObjectSteal(len_o); @@ -7829,6 +7950,8 @@ } else { if (_PyErr_Occurred(tstate)) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } attrs = PyStackRef_None; @@ -7934,6 +8057,8 @@ PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys)); stack_pointer = _PyFrame_GetStackPointer(frame); if (values_or_none_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); @@ -7956,6 +8081,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _Py_GatherStats_GetIter(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; #endif PyTypeObject *tp = PyStackRef_TYPE(iterable); @@ -7964,6 +8090,9 @@ index_or_null = PyStackRef_TagInt(0); } else { + stack_pointer[0] = iterable; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -7973,16 +8102,15 @@ PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); index_or_null = PyStackRef_NULL; - stack_pointer += 1; } _tos_cache1 = index_or_null; _tos_cache0 = iter; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); break; } @@ -8004,6 +8132,8 @@ "cannot 'yield from' a coroutine object " "in a non-coroutine generator"); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } iter = iterable; @@ -8019,6 +8149,8 @@ PyObject *iter_o = PyObject_GetIter(iterable_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } iter = PyStackRef_FromPyObjectSteal(iter_o); @@ -8036,7 +8168,7 @@ /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */ - case _FOR_ITER_TIER_TWO_r01: { + case _FOR_ITER_TIER_TWO_r00: { assert(current_cached_values == 0); _PyStackRef null_or_index; _PyStackRef iter; @@ -8048,17 +8180,21 @@ stack_pointer = _PyFrame_GetStackPointer(frame); if (!PyStackRef_IsValid(item)) { if (PyStackRef_IsError(item)) { + stack_pointer[-1] = null_or_index; + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } next = item; - _tos_cache0 = next; stack_pointer[-1] = null_or_index; - SET_CURRENT_CACHED_VALUES(1); + stack_pointer[0] = next; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } @@ -8075,13 +8211,11 @@ iter = _stack_item_0; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8099,13 +8233,11 @@ iter = stack_pointer[-2]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8122,13 +8254,11 @@ iter = stack_pointer[-1]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8148,13 +8278,11 @@ iter = _stack_item_1; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8178,7 +8306,6 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8198,7 +8325,6 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8217,7 +8343,6 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8239,7 +8364,6 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8252,9 +8376,9 @@ /* _ITER_NEXT_LIST is not a viable micro-op for tier 2 because it is replaced */ - case _ITER_NEXT_LIST_TIER_TWO_r01: { + case _ITER_NEXT_LIST_TIER_TWO_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -8270,7 +8394,7 @@ int result = _PyList_GetItemRefNoLock((PyListObject *)list_o, PyStackRef_UntagInt(null_or_index), &next); stack_pointer = _PyFrame_GetStackPointer(frame); if (result <= 0) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #else @@ -8278,8 +8402,10 @@ next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(list_o, PyStackRef_UntagInt(null_or_index))); #endif null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index); - _tos_cache0 = next; stack_pointer[-1] = null_or_index; + stack_pointer[0] = next; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -8294,7 +8420,6 @@ iter = _stack_item_0; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8312,7 +8437,6 @@ iter = stack_pointer[-2]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8329,7 +8453,6 @@ iter = stack_pointer[-1]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8349,7 +8472,6 @@ iter = _stack_item_1; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8372,7 +8494,6 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = null_or_index; @@ -8390,7 +8511,6 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -8407,7 +8527,6 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = null_or_index; @@ -8427,7 +8546,6 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = null_or_index; @@ -8468,12 +8586,10 @@ iter = _stack_item_0; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8489,12 +8605,10 @@ iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8509,12 +8623,10 @@ iter = stack_pointer[-1]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8532,12 +8644,10 @@ iter = _stack_item_1; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8558,7 +8668,6 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -8574,7 +8683,6 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -8589,7 +8697,6 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -8607,7 +8714,6 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -8640,6 +8746,8 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } next = PyStackRef_FromPyObjectSteal(res); @@ -8649,9 +8757,9 @@ break; } - case _FOR_ITER_GEN_FRAME_r23: { + case _FOR_ITER_GEN_FRAME_r22: { assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(2); _PyStackRef iter; _PyStackRef gen_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8660,18 +8768,30 @@ iter = _stack_item_0; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(gen) != &PyGen_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = iter; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)gen)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = iter; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif if (gen->gi_frame_state >= FRAME_EXECUTING) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = iter; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(FOR_ITER, hit); @@ -8683,9 +8803,11 @@ pushed_frame->previous = frame; frame->return_offset = (uint16_t)( 2 + oparg); gen_frame = PyStackRef_Wrap(pushed_frame); - _tos_cache2 = gen_frame; - _tos_cache1 = _stack_item_1; - _tos_cache0 = iter; + _tos_cache1 = gen_frame; + _tos_cache0 = _stack_item_1; + stack_pointer[0] = iter; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -8728,6 +8850,8 @@ _PyErr_Format(tstate, PyExc_TypeError, errfmt, owner); stack_pointer = _PyFrame_GetStackPointer(frame); } + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; @@ -8764,6 +8888,8 @@ Py_XDECREF(original_tb); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -8851,7 +8977,10 @@ assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -8867,7 +8996,7 @@ assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -8884,7 +9013,11 @@ assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -8904,7 +9037,12 @@ assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -8924,7 +9062,10 @@ PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -8941,7 +9082,7 @@ PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -8959,7 +9100,11 @@ PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -8980,7 +9125,12 @@ PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -9171,7 +9321,10 @@ char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); if (dict != NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = owner; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -9187,7 +9340,7 @@ char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); if (dict != NULL) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -9204,7 +9357,11 @@ char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); if (dict != NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -9224,7 +9381,12 @@ char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); if (dict != NULL) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = owner; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -9356,6 +9518,8 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (temp == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } new_frame = PyStackRef_Wrap(temp); @@ -9372,12 +9536,10 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9391,7 +9553,6 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9406,7 +9567,6 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -9423,7 +9583,6 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -9442,7 +9601,6 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -9462,20 +9620,16 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (((PyFunctionObject *)func)->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9512,11 +9666,9 @@ callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(callable_o) == &PyMethod_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9563,6 +9715,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -9592,6 +9746,8 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -9608,11 +9764,9 @@ null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable)) != &PyMethod_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9644,7 +9798,7 @@ assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); if (tstate->interp->eval_frame) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -9655,7 +9809,10 @@ SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (tstate->interp->eval_frame) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -9668,7 +9825,11 @@ _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (tstate->interp->eval_frame) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -9683,7 +9844,12 @@ _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; if (tstate->interp->eval_frame) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -9705,7 +9871,6 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null))) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9721,7 +9886,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -9731,7 +9896,7 @@ assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -9742,7 +9907,10 @@ SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -9755,7 +9923,11 @@ _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -9770,7 +9942,12 @@ _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -9967,7 +10144,11 @@ _PyStackRef _stack_item_1 = _tos_cache1; null = _stack_item_0; if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = null; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -9981,7 +10162,7 @@ _PyStackRef null; null = stack_pointer[-2]; if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -9994,7 +10175,10 @@ _PyStackRef _stack_item_0 = _tos_cache0; null = stack_pointer[-1]; if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -10010,7 +10194,12 @@ _PyStackRef _stack_item_2 = _tos_cache2; null = _stack_item_1; if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = null; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10028,7 +10217,6 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -10043,7 +10231,6 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -10057,7 +10244,6 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -10074,7 +10260,6 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10092,7 +10277,12 @@ _PyStackRef _stack_item_2 = _tos_cache2; null = _stack_item_0; if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = null; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10111,7 +10301,12 @@ callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (callable_o != (PyObject *)&PyType_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = callable; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10162,7 +10357,12 @@ callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (callable_o != (PyObject *)&PyUnicode_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = callable; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10204,6 +10404,8 @@ PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -10221,7 +10423,12 @@ callable = _stack_item_0; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (callable_o != (PyObject *)&PyTuple_Type) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = callable; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10263,6 +10470,8 @@ PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -10281,16 +10490,16 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyStackRef_IsNull(self_or_null)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyType_Check(callable_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = (PyTypeObject *)callable_o; if (FT_ATOMIC_LOAD_UINT32_RELAXED(tp->tp_version_tag) != type_version) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(tp->tp_new == PyBaseObject_Type.tp_new); @@ -10300,7 +10509,7 @@ PyFunctionObject *init_func = (PyFunctionObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(cls->_spec_cache.init); PyCodeObject *code = (PyCodeObject *)init_func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize + _Py_InitCleanup.co_framesize)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -10308,6 +10517,8 @@ PyObject *self_o = PyType_GenericAlloc(tp, 0); stack_pointer = _PyFrame_GetStackPointer(frame); if (self_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } self_or_null = PyStackRef_FromPyObjectSteal(self_o); @@ -10349,6 +10560,8 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FrameClearAndPop(tstate, shim); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } frame->return_offset = 1 + INLINE_CACHE_ENTRIES_CALL; @@ -10373,14 +10586,16 @@ "__init__() should return None, not '%.200s'", Py_TYPE(PyStackRef_AsPyObjectBorrow(should_be_none))->tp_name); stack_pointer = _PyFrame_GetStackPointer(frame); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } break; } - case _CALL_BUILTIN_CLASS_r01: { + case _CALL_BUILTIN_CLASS_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10391,7 +10606,7 @@ callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyType_Check(callable_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = (PyTypeObject *)callable_o; @@ -10402,7 +10617,7 @@ total_args++; } if (tp->tp_vectorcall == NULL) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -10426,6 +10641,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -10451,16 +10668,20 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _CALL_BUILTIN_O_r01: { + case _CALL_BUILTIN_O_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10476,19 +10697,15 @@ total_args++; } if (total_args != 1) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!PyCFunction_CheckExact(callable_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (PyCFunction_GET_FLAGS(callable_o) != METH_O) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -10508,16 +10725,20 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _CALL_BUILTIN_FAST_r01: { + case _CALL_BUILTIN_FAST_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10534,11 +10755,11 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (PyCFunction_GET_FLAGS(callable_o) != METH_FASTCALL) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -10563,6 +10784,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -10592,16 +10815,20 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01: { + case _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10618,11 +10845,11 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (PyCFunction_GET_FLAGS(callable_o) != (METH_FASTCALL | METH_KEYWORDS)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -10650,6 +10877,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -10676,10 +10905,14 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -10694,7 +10927,12 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.len) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = callable; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10728,11 +10966,15 @@ Py_ssize_t len_i = PyObject_Length(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (len_i < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *res_o = PyLong_FromSsize_t(len_i); assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } stack_pointer += -1; @@ -10761,7 +11003,12 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.isinstance) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10797,6 +11044,8 @@ int retval = PyObject_IsInstance(inst_o, cls_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (retval < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } (void)null; @@ -10832,7 +11081,12 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyInterpreterState *interp = tstate->interp; if (callable_o != interp->callable_cache.list_append) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = callable; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10841,34 +11095,30 @@ break; } - case _CALL_LIST_APPEND_r30: { - assert(current_cached_values == 3); + case _CALL_LIST_APPEND_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = _stack_item_2; - self = _stack_item_1; - callable = _stack_item_0; + arg = stack_pointer[-1]; + self = stack_pointer[-2]; + callable = stack_pointer[-3]; assert(oparg == 1); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); if (!PyList_CheckExact(self_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!LOCK_OBJECT(self_o)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); int err = _PyList_AppendTakeRef((PyListObject *)self_o, PyStackRef_AsPyObjectSteal(arg)); UNLOCK_OBJECT(self_o); - stack_pointer[0] = callable; - stack_pointer += 1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); @@ -10879,6 +11129,8 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } #if TIER_ONE @@ -10889,9 +11141,9 @@ break; } - case _CALL_METHOD_DESCRIPTOR_O_r01: { + case _CALL_METHOD_DESCRIPTOR_O_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10909,27 +11161,22 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (total_args != 2) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_O) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _PyStackRef arg_stackref = arguments[1]; _PyStackRef self_stackref = arguments[0]; if (!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref), method->d_common.d_type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -10960,16 +11207,20 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01: { + case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10986,24 +11237,20 @@ total_args++; } if (total_args == 0) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *d_type = method->d_common.d_type; PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); assert(self != NULL); if (!Py_IS_TYPE(self, d_type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11028,6 +11275,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -11056,16 +11305,20 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _CALL_METHOD_DESCRIPTOR_NOARGS_r01: { + case _CALL_METHOD_DESCRIPTOR_NOARGS_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11082,27 +11335,22 @@ total_args++; } if (total_args != 1) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; _PyStackRef self_stackref = args[0]; PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref); if (!Py_IS_TYPE(self, method->d_common.d_type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (meth->ml_flags != METH_NOARGS) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11121,16 +11369,20 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _CALL_METHOD_DESCRIPTOR_FAST_r01: { + case _CALL_METHOD_DESCRIPTOR_FAST_r00: { assert(current_cached_values == 0); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11147,23 +11399,19 @@ total_args++; } if (total_args == 0) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_FASTCALL) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); assert(self != NULL); if (!Py_IS_TYPE(self, method->d_common.d_type)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11188,6 +11436,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); @@ -11215,10 +11465,14 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -11295,6 +11549,8 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (temp == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } new_frame = PyStackRef_Wrap(temp); @@ -11312,12 +11568,10 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11336,20 +11590,16 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (((PyFunctionObject *)func)->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!PyStackRef_IsNull(null)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11388,11 +11638,9 @@ callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(callable_o) == &PyMethod_Type) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11446,6 +11694,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); @@ -11485,6 +11735,8 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -11505,12 +11757,16 @@ int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *tuple_o = PySequence_Tuple(callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (tuple_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyStackRef temp = callargs; @@ -11547,6 +11803,8 @@ PyStackRef_CLOSE(codeobj_st); stack_pointer = _PyFrame_GetStackPointer(frame); if (func_obj == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } _PyFunction_SetVersion( @@ -11639,6 +11897,8 @@ PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func); stack_pointer = _PyFrame_GetStackPointer(frame); if (gen == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } assert(STACK_LEVEL() == 0); @@ -11683,6 +11943,8 @@ stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); if (slice_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } slice = PyStackRef_FromPyObjectStealMortal(slice_o); @@ -11713,6 +11975,8 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (result_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } result = PyStackRef_FromPyObjectSteal(result_o); @@ -11741,6 +12005,8 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -11780,6 +12046,8 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -11822,6 +12090,8 @@ PyObject *res_o = _PyEval_BinaryOps[oparg](lhs_o, rhs_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); @@ -11879,65 +12149,67 @@ /* _INSTRUMENTED_POP_JUMP_IF_NOT_NONE is not a viable micro-op for tier 2 because it is instrumented */ - case _GUARD_IS_TRUE_POP_r10: { - assert(current_cached_values == 1); + case _GUARD_IS_TRUE_POP_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; - _PyStackRef _stack_item_0 = _tos_cache0; - flag = _stack_item_0; + flag = stack_pointer[-1]; int is_true = PyStackRef_IsTrue(flag); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); if (!is_true) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; } - case _GUARD_IS_FALSE_POP_r10: { - assert(current_cached_values == 1); + case _GUARD_IS_FALSE_POP_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; - _PyStackRef _stack_item_0 = _tos_cache0; - flag = _stack_item_0; + flag = stack_pointer[-1]; int is_false = PyStackRef_IsFalse(flag); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); if (!is_false) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; } - case _GUARD_IS_NONE_POP_r10: { - assert(current_cached_values == 1); + case _GUARD_IS_NONE_POP_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef val; - _PyStackRef _stack_item_0 = _tos_cache0; - val = _stack_item_0; + val = stack_pointer[-1]; int is_none = PyStackRef_IsNone(val); if (!is_none) { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); if (1) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _GUARD_IS_NOT_NONE_POP_r10: { - assert(current_cached_values == 1); + case _GUARD_IS_NOT_NONE_POP_r00: { + assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef val; - _PyStackRef _stack_item_0 = _tos_cache0; - val = _stack_item_0; + val = stack_pointer[-1]; int is_none = PyStackRef_IsNone(val); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); if (is_none) { - UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -12000,11 +12272,11 @@ uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); if (!_PyThreadState_HasStackSpace(tstate, framesize)) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -12017,11 +12289,17 @@ uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); if (!_PyThreadState_HasStackSpace(tstate, framesize)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -12036,11 +12314,19 @@ uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); if (!_PyThreadState_HasStackSpace(tstate, framesize)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -12057,11 +12343,21 @@ uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); if (!_PyThreadState_HasStackSpace(tstate, framesize)) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (tstate->py_recursion_remaining <= 1) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -12188,9 +12484,9 @@ break; } - case _EXIT_TRACE_r11: { + case _EXIT_TRACE_r10: { assert(current_cached_values == 1); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); _PyExitData *exit = (_PyExitData *)exit_p; @@ -12258,15 +12554,12 @@ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); - _tos_cache0 = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); break; } - case _EXIT_TRACE_r22: { + case _EXIT_TRACE_r20: { assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(2); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); @@ -12340,16 +12633,12 @@ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); - _tos_cache1 = stack_pointer[-1]; - _tos_cache0 = stack_pointer[-2]; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); break; } - case _EXIT_TRACE_r33: { + case _EXIT_TRACE_r30: { assert(current_cached_values == 3); - SET_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -12429,11 +12718,6 @@ stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); - _tos_cache2 = stack_pointer[-1]; - _tos_cache1 = stack_pointer[-2]; - _tos_cache0 = stack_pointer[-3]; - stack_pointer += -3; - assert(WITHIN_STACK_BOUNDS()); break; } @@ -12441,7 +12725,7 @@ assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); if (!current_executor->vm_data.valid) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -12452,7 +12736,10 @@ SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (!current_executor->vm_data.valid) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -12465,7 +12752,11 @@ _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (!current_executor->vm_data.valid) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -12480,7 +12771,12 @@ _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; if (!current_executor->vm_data.valid) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -12895,7 +13191,7 @@ assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } break; @@ -12909,7 +13205,10 @@ assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -12925,7 +13224,11 @@ assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -12943,7 +13246,12 @@ assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); if (func->func_version != func_version) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -13066,39 +13374,6 @@ break; } - case _DEOPT_r11: { - assert(current_cached_values == 1); - SET_CURRENT_CACHED_VALUES(1); - _PyStackRef _stack_item_0 = _tos_cache0; - GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); - _tos_cache0 = _stack_item_0; - break; - } - - case _DEOPT_r22: { - assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(2); - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; - break; - } - - case _DEOPT_r33: { - assert(current_cached_values == 3); - SET_CURRENT_CACHED_VALUES(3); - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); - _tos_cache2 = _stack_item_2; - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; - break; - } - case _ERROR_POP_N_r00: { assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); @@ -13110,82 +13385,19 @@ break; } - case _ERROR_POP_N_r11: { - assert(current_cached_values == 1); - SET_CURRENT_CACHED_VALUES(1); - _PyStackRef _stack_item_0 = _tos_cache0; - oparg = CURRENT_OPARG(); - uint32_t target = (uint32_t)CURRENT_OPERAND0(); - assert(oparg == 0); - frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; - stack_pointer[0] = _stack_item_0; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - GOTO_TIER_ONE(NULL); - _tos_cache0 = stack_pointer[-1]; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _ERROR_POP_N_r22: { - assert(current_cached_values == 2); - SET_CURRENT_CACHED_VALUES(2); - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - oparg = CURRENT_OPARG(); - uint32_t target = (uint32_t)CURRENT_OPERAND0(); - assert(oparg == 0); - frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = _stack_item_1; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - GOTO_TIER_ONE(NULL); - _tos_cache1 = stack_pointer[-1]; - _tos_cache0 = stack_pointer[-2]; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _ERROR_POP_N_r33: { - assert(current_cached_values == 3); - SET_CURRENT_CACHED_VALUES(3); - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - uint32_t target = (uint32_t)CURRENT_OPERAND0(); - assert(oparg == 0); - frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = _stack_item_1; - stack_pointer[2] = _stack_item_2; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); - GOTO_TIER_ONE(NULL); - _tos_cache2 = stack_pointer[-1]; - _tos_cache1 = stack_pointer[-2]; - _tos_cache0 = stack_pointer[-3]; - stack_pointer += -3; - assert(WITHIN_STACK_BOUNDS()); - break; - } - case _TIER2_RESUME_CHECK_r00: { assert(current_cached_values == 0); SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; #endif uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); if (eval_breaker & _PY_EVAL_EVENTS_MASK) { - UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); @@ -13198,14 +13410,20 @@ _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; #endif uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); if (eval_breaker & _PY_EVAL_EVENTS_MASK) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); @@ -13220,14 +13438,22 @@ _PyStackRef _stack_item_1 = _tos_cache1; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; #endif uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); if (eval_breaker & _PY_EVAL_EVENTS_MASK) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); @@ -13244,14 +13470,24 @@ _PyStackRef _stack_item_2 = _tos_cache2; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; #endif uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); if (eval_breaker & _PY_EVAL_EVENTS_MASK) { - UOP_STAT_INC(uopcode, miss); + stack_pointer[0] = _stack_item_0; + stack_pointer[1] = _stack_item_1; + stack_pointer[2] = _stack_item_2; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); diff --git a/Python/optimizer.c b/Python/optimizer.c index 9b356e8a3da248..d055465d658620 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -336,7 +336,9 @@ uop_item(PyObject *op, Py_ssize_t index) PyErr_SetNone(PyExc_IndexError); return NULL; } - const char *name = _PyUOpName(self->trace[index].opcode); + int opcode = self->trace[index].opcode; + int base_opcode = _PyUop_Uncached[opcode]; + const char *name = _PyUOpName(base_opcode); if (name == NULL) { name = ""; } @@ -1004,31 +1006,28 @@ count_exits(_PyUOpInstruction *buffer, int length) } static int -get_exit_depth(_PyUOpInstruction *src) +get_exit_depth(_PyUOpInstruction *inst) { // TO DO -- Add another generated table for this? - int base_opcode = _PyUop_Uncached[src->opcode]; + int base_opcode = _PyUop_Uncached[inst->opcode]; assert(base_opcode != 0); + if (_PyUop_Flags[base_opcode] & HAS_DEOPT_FLAG) { + return 0; + } int input = -1; for (int i = 0; i < 4; i++) { - if (_PyUop_Caching[base_opcode].opcodes[i] == src->opcode) { + if (_PyUop_Caching[base_opcode].opcodes[i] == inst->opcode) { input = i; break; } } - if (input == -1) { - return -1; - } - if (is_for_iter_test[base_opcode]) { - return input; - } - return input + _PyUop_Caching[base_opcode].delta; + return input; } -static void make_exit(_PyUOpInstruction *inst, int opcode, int target, _PyUOpInstruction *src) +static void make_exit(_PyUOpInstruction *inst, int opcode, int target) { - int depth = get_exit_depth(src); - inst->opcode = _PyUop_Caching[opcode].opcodes[depth]; + assert(opcode > MAX_UOP_ID && opcode <= MAX_UOP_REGS_ID); + inst->opcode = opcode; inst->oparg = 0; inst->operand0 = 0; inst->format = UOP_FORMAT_TARGET; @@ -1068,8 +1067,10 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) assert(inst->opcode != _NOP); int32_t target = (int32_t)uop_get_target(inst); if (_PyUop_Flags[base_opcode] & (HAS_EXIT_FLAG | HAS_DEOPT_FLAG)) { - uint16_t exit_op = (_PyUop_Flags[base_opcode] & HAS_EXIT_FLAG) ? + uint16_t base_exit_op = (_PyUop_Flags[base_opcode] & HAS_EXIT_FLAG) ? _EXIT_TRACE : _DEOPT; + int exit_depth = get_exit_depth(inst); + uint16_t exit_op = _PyUop_Caching[base_exit_op].opcodes[exit_depth]; int32_t jump_target = target; if (is_for_iter_test[base_opcode]) { /* Target the POP_TOP immediately after the END_FOR, @@ -1079,7 +1080,7 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) jump_target = next_inst + inst->oparg + 1; } if (jump_target != current_jump_target || current_exit_op != exit_op) { - make_exit(&buffer[next_spare], exit_op, jump_target, inst); + make_exit(&buffer[next_spare], exit_op, jump_target); current_exit_op = exit_op; current_jump_target = jump_target; current_jump = next_spare; @@ -1095,7 +1096,7 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) current_popped = popped; current_error = next_spare; current_error_target = target; - make_exit(&buffer[next_spare], _ERROR_POP_N, 0, inst); + make_exit(&buffer[next_spare], _ERROR_POP_N_r00, 0); buffer[next_spare].operand0 = target; next_spare++; } diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 3236867ef2e235..0e47bc845ec31b 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1190,13 +1190,14 @@ def get_uop_cache_depths(uop: Uop): if inputs != outputs: yield inputs, outputs return - if uop.name in ("_EXIT_TRACE", "_DEOPT", "_ERROR_POP_N"): + if uop.name == "_EXIT_TRACE": for i in range(4): - yield i, i + yield i, 0 return - if uop.name in ("_START_EXECUTOR", "_JUMP_TO_TOP"): + if uop.name in ("_START_EXECUTOR", "_JUMP_TO_TOP", "_DEOPT", "_ERROR_POP_N"): yield 0, 0 return + has_exit = uop.properties.deopts or uop.properties.side_exit ideal_inputs = 0 has_array = False for item in reversed(uop.stack.inputs): @@ -1219,6 +1220,12 @@ def get_uop_cache_depths(uop: Uop): ideal_inputs = 3 if ideal_outputs > 3: ideal_outputs = 3 + # If a uop has an exit, we can get in a mess if the stack caching + # changes during execution. + if has_exit and ideal_inputs != ideal_outputs: + n = min(ideal_inputs, ideal_outputs) + yield n, n + return yield ideal_inputs, ideal_outputs if uop.properties.escapes or uop.properties.stores_sp or has_array: return diff --git a/Tools/cases_generator/generators_common.py b/Tools/cases_generator/generators_common.py index b1e2e1866eb085..0001a220601cbe 100644 --- a/Tools/cases_generator/generators_common.py +++ b/Tools/cases_generator/generators_common.py @@ -544,10 +544,10 @@ def emit_MacroIfStmt( self.out.emit(stmt.condition) branch = stmt.else_ is not None reachable = True - if branch: - else_storage = storage.copy() + if_storage = storage + else_storage = storage.copy() for s in stmt.body: - r, tkn, storage = self._emit_stmt(s, uop, storage, inst) + r, tkn, if_storage = self._emit_stmt(s, uop, if_storage, inst) if tkn is not None: self.out.emit(tkn) if not r: @@ -562,7 +562,10 @@ def emit_MacroIfStmt( self.out.emit(tkn) if not r: reachable = False - else_storage.merge(storage, self.out) # type: ignore[possibly-undefined] + else_storage.merge(if_storage, self.out) + storage = if_storage + else: + if_storage.merge(else_storage, self.out) storage = else_storage self.out.emit(stmt.endif) return reachable, None, storage diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index a0830a3e32010e..262baaddb3e6cf 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -69,7 +69,11 @@ def goto_error(self, offset: int, storage: Storage) -> str: # To do: Add jump targets for popping values. if offset != 0: storage.copy().flush(self.out) - return f"JUMP_TO_ERROR();" + else: + storage.stack.copy().flush(self.out) + self.emit("UOP_STAT_INC(uopcode, miss);\n") + self.emit("SET_CURRENT_CACHED_VALUES(0);\n") + return "JUMP_TO_ERROR();" def deopt_if( self, @@ -87,7 +91,8 @@ def deopt_if( emit_to(self.out, tkn_iter, "RPAREN") next(tkn_iter) # Semi colon self.emit(") {\n") - self.emit("UOP_STAT_INC(uopcode, miss);\n") + storage.stack.copy().flush(self.out) + self.emit("SET_CURRENT_CACHED_VALUES(0);\n") self.emit("JUMP_TO_JUMP_TARGET();\n") self.emit("}\n") return not always_true(first_tkn) @@ -107,7 +112,6 @@ def exit_if( # type: ignore[override] emit_to(self.out, tkn_iter, "RPAREN") next(tkn_iter) # Semi colon self.emit(") {\n") - self.emit("UOP_STAT_INC(uopcode, miss);\n") self.emit("JUMP_TO_JUMP_TARGET();\n") self.emit("}\n") return not always_true(first_tkn) @@ -202,6 +206,8 @@ def generate_tier2( ) continue for inputs, outputs in get_uop_cache_depths(uop): + if inputs != outputs and (uop.properties.deopts or uop.properties.side_exit): + raise analysis_error(f"{uop.name} has side exit and differing cache depths", uop.body.open) out.emit(f"case {uop.name}_r{inputs}{outputs}: {{\n") out.emit(f"assert(current_cached_values == {inputs});\n") if not is_for_iter_test(uop): From f60392956a1b0b184095da10418dea2582972465 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 12:39:39 +0100 Subject: [PATCH 03/14] Get JIT working --- Include/internal/pycore_jit.h | 2 +- Python/ceval_macros.h | 6 +- Python/executor_cases.c.h | 1108 +++++++++++----------- Python/jit.c | 6 +- Tools/cases_generator/tier2_generator.py | 2 +- Tools/jit/_writer.py | 2 +- Tools/jit/shim.c | 8 +- Tools/jit/template.c | 10 +- 8 files changed, 575 insertions(+), 569 deletions(-) diff --git a/Include/internal/pycore_jit.h b/Include/internal/pycore_jit.h index 8a88cbf607ba4b..ba8790213c4e52 100644 --- a/Include/internal/pycore_jit.h +++ b/Include/internal/pycore_jit.h @@ -15,7 +15,7 @@ extern "C" { #ifdef _Py_JIT -typedef _Py_CODEUNIT *(*jit_func)(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate); +typedef _Py_CODEUNIT *(*jit_func)(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate, _PyStackRef _tos_cache0, _PyStackRef _tos_cache1, _PyStackRef _tos_cache2); int _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction *trace, size_t length); void _PyJIT_Free(_PyExecutorObject *executor); diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index 30a542d948df7c..dd1a97ff8b893e 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -363,7 +363,7 @@ do { \ jit_func jitted = _executor->jit_code; \ /* Keep the shim frame alive via the executor: */ \ Py_INCREF(_executor); \ - next_instr = jitted(frame, stack_pointer, tstate); \ + next_instr = jitted(frame, stack_pointer, tstate, PyStackRef_NULL, PyStackRef_NULL, PyStackRef_NULL); \ Py_DECREF(_executor); \ frame = tstate->current_frame; \ stack_pointer = _PyFrame_GetStackPointer(frame); \ @@ -426,8 +426,10 @@ do { \ #define CONVERSION_FAILED(NAME) ((NAME) == NULL) -#ifdef Py_DEBUG +#if defined(Py_DEBUG) && !defined(_Py_JIT) #define SET_CURRENT_CACHED_VALUES(N) current_cached_values = (N) +#define CHECK_CURRENT_CACHED_VALUES(N) assert(current_cached_values == (N)) #else #define SET_CURRENT_CACHED_VALUES(N) ((void)0) +#define CHECK_CURRENT_CACHED_VALUES(N) ((void)0) #endif diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index e804fd477ebdf8..00795713842223 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -9,13 +9,13 @@ #define TIER_TWO 2 case _NOP_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); break; } case _NOP_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache0 = _stack_item_0; @@ -23,7 +23,7 @@ } case _NOP_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -33,7 +33,7 @@ } case _NOP_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -45,7 +45,7 @@ } case _CHECK_PERIODIC_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); @@ -63,7 +63,7 @@ } case _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { @@ -88,7 +88,7 @@ /* _LOAD_BYTECODE is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ case _RESUME_CHECK_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { @@ -115,7 +115,7 @@ } case _RESUME_CHECK_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) @@ -153,7 +153,7 @@ } case _RESUME_CHECK_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -196,7 +196,7 @@ } case _RESUME_CHECK_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -246,7 +246,7 @@ /* _MONITOR_RESUME is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ case _LOAD_FAST_CHECK_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -268,7 +268,7 @@ } case _LOAD_FAST_0_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; @@ -280,7 +280,7 @@ } case _LOAD_FAST_0_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -294,7 +294,7 @@ } case _LOAD_FAST_0_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -310,7 +310,7 @@ } case _LOAD_FAST_1_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 1; @@ -322,7 +322,7 @@ } case _LOAD_FAST_1_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -336,7 +336,7 @@ } case _LOAD_FAST_1_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -352,7 +352,7 @@ } case _LOAD_FAST_2_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 2; @@ -364,7 +364,7 @@ } case _LOAD_FAST_2_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -378,7 +378,7 @@ } case _LOAD_FAST_2_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -394,7 +394,7 @@ } case _LOAD_FAST_3_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 3; @@ -406,7 +406,7 @@ } case _LOAD_FAST_3_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -420,7 +420,7 @@ } case _LOAD_FAST_3_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -436,7 +436,7 @@ } case _LOAD_FAST_4_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 4; @@ -448,7 +448,7 @@ } case _LOAD_FAST_4_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -462,7 +462,7 @@ } case _LOAD_FAST_4_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -478,7 +478,7 @@ } case _LOAD_FAST_5_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 5; @@ -490,7 +490,7 @@ } case _LOAD_FAST_5_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -504,7 +504,7 @@ } case _LOAD_FAST_5_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -520,7 +520,7 @@ } case _LOAD_FAST_6_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 6; @@ -532,7 +532,7 @@ } case _LOAD_FAST_6_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -546,7 +546,7 @@ } case _LOAD_FAST_6_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -562,7 +562,7 @@ } case _LOAD_FAST_7_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 7; @@ -574,7 +574,7 @@ } case _LOAD_FAST_7_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -588,7 +588,7 @@ } case _LOAD_FAST_7_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -604,7 +604,7 @@ } case _LOAD_FAST_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -615,7 +615,7 @@ } case _LOAD_FAST_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -628,7 +628,7 @@ } case _LOAD_FAST_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -643,7 +643,7 @@ } case _LOAD_FAST_BORROW_0_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; @@ -655,7 +655,7 @@ } case _LOAD_FAST_BORROW_0_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -669,7 +669,7 @@ } case _LOAD_FAST_BORROW_0_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -685,7 +685,7 @@ } case _LOAD_FAST_BORROW_1_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 1; @@ -697,7 +697,7 @@ } case _LOAD_FAST_BORROW_1_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -711,7 +711,7 @@ } case _LOAD_FAST_BORROW_1_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -727,7 +727,7 @@ } case _LOAD_FAST_BORROW_2_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 2; @@ -739,7 +739,7 @@ } case _LOAD_FAST_BORROW_2_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -753,7 +753,7 @@ } case _LOAD_FAST_BORROW_2_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -769,7 +769,7 @@ } case _LOAD_FAST_BORROW_3_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 3; @@ -781,7 +781,7 @@ } case _LOAD_FAST_BORROW_3_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -795,7 +795,7 @@ } case _LOAD_FAST_BORROW_3_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -811,7 +811,7 @@ } case _LOAD_FAST_BORROW_4_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 4; @@ -823,7 +823,7 @@ } case _LOAD_FAST_BORROW_4_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -837,7 +837,7 @@ } case _LOAD_FAST_BORROW_4_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -853,7 +853,7 @@ } case _LOAD_FAST_BORROW_5_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 5; @@ -865,7 +865,7 @@ } case _LOAD_FAST_BORROW_5_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -879,7 +879,7 @@ } case _LOAD_FAST_BORROW_5_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -895,7 +895,7 @@ } case _LOAD_FAST_BORROW_6_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 6; @@ -907,7 +907,7 @@ } case _LOAD_FAST_BORROW_6_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -921,7 +921,7 @@ } case _LOAD_FAST_BORROW_6_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -937,7 +937,7 @@ } case _LOAD_FAST_BORROW_7_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 7; @@ -949,7 +949,7 @@ } case _LOAD_FAST_BORROW_7_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -963,7 +963,7 @@ } case _LOAD_FAST_BORROW_7_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -979,7 +979,7 @@ } case _LOAD_FAST_BORROW_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -990,7 +990,7 @@ } case _LOAD_FAST_BORROW_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1003,7 +1003,7 @@ } case _LOAD_FAST_BORROW_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1018,7 +1018,7 @@ } case _LOAD_FAST_AND_CLEAR_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -1029,7 +1029,7 @@ } case _LOAD_FAST_AND_CLEAR_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1042,7 +1042,7 @@ } case _LOAD_FAST_AND_CLEAR_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1057,7 +1057,7 @@ } case _LOAD_CONST_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -1068,7 +1068,7 @@ } case _LOAD_CONST_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1081,7 +1081,7 @@ } case _LOAD_CONST_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1096,7 +1096,7 @@ } case _LOAD_SMALL_INT_0_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; @@ -1109,7 +1109,7 @@ } case _LOAD_SMALL_INT_0_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1124,7 +1124,7 @@ } case _LOAD_SMALL_INT_0_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1141,7 +1141,7 @@ } case _LOAD_SMALL_INT_1_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 1; @@ -1154,7 +1154,7 @@ } case _LOAD_SMALL_INT_1_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1169,7 +1169,7 @@ } case _LOAD_SMALL_INT_1_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1186,7 +1186,7 @@ } case _LOAD_SMALL_INT_2_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 2; @@ -1199,7 +1199,7 @@ } case _LOAD_SMALL_INT_2_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1214,7 +1214,7 @@ } case _LOAD_SMALL_INT_2_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1231,7 +1231,7 @@ } case _LOAD_SMALL_INT_3_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 3; @@ -1244,7 +1244,7 @@ } case _LOAD_SMALL_INT_3_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1259,7 +1259,7 @@ } case _LOAD_SMALL_INT_3_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1276,7 +1276,7 @@ } case _LOAD_SMALL_INT_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -1288,7 +1288,7 @@ } case _LOAD_SMALL_INT_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1302,7 +1302,7 @@ } case _LOAD_SMALL_INT_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1318,7 +1318,7 @@ } case _STORE_FAST_0_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1334,7 +1334,7 @@ } case _STORE_FAST_1_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1350,7 +1350,7 @@ } case _STORE_FAST_2_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1366,7 +1366,7 @@ } case _STORE_FAST_3_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1382,7 +1382,7 @@ } case _STORE_FAST_4_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1398,7 +1398,7 @@ } case _STORE_FAST_5_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1414,7 +1414,7 @@ } case _STORE_FAST_6_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1430,7 +1430,7 @@ } case _STORE_FAST_7_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1446,7 +1446,7 @@ } case _STORE_FAST_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1461,7 +1461,7 @@ } case _POP_TOP_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1473,7 +1473,7 @@ } case _POP_TWO_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; _PyStackRef nos; @@ -1496,7 +1496,7 @@ } case _PUSH_NULL_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; res = PyStackRef_NULL; @@ -1505,7 +1505,7 @@ } case _PUSH_NULL_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1516,7 +1516,7 @@ } case _PUSH_NULL_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1529,7 +1529,7 @@ } case _END_FOR_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1541,7 +1541,7 @@ } case _POP_ITER_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef index_or_null; _PyStackRef iter; @@ -1557,7 +1557,7 @@ } case _END_SEND_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef receiver; @@ -1580,7 +1580,7 @@ } case _UNARY_NEGATIVE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -1608,7 +1608,7 @@ } case _UNARY_NOT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -1622,7 +1622,7 @@ } case _UNARY_NOT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; @@ -1635,7 +1635,7 @@ } case _UNARY_NOT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef res; @@ -1651,7 +1651,7 @@ } case _UNARY_NOT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef res; @@ -1669,7 +1669,7 @@ } case _TO_BOOL_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -1697,7 +1697,7 @@ } case _TO_BOOL_BOOL_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1711,7 +1711,7 @@ } case _TO_BOOL_BOOL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; @@ -1723,7 +1723,7 @@ } case _TO_BOOL_BOOL_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1739,7 +1739,7 @@ } case _TO_BOOL_BOOL_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1757,7 +1757,7 @@ } case _TO_BOOL_INT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -1783,7 +1783,7 @@ } case _GUARD_NOS_LIST_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1799,7 +1799,7 @@ } case _GUARD_NOS_LIST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; @@ -1811,7 +1811,7 @@ } case _GUARD_NOS_LIST_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1825,7 +1825,7 @@ } case _GUARD_NOS_LIST_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1843,7 +1843,7 @@ } case _GUARD_TOS_LIST_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1857,7 +1857,7 @@ } case _GUARD_TOS_LIST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; @@ -1869,7 +1869,7 @@ } case _GUARD_TOS_LIST_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1885,7 +1885,7 @@ } case _GUARD_TOS_LIST_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1903,7 +1903,7 @@ } case _GUARD_TOS_SLICE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1917,7 +1917,7 @@ } case _GUARD_TOS_SLICE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; @@ -1929,7 +1929,7 @@ } case _GUARD_TOS_SLICE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1945,7 +1945,7 @@ } case _GUARD_TOS_SLICE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1963,7 +1963,7 @@ } case _TO_BOOL_LIST_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -1989,7 +1989,7 @@ } case _TO_BOOL_NONE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -2005,7 +2005,7 @@ } case _TO_BOOL_NONE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; @@ -2020,7 +2020,7 @@ } case _TO_BOOL_NONE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef res; @@ -2038,7 +2038,7 @@ } case _TO_BOOL_NONE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef res; @@ -2058,7 +2058,7 @@ } case _GUARD_NOS_UNICODE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2074,7 +2074,7 @@ } case _GUARD_NOS_UNICODE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; @@ -2086,7 +2086,7 @@ } case _GUARD_NOS_UNICODE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2100,7 +2100,7 @@ } case _GUARD_NOS_UNICODE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2118,7 +2118,7 @@ } case _GUARD_TOS_UNICODE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2132,7 +2132,7 @@ } case _GUARD_TOS_UNICODE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; @@ -2144,7 +2144,7 @@ } case _GUARD_TOS_UNICODE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2160,7 +2160,7 @@ } case _GUARD_TOS_UNICODE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2178,7 +2178,7 @@ } case _TO_BOOL_STR_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -2202,7 +2202,7 @@ } case _REPLACE_WITH_TRUE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -2217,7 +2217,7 @@ } case _UNARY_INVERT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -2245,7 +2245,7 @@ } case _GUARD_NOS_INT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2261,7 +2261,7 @@ } case _GUARD_NOS_INT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef left; left = stack_pointer[-2]; @@ -2273,7 +2273,7 @@ } case _GUARD_NOS_INT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2287,7 +2287,7 @@ } case _GUARD_NOS_INT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2305,7 +2305,7 @@ } case _GUARD_TOS_INT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2319,7 +2319,7 @@ } case _GUARD_TOS_INT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; @@ -2331,7 +2331,7 @@ } case _GUARD_TOS_INT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2347,7 +2347,7 @@ } case _GUARD_TOS_INT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2365,7 +2365,7 @@ } case _BINARY_OP_MULTIPLY_INT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -2403,7 +2403,7 @@ } case _BINARY_OP_ADD_INT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -2441,7 +2441,7 @@ } case _BINARY_OP_SUBTRACT_INT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -2479,7 +2479,7 @@ } case _GUARD_NOS_FLOAT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2495,7 +2495,7 @@ } case _GUARD_NOS_FLOAT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef left; left = stack_pointer[-2]; @@ -2507,7 +2507,7 @@ } case _GUARD_NOS_FLOAT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2521,7 +2521,7 @@ } case _GUARD_NOS_FLOAT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2539,7 +2539,7 @@ } case _GUARD_TOS_FLOAT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2553,7 +2553,7 @@ } case _GUARD_TOS_FLOAT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; @@ -2565,7 +2565,7 @@ } case _GUARD_TOS_FLOAT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2581,7 +2581,7 @@ } case _GUARD_TOS_FLOAT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2599,7 +2599,7 @@ } case _BINARY_OP_MULTIPLY_FLOAT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -2627,7 +2627,7 @@ } case _BINARY_OP_MULTIPLY_FLOAT_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -2655,7 +2655,7 @@ } case _BINARY_OP_MULTIPLY_FLOAT_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -2689,7 +2689,7 @@ } case _BINARY_OP_ADD_FLOAT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -2717,7 +2717,7 @@ } case _BINARY_OP_ADD_FLOAT_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -2745,7 +2745,7 @@ } case _BINARY_OP_ADD_FLOAT_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -2779,7 +2779,7 @@ } case _BINARY_OP_SUBTRACT_FLOAT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -2807,7 +2807,7 @@ } case _BINARY_OP_SUBTRACT_FLOAT_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -2835,7 +2835,7 @@ } case _BINARY_OP_SUBTRACT_FLOAT_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -2869,7 +2869,7 @@ } case _BINARY_OP_ADD_UNICODE_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -2897,7 +2897,7 @@ } case _BINARY_OP_ADD_UNICODE_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -2926,7 +2926,7 @@ } case _BINARY_OP_ADD_UNICODE_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -2959,7 +2959,7 @@ } case _BINARY_OP_INPLACE_ADD_UNICODE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -3009,7 +3009,7 @@ } case _GUARD_BINARY_OP_EXTEND_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -3032,7 +3032,7 @@ } case _BINARY_OP_EXTEND_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -3070,7 +3070,7 @@ } case _BINARY_SLICE_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef stop; _PyStackRef start; @@ -3120,7 +3120,7 @@ } case _STORE_SLICE_r30: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(0); _PyStackRef stop; _PyStackRef start; @@ -3176,7 +3176,7 @@ } case _BINARY_OP_SUBSCR_LIST_INT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef list_st; @@ -3243,7 +3243,7 @@ } case _BINARY_OP_SUBSCR_LIST_SLICE_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef list_st; @@ -3287,7 +3287,7 @@ } case _BINARY_OP_SUBSCR_STR_INT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef str_st; @@ -3336,7 +3336,7 @@ } case _GUARD_NOS_TUPLE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3352,7 +3352,7 @@ } case _GUARD_NOS_TUPLE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; @@ -3364,7 +3364,7 @@ } case _GUARD_NOS_TUPLE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3378,7 +3378,7 @@ } case _GUARD_NOS_TUPLE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3396,7 +3396,7 @@ } case _GUARD_TOS_TUPLE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3410,7 +3410,7 @@ } case _GUARD_TOS_TUPLE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; @@ -3422,7 +3422,7 @@ } case _GUARD_TOS_TUPLE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3438,7 +3438,7 @@ } case _GUARD_TOS_TUPLE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3456,7 +3456,7 @@ } case _BINARY_OP_SUBSCR_TUPLE_INT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef tuple_st; @@ -3501,7 +3501,7 @@ } case _GUARD_NOS_DICT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3517,7 +3517,7 @@ } case _GUARD_NOS_DICT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; @@ -3529,7 +3529,7 @@ } case _GUARD_NOS_DICT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3543,7 +3543,7 @@ } case _GUARD_NOS_DICT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3561,7 +3561,7 @@ } case _GUARD_TOS_DICT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3575,7 +3575,7 @@ } case _GUARD_TOS_DICT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; @@ -3587,7 +3587,7 @@ } case _GUARD_TOS_DICT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3603,7 +3603,7 @@ } case _GUARD_TOS_DICT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3621,7 +3621,7 @@ } case _BINARY_OP_SUBSCR_DICT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef dict_st; @@ -3670,7 +3670,7 @@ } case _BINARY_OP_SUBSCR_CHECK_FUNC_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef container; _PyStackRef getitem; @@ -3727,7 +3727,7 @@ } case _BINARY_OP_SUBSCR_INIT_CALL_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef getitem; _PyStackRef sub; @@ -3749,7 +3749,7 @@ } case _LIST_APPEND_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef list; @@ -3768,7 +3768,7 @@ } case _SET_ADD_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef set; @@ -3796,7 +3796,7 @@ } case _STORE_SUBSCR_r30: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef container; @@ -3838,7 +3838,7 @@ } case _STORE_SUBSCR_LIST_INT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub_st; _PyStackRef list_st; @@ -3883,7 +3883,7 @@ } case _STORE_SUBSCR_DICT_r30: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef dict_st; @@ -3921,7 +3921,7 @@ } case _DELETE_SUBSCR_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef container; @@ -3956,7 +3956,7 @@ } case _CALL_INTRINSIC_1_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -3986,7 +3986,7 @@ } case _CALL_INTRINSIC_2_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value1_st; _PyStackRef value2_st; @@ -4027,7 +4027,7 @@ } case _RETURN_VALUE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef retval; _PyStackRef res; @@ -4050,7 +4050,7 @@ } case _GET_AITER_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef obj; _PyStackRef iter; @@ -4117,7 +4117,7 @@ } case _GET_ANEXT_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef aiter; _PyStackRef awaitable; @@ -4136,7 +4136,7 @@ } case _GET_AWAITABLE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef iterable; _PyStackRef iter; @@ -4167,7 +4167,7 @@ /* _SEND is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ case _SEND_GEN_FRAME_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef v; _PyStackRef receiver; @@ -4210,7 +4210,7 @@ } case _SEND_GEN_FRAME_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef receiver; @@ -4242,7 +4242,7 @@ } case _SEND_GEN_FRAME_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef v; _PyStackRef receiver; @@ -4281,7 +4281,7 @@ } case _SEND_GEN_FRAME_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef v; _PyStackRef receiver; @@ -4328,7 +4328,7 @@ } case _YIELD_VALUE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef retval; _PyStackRef value; @@ -4367,7 +4367,7 @@ } case _YIELD_VALUE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef retval; _PyStackRef value; @@ -4409,7 +4409,7 @@ } case _YIELD_VALUE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef retval; _PyStackRef value; @@ -4455,7 +4455,7 @@ } case _YIELD_VALUE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef retval; _PyStackRef value; @@ -4504,7 +4504,7 @@ } case _POP_EXCEPT_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef exc_value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4524,7 +4524,7 @@ } case _LOAD_COMMON_CONSTANT_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -4535,7 +4535,7 @@ } case _LOAD_COMMON_CONSTANT_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4548,7 +4548,7 @@ } case _LOAD_COMMON_CONSTANT_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4563,7 +4563,7 @@ } case _LOAD_BUILD_CLASS_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef bc; PyObject *bc_o; @@ -4590,7 +4590,7 @@ } case _STORE_NAME_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4646,7 +4646,7 @@ } case _DELETE_NAME_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); @@ -4678,7 +4678,7 @@ } case _UNPACK_SEQUENCE_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *top; @@ -4702,7 +4702,7 @@ } case _UNPACK_SEQUENCE_TWO_TUPLE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef seq; _PyStackRef val1; @@ -4737,7 +4737,7 @@ } case _UNPACK_SEQUENCE_TUPLE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; @@ -4764,7 +4764,7 @@ } case _UNPACK_SEQUENCE_LIST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; @@ -4799,7 +4799,7 @@ } case _UNPACK_EX_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *top; @@ -4823,7 +4823,7 @@ } case _STORE_ATTR_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef v; @@ -4860,7 +4860,7 @@ } case _DELETE_ATTR_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4887,7 +4887,7 @@ } case _STORE_GLOBAL_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4914,7 +4914,7 @@ } case _DELETE_GLOBAL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); @@ -4939,7 +4939,7 @@ } case _LOAD_LOCALS_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef locals; PyObject *l = LOCALS(); @@ -4960,7 +4960,7 @@ /* _LOAD_FROM_DICT_OR_GLOBALS is not a viable micro-op for tier 2 because it has both popping and not-popping errors */ case _LOAD_NAME_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef v; oparg = CURRENT_OPARG(); @@ -4979,7 +4979,7 @@ } case _LOAD_GLOBAL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *res; oparg = CURRENT_OPARG(); @@ -4999,7 +4999,7 @@ } case _PUSH_NULL_CONDITIONAL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *null; oparg = CURRENT_OPARG(); @@ -5013,7 +5013,7 @@ } case _GUARD_GLOBALS_VERSION_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); @@ -5031,7 +5031,7 @@ } case _GUARD_GLOBALS_VERSION_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint16_t version = (uint16_t)CURRENT_OPERAND0(); @@ -5057,7 +5057,7 @@ } case _GUARD_GLOBALS_VERSION_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5087,7 +5087,7 @@ } case _GUARD_GLOBALS_VERSION_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5121,7 +5121,7 @@ } case _LOAD_GLOBAL_MODULE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); @@ -5161,7 +5161,7 @@ } case _LOAD_GLOBAL_BUILTINS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); @@ -5200,7 +5200,7 @@ } case _DELETE_FAST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); _PyStackRef v = GETLOCAL(oparg); @@ -5224,7 +5224,7 @@ } case _MAKE_CELL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *initial = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); @@ -5243,7 +5243,7 @@ } case _DELETE_DEREF_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *cell = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); @@ -5263,7 +5263,7 @@ } case _LOAD_FROM_DICT_OR_DEREF_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef class_dict_st; _PyStackRef value; @@ -5310,7 +5310,7 @@ } case _LOAD_DEREF_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); @@ -5334,7 +5334,7 @@ } case _STORE_DEREF_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef _stack_item_0 = _tos_cache0; @@ -5353,7 +5353,7 @@ } case _COPY_FREE_VARS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyCodeObject *co = _PyFrame_GetCode(frame); @@ -5370,7 +5370,7 @@ } case _COPY_FREE_VARS_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -5389,7 +5389,7 @@ } case _COPY_FREE_VARS_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5410,7 +5410,7 @@ } case _COPY_FREE_VARS_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -5433,7 +5433,7 @@ } case _BUILD_STRING_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *pieces; _PyStackRef str; @@ -5478,7 +5478,7 @@ } case _BUILD_INTERPOLATION_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *format; _PyStackRef str; @@ -5532,7 +5532,7 @@ } case _BUILD_TEMPLATE_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef interpolations; _PyStackRef strings; @@ -5571,7 +5571,7 @@ } case _BUILD_TUPLE_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef tup; @@ -5591,7 +5591,7 @@ } case _BUILD_LIST_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef list; @@ -5613,7 +5613,7 @@ } case _LIST_EXTEND_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef iterable_st; _PyStackRef list_st; @@ -5662,7 +5662,7 @@ } case _SET_UPDATE_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef iterable; _PyStackRef set; @@ -5691,7 +5691,7 @@ } case _BUILD_SET_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef set; @@ -5748,7 +5748,7 @@ } case _BUILD_MAP_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef map; @@ -5798,7 +5798,7 @@ } case _SETUP_ANNOTATIONS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); PyObject *ann_dict; if (LOCALS() == NULL) { @@ -5847,7 +5847,7 @@ } case _DICT_UPDATE_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef update; _PyStackRef dict; @@ -5892,7 +5892,7 @@ } case _DICT_MERGE_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef update; _PyStackRef dict; @@ -5933,7 +5933,7 @@ } case _MAP_ADD_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef key; @@ -5970,7 +5970,7 @@ } case _LOAD_SUPER_ATTR_ATTR_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef self_st; _PyStackRef class_st; @@ -6032,7 +6032,7 @@ } case _LOAD_SUPER_ATTR_METHOD_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef self_st; _PyStackRef class_st; @@ -6114,7 +6114,7 @@ } case _LOAD_ATTR_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef attr; @@ -6179,7 +6179,7 @@ } case _GUARD_TYPE_VERSION_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6195,7 +6195,7 @@ } case _GUARD_TYPE_VERSION_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -6209,7 +6209,7 @@ } case _GUARD_TYPE_VERSION_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6227,7 +6227,7 @@ } case _GUARD_TYPE_VERSION_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6247,7 +6247,7 @@ } case _GUARD_TYPE_VERSION_AND_LOCK_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6270,7 +6270,7 @@ } case _GUARD_TYPE_VERSION_AND_LOCK_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -6291,7 +6291,7 @@ } case _GUARD_TYPE_VERSION_AND_LOCK_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6316,7 +6316,7 @@ } case _GUARD_TYPE_VERSION_AND_LOCK_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6343,7 +6343,7 @@ } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6363,7 +6363,7 @@ } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -6378,7 +6378,7 @@ } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6401,7 +6401,7 @@ } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6427,7 +6427,7 @@ } case _LOAD_ATTR_INSTANCE_VALUE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -6472,7 +6472,7 @@ } case _LOAD_ATTR_MODULE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -6537,7 +6537,7 @@ } case _LOAD_ATTR_WITH_HINT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -6634,7 +6634,7 @@ } case _LOAD_ATTR_SLOT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -6680,7 +6680,7 @@ } case _CHECK_ATTR_CLASS_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6699,7 +6699,7 @@ } case _CHECK_ATTR_CLASS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -6716,7 +6716,7 @@ } case _CHECK_ATTR_CLASS_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6737,7 +6737,7 @@ } case _CHECK_ATTR_CLASS_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6760,7 +6760,7 @@ } case _LOAD_ATTR_CLASS_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -6786,7 +6786,7 @@ } case _LOAD_ATTR_PROPERTY_FRAME_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef new_frame; @@ -6835,7 +6835,7 @@ } case _LOAD_ATTR_PROPERTY_FRAME_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef new_frame; @@ -6871,7 +6871,7 @@ } case _LOAD_ATTR_PROPERTY_FRAME_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef new_frame; @@ -6926,7 +6926,7 @@ } case _LOAD_ATTR_PROPERTY_FRAME_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef new_frame; @@ -6989,7 +6989,7 @@ /* _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN is not a viable micro-op for tier 2 because it has too many cache entries */ case _GUARD_DORV_NO_DICT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7009,7 +7009,7 @@ } case _GUARD_DORV_NO_DICT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -7027,7 +7027,7 @@ } case _GUARD_DORV_NO_DICT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7049,7 +7049,7 @@ } case _GUARD_DORV_NO_DICT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7073,7 +7073,7 @@ } case _STORE_ATTR_INSTANCE_VALUE_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; @@ -7102,7 +7102,7 @@ } case _STORE_ATTR_WITH_HINT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; @@ -7172,7 +7172,7 @@ } case _STORE_ATTR_SLOT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; @@ -7199,7 +7199,7 @@ } case _COMPARE_OP_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7254,7 +7254,7 @@ } case _COMPARE_OP_FLOAT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7278,7 +7278,7 @@ } case _COMPARE_OP_FLOAT_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -7301,7 +7301,7 @@ } case _COMPARE_OP_FLOAT_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -7327,7 +7327,7 @@ } case _COMPARE_OP_INT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7368,7 +7368,7 @@ } case _COMPARE_OP_STR_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7394,7 +7394,7 @@ } case _COMPARE_OP_STR_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; @@ -7419,7 +7419,7 @@ } case _COMPARE_OP_STR_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -7447,7 +7447,7 @@ } case _IS_OP_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7475,7 +7475,7 @@ } case _CONTAINS_OP_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7515,7 +7515,7 @@ } case _GUARD_TOS_ANY_SET_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7533,7 +7533,7 @@ } case _GUARD_TOS_ANY_SET_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; @@ -7546,7 +7546,7 @@ } case _GUARD_TOS_ANY_SET_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7567,7 +7567,7 @@ } case _GUARD_TOS_ANY_SET_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7591,7 +7591,7 @@ } case _CONTAINS_OP_SET_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7633,7 +7633,7 @@ } case _CONTAINS_OP_DICT_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7675,7 +7675,7 @@ } case _CHECK_EG_MATCH_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef match_type_st; _PyStackRef exc_value_st; @@ -7751,7 +7751,7 @@ } case _CHECK_EXC_MATCH_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; @@ -7787,7 +7787,7 @@ } case _IMPORT_NAME_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef fromlist; _PyStackRef level; @@ -7828,7 +7828,7 @@ } case _IMPORT_FROM_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef from; _PyStackRef res; @@ -7853,7 +7853,7 @@ /* _POP_JUMP_IF_TRUE is not a viable micro-op for tier 2 because it is replaced */ case _IS_NONE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef b; @@ -7880,7 +7880,7 @@ } case _GET_LEN_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef obj; _PyStackRef len; @@ -7905,7 +7905,7 @@ } case _MATCH_CLASS_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef names; _PyStackRef type; @@ -7961,7 +7961,7 @@ } case _MATCH_MAPPING_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef subject; _PyStackRef res; @@ -7975,7 +7975,7 @@ } case _MATCH_MAPPING_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef subject; _PyStackRef res; @@ -7987,7 +7987,7 @@ } case _MATCH_MAPPING_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef subject; _PyStackRef res; @@ -8003,7 +8003,7 @@ } case _MATCH_SEQUENCE_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef subject; _PyStackRef res; @@ -8017,7 +8017,7 @@ } case _MATCH_SEQUENCE_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef subject; _PyStackRef res; @@ -8029,7 +8029,7 @@ } case _MATCH_SEQUENCE_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef subject; _PyStackRef res; @@ -8045,7 +8045,7 @@ } case _MATCH_KEYS_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef keys; _PyStackRef subject; @@ -8067,7 +8067,7 @@ } case _GET_ITER_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef iterable; _PyStackRef iter; @@ -8115,7 +8115,7 @@ } case _GET_YIELD_FROM_ITER_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef iterable; _PyStackRef iter; @@ -8169,7 +8169,7 @@ /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */ case _FOR_ITER_TIER_TWO_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -8201,7 +8201,7 @@ /* _INSTRUMENTED_FOR_ITER is not a viable micro-op for tier 2 because it is instrumented */ case _ITER_CHECK_LIST_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef null_or_index; _PyStackRef iter; @@ -8225,7 +8225,7 @@ } case _ITER_CHECK_LIST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; @@ -8245,7 +8245,7 @@ } case _ITER_CHECK_LIST_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; @@ -8267,7 +8267,7 @@ } case _ITER_CHECK_LIST_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; @@ -8295,7 +8295,7 @@ /* _ITER_JUMP_LIST is not a viable micro-op for tier 2 because it is replaced */ case _GUARD_NOT_EXHAUSTED_LIST_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8316,7 +8316,7 @@ } case _GUARD_NOT_EXHAUSTED_LIST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -8333,7 +8333,7 @@ } case _GUARD_NOT_EXHAUSTED_LIST_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8352,7 +8352,7 @@ } case _GUARD_NOT_EXHAUSTED_LIST_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8377,7 +8377,7 @@ /* _ITER_NEXT_LIST is not a viable micro-op for tier 2 because it is replaced */ case _ITER_NEXT_LIST_TIER_TWO_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; @@ -8410,7 +8410,7 @@ } case _ITER_CHECK_TUPLE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef null_or_index; _PyStackRef iter; @@ -8429,7 +8429,7 @@ } case _ITER_CHECK_TUPLE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; @@ -8444,7 +8444,7 @@ } case _ITER_CHECK_TUPLE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; @@ -8461,7 +8461,7 @@ } case _ITER_CHECK_TUPLE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; @@ -8484,7 +8484,7 @@ /* _ITER_JUMP_TUPLE is not a viable micro-op for tier 2 because it is replaced */ case _GUARD_NOT_EXHAUSTED_TUPLE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8503,7 +8503,7 @@ } case _GUARD_NOT_EXHAUSTED_TUPLE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -8518,7 +8518,7 @@ } case _GUARD_NOT_EXHAUSTED_TUPLE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8535,7 +8535,7 @@ } case _GUARD_NOT_EXHAUSTED_TUPLE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8556,7 +8556,7 @@ } case _ITER_NEXT_TUPLE_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; @@ -8578,7 +8578,7 @@ } case _ITER_CHECK_RANGE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8599,7 +8599,7 @@ } case _ITER_CHECK_RANGE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef iter; iter = stack_pointer[-2]; @@ -8616,7 +8616,7 @@ } case _ITER_CHECK_RANGE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8635,7 +8635,7 @@ } case _ITER_CHECK_RANGE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8660,7 +8660,7 @@ /* _ITER_JUMP_RANGE is not a viable micro-op for tier 2 because it is replaced */ case _GUARD_NOT_EXHAUSTED_RANGE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8677,7 +8677,7 @@ } case _GUARD_NOT_EXHAUSTED_RANGE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef iter; iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); @@ -8690,7 +8690,7 @@ } case _GUARD_NOT_EXHAUSTED_RANGE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; iter = stack_pointer[-1]; @@ -8705,7 +8705,7 @@ } case _GUARD_NOT_EXHAUSTED_RANGE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8724,7 +8724,7 @@ } case _ITER_NEXT_RANGE_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef iter; _PyStackRef next; @@ -8758,7 +8758,7 @@ } case _FOR_ITER_GEN_FRAME_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef iter; _PyStackRef gen_frame; @@ -8812,7 +8812,7 @@ } case _INSERT_NULL_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self; _PyStackRef *method_and_self; @@ -8827,7 +8827,7 @@ } case _LOAD_SPECIAL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *method_and_self; oparg = CURRENT_OPARG(); @@ -8858,7 +8858,7 @@ } case _WITH_EXCEPT_START_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef val; _PyStackRef lasti; @@ -8898,7 +8898,7 @@ } case _PUSH_EXC_INFO_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef exc; _PyStackRef prev_exc; @@ -8921,7 +8921,7 @@ } case _PUSH_EXC_INFO_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef exc; _PyStackRef prev_exc; @@ -8943,7 +8943,7 @@ } case _PUSH_EXC_INFO_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef exc; _PyStackRef prev_exc; @@ -8968,7 +8968,7 @@ } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8988,7 +8988,7 @@ } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -9003,7 +9003,7 @@ } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9026,7 +9026,7 @@ } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9052,7 +9052,7 @@ } case _GUARD_KEYS_VERSION_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9073,7 +9073,7 @@ } case _GUARD_KEYS_VERSION_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -9089,7 +9089,7 @@ } case _GUARD_KEYS_VERSION_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9113,7 +9113,7 @@ } case _GUARD_KEYS_VERSION_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9140,7 +9140,7 @@ } case _LOAD_ATTR_METHOD_WITH_VALUES_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef attr; @@ -9161,7 +9161,7 @@ } case _LOAD_ATTR_METHOD_WITH_VALUES_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -9181,7 +9181,7 @@ } case _LOAD_ATTR_METHOD_WITH_VALUES_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef attr; @@ -9204,7 +9204,7 @@ } case _LOAD_ATTR_METHOD_NO_DICT_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef attr; @@ -9226,7 +9226,7 @@ } case _LOAD_ATTR_METHOD_NO_DICT_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -9247,7 +9247,7 @@ } case _LOAD_ATTR_METHOD_NO_DICT_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef attr; @@ -9271,7 +9271,7 @@ } case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -9291,7 +9291,7 @@ } case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -9312,7 +9312,7 @@ } case _CHECK_ATTR_METHOD_LAZY_DICT_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9332,7 +9332,7 @@ } case _CHECK_ATTR_METHOD_LAZY_DICT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; @@ -9347,7 +9347,7 @@ } case _CHECK_ATTR_METHOD_LAZY_DICT_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9370,7 +9370,7 @@ } case _CHECK_ATTR_METHOD_LAZY_DICT_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9396,7 +9396,7 @@ } case _LOAD_ATTR_METHOD_LAZY_DICT_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef attr; @@ -9417,7 +9417,7 @@ } case _LOAD_ATTR_METHOD_LAZY_DICT_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; @@ -9437,7 +9437,7 @@ } case _LOAD_ATTR_METHOD_LAZY_DICT_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef attr; @@ -9460,7 +9460,7 @@ } case _MAYBE_EXPAND_METHOD_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; @@ -9490,7 +9490,7 @@ /* _MONITOR_CALL is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ case _PY_FRAME_GENERAL_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -9528,7 +9528,7 @@ } case _CHECK_FUNCTION_VERSION_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -9546,7 +9546,7 @@ } case _CHECK_FUNCTION_VERSION_INLINE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = (PyObject *)CURRENT_OPERAND1(); @@ -9559,7 +9559,7 @@ } case _CHECK_FUNCTION_VERSION_INLINE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); @@ -9574,7 +9574,7 @@ } case _CHECK_FUNCTION_VERSION_INLINE_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9591,7 +9591,7 @@ } case _CHECK_FUNCTION_VERSION_INLINE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9610,7 +9610,7 @@ } case _CHECK_METHOD_VERSION_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; @@ -9636,7 +9636,7 @@ } case _EXPAND_METHOD_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; @@ -9659,7 +9659,7 @@ } case _CHECK_IS_NOT_PY_CALLABLE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -9675,7 +9675,7 @@ } case _CALL_NON_PY_GENERAL_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -9756,7 +9756,7 @@ } case _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; @@ -9773,7 +9773,7 @@ } case _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; @@ -9795,7 +9795,7 @@ } case _CHECK_PEP_523_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); if (tstate->interp->eval_frame) { SET_CURRENT_CACHED_VALUES(0); @@ -9805,7 +9805,7 @@ } case _CHECK_PEP_523_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (tstate->interp->eval_frame) { @@ -9820,7 +9820,7 @@ } case _CHECK_PEP_523_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9838,7 +9838,7 @@ } case _CHECK_PEP_523_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9859,7 +9859,7 @@ } case _CHECK_FUNCTION_EXACT_ARGS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; @@ -9877,7 +9877,7 @@ } case _CHECK_STACK_SPACE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -9893,7 +9893,7 @@ } case _CHECK_RECURSION_REMAINING_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); if (tstate->py_recursion_remaining <= 1) { SET_CURRENT_CACHED_VALUES(0); @@ -9903,7 +9903,7 @@ } case _CHECK_RECURSION_REMAINING_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (tstate->py_recursion_remaining <= 1) { @@ -9918,7 +9918,7 @@ } case _CHECK_RECURSION_REMAINING_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9936,7 +9936,7 @@ } case _CHECK_RECURSION_REMAINING_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9957,7 +9957,7 @@ } case _INIT_CALL_PY_EXACT_ARGS_0_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -9984,7 +9984,7 @@ } case _INIT_CALL_PY_EXACT_ARGS_1_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -10011,7 +10011,7 @@ } case _INIT_CALL_PY_EXACT_ARGS_2_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -10038,7 +10038,7 @@ } case _INIT_CALL_PY_EXACT_ARGS_3_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -10065,7 +10065,7 @@ } case _INIT_CALL_PY_EXACT_ARGS_4_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -10092,7 +10092,7 @@ } case _INIT_CALL_PY_EXACT_ARGS_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; @@ -10118,7 +10118,7 @@ } case _PUSH_FRAME_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10137,7 +10137,7 @@ } case _GUARD_NOS_NULL_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10157,7 +10157,7 @@ } case _GUARD_NOS_NULL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; null = stack_pointer[-2]; @@ -10169,7 +10169,7 @@ } case _GUARD_NOS_NULL_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10186,7 +10186,7 @@ } case _GUARD_NOS_NULL_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10209,7 +10209,7 @@ } case _GUARD_NOS_NOT_NULL_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10225,7 +10225,7 @@ } case _GUARD_NOS_NOT_NULL_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; @@ -10237,7 +10237,7 @@ } case _GUARD_NOS_NOT_NULL_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10251,7 +10251,7 @@ } case _GUARD_NOS_NOT_NULL_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10269,7 +10269,7 @@ } case _GUARD_THIRD_NULL_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10292,7 +10292,7 @@ } case _GUARD_CALLABLE_TYPE_1_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10316,7 +10316,7 @@ } case _CALL_TYPE_1_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; @@ -10348,7 +10348,7 @@ } case _GUARD_CALLABLE_STR_1_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10372,7 +10372,7 @@ } case _CALL_STR_1_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; @@ -10414,7 +10414,7 @@ } case _GUARD_CALLABLE_TUPLE_1_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10438,7 +10438,7 @@ } case _CALL_TUPLE_1_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; @@ -10480,7 +10480,7 @@ } case _CHECK_AND_ALLOCATE_OBJECT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; @@ -10533,7 +10533,7 @@ } case _CREATE_INIT_FRAME_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self; @@ -10572,7 +10572,7 @@ } case _EXIT_INIT_CHECK_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef should_be_none; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10594,7 +10594,7 @@ } case _CALL_BUILTIN_CLASS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -10680,7 +10680,7 @@ } case _CALL_BUILTIN_O_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -10737,7 +10737,7 @@ } case _CALL_BUILTIN_FAST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -10827,7 +10827,7 @@ } case _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -10917,7 +10917,7 @@ } case _GUARD_CALLABLE_LEN_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -10942,7 +10942,7 @@ } case _CALL_LEN_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; @@ -10993,7 +10993,7 @@ } case _GUARD_CALLABLE_ISINSTANCE_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11018,7 +11018,7 @@ } case _CALL_ISINSTANCE_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef cls; _PyStackRef instance; @@ -11071,7 +11071,7 @@ } case _GUARD_CALLABLE_LIST_APPEND_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11096,7 +11096,7 @@ } case _CALL_LIST_APPEND_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef arg; _PyStackRef self; @@ -11142,7 +11142,7 @@ } case _CALL_METHOD_DESCRIPTOR_O_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -11219,7 +11219,7 @@ } case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -11317,7 +11317,7 @@ } case _CALL_METHOD_DESCRIPTOR_NOARGS_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -11381,7 +11381,7 @@ } case _CALL_METHOD_DESCRIPTOR_FAST_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; @@ -11479,7 +11479,7 @@ /* _MONITOR_CALL_KW is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ case _MAYBE_EXPAND_METHOD_KW_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; @@ -11507,7 +11507,7 @@ /* _DO_CALL_KW is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ case _PY_FRAME_KW_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef kwnames; _PyStackRef *args; @@ -11559,7 +11559,7 @@ } case _CHECK_FUNCTION_VERSION_KW_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11579,7 +11579,7 @@ } case _CHECK_METHOD_VERSION_KW_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef callable; @@ -11607,7 +11607,7 @@ } case _EXPAND_METHOD_KW_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; @@ -11630,7 +11630,7 @@ } case _CHECK_IS_NOT_PY_CALLABLE_KW_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11648,7 +11648,7 @@ } case _CALL_KW_NON_PY_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef kwnames; _PyStackRef *args; @@ -11745,7 +11745,7 @@ } case _MAKE_CALLARGS_A_TUPLE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef callargs; _PyStackRef func; @@ -11783,7 +11783,7 @@ /* _DO_CALL_FUNCTION_EX is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ case _MAKE_FUNCTION_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef codeobj_st; _PyStackRef func; @@ -11815,7 +11815,7 @@ } case _SET_FUNCTION_ATTRIBUTE_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef func_in; _PyStackRef attr_st; @@ -11839,7 +11839,7 @@ } case _SET_FUNCTION_ATTRIBUTE_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef func_in; _PyStackRef attr_st; @@ -11862,7 +11862,7 @@ } case _SET_FUNCTION_ATTRIBUTE_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef func_in; _PyStackRef attr_st; @@ -11888,7 +11888,7 @@ } case _RETURN_GENERATOR_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; assert(PyStackRef_FunctionCheck(frame->f_funcobj)); @@ -11922,7 +11922,7 @@ } case _BUILD_SLICE_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef slice; @@ -11953,7 +11953,7 @@ } case _CONVERT_VALUE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef result; @@ -11985,7 +11985,7 @@ } case _FORMAT_SIMPLE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; @@ -12019,7 +12019,7 @@ } case _FORMAT_WITH_SPEC_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef fmt_spec; _PyStackRef value; @@ -12056,7 +12056,7 @@ } case _COPY_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef bottom; _PyStackRef top; @@ -12069,7 +12069,7 @@ } case _BINARY_OP_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef rhs; _PyStackRef lhs; @@ -12114,7 +12114,7 @@ } case _SWAP_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef top; _PyStackRef bottom; @@ -12150,7 +12150,7 @@ /* _INSTRUMENTED_POP_JUMP_IF_NOT_NONE is not a viable micro-op for tier 2 because it is instrumented */ case _GUARD_IS_TRUE_POP_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; flag = stack_pointer[-1]; @@ -12164,7 +12164,7 @@ } case _GUARD_IS_FALSE_POP_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; flag = stack_pointer[-1]; @@ -12178,7 +12178,7 @@ } case _GUARD_IS_NONE_POP_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef val; val = stack_pointer[-1]; @@ -12199,7 +12199,7 @@ } case _GUARD_IS_NOT_NONE_POP_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); _PyStackRef val; val = stack_pointer[-1]; @@ -12216,14 +12216,14 @@ } case _JUMP_TO_TOP_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); break; } case _SET_IP_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; @@ -12231,7 +12231,7 @@ } case _SET_IP_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); @@ -12241,7 +12241,7 @@ } case _SET_IP_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12253,7 +12253,7 @@ } case _SET_IP_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12267,7 +12267,7 @@ } case _CHECK_STACK_SPACE_OPERAND_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); @@ -12283,7 +12283,7 @@ } case _CHECK_STACK_SPACE_OPERAND_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); @@ -12307,7 +12307,7 @@ } case _CHECK_STACK_SPACE_OPERAND_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12335,7 +12335,7 @@ } case _CHECK_STACK_SPACE_OPERAND_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12367,7 +12367,7 @@ } case _SAVE_RETURN_OFFSET_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); #if TIER_ONE @@ -12380,7 +12380,7 @@ } case _SAVE_RETURN_OFFSET_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -12395,7 +12395,7 @@ } case _SAVE_RETURN_OFFSET_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12412,7 +12412,7 @@ } case _SAVE_RETURN_OFFSET_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12431,7 +12431,7 @@ } case _EXIT_TRACE_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); _PyExitData *exit = (_PyExitData *)exit_p; @@ -12485,7 +12485,7 @@ } case _EXIT_TRACE_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); @@ -12558,7 +12558,7 @@ } case _EXIT_TRACE_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12637,7 +12637,7 @@ } case _EXIT_TRACE_r30: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12722,7 +12722,7 @@ } case _CHECK_VALIDITY_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); if (!current_executor->vm_data.valid) { SET_CURRENT_CACHED_VALUES(0); @@ -12732,7 +12732,7 @@ } case _CHECK_VALIDITY_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (!current_executor->vm_data.valid) { @@ -12747,7 +12747,7 @@ } case _CHECK_VALIDITY_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12765,7 +12765,7 @@ } case _CHECK_VALIDITY_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -12786,7 +12786,7 @@ } case _LOAD_CONST_INLINE_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); @@ -12796,7 +12796,7 @@ } case _LOAD_CONST_INLINE_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12808,7 +12808,7 @@ } case _LOAD_CONST_INLINE_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12822,7 +12822,7 @@ } case _POP_TOP_LOAD_CONST_INLINE_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef value; @@ -12838,7 +12838,7 @@ } case _LOAD_CONST_INLINE_BORROW_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); @@ -12848,7 +12848,7 @@ } case _LOAD_CONST_INLINE_BORROW_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12860,7 +12860,7 @@ } case _LOAD_CONST_INLINE_BORROW_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12874,7 +12874,7 @@ } case _POP_CALL_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; @@ -12890,7 +12890,7 @@ } case _POP_CALL_ONE_r30: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(0); _PyStackRef pop; _PyStackRef null; @@ -12918,7 +12918,7 @@ } case _POP_CALL_TWO_r30: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(0); _PyStackRef pop2; _PyStackRef pop1; @@ -12953,7 +12953,7 @@ } case _POP_TOP_LOAD_CONST_INLINE_BORROW_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef value; @@ -12969,7 +12969,7 @@ } case _POP_TWO_LOAD_CONST_INLINE_BORROW_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop2; _PyStackRef pop1; @@ -12996,7 +12996,7 @@ } case _POP_CALL_LOAD_CONST_INLINE_BORROW_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef callable; @@ -13016,7 +13016,7 @@ } case _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef null; @@ -13048,7 +13048,7 @@ } case _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop2; _PyStackRef pop1; @@ -13087,7 +13087,7 @@ } case _LOAD_CONST_UNDER_INLINE_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef old; _PyStackRef value; @@ -13103,7 +13103,7 @@ } case _LOAD_CONST_UNDER_INLINE_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef old; _PyStackRef value; @@ -13118,7 +13118,7 @@ } case _LOAD_CONST_UNDER_INLINE_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef old; _PyStackRef value; @@ -13136,7 +13136,7 @@ } case _LOAD_CONST_UNDER_INLINE_BORROW_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef old; _PyStackRef value; @@ -13152,7 +13152,7 @@ } case _LOAD_CONST_UNDER_INLINE_BORROW_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _PyStackRef old; _PyStackRef value; @@ -13167,7 +13167,7 @@ } case _LOAD_CONST_UNDER_INLINE_BORROW_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef old; _PyStackRef value; @@ -13185,7 +13185,7 @@ } case _CHECK_FUNCTION_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); @@ -13198,7 +13198,7 @@ } case _CHECK_FUNCTION_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); @@ -13216,7 +13216,7 @@ } case _CHECK_FUNCTION_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13237,7 +13237,7 @@ } case _CHECK_FUNCTION_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13261,7 +13261,7 @@ } case _START_EXECUTOR_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); PyObject *executor = (PyObject *)CURRENT_OPERAND0(); #ifndef _Py_JIT @@ -13272,7 +13272,7 @@ } case _MAKE_WARM_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); current_executor->vm_data.warm = true; if (--tstate->interp->trace_run_counter == 0) { @@ -13282,7 +13282,7 @@ } case _MAKE_WARM_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; current_executor->vm_data.warm = true; @@ -13294,7 +13294,7 @@ } case _MAKE_WARM_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13308,7 +13308,7 @@ } case _MAKE_WARM_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13324,7 +13324,7 @@ } case _FATAL_ERROR_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); assert(0); Py_FatalError("Fatal error uop executed."); @@ -13332,7 +13332,7 @@ } case _FATAL_ERROR_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; assert(0); @@ -13342,7 +13342,7 @@ } case _FATAL_ERROR_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13354,7 +13354,7 @@ } case _FATAL_ERROR_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13368,14 +13368,14 @@ } case _DEOPT_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); break; } case _ERROR_POP_N_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); uint32_t target = (uint32_t)CURRENT_OPERAND0(); @@ -13386,7 +13386,7 @@ } case _TIER2_RESUME_CHECK_r00: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { @@ -13405,7 +13405,7 @@ } case _TIER2_RESUME_CHECK_r11: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) @@ -13432,7 +13432,7 @@ } case _TIER2_RESUME_CHECK_r22: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13463,7 +13463,7 @@ } case _TIER2_RESUME_CHECK_r33: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13498,7 +13498,7 @@ } case _SPILL_OR_RELOAD_r01: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(1); _tos_cache0 = stack_pointer[-1]; stack_pointer += -1; @@ -13507,7 +13507,7 @@ } case _SPILL_OR_RELOAD_r02: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(2); _tos_cache1 = stack_pointer[-1]; _tos_cache0 = stack_pointer[-2]; @@ -13517,7 +13517,7 @@ } case _SPILL_OR_RELOAD_r03: { - assert(current_cached_values == 0); + CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(3); _tos_cache2 = stack_pointer[-1]; _tos_cache1 = stack_pointer[-2]; @@ -13528,7 +13528,7 @@ } case _SPILL_OR_RELOAD_r10: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; stack_pointer[0] = _stack_item_0; @@ -13538,7 +13538,7 @@ } case _SPILL_OR_RELOAD_r12: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache1 = _stack_item_0; @@ -13549,7 +13549,7 @@ } case _SPILL_OR_RELOAD_r13: { - assert(current_cached_values == 1); + CHECK_CURRENT_CACHED_VALUES(1); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache2 = _stack_item_0; @@ -13561,7 +13561,7 @@ } case _SPILL_OR_RELOAD_r20: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13573,7 +13573,7 @@ } case _SPILL_OR_RELOAD_r21: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13585,7 +13585,7 @@ } case _SPILL_OR_RELOAD_r23: { - assert(current_cached_values == 2); + CHECK_CURRENT_CACHED_VALUES(2); SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13598,7 +13598,7 @@ } case _SPILL_OR_RELOAD_r30: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13612,7 +13612,7 @@ } case _SPILL_OR_RELOAD_r31: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13626,7 +13626,7 @@ } case _SPILL_OR_RELOAD_r32: { - assert(current_cached_values == 3); + CHECK_CURRENT_CACHED_VALUES(3); SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; diff --git a/Python/jit.c b/Python/jit.c index e232cc1f7d9250..14697b1ee804ee 100644 --- a/Python/jit.c +++ b/Python/jit.c @@ -511,7 +511,7 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz data_size += group->data_size; combine_symbol_mask(group->trampoline_mask, state.trampolines.mask); } - group = &stencil_groups[_FATAL_ERROR]; + group = &stencil_groups[_FATAL_ERROR_r00]; code_size += group->code_size; data_size += group->data_size; combine_symbol_mask(group->trampoline_mask, state.trampolines.mask); @@ -553,7 +553,7 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz group->emit(code, data, executor, NULL, &state); code += group->code_size; data += group->data_size; - assert(trace[0].opcode == _START_EXECUTOR); + assert(trace[0].opcode == _START_EXECUTOR_r00); for (size_t i = 0; i < length; i++) { const _PyUOpInstruction *instruction = &trace[i]; group = &stencil_groups[instruction->opcode]; @@ -562,7 +562,7 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz data += group->data_size; } // Protect against accidental buffer overrun into data: - group = &stencil_groups[_FATAL_ERROR]; + group = &stencil_groups[_FATAL_ERROR_r00]; group->emit(code, data, executor, NULL, &state); code += group->code_size; data += group->data_size; diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 262baaddb3e6cf..4f4e592cfe4ee9 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -209,7 +209,7 @@ def generate_tier2( if inputs != outputs and (uop.properties.deopts or uop.properties.side_exit): raise analysis_error(f"{uop.name} has side exit and differing cache depths", uop.body.open) out.emit(f"case {uop.name}_r{inputs}{outputs}: {{\n") - out.emit(f"assert(current_cached_values == {inputs});\n") + out.emit(f"CHECK_CURRENT_CACHED_VALUES({inputs});\n") if not is_for_iter_test(uop): out.emit(f"SET_CURRENT_CACHED_VALUES({outputs});\n") declare_variables(uop, out) diff --git a/Tools/jit/_writer.py b/Tools/jit/_writer.py index 090b52660f009c..0c694f6ea92254 100644 --- a/Tools/jit/_writer.py +++ b/Tools/jit/_writer.py @@ -24,7 +24,7 @@ def _dump_footer( yield "" yield f"static const StencilGroup shim = {groups['shim'].as_c('shim')};" yield "" - yield "static const StencilGroup stencil_groups[MAX_UOP_ID + 1] = {" + yield "static const StencilGroup stencil_groups[MAX_UOP_REGS_ID + 1] = {" for opname, group in sorted(groups.items()): if opname == "shim": continue diff --git a/Tools/jit/shim.c b/Tools/jit/shim.c index ebd4e9bc858b73..6e12ab88579f39 100644 --- a/Tools/jit/shim.c +++ b/Tools/jit/shim.c @@ -7,9 +7,11 @@ #include "jit.h" _Py_CODEUNIT * -_JIT_ENTRY(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate) -{ +_JIT_ENTRY( + _PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate, + _PyStackRef _tos_cache0, _PyStackRef _tos_cache1, _PyStackRef _tos_cache2 +) { // Note that this is *not* a tail call: PATCH_VALUE(jit_func_preserve_none, call, _JIT_CONTINUE); - return call(frame, stack_pointer, tstate); + return call(frame, stack_pointer, tstate, _tos_cache0, _tos_cache1, _tos_cache2); } diff --git a/Tools/jit/template.c b/Tools/jit/template.c index 5ee26f93f1e266..295c2c06896969 100644 --- a/Tools/jit/template.c +++ b/Tools/jit/template.c @@ -53,7 +53,7 @@ do { \ _PyExecutorObject *_executor = (EXECUTOR); \ tstate->current_executor = (PyObject *)_executor; \ jit_func_preserve_none jitted = _executor->jit_side_entry; \ - __attribute__((musttail)) return jitted(frame, stack_pointer, tstate); \ + __attribute__((musttail)) return jitted(frame, stack_pointer, tstate, _tos_cache0, _tos_cache1, _tos_cache2); \ } while (0) #undef GOTO_TIER_ONE @@ -77,7 +77,7 @@ do { \ #define PATCH_JUMP(ALIAS) \ do { \ PATCH_VALUE(jit_func_preserve_none, jump, ALIAS); \ - __attribute__((musttail)) return jump(frame, stack_pointer, tstate); \ + __attribute__((musttail)) return jump(frame, stack_pointer, tstate, _tos_cache0, _tos_cache1, _tos_cache2); \ } while (0) #undef JUMP_TO_JUMP_TARGET @@ -89,8 +89,10 @@ do { \ #define TIER_TWO 2 __attribute__((preserve_none)) _Py_CODEUNIT * -_JIT_ENTRY(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate) -{ +_JIT_ENTRY( + _PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate, + _PyStackRef _tos_cache0, _PyStackRef _tos_cache1, _PyStackRef _tos_cache2 +) { // Locals that the instruction implementations expect to exist: PATCH_VALUE(_PyExecutorObject *, current_executor, _JIT_EXECUTOR) int oparg; From cf1d7ab8893258ac13cb54beca1f064e0713ef7b Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 13:28:38 +0100 Subject: [PATCH 04/14] Fix tool to support 3.11 --- Tools/cases_generator/uop_metadata_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/cases_generator/uop_metadata_generator.py b/Tools/cases_generator/uop_metadata_generator.py index b85c8e90bff1ff..ad7f46e59b4d6e 100644 --- a/Tools/cases_generator/uop_metadata_generator.py +++ b/Tools/cases_generator/uop_metadata_generator.py @@ -36,7 +36,7 @@ def uop_cache_info(uop: Uop) -> str | None: max_inputs = i if i < min_inputs: min_inputs = i - return f"{{ {min_inputs}, {max_inputs}, {delta}, {{ {", ".join(uops)} }} }}" + return f"{{ {min_inputs}, {max_inputs}, {delta}, {{ {', '.join(uops)} }} }}" def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: From efd7a0a136a113280f5f270a64b53c17317ddd0e Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 13:32:31 +0100 Subject: [PATCH 05/14] Add news --- .../2025-06-13-13-32-16.gh-issue-135379.pAxZgy.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2025-06-13-13-32-16.gh-issue-135379.pAxZgy.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-06-13-13-32-16.gh-issue-135379.pAxZgy.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-06-13-13-32-16.gh-issue-135379.pAxZgy.rst new file mode 100644 index 00000000000000..e987abfb50d7cd --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-06-13-13-32-16.gh-issue-135379.pAxZgy.rst @@ -0,0 +1,3 @@ +Implement top-of-stack caching for the JIT (and tier 2 interpreter). Reduces +memory traffic in jitted code, by caching 0 to 3 values from the stack in +registers. From bb4e6b92bbb2505e619255076bf5e300662c5dfd Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 13:49:24 +0100 Subject: [PATCH 06/14] int arithmetic doesn't escape --- Include/internal/pycore_opcode_metadata.h | 6 +- Include/internal/pycore_uop_ids.h | 1234 +++++++++++---------- Include/internal/pycore_uop_metadata.h | 24 +- Python/executor_cases.c.h | 216 +++- Python/generated_cases.c.h | 6 - Tools/cases_generator/analyzer.py | 3 + 6 files changed, 830 insertions(+), 659 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 00e918cb8f0cd1..1af8fa2ae667de 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -1072,12 +1072,12 @@ extern const struct opcode_metadata _PyOpcode_opcode_metadata[267]; const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [BINARY_OP] = { true, INSTR_FMT_IBC0000, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_ADD_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [BINARY_OP_ADD_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, + [BINARY_OP_ADD_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, [BINARY_OP_ADD_UNICODE] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, [BINARY_OP_EXTEND] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_INPLACE_ADD_UNICODE] = { true, INSTR_FMT_IXC0000, HAS_LOCAL_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_MULTIPLY_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, + [BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, [BINARY_OP_SUBSCR_DICT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG }, [BINARY_OP_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, @@ -1085,7 +1085,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [BINARY_OP_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [BINARY_OP_SUBTRACT_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, + [BINARY_OP_SUBTRACT_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, [BINARY_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [BUILD_INTERPOLATION] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [BUILD_LIST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index 1d13d3d13ad017..809c7585e7726e 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -341,620 +341,626 @@ extern "C" { #define _BINARY_OP_ADD_FLOAT_r10 534 #define _BINARY_OP_ADD_FLOAT_r21 535 #define _BINARY_OP_ADD_FLOAT_r32 536 -#define _BINARY_OP_ADD_INT_r21 537 -#define _BINARY_OP_ADD_UNICODE_r10 538 -#define _BINARY_OP_ADD_UNICODE_r21 539 -#define _BINARY_OP_ADD_UNICODE_r32 540 -#define _BINARY_OP_EXTEND_r21 541 -#define _BINARY_OP_INPLACE_ADD_UNICODE_r00 542 -#define _BINARY_OP_MULTIPLY_FLOAT_r10 543 -#define _BINARY_OP_MULTIPLY_FLOAT_r21 544 -#define _BINARY_OP_MULTIPLY_FLOAT_r32 545 -#define _BINARY_OP_MULTIPLY_INT_r21 546 -#define _BINARY_OP_SUBSCR_CHECK_FUNC_r22 547 -#define _BINARY_OP_SUBSCR_DICT_r21 548 -#define _BINARY_OP_SUBSCR_INIT_CALL_r31 549 -#define _BINARY_OP_SUBSCR_LIST_INT_r11 550 -#define _BINARY_OP_SUBSCR_LIST_SLICE_r21 551 -#define _BINARY_OP_SUBSCR_STR_INT_r11 552 -#define _BINARY_OP_SUBSCR_TUPLE_INT_r11 553 -#define _BINARY_OP_SUBTRACT_FLOAT_r10 554 -#define _BINARY_OP_SUBTRACT_FLOAT_r21 555 -#define _BINARY_OP_SUBTRACT_FLOAT_r32 556 -#define _BINARY_OP_SUBTRACT_INT_r21 557 -#define _BINARY_SLICE_r31 558 -#define _BUILD_INTERPOLATION_r01 559 -#define _BUILD_LIST_r01 560 -#define _BUILD_MAP_r01 561 -#define _BUILD_SET_r01 562 -#define _BUILD_SLICE_r01 563 -#define _BUILD_STRING_r01 564 -#define _BUILD_TEMPLATE_r21 565 -#define _BUILD_TUPLE_r01 566 -#define _CALL_BUILTIN_CLASS_r00 567 -#define _CALL_BUILTIN_FAST_r00 568 -#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00 569 -#define _CALL_BUILTIN_O_r00 570 -#define _CALL_INTRINSIC_1_r11 571 -#define _CALL_INTRINSIC_2_r21 572 -#define _CALL_ISINSTANCE_r31 573 -#define _CALL_KW_NON_PY_r11 574 -#define _CALL_LEN_r31 575 -#define _CALL_LIST_APPEND_r00 576 -#define _CALL_METHOD_DESCRIPTOR_FAST_r00 577 -#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 578 -#define _CALL_METHOD_DESCRIPTOR_NOARGS_r00 579 -#define _CALL_METHOD_DESCRIPTOR_O_r00 580 -#define _CALL_NON_PY_GENERAL_r01 581 -#define _CALL_STR_1_r31 582 -#define _CALL_TUPLE_1_r31 583 -#define _CALL_TYPE_1_r31 584 -#define _CHECK_AND_ALLOCATE_OBJECT_r00 585 -#define _CHECK_ATTR_CLASS_r00 586 -#define _CHECK_ATTR_CLASS_r11 587 -#define _CHECK_ATTR_CLASS_r22 588 -#define _CHECK_ATTR_CLASS_r33 589 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r00 590 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 591 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 592 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 593 -#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 594 -#define _CHECK_EG_MATCH_r22 595 -#define _CHECK_EXC_MATCH_r11 596 -#define _CHECK_FUNCTION_r00 597 -#define _CHECK_FUNCTION_r11 598 -#define _CHECK_FUNCTION_r22 599 -#define _CHECK_FUNCTION_r33 600 -#define _CHECK_FUNCTION_EXACT_ARGS_r00 601 -#define _CHECK_FUNCTION_VERSION_r00 602 -#define _CHECK_FUNCTION_VERSION_INLINE_r00 603 -#define _CHECK_FUNCTION_VERSION_INLINE_r11 604 -#define _CHECK_FUNCTION_VERSION_INLINE_r22 605 -#define _CHECK_FUNCTION_VERSION_INLINE_r33 606 -#define _CHECK_FUNCTION_VERSION_KW_r11 607 -#define _CHECK_IS_NOT_PY_CALLABLE_r00 608 -#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 609 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r00 610 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 611 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 612 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 613 -#define _CHECK_METHOD_VERSION_r00 614 -#define _CHECK_METHOD_VERSION_KW_r11 615 -#define _CHECK_PEP_523_r00 616 -#define _CHECK_PEP_523_r11 617 -#define _CHECK_PEP_523_r22 618 -#define _CHECK_PEP_523_r33 619 -#define _CHECK_PERIODIC_r00 620 -#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 621 -#define _CHECK_RECURSION_REMAINING_r00 622 -#define _CHECK_RECURSION_REMAINING_r11 623 -#define _CHECK_RECURSION_REMAINING_r22 624 -#define _CHECK_RECURSION_REMAINING_r33 625 -#define _CHECK_STACK_SPACE_r00 626 -#define _CHECK_STACK_SPACE_OPERAND_r00 627 -#define _CHECK_STACK_SPACE_OPERAND_r11 628 -#define _CHECK_STACK_SPACE_OPERAND_r22 629 -#define _CHECK_STACK_SPACE_OPERAND_r33 630 -#define _CHECK_VALIDITY_r00 631 -#define _CHECK_VALIDITY_r11 632 -#define _CHECK_VALIDITY_r22 633 -#define _CHECK_VALIDITY_r33 634 -#define _COMPARE_OP_r21 635 -#define _COMPARE_OP_FLOAT_r10 636 -#define _COMPARE_OP_FLOAT_r21 637 -#define _COMPARE_OP_FLOAT_r32 638 -#define _COMPARE_OP_INT_r11 639 -#define _COMPARE_OP_STR_r10 640 -#define _COMPARE_OP_STR_r21 641 -#define _COMPARE_OP_STR_r32 642 -#define _CONTAINS_OP_r21 643 -#define _CONTAINS_OP_DICT_r21 644 -#define _CONTAINS_OP_SET_r21 645 -#define _CONVERT_VALUE_r11 646 -#define _COPY_r01 647 -#define _COPY_FREE_VARS_r00 648 -#define _COPY_FREE_VARS_r11 649 -#define _COPY_FREE_VARS_r22 650 -#define _COPY_FREE_VARS_r33 651 -#define _CREATE_INIT_FRAME_r01 652 -#define _DELETE_ATTR_r10 653 -#define _DELETE_DEREF_r00 654 -#define _DELETE_FAST_r00 655 -#define _DELETE_GLOBAL_r00 656 -#define _DELETE_NAME_r00 657 -#define _DELETE_SUBSCR_r20 658 -#define _DEOPT_r00 659 -#define _DICT_MERGE_r10 660 -#define _DICT_UPDATE_r10 661 -#define _DO_CALL_r01 662 -#define _DO_CALL_FUNCTION_EX_r31 663 -#define _DO_CALL_KW_r11 664 -#define _END_FOR_r10 665 -#define _END_SEND_r21 666 -#define _ERROR_POP_N_r00 667 -#define _EXIT_INIT_CHECK_r10 668 -#define _EXIT_TRACE_r00 669 -#define _EXIT_TRACE_r10 670 -#define _EXIT_TRACE_r20 671 -#define _EXIT_TRACE_r30 672 -#define _EXPAND_METHOD_r00 673 -#define _EXPAND_METHOD_KW_r00 674 -#define _FATAL_ERROR_r00 675 -#define _FATAL_ERROR_r11 676 -#define _FATAL_ERROR_r22 677 -#define _FATAL_ERROR_r33 678 -#define _FORMAT_SIMPLE_r11 679 -#define _FORMAT_WITH_SPEC_r21 680 -#define _FOR_ITER_r01 681 -#define _FOR_ITER_GEN_FRAME_r22 682 -#define _FOR_ITER_TIER_TWO_r00 683 -#define _GET_AITER_r11 684 -#define _GET_ANEXT_r01 685 -#define _GET_AWAITABLE_r11 686 -#define _GET_ITER_r12 687 -#define _GET_LEN_r01 688 -#define _GET_YIELD_FROM_ITER_r11 689 -#define _GUARD_BINARY_OP_EXTEND_r00 690 -#define _GUARD_CALLABLE_ISINSTANCE_r33 691 -#define _GUARD_CALLABLE_LEN_r33 692 -#define _GUARD_CALLABLE_LIST_APPEND_r33 693 -#define _GUARD_CALLABLE_STR_1_r33 694 -#define _GUARD_CALLABLE_TUPLE_1_r33 695 -#define _GUARD_CALLABLE_TYPE_1_r33 696 -#define _GUARD_DORV_NO_DICT_r00 697 -#define _GUARD_DORV_NO_DICT_r11 698 -#define _GUARD_DORV_NO_DICT_r22 699 -#define _GUARD_DORV_NO_DICT_r33 700 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00 701 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 702 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 703 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 704 -#define _GUARD_GLOBALS_VERSION_r00 705 -#define _GUARD_GLOBALS_VERSION_r11 706 -#define _GUARD_GLOBALS_VERSION_r22 707 -#define _GUARD_GLOBALS_VERSION_r33 708 -#define _GUARD_IS_FALSE_POP_r00 709 -#define _GUARD_IS_NONE_POP_r00 710 -#define _GUARD_IS_NOT_NONE_POP_r00 711 -#define _GUARD_IS_TRUE_POP_r00 712 -#define _GUARD_KEYS_VERSION_r00 713 -#define _GUARD_KEYS_VERSION_r11 714 -#define _GUARD_KEYS_VERSION_r22 715 -#define _GUARD_KEYS_VERSION_r33 716 -#define _GUARD_NOS_DICT_r00 717 -#define _GUARD_NOS_DICT_r11 718 -#define _GUARD_NOS_DICT_r22 719 -#define _GUARD_NOS_DICT_r33 720 -#define _GUARD_NOS_FLOAT_r00 721 -#define _GUARD_NOS_FLOAT_r11 722 -#define _GUARD_NOS_FLOAT_r22 723 -#define _GUARD_NOS_FLOAT_r33 724 -#define _GUARD_NOS_INT_r00 725 -#define _GUARD_NOS_INT_r11 726 -#define _GUARD_NOS_INT_r22 727 -#define _GUARD_NOS_INT_r33 728 -#define _GUARD_NOS_LIST_r00 729 -#define _GUARD_NOS_LIST_r11 730 -#define _GUARD_NOS_LIST_r22 731 -#define _GUARD_NOS_LIST_r33 732 -#define _GUARD_NOS_NOT_NULL_r00 733 -#define _GUARD_NOS_NOT_NULL_r11 734 -#define _GUARD_NOS_NOT_NULL_r22 735 -#define _GUARD_NOS_NOT_NULL_r33 736 -#define _GUARD_NOS_NULL_r00 737 -#define _GUARD_NOS_NULL_r11 738 -#define _GUARD_NOS_NULL_r22 739 -#define _GUARD_NOS_NULL_r33 740 -#define _GUARD_NOS_TUPLE_r00 741 -#define _GUARD_NOS_TUPLE_r11 742 -#define _GUARD_NOS_TUPLE_r22 743 -#define _GUARD_NOS_TUPLE_r33 744 -#define _GUARD_NOS_UNICODE_r00 745 -#define _GUARD_NOS_UNICODE_r11 746 -#define _GUARD_NOS_UNICODE_r22 747 -#define _GUARD_NOS_UNICODE_r33 748 -#define _GUARD_NOT_EXHAUSTED_LIST_r00 749 -#define _GUARD_NOT_EXHAUSTED_LIST_r11 750 -#define _GUARD_NOT_EXHAUSTED_LIST_r22 751 -#define _GUARD_NOT_EXHAUSTED_LIST_r33 752 -#define _GUARD_NOT_EXHAUSTED_RANGE_r00 753 -#define _GUARD_NOT_EXHAUSTED_RANGE_r11 754 -#define _GUARD_NOT_EXHAUSTED_RANGE_r22 755 -#define _GUARD_NOT_EXHAUSTED_RANGE_r33 756 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r00 757 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r11 758 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 759 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 760 -#define _GUARD_THIRD_NULL_r33 761 -#define _GUARD_TOS_ANY_SET_r00 762 -#define _GUARD_TOS_ANY_SET_r11 763 -#define _GUARD_TOS_ANY_SET_r22 764 -#define _GUARD_TOS_ANY_SET_r33 765 -#define _GUARD_TOS_DICT_r00 766 -#define _GUARD_TOS_DICT_r11 767 -#define _GUARD_TOS_DICT_r22 768 -#define _GUARD_TOS_DICT_r33 769 -#define _GUARD_TOS_FLOAT_r00 770 -#define _GUARD_TOS_FLOAT_r11 771 -#define _GUARD_TOS_FLOAT_r22 772 -#define _GUARD_TOS_FLOAT_r33 773 -#define _GUARD_TOS_INT_r00 774 -#define _GUARD_TOS_INT_r11 775 -#define _GUARD_TOS_INT_r22 776 -#define _GUARD_TOS_INT_r33 777 -#define _GUARD_TOS_LIST_r00 778 -#define _GUARD_TOS_LIST_r11 779 -#define _GUARD_TOS_LIST_r22 780 -#define _GUARD_TOS_LIST_r33 781 -#define _GUARD_TOS_SLICE_r00 782 -#define _GUARD_TOS_SLICE_r11 783 -#define _GUARD_TOS_SLICE_r22 784 -#define _GUARD_TOS_SLICE_r33 785 -#define _GUARD_TOS_TUPLE_r00 786 -#define _GUARD_TOS_TUPLE_r11 787 -#define _GUARD_TOS_TUPLE_r22 788 -#define _GUARD_TOS_TUPLE_r33 789 -#define _GUARD_TOS_UNICODE_r00 790 -#define _GUARD_TOS_UNICODE_r11 791 -#define _GUARD_TOS_UNICODE_r22 792 -#define _GUARD_TOS_UNICODE_r33 793 -#define _GUARD_TYPE_VERSION_r00 794 -#define _GUARD_TYPE_VERSION_r11 795 -#define _GUARD_TYPE_VERSION_r22 796 -#define _GUARD_TYPE_VERSION_r33 797 -#define _GUARD_TYPE_VERSION_AND_LOCK_r00 798 -#define _GUARD_TYPE_VERSION_AND_LOCK_r11 799 -#define _GUARD_TYPE_VERSION_AND_LOCK_r22 800 -#define _GUARD_TYPE_VERSION_AND_LOCK_r33 801 -#define _IMPORT_FROM_r01 802 -#define _IMPORT_NAME_r21 803 -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 804 -#define _INIT_CALL_PY_EXACT_ARGS_r01 805 -#define _INIT_CALL_PY_EXACT_ARGS_0_r01 806 -#define _INIT_CALL_PY_EXACT_ARGS_1_r01 807 -#define _INIT_CALL_PY_EXACT_ARGS_2_r01 808 -#define _INIT_CALL_PY_EXACT_ARGS_3_r01 809 -#define _INIT_CALL_PY_EXACT_ARGS_4_r01 810 -#define _INSERT_NULL_r10 811 -#define _INSTRUMENTED_FOR_ITER_r01 812 -#define _INSTRUMENTED_INSTRUCTION_r00 813 -#define _INSTRUMENTED_JUMP_FORWARD_r00 814 -#define _INSTRUMENTED_JUMP_FORWARD_r11 815 -#define _INSTRUMENTED_JUMP_FORWARD_r22 816 -#define _INSTRUMENTED_JUMP_FORWARD_r33 817 -#define _INSTRUMENTED_LINE_r00 818 -#define _INSTRUMENTED_NOT_TAKEN_r00 819 -#define _INSTRUMENTED_NOT_TAKEN_r11 820 -#define _INSTRUMENTED_NOT_TAKEN_r22 821 -#define _INSTRUMENTED_NOT_TAKEN_r33 822 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 823 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 824 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 825 -#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 826 -#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 827 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 828 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 829 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 830 -#define _IS_NONE_r11 831 -#define _IS_OP_r21 832 -#define _ITER_CHECK_LIST_r00 833 -#define _ITER_CHECK_LIST_r11 834 -#define _ITER_CHECK_LIST_r22 835 -#define _ITER_CHECK_LIST_r33 836 -#define _ITER_CHECK_RANGE_r00 837 -#define _ITER_CHECK_RANGE_r11 838 -#define _ITER_CHECK_RANGE_r22 839 -#define _ITER_CHECK_RANGE_r33 840 -#define _ITER_CHECK_TUPLE_r00 841 -#define _ITER_CHECK_TUPLE_r11 842 -#define _ITER_CHECK_TUPLE_r22 843 -#define _ITER_CHECK_TUPLE_r33 844 -#define _ITER_JUMP_LIST_r00 845 -#define _ITER_JUMP_LIST_r11 846 -#define _ITER_JUMP_LIST_r22 847 -#define _ITER_JUMP_LIST_r33 848 -#define _ITER_JUMP_RANGE_r00 849 -#define _ITER_JUMP_RANGE_r11 850 -#define _ITER_JUMP_RANGE_r22 851 -#define _ITER_JUMP_RANGE_r33 852 -#define _ITER_JUMP_TUPLE_r00 853 -#define _ITER_JUMP_TUPLE_r11 854 -#define _ITER_JUMP_TUPLE_r22 855 -#define _ITER_JUMP_TUPLE_r33 856 -#define _ITER_NEXT_LIST_r00 857 -#define _ITER_NEXT_LIST_TIER_TWO_r00 858 -#define _ITER_NEXT_RANGE_r23 859 -#define _ITER_NEXT_TUPLE_r23 860 -#define _JUMP_TO_TOP_r00 861 -#define _LIST_APPEND_r10 862 -#define _LIST_EXTEND_r10 863 -#define _LOAD_ATTR_r10 864 -#define _LOAD_ATTR_CLASS_r11 865 -#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 866 -#define _LOAD_ATTR_INSTANCE_VALUE_r11 867 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r01 868 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 869 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 870 -#define _LOAD_ATTR_METHOD_NO_DICT_r01 871 -#define _LOAD_ATTR_METHOD_NO_DICT_r12 872 -#define _LOAD_ATTR_METHOD_NO_DICT_r23 873 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r01 874 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 875 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 876 -#define _LOAD_ATTR_MODULE_r11 877 -#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 878 -#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 879 -#define _LOAD_ATTR_PROPERTY_FRAME_r00 880 -#define _LOAD_ATTR_PROPERTY_FRAME_r11 881 -#define _LOAD_ATTR_PROPERTY_FRAME_r22 882 -#define _LOAD_ATTR_PROPERTY_FRAME_r33 883 -#define _LOAD_ATTR_SLOT_r11 884 -#define _LOAD_ATTR_WITH_HINT_r11 885 -#define _LOAD_BUILD_CLASS_r01 886 -#define _LOAD_BYTECODE_r00 887 -#define _LOAD_COMMON_CONSTANT_r01 888 -#define _LOAD_COMMON_CONSTANT_r12 889 -#define _LOAD_COMMON_CONSTANT_r23 890 -#define _LOAD_CONST_r01 891 -#define _LOAD_CONST_r12 892 -#define _LOAD_CONST_r23 893 -#define _LOAD_CONST_INLINE_r01 894 -#define _LOAD_CONST_INLINE_r12 895 -#define _LOAD_CONST_INLINE_r23 896 -#define _LOAD_CONST_INLINE_BORROW_r01 897 -#define _LOAD_CONST_INLINE_BORROW_r12 898 -#define _LOAD_CONST_INLINE_BORROW_r23 899 -#define _LOAD_CONST_UNDER_INLINE_r01 900 -#define _LOAD_CONST_UNDER_INLINE_r12 901 -#define _LOAD_CONST_UNDER_INLINE_r23 902 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r01 903 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 904 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 905 -#define _LOAD_DEREF_r01 906 -#define _LOAD_FAST_r01 907 -#define _LOAD_FAST_r12 908 -#define _LOAD_FAST_r23 909 -#define _LOAD_FAST_0_r01 910 -#define _LOAD_FAST_0_r12 911 -#define _LOAD_FAST_0_r23 912 -#define _LOAD_FAST_1_r01 913 -#define _LOAD_FAST_1_r12 914 -#define _LOAD_FAST_1_r23 915 -#define _LOAD_FAST_2_r01 916 -#define _LOAD_FAST_2_r12 917 -#define _LOAD_FAST_2_r23 918 -#define _LOAD_FAST_3_r01 919 -#define _LOAD_FAST_3_r12 920 -#define _LOAD_FAST_3_r23 921 -#define _LOAD_FAST_4_r01 922 -#define _LOAD_FAST_4_r12 923 -#define _LOAD_FAST_4_r23 924 -#define _LOAD_FAST_5_r01 925 -#define _LOAD_FAST_5_r12 926 -#define _LOAD_FAST_5_r23 927 -#define _LOAD_FAST_6_r01 928 -#define _LOAD_FAST_6_r12 929 -#define _LOAD_FAST_6_r23 930 -#define _LOAD_FAST_7_r01 931 -#define _LOAD_FAST_7_r12 932 -#define _LOAD_FAST_7_r23 933 -#define _LOAD_FAST_AND_CLEAR_r01 934 -#define _LOAD_FAST_AND_CLEAR_r12 935 -#define _LOAD_FAST_AND_CLEAR_r23 936 -#define _LOAD_FAST_BORROW_r01 937 -#define _LOAD_FAST_BORROW_r12 938 -#define _LOAD_FAST_BORROW_r23 939 -#define _LOAD_FAST_BORROW_0_r01 940 -#define _LOAD_FAST_BORROW_0_r12 941 -#define _LOAD_FAST_BORROW_0_r23 942 -#define _LOAD_FAST_BORROW_1_r01 943 -#define _LOAD_FAST_BORROW_1_r12 944 -#define _LOAD_FAST_BORROW_1_r23 945 -#define _LOAD_FAST_BORROW_2_r01 946 -#define _LOAD_FAST_BORROW_2_r12 947 -#define _LOAD_FAST_BORROW_2_r23 948 -#define _LOAD_FAST_BORROW_3_r01 949 -#define _LOAD_FAST_BORROW_3_r12 950 -#define _LOAD_FAST_BORROW_3_r23 951 -#define _LOAD_FAST_BORROW_4_r01 952 -#define _LOAD_FAST_BORROW_4_r12 953 -#define _LOAD_FAST_BORROW_4_r23 954 -#define _LOAD_FAST_BORROW_5_r01 955 -#define _LOAD_FAST_BORROW_5_r12 956 -#define _LOAD_FAST_BORROW_5_r23 957 -#define _LOAD_FAST_BORROW_6_r01 958 -#define _LOAD_FAST_BORROW_6_r12 959 -#define _LOAD_FAST_BORROW_6_r23 960 -#define _LOAD_FAST_BORROW_7_r01 961 -#define _LOAD_FAST_BORROW_7_r12 962 -#define _LOAD_FAST_BORROW_7_r23 963 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 964 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 965 -#define _LOAD_FAST_CHECK_r01 966 -#define _LOAD_FAST_LOAD_FAST_r02 967 -#define _LOAD_FAST_LOAD_FAST_r13 968 -#define _LOAD_FROM_DICT_OR_DEREF_r11 969 -#define _LOAD_FROM_DICT_OR_GLOBALS_r11 970 -#define _LOAD_GLOBAL_r00 971 -#define _LOAD_GLOBAL_BUILTINS_r00 972 -#define _LOAD_GLOBAL_MODULE_r00 973 -#define _LOAD_LOCALS_r01 974 -#define _LOAD_NAME_r01 975 -#define _LOAD_SMALL_INT_r01 976 -#define _LOAD_SMALL_INT_r12 977 -#define _LOAD_SMALL_INT_r23 978 -#define _LOAD_SMALL_INT_0_r01 979 -#define _LOAD_SMALL_INT_0_r12 980 -#define _LOAD_SMALL_INT_0_r23 981 -#define _LOAD_SMALL_INT_1_r01 982 -#define _LOAD_SMALL_INT_1_r12 983 -#define _LOAD_SMALL_INT_1_r23 984 -#define _LOAD_SMALL_INT_2_r01 985 -#define _LOAD_SMALL_INT_2_r12 986 -#define _LOAD_SMALL_INT_2_r23 987 -#define _LOAD_SMALL_INT_3_r01 988 -#define _LOAD_SMALL_INT_3_r12 989 -#define _LOAD_SMALL_INT_3_r23 990 -#define _LOAD_SPECIAL_r00 991 -#define _LOAD_SUPER_ATTR_ATTR_r11 992 -#define _LOAD_SUPER_ATTR_METHOD_r22 993 -#define _MAKE_CALLARGS_A_TUPLE_r00 994 -#define _MAKE_CELL_r00 995 -#define _MAKE_FUNCTION_r11 996 -#define _MAKE_WARM_r00 997 -#define _MAKE_WARM_r11 998 -#define _MAKE_WARM_r22 999 -#define _MAKE_WARM_r33 1000 -#define _MAP_ADD_r20 1001 -#define _MATCH_CLASS_r31 1002 -#define _MATCH_KEYS_r01 1003 -#define _MATCH_MAPPING_r01 1004 -#define _MATCH_MAPPING_r12 1005 -#define _MATCH_MAPPING_r23 1006 -#define _MATCH_SEQUENCE_r01 1007 -#define _MATCH_SEQUENCE_r12 1008 -#define _MATCH_SEQUENCE_r23 1009 -#define _MAYBE_EXPAND_METHOD_r00 1010 -#define _MAYBE_EXPAND_METHOD_KW_r00 1011 -#define _MONITOR_CALL_r00 1012 -#define _MONITOR_CALL_KW_r00 1013 -#define _MONITOR_JUMP_BACKWARD_r00 1014 -#define _MONITOR_JUMP_BACKWARD_r11 1015 -#define _MONITOR_JUMP_BACKWARD_r22 1016 -#define _MONITOR_JUMP_BACKWARD_r33 1017 -#define _MONITOR_RESUME_r00 1018 -#define _NOP_r00 1019 -#define _NOP_r11 1020 -#define _NOP_r22 1021 -#define _NOP_r33 1022 -#define _POP_CALL_r20 1023 -#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1024 -#define _POP_CALL_ONE_r30 1025 -#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1026 -#define _POP_CALL_TWO_r30 1027 -#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1028 -#define _POP_EXCEPT_r10 1029 -#define _POP_ITER_r20 1030 -#define _POP_JUMP_IF_FALSE_r10 1031 -#define _POP_JUMP_IF_FALSE_r21 1032 -#define _POP_JUMP_IF_FALSE_r32 1033 -#define _POP_JUMP_IF_TRUE_r10 1034 -#define _POP_JUMP_IF_TRUE_r21 1035 -#define _POP_JUMP_IF_TRUE_r32 1036 -#define _POP_TOP_r10 1037 -#define _POP_TOP_LOAD_CONST_INLINE_r11 1038 -#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1039 -#define _POP_TWO_r20 1040 -#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1041 -#define _PUSH_EXC_INFO_r01 1042 -#define _PUSH_EXC_INFO_r12 1043 -#define _PUSH_EXC_INFO_r23 1044 -#define _PUSH_FRAME_r10 1045 -#define _PUSH_NULL_r01 1046 -#define _PUSH_NULL_r12 1047 -#define _PUSH_NULL_r23 1048 -#define _PUSH_NULL_CONDITIONAL_r00 1049 -#define _PY_FRAME_GENERAL_r01 1050 -#define _PY_FRAME_KW_r11 1051 -#define _QUICKEN_RESUME_r00 1052 -#define _QUICKEN_RESUME_r11 1053 -#define _QUICKEN_RESUME_r22 1054 -#define _QUICKEN_RESUME_r33 1055 -#define _REPLACE_WITH_TRUE_r11 1056 -#define _RESUME_CHECK_r00 1057 -#define _RESUME_CHECK_r11 1058 -#define _RESUME_CHECK_r22 1059 -#define _RESUME_CHECK_r33 1060 -#define _RETURN_GENERATOR_r01 1061 -#define _RETURN_VALUE_r11 1062 -#define _SAVE_RETURN_OFFSET_r00 1063 -#define _SAVE_RETURN_OFFSET_r11 1064 -#define _SAVE_RETURN_OFFSET_r22 1065 -#define _SAVE_RETURN_OFFSET_r33 1066 -#define _SEND_r11 1067 -#define _SEND_GEN_FRAME_r00 1068 -#define _SEND_GEN_FRAME_r11 1069 -#define _SEND_GEN_FRAME_r22 1070 -#define _SEND_GEN_FRAME_r33 1071 -#define _SETUP_ANNOTATIONS_r00 1072 -#define _SET_ADD_r10 1073 -#define _SET_FUNCTION_ATTRIBUTE_r10 1074 -#define _SET_FUNCTION_ATTRIBUTE_r21 1075 -#define _SET_FUNCTION_ATTRIBUTE_r32 1076 -#define _SET_IP_r00 1077 -#define _SET_IP_r11 1078 -#define _SET_IP_r22 1079 -#define _SET_IP_r33 1080 -#define _SET_UPDATE_r10 1081 -#define _SPILL_OR_RELOAD_r01 1082 -#define _SPILL_OR_RELOAD_r02 1083 -#define _SPILL_OR_RELOAD_r03 1084 -#define _SPILL_OR_RELOAD_r10 1085 -#define _SPILL_OR_RELOAD_r12 1086 -#define _SPILL_OR_RELOAD_r13 1087 -#define _SPILL_OR_RELOAD_r20 1088 -#define _SPILL_OR_RELOAD_r21 1089 -#define _SPILL_OR_RELOAD_r23 1090 -#define _SPILL_OR_RELOAD_r30 1091 -#define _SPILL_OR_RELOAD_r31 1092 -#define _SPILL_OR_RELOAD_r32 1093 -#define _START_EXECUTOR_r00 1094 -#define _STORE_ATTR_r20 1095 -#define _STORE_ATTR_INSTANCE_VALUE_r20 1096 -#define _STORE_ATTR_SLOT_r00 1097 -#define _STORE_ATTR_WITH_HINT_r00 1098 -#define _STORE_DEREF_r10 1099 -#define _STORE_FAST_r10 1100 -#define _STORE_FAST_0_r10 1101 -#define _STORE_FAST_1_r10 1102 -#define _STORE_FAST_2_r10 1103 -#define _STORE_FAST_3_r10 1104 -#define _STORE_FAST_4_r10 1105 -#define _STORE_FAST_5_r10 1106 -#define _STORE_FAST_6_r10 1107 -#define _STORE_FAST_7_r10 1108 -#define _STORE_FAST_LOAD_FAST_r11 1109 -#define _STORE_FAST_STORE_FAST_r20 1110 -#define _STORE_GLOBAL_r10 1111 -#define _STORE_NAME_r10 1112 -#define _STORE_SLICE_r30 1113 -#define _STORE_SUBSCR_r30 1114 -#define _STORE_SUBSCR_DICT_r30 1115 -#define _STORE_SUBSCR_LIST_INT_r00 1116 -#define _SWAP_r11 1117 -#define _TIER2_RESUME_CHECK_r00 1118 -#define _TIER2_RESUME_CHECK_r11 1119 -#define _TIER2_RESUME_CHECK_r22 1120 -#define _TIER2_RESUME_CHECK_r33 1121 -#define _TO_BOOL_r11 1122 -#define _TO_BOOL_BOOL_r00 1123 -#define _TO_BOOL_BOOL_r11 1124 -#define _TO_BOOL_BOOL_r22 1125 -#define _TO_BOOL_BOOL_r33 1126 -#define _TO_BOOL_INT_r11 1127 -#define _TO_BOOL_LIST_r11 1128 -#define _TO_BOOL_NONE_r00 1129 -#define _TO_BOOL_NONE_r11 1130 -#define _TO_BOOL_NONE_r22 1131 -#define _TO_BOOL_NONE_r33 1132 -#define _TO_BOOL_STR_r11 1133 -#define _UNARY_INVERT_r11 1134 -#define _UNARY_NEGATIVE_r11 1135 -#define _UNARY_NOT_r00 1136 -#define _UNARY_NOT_r11 1137 -#define _UNARY_NOT_r22 1138 -#define _UNARY_NOT_r33 1139 -#define _UNPACK_EX_r10 1140 -#define _UNPACK_SEQUENCE_r10 1141 -#define _UNPACK_SEQUENCE_LIST_r00 1142 -#define _UNPACK_SEQUENCE_TUPLE_r00 1143 -#define _UNPACK_SEQUENCE_TWO_TUPLE_r11 1144 -#define _WITH_EXCEPT_START_r01 1145 -#define _YIELD_VALUE_r00 1146 -#define _YIELD_VALUE_r11 1147 -#define _YIELD_VALUE_r22 1148 -#define _YIELD_VALUE_r33 1149 -#define MAX_UOP_REGS_ID 1149 +#define _BINARY_OP_ADD_INT_r10 537 +#define _BINARY_OP_ADD_INT_r21 538 +#define _BINARY_OP_ADD_INT_r32 539 +#define _BINARY_OP_ADD_UNICODE_r10 540 +#define _BINARY_OP_ADD_UNICODE_r21 541 +#define _BINARY_OP_ADD_UNICODE_r32 542 +#define _BINARY_OP_EXTEND_r21 543 +#define _BINARY_OP_INPLACE_ADD_UNICODE_r00 544 +#define _BINARY_OP_MULTIPLY_FLOAT_r10 545 +#define _BINARY_OP_MULTIPLY_FLOAT_r21 546 +#define _BINARY_OP_MULTIPLY_FLOAT_r32 547 +#define _BINARY_OP_MULTIPLY_INT_r10 548 +#define _BINARY_OP_MULTIPLY_INT_r21 549 +#define _BINARY_OP_MULTIPLY_INT_r32 550 +#define _BINARY_OP_SUBSCR_CHECK_FUNC_r22 551 +#define _BINARY_OP_SUBSCR_DICT_r21 552 +#define _BINARY_OP_SUBSCR_INIT_CALL_r31 553 +#define _BINARY_OP_SUBSCR_LIST_INT_r11 554 +#define _BINARY_OP_SUBSCR_LIST_SLICE_r21 555 +#define _BINARY_OP_SUBSCR_STR_INT_r11 556 +#define _BINARY_OP_SUBSCR_TUPLE_INT_r11 557 +#define _BINARY_OP_SUBTRACT_FLOAT_r10 558 +#define _BINARY_OP_SUBTRACT_FLOAT_r21 559 +#define _BINARY_OP_SUBTRACT_FLOAT_r32 560 +#define _BINARY_OP_SUBTRACT_INT_r10 561 +#define _BINARY_OP_SUBTRACT_INT_r21 562 +#define _BINARY_OP_SUBTRACT_INT_r32 563 +#define _BINARY_SLICE_r31 564 +#define _BUILD_INTERPOLATION_r01 565 +#define _BUILD_LIST_r01 566 +#define _BUILD_MAP_r01 567 +#define _BUILD_SET_r01 568 +#define _BUILD_SLICE_r01 569 +#define _BUILD_STRING_r01 570 +#define _BUILD_TEMPLATE_r21 571 +#define _BUILD_TUPLE_r01 572 +#define _CALL_BUILTIN_CLASS_r00 573 +#define _CALL_BUILTIN_FAST_r00 574 +#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00 575 +#define _CALL_BUILTIN_O_r00 576 +#define _CALL_INTRINSIC_1_r11 577 +#define _CALL_INTRINSIC_2_r21 578 +#define _CALL_ISINSTANCE_r31 579 +#define _CALL_KW_NON_PY_r11 580 +#define _CALL_LEN_r31 581 +#define _CALL_LIST_APPEND_r00 582 +#define _CALL_METHOD_DESCRIPTOR_FAST_r00 583 +#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 584 +#define _CALL_METHOD_DESCRIPTOR_NOARGS_r00 585 +#define _CALL_METHOD_DESCRIPTOR_O_r00 586 +#define _CALL_NON_PY_GENERAL_r01 587 +#define _CALL_STR_1_r31 588 +#define _CALL_TUPLE_1_r31 589 +#define _CALL_TYPE_1_r31 590 +#define _CHECK_AND_ALLOCATE_OBJECT_r00 591 +#define _CHECK_ATTR_CLASS_r00 592 +#define _CHECK_ATTR_CLASS_r11 593 +#define _CHECK_ATTR_CLASS_r22 594 +#define _CHECK_ATTR_CLASS_r33 595 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r00 596 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 597 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 598 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 599 +#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 600 +#define _CHECK_EG_MATCH_r22 601 +#define _CHECK_EXC_MATCH_r11 602 +#define _CHECK_FUNCTION_r00 603 +#define _CHECK_FUNCTION_r11 604 +#define _CHECK_FUNCTION_r22 605 +#define _CHECK_FUNCTION_r33 606 +#define _CHECK_FUNCTION_EXACT_ARGS_r00 607 +#define _CHECK_FUNCTION_VERSION_r00 608 +#define _CHECK_FUNCTION_VERSION_INLINE_r00 609 +#define _CHECK_FUNCTION_VERSION_INLINE_r11 610 +#define _CHECK_FUNCTION_VERSION_INLINE_r22 611 +#define _CHECK_FUNCTION_VERSION_INLINE_r33 612 +#define _CHECK_FUNCTION_VERSION_KW_r11 613 +#define _CHECK_IS_NOT_PY_CALLABLE_r00 614 +#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 615 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r00 616 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 617 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 618 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 619 +#define _CHECK_METHOD_VERSION_r00 620 +#define _CHECK_METHOD_VERSION_KW_r11 621 +#define _CHECK_PEP_523_r00 622 +#define _CHECK_PEP_523_r11 623 +#define _CHECK_PEP_523_r22 624 +#define _CHECK_PEP_523_r33 625 +#define _CHECK_PERIODIC_r00 626 +#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 627 +#define _CHECK_RECURSION_REMAINING_r00 628 +#define _CHECK_RECURSION_REMAINING_r11 629 +#define _CHECK_RECURSION_REMAINING_r22 630 +#define _CHECK_RECURSION_REMAINING_r33 631 +#define _CHECK_STACK_SPACE_r00 632 +#define _CHECK_STACK_SPACE_OPERAND_r00 633 +#define _CHECK_STACK_SPACE_OPERAND_r11 634 +#define _CHECK_STACK_SPACE_OPERAND_r22 635 +#define _CHECK_STACK_SPACE_OPERAND_r33 636 +#define _CHECK_VALIDITY_r00 637 +#define _CHECK_VALIDITY_r11 638 +#define _CHECK_VALIDITY_r22 639 +#define _CHECK_VALIDITY_r33 640 +#define _COMPARE_OP_r21 641 +#define _COMPARE_OP_FLOAT_r10 642 +#define _COMPARE_OP_FLOAT_r21 643 +#define _COMPARE_OP_FLOAT_r32 644 +#define _COMPARE_OP_INT_r11 645 +#define _COMPARE_OP_STR_r10 646 +#define _COMPARE_OP_STR_r21 647 +#define _COMPARE_OP_STR_r32 648 +#define _CONTAINS_OP_r21 649 +#define _CONTAINS_OP_DICT_r21 650 +#define _CONTAINS_OP_SET_r21 651 +#define _CONVERT_VALUE_r11 652 +#define _COPY_r01 653 +#define _COPY_FREE_VARS_r00 654 +#define _COPY_FREE_VARS_r11 655 +#define _COPY_FREE_VARS_r22 656 +#define _COPY_FREE_VARS_r33 657 +#define _CREATE_INIT_FRAME_r01 658 +#define _DELETE_ATTR_r10 659 +#define _DELETE_DEREF_r00 660 +#define _DELETE_FAST_r00 661 +#define _DELETE_GLOBAL_r00 662 +#define _DELETE_NAME_r00 663 +#define _DELETE_SUBSCR_r20 664 +#define _DEOPT_r00 665 +#define _DICT_MERGE_r10 666 +#define _DICT_UPDATE_r10 667 +#define _DO_CALL_r01 668 +#define _DO_CALL_FUNCTION_EX_r31 669 +#define _DO_CALL_KW_r11 670 +#define _END_FOR_r10 671 +#define _END_SEND_r21 672 +#define _ERROR_POP_N_r00 673 +#define _EXIT_INIT_CHECK_r10 674 +#define _EXIT_TRACE_r00 675 +#define _EXIT_TRACE_r10 676 +#define _EXIT_TRACE_r20 677 +#define _EXIT_TRACE_r30 678 +#define _EXPAND_METHOD_r00 679 +#define _EXPAND_METHOD_KW_r00 680 +#define _FATAL_ERROR_r00 681 +#define _FATAL_ERROR_r11 682 +#define _FATAL_ERROR_r22 683 +#define _FATAL_ERROR_r33 684 +#define _FORMAT_SIMPLE_r11 685 +#define _FORMAT_WITH_SPEC_r21 686 +#define _FOR_ITER_r01 687 +#define _FOR_ITER_GEN_FRAME_r22 688 +#define _FOR_ITER_TIER_TWO_r00 689 +#define _GET_AITER_r11 690 +#define _GET_ANEXT_r01 691 +#define _GET_AWAITABLE_r11 692 +#define _GET_ITER_r12 693 +#define _GET_LEN_r01 694 +#define _GET_YIELD_FROM_ITER_r11 695 +#define _GUARD_BINARY_OP_EXTEND_r00 696 +#define _GUARD_CALLABLE_ISINSTANCE_r33 697 +#define _GUARD_CALLABLE_LEN_r33 698 +#define _GUARD_CALLABLE_LIST_APPEND_r33 699 +#define _GUARD_CALLABLE_STR_1_r33 700 +#define _GUARD_CALLABLE_TUPLE_1_r33 701 +#define _GUARD_CALLABLE_TYPE_1_r33 702 +#define _GUARD_DORV_NO_DICT_r00 703 +#define _GUARD_DORV_NO_DICT_r11 704 +#define _GUARD_DORV_NO_DICT_r22 705 +#define _GUARD_DORV_NO_DICT_r33 706 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00 707 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 708 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 709 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 710 +#define _GUARD_GLOBALS_VERSION_r00 711 +#define _GUARD_GLOBALS_VERSION_r11 712 +#define _GUARD_GLOBALS_VERSION_r22 713 +#define _GUARD_GLOBALS_VERSION_r33 714 +#define _GUARD_IS_FALSE_POP_r00 715 +#define _GUARD_IS_NONE_POP_r00 716 +#define _GUARD_IS_NOT_NONE_POP_r00 717 +#define _GUARD_IS_TRUE_POP_r00 718 +#define _GUARD_KEYS_VERSION_r00 719 +#define _GUARD_KEYS_VERSION_r11 720 +#define _GUARD_KEYS_VERSION_r22 721 +#define _GUARD_KEYS_VERSION_r33 722 +#define _GUARD_NOS_DICT_r00 723 +#define _GUARD_NOS_DICT_r11 724 +#define _GUARD_NOS_DICT_r22 725 +#define _GUARD_NOS_DICT_r33 726 +#define _GUARD_NOS_FLOAT_r00 727 +#define _GUARD_NOS_FLOAT_r11 728 +#define _GUARD_NOS_FLOAT_r22 729 +#define _GUARD_NOS_FLOAT_r33 730 +#define _GUARD_NOS_INT_r00 731 +#define _GUARD_NOS_INT_r11 732 +#define _GUARD_NOS_INT_r22 733 +#define _GUARD_NOS_INT_r33 734 +#define _GUARD_NOS_LIST_r00 735 +#define _GUARD_NOS_LIST_r11 736 +#define _GUARD_NOS_LIST_r22 737 +#define _GUARD_NOS_LIST_r33 738 +#define _GUARD_NOS_NOT_NULL_r00 739 +#define _GUARD_NOS_NOT_NULL_r11 740 +#define _GUARD_NOS_NOT_NULL_r22 741 +#define _GUARD_NOS_NOT_NULL_r33 742 +#define _GUARD_NOS_NULL_r00 743 +#define _GUARD_NOS_NULL_r11 744 +#define _GUARD_NOS_NULL_r22 745 +#define _GUARD_NOS_NULL_r33 746 +#define _GUARD_NOS_TUPLE_r00 747 +#define _GUARD_NOS_TUPLE_r11 748 +#define _GUARD_NOS_TUPLE_r22 749 +#define _GUARD_NOS_TUPLE_r33 750 +#define _GUARD_NOS_UNICODE_r00 751 +#define _GUARD_NOS_UNICODE_r11 752 +#define _GUARD_NOS_UNICODE_r22 753 +#define _GUARD_NOS_UNICODE_r33 754 +#define _GUARD_NOT_EXHAUSTED_LIST_r00 755 +#define _GUARD_NOT_EXHAUSTED_LIST_r11 756 +#define _GUARD_NOT_EXHAUSTED_LIST_r22 757 +#define _GUARD_NOT_EXHAUSTED_LIST_r33 758 +#define _GUARD_NOT_EXHAUSTED_RANGE_r00 759 +#define _GUARD_NOT_EXHAUSTED_RANGE_r11 760 +#define _GUARD_NOT_EXHAUSTED_RANGE_r22 761 +#define _GUARD_NOT_EXHAUSTED_RANGE_r33 762 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r00 763 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r11 764 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 765 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 766 +#define _GUARD_THIRD_NULL_r33 767 +#define _GUARD_TOS_ANY_SET_r00 768 +#define _GUARD_TOS_ANY_SET_r11 769 +#define _GUARD_TOS_ANY_SET_r22 770 +#define _GUARD_TOS_ANY_SET_r33 771 +#define _GUARD_TOS_DICT_r00 772 +#define _GUARD_TOS_DICT_r11 773 +#define _GUARD_TOS_DICT_r22 774 +#define _GUARD_TOS_DICT_r33 775 +#define _GUARD_TOS_FLOAT_r00 776 +#define _GUARD_TOS_FLOAT_r11 777 +#define _GUARD_TOS_FLOAT_r22 778 +#define _GUARD_TOS_FLOAT_r33 779 +#define _GUARD_TOS_INT_r00 780 +#define _GUARD_TOS_INT_r11 781 +#define _GUARD_TOS_INT_r22 782 +#define _GUARD_TOS_INT_r33 783 +#define _GUARD_TOS_LIST_r00 784 +#define _GUARD_TOS_LIST_r11 785 +#define _GUARD_TOS_LIST_r22 786 +#define _GUARD_TOS_LIST_r33 787 +#define _GUARD_TOS_SLICE_r00 788 +#define _GUARD_TOS_SLICE_r11 789 +#define _GUARD_TOS_SLICE_r22 790 +#define _GUARD_TOS_SLICE_r33 791 +#define _GUARD_TOS_TUPLE_r00 792 +#define _GUARD_TOS_TUPLE_r11 793 +#define _GUARD_TOS_TUPLE_r22 794 +#define _GUARD_TOS_TUPLE_r33 795 +#define _GUARD_TOS_UNICODE_r00 796 +#define _GUARD_TOS_UNICODE_r11 797 +#define _GUARD_TOS_UNICODE_r22 798 +#define _GUARD_TOS_UNICODE_r33 799 +#define _GUARD_TYPE_VERSION_r00 800 +#define _GUARD_TYPE_VERSION_r11 801 +#define _GUARD_TYPE_VERSION_r22 802 +#define _GUARD_TYPE_VERSION_r33 803 +#define _GUARD_TYPE_VERSION_AND_LOCK_r00 804 +#define _GUARD_TYPE_VERSION_AND_LOCK_r11 805 +#define _GUARD_TYPE_VERSION_AND_LOCK_r22 806 +#define _GUARD_TYPE_VERSION_AND_LOCK_r33 807 +#define _IMPORT_FROM_r01 808 +#define _IMPORT_NAME_r21 809 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 810 +#define _INIT_CALL_PY_EXACT_ARGS_r01 811 +#define _INIT_CALL_PY_EXACT_ARGS_0_r01 812 +#define _INIT_CALL_PY_EXACT_ARGS_1_r01 813 +#define _INIT_CALL_PY_EXACT_ARGS_2_r01 814 +#define _INIT_CALL_PY_EXACT_ARGS_3_r01 815 +#define _INIT_CALL_PY_EXACT_ARGS_4_r01 816 +#define _INSERT_NULL_r10 817 +#define _INSTRUMENTED_FOR_ITER_r01 818 +#define _INSTRUMENTED_INSTRUCTION_r00 819 +#define _INSTRUMENTED_JUMP_FORWARD_r00 820 +#define _INSTRUMENTED_JUMP_FORWARD_r11 821 +#define _INSTRUMENTED_JUMP_FORWARD_r22 822 +#define _INSTRUMENTED_JUMP_FORWARD_r33 823 +#define _INSTRUMENTED_LINE_r00 824 +#define _INSTRUMENTED_NOT_TAKEN_r00 825 +#define _INSTRUMENTED_NOT_TAKEN_r11 826 +#define _INSTRUMENTED_NOT_TAKEN_r22 827 +#define _INSTRUMENTED_NOT_TAKEN_r33 828 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 829 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 830 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 831 +#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 832 +#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 833 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 834 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 835 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 836 +#define _IS_NONE_r11 837 +#define _IS_OP_r21 838 +#define _ITER_CHECK_LIST_r00 839 +#define _ITER_CHECK_LIST_r11 840 +#define _ITER_CHECK_LIST_r22 841 +#define _ITER_CHECK_LIST_r33 842 +#define _ITER_CHECK_RANGE_r00 843 +#define _ITER_CHECK_RANGE_r11 844 +#define _ITER_CHECK_RANGE_r22 845 +#define _ITER_CHECK_RANGE_r33 846 +#define _ITER_CHECK_TUPLE_r00 847 +#define _ITER_CHECK_TUPLE_r11 848 +#define _ITER_CHECK_TUPLE_r22 849 +#define _ITER_CHECK_TUPLE_r33 850 +#define _ITER_JUMP_LIST_r00 851 +#define _ITER_JUMP_LIST_r11 852 +#define _ITER_JUMP_LIST_r22 853 +#define _ITER_JUMP_LIST_r33 854 +#define _ITER_JUMP_RANGE_r00 855 +#define _ITER_JUMP_RANGE_r11 856 +#define _ITER_JUMP_RANGE_r22 857 +#define _ITER_JUMP_RANGE_r33 858 +#define _ITER_JUMP_TUPLE_r00 859 +#define _ITER_JUMP_TUPLE_r11 860 +#define _ITER_JUMP_TUPLE_r22 861 +#define _ITER_JUMP_TUPLE_r33 862 +#define _ITER_NEXT_LIST_r00 863 +#define _ITER_NEXT_LIST_TIER_TWO_r00 864 +#define _ITER_NEXT_RANGE_r23 865 +#define _ITER_NEXT_TUPLE_r23 866 +#define _JUMP_TO_TOP_r00 867 +#define _LIST_APPEND_r10 868 +#define _LIST_EXTEND_r10 869 +#define _LOAD_ATTR_r10 870 +#define _LOAD_ATTR_CLASS_r11 871 +#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 872 +#define _LOAD_ATTR_INSTANCE_VALUE_r11 873 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r01 874 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 875 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 876 +#define _LOAD_ATTR_METHOD_NO_DICT_r01 877 +#define _LOAD_ATTR_METHOD_NO_DICT_r12 878 +#define _LOAD_ATTR_METHOD_NO_DICT_r23 879 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r01 880 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 881 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 882 +#define _LOAD_ATTR_MODULE_r11 883 +#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 884 +#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 885 +#define _LOAD_ATTR_PROPERTY_FRAME_r00 886 +#define _LOAD_ATTR_PROPERTY_FRAME_r11 887 +#define _LOAD_ATTR_PROPERTY_FRAME_r22 888 +#define _LOAD_ATTR_PROPERTY_FRAME_r33 889 +#define _LOAD_ATTR_SLOT_r11 890 +#define _LOAD_ATTR_WITH_HINT_r11 891 +#define _LOAD_BUILD_CLASS_r01 892 +#define _LOAD_BYTECODE_r00 893 +#define _LOAD_COMMON_CONSTANT_r01 894 +#define _LOAD_COMMON_CONSTANT_r12 895 +#define _LOAD_COMMON_CONSTANT_r23 896 +#define _LOAD_CONST_r01 897 +#define _LOAD_CONST_r12 898 +#define _LOAD_CONST_r23 899 +#define _LOAD_CONST_INLINE_r01 900 +#define _LOAD_CONST_INLINE_r12 901 +#define _LOAD_CONST_INLINE_r23 902 +#define _LOAD_CONST_INLINE_BORROW_r01 903 +#define _LOAD_CONST_INLINE_BORROW_r12 904 +#define _LOAD_CONST_INLINE_BORROW_r23 905 +#define _LOAD_CONST_UNDER_INLINE_r01 906 +#define _LOAD_CONST_UNDER_INLINE_r12 907 +#define _LOAD_CONST_UNDER_INLINE_r23 908 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r01 909 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 910 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 911 +#define _LOAD_DEREF_r01 912 +#define _LOAD_FAST_r01 913 +#define _LOAD_FAST_r12 914 +#define _LOAD_FAST_r23 915 +#define _LOAD_FAST_0_r01 916 +#define _LOAD_FAST_0_r12 917 +#define _LOAD_FAST_0_r23 918 +#define _LOAD_FAST_1_r01 919 +#define _LOAD_FAST_1_r12 920 +#define _LOAD_FAST_1_r23 921 +#define _LOAD_FAST_2_r01 922 +#define _LOAD_FAST_2_r12 923 +#define _LOAD_FAST_2_r23 924 +#define _LOAD_FAST_3_r01 925 +#define _LOAD_FAST_3_r12 926 +#define _LOAD_FAST_3_r23 927 +#define _LOAD_FAST_4_r01 928 +#define _LOAD_FAST_4_r12 929 +#define _LOAD_FAST_4_r23 930 +#define _LOAD_FAST_5_r01 931 +#define _LOAD_FAST_5_r12 932 +#define _LOAD_FAST_5_r23 933 +#define _LOAD_FAST_6_r01 934 +#define _LOAD_FAST_6_r12 935 +#define _LOAD_FAST_6_r23 936 +#define _LOAD_FAST_7_r01 937 +#define _LOAD_FAST_7_r12 938 +#define _LOAD_FAST_7_r23 939 +#define _LOAD_FAST_AND_CLEAR_r01 940 +#define _LOAD_FAST_AND_CLEAR_r12 941 +#define _LOAD_FAST_AND_CLEAR_r23 942 +#define _LOAD_FAST_BORROW_r01 943 +#define _LOAD_FAST_BORROW_r12 944 +#define _LOAD_FAST_BORROW_r23 945 +#define _LOAD_FAST_BORROW_0_r01 946 +#define _LOAD_FAST_BORROW_0_r12 947 +#define _LOAD_FAST_BORROW_0_r23 948 +#define _LOAD_FAST_BORROW_1_r01 949 +#define _LOAD_FAST_BORROW_1_r12 950 +#define _LOAD_FAST_BORROW_1_r23 951 +#define _LOAD_FAST_BORROW_2_r01 952 +#define _LOAD_FAST_BORROW_2_r12 953 +#define _LOAD_FAST_BORROW_2_r23 954 +#define _LOAD_FAST_BORROW_3_r01 955 +#define _LOAD_FAST_BORROW_3_r12 956 +#define _LOAD_FAST_BORROW_3_r23 957 +#define _LOAD_FAST_BORROW_4_r01 958 +#define _LOAD_FAST_BORROW_4_r12 959 +#define _LOAD_FAST_BORROW_4_r23 960 +#define _LOAD_FAST_BORROW_5_r01 961 +#define _LOAD_FAST_BORROW_5_r12 962 +#define _LOAD_FAST_BORROW_5_r23 963 +#define _LOAD_FAST_BORROW_6_r01 964 +#define _LOAD_FAST_BORROW_6_r12 965 +#define _LOAD_FAST_BORROW_6_r23 966 +#define _LOAD_FAST_BORROW_7_r01 967 +#define _LOAD_FAST_BORROW_7_r12 968 +#define _LOAD_FAST_BORROW_7_r23 969 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 970 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 971 +#define _LOAD_FAST_CHECK_r01 972 +#define _LOAD_FAST_LOAD_FAST_r02 973 +#define _LOAD_FAST_LOAD_FAST_r13 974 +#define _LOAD_FROM_DICT_OR_DEREF_r11 975 +#define _LOAD_FROM_DICT_OR_GLOBALS_r11 976 +#define _LOAD_GLOBAL_r00 977 +#define _LOAD_GLOBAL_BUILTINS_r00 978 +#define _LOAD_GLOBAL_MODULE_r00 979 +#define _LOAD_LOCALS_r01 980 +#define _LOAD_NAME_r01 981 +#define _LOAD_SMALL_INT_r01 982 +#define _LOAD_SMALL_INT_r12 983 +#define _LOAD_SMALL_INT_r23 984 +#define _LOAD_SMALL_INT_0_r01 985 +#define _LOAD_SMALL_INT_0_r12 986 +#define _LOAD_SMALL_INT_0_r23 987 +#define _LOAD_SMALL_INT_1_r01 988 +#define _LOAD_SMALL_INT_1_r12 989 +#define _LOAD_SMALL_INT_1_r23 990 +#define _LOAD_SMALL_INT_2_r01 991 +#define _LOAD_SMALL_INT_2_r12 992 +#define _LOAD_SMALL_INT_2_r23 993 +#define _LOAD_SMALL_INT_3_r01 994 +#define _LOAD_SMALL_INT_3_r12 995 +#define _LOAD_SMALL_INT_3_r23 996 +#define _LOAD_SPECIAL_r00 997 +#define _LOAD_SUPER_ATTR_ATTR_r11 998 +#define _LOAD_SUPER_ATTR_METHOD_r22 999 +#define _MAKE_CALLARGS_A_TUPLE_r00 1000 +#define _MAKE_CELL_r00 1001 +#define _MAKE_FUNCTION_r11 1002 +#define _MAKE_WARM_r00 1003 +#define _MAKE_WARM_r11 1004 +#define _MAKE_WARM_r22 1005 +#define _MAKE_WARM_r33 1006 +#define _MAP_ADD_r20 1007 +#define _MATCH_CLASS_r31 1008 +#define _MATCH_KEYS_r01 1009 +#define _MATCH_MAPPING_r01 1010 +#define _MATCH_MAPPING_r12 1011 +#define _MATCH_MAPPING_r23 1012 +#define _MATCH_SEQUENCE_r01 1013 +#define _MATCH_SEQUENCE_r12 1014 +#define _MATCH_SEQUENCE_r23 1015 +#define _MAYBE_EXPAND_METHOD_r00 1016 +#define _MAYBE_EXPAND_METHOD_KW_r00 1017 +#define _MONITOR_CALL_r00 1018 +#define _MONITOR_CALL_KW_r00 1019 +#define _MONITOR_JUMP_BACKWARD_r00 1020 +#define _MONITOR_JUMP_BACKWARD_r11 1021 +#define _MONITOR_JUMP_BACKWARD_r22 1022 +#define _MONITOR_JUMP_BACKWARD_r33 1023 +#define _MONITOR_RESUME_r00 1024 +#define _NOP_r00 1025 +#define _NOP_r11 1026 +#define _NOP_r22 1027 +#define _NOP_r33 1028 +#define _POP_CALL_r20 1029 +#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1030 +#define _POP_CALL_ONE_r30 1031 +#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1032 +#define _POP_CALL_TWO_r30 1033 +#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1034 +#define _POP_EXCEPT_r10 1035 +#define _POP_ITER_r20 1036 +#define _POP_JUMP_IF_FALSE_r10 1037 +#define _POP_JUMP_IF_FALSE_r21 1038 +#define _POP_JUMP_IF_FALSE_r32 1039 +#define _POP_JUMP_IF_TRUE_r10 1040 +#define _POP_JUMP_IF_TRUE_r21 1041 +#define _POP_JUMP_IF_TRUE_r32 1042 +#define _POP_TOP_r10 1043 +#define _POP_TOP_LOAD_CONST_INLINE_r11 1044 +#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1045 +#define _POP_TWO_r20 1046 +#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1047 +#define _PUSH_EXC_INFO_r01 1048 +#define _PUSH_EXC_INFO_r12 1049 +#define _PUSH_EXC_INFO_r23 1050 +#define _PUSH_FRAME_r10 1051 +#define _PUSH_NULL_r01 1052 +#define _PUSH_NULL_r12 1053 +#define _PUSH_NULL_r23 1054 +#define _PUSH_NULL_CONDITIONAL_r00 1055 +#define _PY_FRAME_GENERAL_r01 1056 +#define _PY_FRAME_KW_r11 1057 +#define _QUICKEN_RESUME_r00 1058 +#define _QUICKEN_RESUME_r11 1059 +#define _QUICKEN_RESUME_r22 1060 +#define _QUICKEN_RESUME_r33 1061 +#define _REPLACE_WITH_TRUE_r11 1062 +#define _RESUME_CHECK_r00 1063 +#define _RESUME_CHECK_r11 1064 +#define _RESUME_CHECK_r22 1065 +#define _RESUME_CHECK_r33 1066 +#define _RETURN_GENERATOR_r01 1067 +#define _RETURN_VALUE_r11 1068 +#define _SAVE_RETURN_OFFSET_r00 1069 +#define _SAVE_RETURN_OFFSET_r11 1070 +#define _SAVE_RETURN_OFFSET_r22 1071 +#define _SAVE_RETURN_OFFSET_r33 1072 +#define _SEND_r11 1073 +#define _SEND_GEN_FRAME_r00 1074 +#define _SEND_GEN_FRAME_r11 1075 +#define _SEND_GEN_FRAME_r22 1076 +#define _SEND_GEN_FRAME_r33 1077 +#define _SETUP_ANNOTATIONS_r00 1078 +#define _SET_ADD_r10 1079 +#define _SET_FUNCTION_ATTRIBUTE_r10 1080 +#define _SET_FUNCTION_ATTRIBUTE_r21 1081 +#define _SET_FUNCTION_ATTRIBUTE_r32 1082 +#define _SET_IP_r00 1083 +#define _SET_IP_r11 1084 +#define _SET_IP_r22 1085 +#define _SET_IP_r33 1086 +#define _SET_UPDATE_r10 1087 +#define _SPILL_OR_RELOAD_r01 1088 +#define _SPILL_OR_RELOAD_r02 1089 +#define _SPILL_OR_RELOAD_r03 1090 +#define _SPILL_OR_RELOAD_r10 1091 +#define _SPILL_OR_RELOAD_r12 1092 +#define _SPILL_OR_RELOAD_r13 1093 +#define _SPILL_OR_RELOAD_r20 1094 +#define _SPILL_OR_RELOAD_r21 1095 +#define _SPILL_OR_RELOAD_r23 1096 +#define _SPILL_OR_RELOAD_r30 1097 +#define _SPILL_OR_RELOAD_r31 1098 +#define _SPILL_OR_RELOAD_r32 1099 +#define _START_EXECUTOR_r00 1100 +#define _STORE_ATTR_r20 1101 +#define _STORE_ATTR_INSTANCE_VALUE_r20 1102 +#define _STORE_ATTR_SLOT_r00 1103 +#define _STORE_ATTR_WITH_HINT_r00 1104 +#define _STORE_DEREF_r10 1105 +#define _STORE_FAST_r10 1106 +#define _STORE_FAST_0_r10 1107 +#define _STORE_FAST_1_r10 1108 +#define _STORE_FAST_2_r10 1109 +#define _STORE_FAST_3_r10 1110 +#define _STORE_FAST_4_r10 1111 +#define _STORE_FAST_5_r10 1112 +#define _STORE_FAST_6_r10 1113 +#define _STORE_FAST_7_r10 1114 +#define _STORE_FAST_LOAD_FAST_r11 1115 +#define _STORE_FAST_STORE_FAST_r20 1116 +#define _STORE_GLOBAL_r10 1117 +#define _STORE_NAME_r10 1118 +#define _STORE_SLICE_r30 1119 +#define _STORE_SUBSCR_r30 1120 +#define _STORE_SUBSCR_DICT_r30 1121 +#define _STORE_SUBSCR_LIST_INT_r00 1122 +#define _SWAP_r11 1123 +#define _TIER2_RESUME_CHECK_r00 1124 +#define _TIER2_RESUME_CHECK_r11 1125 +#define _TIER2_RESUME_CHECK_r22 1126 +#define _TIER2_RESUME_CHECK_r33 1127 +#define _TO_BOOL_r11 1128 +#define _TO_BOOL_BOOL_r00 1129 +#define _TO_BOOL_BOOL_r11 1130 +#define _TO_BOOL_BOOL_r22 1131 +#define _TO_BOOL_BOOL_r33 1132 +#define _TO_BOOL_INT_r11 1133 +#define _TO_BOOL_LIST_r11 1134 +#define _TO_BOOL_NONE_r00 1135 +#define _TO_BOOL_NONE_r11 1136 +#define _TO_BOOL_NONE_r22 1137 +#define _TO_BOOL_NONE_r33 1138 +#define _TO_BOOL_STR_r11 1139 +#define _UNARY_INVERT_r11 1140 +#define _UNARY_NEGATIVE_r11 1141 +#define _UNARY_NOT_r00 1142 +#define _UNARY_NOT_r11 1143 +#define _UNARY_NOT_r22 1144 +#define _UNARY_NOT_r33 1145 +#define _UNPACK_EX_r10 1146 +#define _UNPACK_SEQUENCE_r10 1147 +#define _UNPACK_SEQUENCE_LIST_r00 1148 +#define _UNPACK_SEQUENCE_TUPLE_r00 1149 +#define _UNPACK_SEQUENCE_TWO_TUPLE_r11 1150 +#define _WITH_EXCEPT_START_r01 1151 +#define _YIELD_VALUE_r00 1152 +#define _YIELD_VALUE_r11 1153 +#define _YIELD_VALUE_r22 1154 +#define _YIELD_VALUE_r33 1155 +#define MAX_UOP_REGS_ID 1155 #ifdef __cplusplus } diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h index cbb4ccaef862b7..50f6197751015c 100644 --- a/Include/internal/pycore_uop_metadata.h +++ b/Include/internal/pycore_uop_metadata.h @@ -90,9 +90,9 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_UNARY_INVERT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_GUARD_NOS_INT] = HAS_EXIT_FLAG, [_GUARD_TOS_INT] = HAS_EXIT_FLAG, - [_BINARY_OP_MULTIPLY_INT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_ADD_INT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_SUBTRACT_INT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG, + [_BINARY_OP_MULTIPLY_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG, + [_BINARY_OP_ADD_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG, + [_BINARY_OP_SUBTRACT_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG, [_GUARD_NOS_FLOAT] = HAS_EXIT_FLAG, [_GUARD_TOS_FLOAT] = HAS_EXIT_FLAG, [_BINARY_OP_MULTIPLY_FLOAT] = HAS_ERROR_FLAG | HAS_PURE_FLAG, @@ -400,9 +400,9 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_UNARY_INVERT] = { 1, 1, 0, { 0, _UNARY_INVERT_r11, 0, 0 } }, [_GUARD_NOS_INT] = { 0, 3, 0, { _GUARD_NOS_INT_r00, _GUARD_NOS_INT_r11, _GUARD_NOS_INT_r22, _GUARD_NOS_INT_r33 } }, [_GUARD_TOS_INT] = { 0, 3, 0, { _GUARD_TOS_INT_r00, _GUARD_TOS_INT_r11, _GUARD_TOS_INT_r22, _GUARD_TOS_INT_r33 } }, - [_BINARY_OP_MULTIPLY_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_MULTIPLY_INT_r21, 0 } }, - [_BINARY_OP_ADD_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_ADD_INT_r21, 0 } }, - [_BINARY_OP_SUBTRACT_INT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBTRACT_INT_r21, 0 } }, + [_BINARY_OP_MULTIPLY_INT] = { 1, 3, -1, { 0, _BINARY_OP_MULTIPLY_INT_r10, _BINARY_OP_MULTIPLY_INT_r21, _BINARY_OP_MULTIPLY_INT_r32 } }, + [_BINARY_OP_ADD_INT] = { 1, 3, -1, { 0, _BINARY_OP_ADD_INT_r10, _BINARY_OP_ADD_INT_r21, _BINARY_OP_ADD_INT_r32 } }, + [_BINARY_OP_SUBTRACT_INT] = { 1, 3, -1, { 0, _BINARY_OP_SUBTRACT_INT_r10, _BINARY_OP_SUBTRACT_INT_r21, _BINARY_OP_SUBTRACT_INT_r32 } }, [_GUARD_NOS_FLOAT] = { 0, 3, 0, { _GUARD_NOS_FLOAT_r00, _GUARD_NOS_FLOAT_r11, _GUARD_NOS_FLOAT_r22, _GUARD_NOS_FLOAT_r33 } }, [_GUARD_TOS_FLOAT] = { 0, 3, 0, { _GUARD_TOS_FLOAT_r00, _GUARD_TOS_FLOAT_r11, _GUARD_TOS_FLOAT_r22, _GUARD_TOS_FLOAT_r33 } }, [_BINARY_OP_MULTIPLY_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_MULTIPLY_FLOAT_r10, _BINARY_OP_MULTIPLY_FLOAT_r21, _BINARY_OP_MULTIPLY_FLOAT_r32 } }, @@ -790,8 +790,14 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_INT_r22] = _GUARD_TOS_INT, [_GUARD_TOS_INT_r33] = _GUARD_TOS_INT, [_BINARY_OP_MULTIPLY_INT_r21] = _BINARY_OP_MULTIPLY_INT, + [_BINARY_OP_MULTIPLY_INT_r10] = _BINARY_OP_MULTIPLY_INT, + [_BINARY_OP_MULTIPLY_INT_r32] = _BINARY_OP_MULTIPLY_INT, [_BINARY_OP_ADD_INT_r21] = _BINARY_OP_ADD_INT, + [_BINARY_OP_ADD_INT_r10] = _BINARY_OP_ADD_INT, + [_BINARY_OP_ADD_INT_r32] = _BINARY_OP_ADD_INT, [_BINARY_OP_SUBTRACT_INT_r21] = _BINARY_OP_SUBTRACT_INT, + [_BINARY_OP_SUBTRACT_INT_r10] = _BINARY_OP_SUBTRACT_INT, + [_BINARY_OP_SUBTRACT_INT_r32] = _BINARY_OP_SUBTRACT_INT, [_GUARD_NOS_FLOAT_r22] = _GUARD_NOS_FLOAT, [_GUARD_NOS_FLOAT_r00] = _GUARD_NOS_FLOAT, [_GUARD_NOS_FLOAT_r11] = _GUARD_NOS_FLOAT, @@ -1219,6 +1225,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_ADD_FLOAT_r32] = "_BINARY_OP_ADD_FLOAT_r32", [_BINARY_OP_ADD_INT] = "_BINARY_OP_ADD_INT", [_BINARY_OP_ADD_INT_r21] = "_BINARY_OP_ADD_INT_r21", + [_BINARY_OP_ADD_INT_r10] = "_BINARY_OP_ADD_INT_r10", + [_BINARY_OP_ADD_INT_r32] = "_BINARY_OP_ADD_INT_r32", [_BINARY_OP_ADD_UNICODE] = "_BINARY_OP_ADD_UNICODE", [_BINARY_OP_ADD_UNICODE_r21] = "_BINARY_OP_ADD_UNICODE_r21", [_BINARY_OP_ADD_UNICODE_r10] = "_BINARY_OP_ADD_UNICODE_r10", @@ -1233,6 +1241,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_MULTIPLY_FLOAT_r32] = "_BINARY_OP_MULTIPLY_FLOAT_r32", [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", [_BINARY_OP_MULTIPLY_INT_r21] = "_BINARY_OP_MULTIPLY_INT_r21", + [_BINARY_OP_MULTIPLY_INT_r10] = "_BINARY_OP_MULTIPLY_INT_r10", + [_BINARY_OP_MULTIPLY_INT_r32] = "_BINARY_OP_MULTIPLY_INT_r32", [_BINARY_OP_SUBSCR_CHECK_FUNC] = "_BINARY_OP_SUBSCR_CHECK_FUNC", [_BINARY_OP_SUBSCR_CHECK_FUNC_r22] = "_BINARY_OP_SUBSCR_CHECK_FUNC_r22", [_BINARY_OP_SUBSCR_DICT] = "_BINARY_OP_SUBSCR_DICT", @@ -1253,6 +1263,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_SUBTRACT_FLOAT_r32] = "_BINARY_OP_SUBTRACT_FLOAT_r32", [_BINARY_OP_SUBTRACT_INT] = "_BINARY_OP_SUBTRACT_INT", [_BINARY_OP_SUBTRACT_INT_r21] = "_BINARY_OP_SUBTRACT_INT_r21", + [_BINARY_OP_SUBTRACT_INT_r10] = "_BINARY_OP_SUBTRACT_INT_r10", + [_BINARY_OP_SUBTRACT_INT_r32] = "_BINARY_OP_SUBTRACT_INT_r32", [_BINARY_SLICE] = "_BINARY_SLICE", [_BINARY_SLICE_r31] = "_BINARY_SLICE_r31", [_BUILD_INTERPOLATION] = "_BUILD_INTERPOLATION", diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 00795713842223..bdf47bf5af60eb 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -2379,26 +2379,78 @@ assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _BINARY_OP_MULTIPLY_INT_r10: { + CHECK_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyLong_CheckExact(left_o)); + assert(PyLong_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + if (res_o == NULL) { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + res = PyStackRef_FromPyObjectSteal(res_o); + stack_pointer[-1] = res; + break; + } + + case _BINARY_OP_MULTIPLY_INT_r32: { + CHECK_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + right = _stack_item_2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyLong_CheckExact(left_o)); + assert(PyLong_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + if (res_o == NULL) { + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + res = PyStackRef_FromPyObjectSteal(res_o); + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; break; } @@ -2417,26 +2469,78 @@ assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _BINARY_OP_ADD_INT_r10: { + CHECK_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyLong_CheckExact(left_o)); + assert(PyLong_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + if (res_o == NULL) { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + res = PyStackRef_FromPyObjectSteal(res_o); + stack_pointer[-1] = res; + break; + } + + case _BINARY_OP_ADD_INT_r32: { + CHECK_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + right = _stack_item_2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyLong_CheckExact(left_o)); + assert(PyLong_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + if (res_o == NULL) { + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + res = PyStackRef_FromPyObjectSteal(res_o); + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; break; } @@ -2455,26 +2559,78 @@ assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); + break; + } + + case _BINARY_OP_SUBTRACT_INT_r10: { + CHECK_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(0); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + right = _stack_item_0; + left = stack_pointer[-1]; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyLong_CheckExact(left_o)); + assert(PyLong_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + if (res_o == NULL) { + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + res = PyStackRef_FromPyObjectSteal(res_o); + stack_pointer[-1] = res; + break; + } + + case _BINARY_OP_SUBTRACT_INT_r32: { + CHECK_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(2); + _PyStackRef right; + _PyStackRef left; + _PyStackRef res; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + right = _stack_item_2; + left = _stack_item_1; + PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); + PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); + assert(PyLong_CheckExact(left_o)); + assert(PyLong_CheckExact(right_o)); + STAT_INC(BINARY_OP, hit); + PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); + if (res_o == NULL) { + stack_pointer[0] = _stack_item_0; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_ERROR(); + } + res = PyStackRef_FromPyObjectSteal(res_o); + _tos_cache1 = res; + _tos_cache0 = _stack_item_0; break; } diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 5ac519bb1b6093..3ef3208081e459 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -183,9 +183,7 @@ assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { @@ -508,9 +506,7 @@ assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { @@ -1089,9 +1085,7 @@ assert(PyLong_CheckExact(left_o)); assert(PyLong_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 0e47bc845ec31b..75bcabace8ccd7 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -635,6 +635,9 @@ def has_error_without_pop(op: parser.CodeDef) -> bool: "_PyLong_IsNegative", "_PyLong_IsNonNegativeCompact", "_PyLong_IsZero", + "_PyLong_Add", + "_PyLong_Subtract", + "_PyLong_Multiply", "_PyManagedDictPointer_IsValues", "_PyObject_GC_IS_SHARED", "_PyObject_GC_IS_TRACKED", From e976b9b10b79f7b69fb11c3c45b58f63b0ee173a Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 14:48:43 +0100 Subject: [PATCH 07/14] Repair stats --- Python/executor_cases.c.h | 500 ++++++++++++++++------- Tools/cases_generator/tier2_generator.py | 3 +- 2 files changed, 354 insertions(+), 149 deletions(-) diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index bdf47bf5af60eb..b0be3769612b65 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -54,7 +54,6 @@ int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -74,7 +73,6 @@ int err = _Py_HandlePending(tstate); stack_pointer = _PyFrame_GetStackPointer(frame); if (err != 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -92,6 +90,7 @@ SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -101,12 +100,14 @@ uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version); assert((version & _PY_EVAL_EVENTS_MASK) == 0); if (eval_breaker != version) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -123,6 +124,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -135,6 +137,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -144,6 +147,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -163,6 +167,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -176,6 +181,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -186,6 +192,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -208,6 +215,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -222,6 +230,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -233,6 +242,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -258,7 +268,6 @@ PyTuple_GetItem(_PyFrame_GetCode(frame)->co_localsplusnames, oparg) ); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -1598,7 +1607,6 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -1687,7 +1695,6 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -1703,6 +1710,7 @@ _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; if (!PyStackRef_BoolCheck(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1716,6 +1724,7 @@ _PyStackRef value; value = stack_pointer[-1]; if (!PyStackRef_BoolCheck(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1730,6 +1739,7 @@ _PyStackRef _stack_item_1 = _tos_cache1; value = _stack_item_1; if (!PyStackRef_BoolCheck(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1747,6 +1757,7 @@ _PyStackRef _stack_item_2 = _tos_cache2; value = _stack_item_2; if (!PyStackRef_BoolCheck(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1765,6 +1776,7 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1791,6 +1803,7 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -1805,6 +1818,7 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -1818,6 +1832,7 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -1834,6 +1849,7 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -1850,6 +1866,7 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -1863,6 +1880,7 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -1877,6 +1895,7 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -1894,6 +1913,7 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -1910,6 +1930,7 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -1923,6 +1944,7 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -1937,6 +1959,7 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -1954,6 +1977,7 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -1996,6 +2020,7 @@ _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; if (!PyStackRef_IsNone(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2011,6 +2036,7 @@ _PyStackRef res; value = stack_pointer[-1]; if (!PyStackRef_IsNone(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2028,6 +2054,7 @@ _PyStackRef _stack_item_1 = _tos_cache1; value = _stack_item_1; if (!PyStackRef_IsNone(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2047,6 +2074,7 @@ _PyStackRef _stack_item_2 = _tos_cache2; value = _stack_item_2; if (!PyStackRef_IsNone(value)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2066,6 +2094,7 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2080,6 +2109,7 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2093,6 +2123,7 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2109,6 +2140,7 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2125,6 +2157,7 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2138,6 +2171,7 @@ value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2152,6 +2186,7 @@ value = _stack_item_1; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2169,6 +2204,7 @@ value = _stack_item_2; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2235,7 +2271,6 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2253,6 +2288,7 @@ left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2267,6 +2303,7 @@ left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2280,6 +2317,7 @@ left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2296,6 +2334,7 @@ left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2312,6 +2351,7 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2325,6 +2365,7 @@ value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2339,6 +2380,7 @@ value = _stack_item_1; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2356,6 +2398,7 @@ value = _stack_item_2; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2383,7 +2426,6 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2412,7 +2454,6 @@ if (res_o == NULL) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2444,7 +2485,6 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2473,7 +2513,6 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2502,7 +2541,6 @@ if (res_o == NULL) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2534,7 +2572,6 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2563,7 +2600,6 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2592,7 +2628,6 @@ if (res_o == NULL) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2624,7 +2659,6 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2643,6 +2677,7 @@ left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2657,6 +2692,7 @@ left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2670,6 +2706,7 @@ left = stack_pointer[-1]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2686,6 +2723,7 @@ left = _stack_item_1; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2702,6 +2740,7 @@ value = _stack_item_0; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2715,6 +2754,7 @@ value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -2729,6 +2769,7 @@ value = _stack_item_1; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2746,6 +2787,7 @@ value = _stack_item_2; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2774,7 +2816,6 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2802,7 +2843,6 @@ res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { stack_pointer[-1] = res; - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2835,7 +2875,6 @@ stack_pointer[1] = res; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2864,7 +2903,6 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2892,7 +2930,6 @@ res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { stack_pointer[-1] = res; - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2925,7 +2962,6 @@ stack_pointer[1] = res; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2954,7 +2990,6 @@ ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -2982,7 +3017,6 @@ res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { stack_pointer[-1] = res; - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3015,7 +3049,6 @@ stack_pointer[1] = res; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3043,7 +3076,6 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3072,7 +3104,6 @@ if (res_o == NULL) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3104,7 +3135,6 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3134,6 +3164,7 @@ _PyStackRef *target_local = &GETLOCAL(next_oparg); assert(PyUnicode_CheckExact(left_o)); if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3152,7 +3183,6 @@ Py_DECREF(right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(*target_local)) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3181,6 +3211,7 @@ int res = d->guard(left_o, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (!res) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3266,7 +3297,6 @@ PyStackRef_CLOSE(container); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3324,7 +3354,6 @@ stack_pointer += -4; assert(WITHIN_STACK_BOUNDS()); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3348,6 +3377,7 @@ stack_pointer[0] = sub_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3360,6 +3390,7 @@ PyObject *res_o = _PyList_GetItemRef((PyListObject*)list, index); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3370,6 +3401,7 @@ stack_pointer[0] = sub_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3433,7 +3465,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3459,6 +3490,7 @@ stack_pointer[0] = sub_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3467,6 +3499,7 @@ stack_pointer[0] = sub_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3475,6 +3508,7 @@ stack_pointer[0] = sub_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3500,6 +3534,7 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -3514,6 +3549,7 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3527,6 +3563,7 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -3543,6 +3580,7 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -3559,6 +3597,7 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -3572,6 +3611,7 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3586,6 +3626,7 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -3603,6 +3644,7 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -3628,6 +3670,7 @@ stack_pointer[0] = sub_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3636,6 +3679,7 @@ stack_pointer[0] = sub_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3665,6 +3709,7 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -3679,6 +3724,7 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3692,6 +3738,7 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -3708,6 +3755,7 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -3724,6 +3772,7 @@ tos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -3737,6 +3786,7 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -3751,6 +3801,7 @@ tos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -3768,6 +3819,7 @@ tos = _stack_item_2; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -3816,7 +3868,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (rc <= 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3839,6 +3890,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3849,6 +3901,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3859,6 +3912,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3869,6 +3923,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -3916,7 +3971,6 @@ int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list), PyStackRef_AsPyObjectSteal(v)); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3942,7 +3996,6 @@ if (err) { stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -3986,7 +4039,6 @@ stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4007,17 +4059,20 @@ assert(PyLong_CheckExact(sub)); assert(PyList_CheckExact(list)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (!LOCK_OBJECT(list)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (index >= PyList_GET_SIZE(list)) { UNLOCK_OBJECT(list); if (true) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4069,7 +4124,6 @@ PyStackRef_CLOSE(dict_st); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4104,7 +4158,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4132,7 +4185,6 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4173,7 +4225,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4234,7 +4285,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4250,7 +4300,6 @@ PyStackRef_CLOSE(obj); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4263,7 +4312,6 @@ Py_TYPE(iter_o)->tp_name); Py_DECREF(iter_o); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4282,7 +4330,6 @@ PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter)); stack_pointer = _PyFrame_GetStackPointer(frame); if (awaitable_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4311,7 +4358,6 @@ PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4339,6 +4385,7 @@ stack_pointer[1] = v; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4347,6 +4394,7 @@ stack_pointer[1] = v; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4376,10 +4424,12 @@ receiver = stack_pointer[-2]; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (gen->gi_frame_state >= FRAME_EXECUTING) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4412,6 +4462,7 @@ stack_pointer[0] = v; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4419,6 +4470,7 @@ stack_pointer[0] = v; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4455,6 +4507,7 @@ stack_pointer[2] = v; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4464,6 +4517,7 @@ stack_pointer[2] = v; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4727,7 +4781,6 @@ int err = PyMapping_GetOptionalItem(BUILTINS(), &_Py_ID(__build_class__), &bc_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4736,7 +4789,6 @@ _PyErr_SetString(tstate, PyExc_NameError, "__build_class__ not found"); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4768,7 +4820,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4794,7 +4845,6 @@ PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4813,7 +4863,6 @@ _PyErr_Format(tstate, PyExc_SystemError, "no locals when deleting %R", name); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4826,7 +4875,6 @@ NAME_ERROR_MSG, name); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4848,7 +4896,6 @@ Py_DECREF(seq_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res == 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -4873,6 +4920,7 @@ stack_pointer[0] = seq; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4903,6 +4951,7 @@ PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyTuple_CheckExact(seq_o)); if (PyTuple_GET_SIZE(seq_o) != oparg) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4930,12 +4979,14 @@ PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyList_CheckExact(seq_o)); if (!LOCK_OBJECT(seq_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (PyList_GET_SIZE(seq_o) != oparg) { UNLOCK_OBJECT(seq_o); if (true) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -4969,7 +5020,6 @@ Py_DECREF(seq_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res == 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5008,7 +5058,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5035,7 +5084,6 @@ PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5062,7 +5110,6 @@ PyStackRef_CLOSE(v); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5078,7 +5125,6 @@ int err = PyDict_Pop(GLOBALS(), name, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5087,7 +5133,6 @@ _PyEval_FormatExcCheckArg(tstate, PyExc_NameError, NAME_ERROR_MSG, name); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5104,7 +5149,6 @@ _PyErr_SetString(tstate, PyExc_SystemError, "no locals found"); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5125,7 +5169,6 @@ PyObject *v_o = _PyEval_LoadName(tstate, frame, name); stack_pointer = _PyFrame_GetStackPointer(frame); if (v_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5145,7 +5188,6 @@ _PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res); stack_pointer = _PyFrame_GetStackPointer(frame); if (PyStackRef_IsNull(*res)) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5174,11 +5216,13 @@ uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5196,6 +5240,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5204,6 +5249,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5224,6 +5270,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5233,6 +5280,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5256,6 +5304,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5266,6 +5315,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5284,11 +5334,13 @@ uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5297,12 +5349,14 @@ assert(index < DK_SIZE(keys)); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5324,11 +5378,13 @@ uint16_t index = (uint16_t)CURRENT_OPERAND1(); PyDictObject *dict = (PyDictObject *)BUILTINS(); if (!PyDict_CheckExact(dict)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys); if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5336,12 +5392,14 @@ PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys); PyObject *res_o = FT_ATOMIC_LOAD_PTR_RELAXED(entries[index].me_value); if (res_o == NULL) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #if Py_GIL_DISABLED int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res); if (!increfed) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -5367,7 +5425,6 @@ PyTuple_GetItem(_PyFrame_GetCode(frame)->co_localsplusnames, oparg) ); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5386,7 +5443,6 @@ PyObject *initial = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *cell = PyCell_New(initial); if (cell == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5408,7 +5464,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5439,7 +5494,6 @@ int err = PyMapping_GetOptionalItem(class_dict, name, &value_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5450,7 +5504,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5481,7 +5534,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5607,7 +5659,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5624,7 +5675,6 @@ stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); if (str_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5678,7 +5728,6 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (interpolation_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5717,7 +5766,6 @@ PyStackRef_CLOSE(strings); stack_pointer = _PyFrame_GetStackPointer(frame); if (template_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5735,7 +5783,6 @@ values = &stack_pointer[-oparg]; PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg); if (tup_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5757,7 +5804,6 @@ PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg); stack_pointer = _PyFrame_GetStackPointer(frame); if (list_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5804,7 +5850,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5839,7 +5884,6 @@ PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5867,7 +5911,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5892,7 +5935,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(set_o); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5922,7 +5964,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5944,7 +5985,6 @@ stack_pointer += -oparg*2; assert(WITHIN_STACK_BOUNDS()); if (map_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5962,7 +6002,6 @@ _PyErr_Format(tstate, PyExc_SystemError, "no locals found when setting up annotations"); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5970,7 +6009,6 @@ int err = PyMapping_GetOptionalItem(LOCALS(), &_Py_ID(__annotations__), &ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5979,7 +6017,6 @@ ann_dict = PyDict_New(); stack_pointer = _PyFrame_GetStackPointer(frame); if (ann_dict == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -5989,7 +6026,6 @@ Py_DECREF(ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6035,7 +6071,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6076,7 +6111,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6116,7 +6150,6 @@ if (err != 0) { stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6145,6 +6178,7 @@ stack_pointer[0] = self_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6152,6 +6186,7 @@ stack_pointer[0] = self_st; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6178,7 +6213,6 @@ stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); if (attr == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6210,6 +6244,7 @@ stack_pointer[1] = self_st; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6218,6 +6253,7 @@ stack_pointer[1] = self_st; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6234,7 +6270,6 @@ Py_TYPE(self)->tp_getattro == PyObject_GenericGetAttr ? &method_found : NULL); stack_pointer = _PyFrame_GetStackPointer(frame); if (attr_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6300,7 +6335,6 @@ PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (attr_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6321,7 +6355,6 @@ PyStackRef_CLOSE(owner); stack_pointer = _PyFrame_GetStackPointer(frame); if (attr_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -6344,6 +6377,7 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -6359,6 +6393,7 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -6375,6 +6410,7 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -6394,6 +6430,7 @@ PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner)); assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -6412,12 +6449,14 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6434,12 +6473,14 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6457,12 +6498,14 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6483,12 +6526,14 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -6511,6 +6556,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6527,6 +6573,7 @@ assert(Py_TYPE(owner_o)->tp_dictoffset < 0); assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6548,6 +6595,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6573,6 +6621,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6597,6 +6646,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6607,6 +6657,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6641,6 +6692,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6651,6 +6703,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6662,6 +6715,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6672,6 +6726,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6708,6 +6763,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6718,6 +6774,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6728,6 +6785,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6738,6 +6796,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6748,6 +6807,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6758,6 +6818,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6770,6 +6831,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6804,6 +6866,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6813,6 +6876,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6844,10 +6908,12 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -6862,10 +6928,12 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -6881,10 +6949,12 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -6903,10 +6973,12 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -6958,6 +7030,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6965,6 +7038,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6972,6 +7046,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -6979,6 +7054,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7003,18 +7079,22 @@ PyFunctionObject *f = (PyFunctionObject *)fget; PyCodeObject *code = (PyCodeObject *)f->func_code; if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_kwonlyargcount) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (code->co_argcount != 1) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7045,6 +7125,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7053,6 +7134,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7061,6 +7143,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7069,6 +7152,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7102,6 +7186,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7111,6 +7196,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7120,6 +7206,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7129,6 +7216,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7157,6 +7245,7 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -7176,6 +7265,7 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -7196,6 +7286,7 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -7219,6 +7310,7 @@ !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) { UNLOCK_OBJECT(owner_o); if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -7270,10 +7362,12 @@ assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT); PyDictObject *dict = _PyObject_GetManagedDict(owner_o); if (dict == NULL) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!LOCK_OBJECT(dict)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7281,6 +7375,7 @@ if (dict != _PyObject_GetManagedDict(owner_o)) { UNLOCK_OBJECT(dict); if (true) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7292,6 +7387,7 @@ !DK_IS_UNICODE(dict->ma_keys)) { UNLOCK_OBJECT(dict); if (true) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7300,6 +7396,7 @@ if (ep->me_key != name) { UNLOCK_OBJECT(dict); if (true) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7308,6 +7405,7 @@ if (old_value == NULL) { UNLOCK_OBJECT(dict); if (true) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7337,6 +7435,7 @@ uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7386,7 +7485,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7396,7 +7494,6 @@ Py_DECREF(res_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_bool < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7498,6 +7595,7 @@ stack_pointer[0] = right; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7505,6 +7603,7 @@ stack_pointer[0] = right; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7661,7 +7760,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7681,6 +7779,7 @@ stack_pointer[0] = tos; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7695,6 +7794,7 @@ tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyAnySet_CheckExact(o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7714,6 +7814,7 @@ stack_pointer[1] = tos; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7737,6 +7838,7 @@ stack_pointer[2] = tos; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -7779,7 +7881,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7821,7 +7922,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7863,7 +7963,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7884,13 +7983,11 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } assert((match_o == NULL) == (rest_o == NULL)); if (match_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7925,7 +8022,6 @@ int err = _PyEval_CheckExceptTypeValid(tstate, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7974,7 +8070,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -7995,7 +8090,6 @@ PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8045,13 +8139,11 @@ Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj)); stack_pointer = _PyFrame_GetStackPointer(frame); if (len_i < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *len_o = PyLong_FromSsize_t(len_i); if (len_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8106,7 +8198,6 @@ } else { if (_PyErr_Occurred(tstate)) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8213,7 +8304,6 @@ PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys)); stack_pointer = _PyFrame_GetStackPointer(frame); if (values_or_none_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8258,7 +8348,6 @@ PyStackRef_CLOSE(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8288,7 +8377,6 @@ "cannot 'yield from' a coroutine object " "in a non-coroutine generator"); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8305,7 +8393,6 @@ PyObject *iter_o = PyObject_GetIter(iterable_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (iter_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8337,11 +8424,11 @@ if (!PyStackRef_IsValid(item)) { if (PyStackRef_IsError(item)) { stack_pointer[-1] = null_or_index; - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } if (true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -8367,11 +8454,13 @@ iter = _stack_item_0; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8389,11 +8478,13 @@ iter = stack_pointer[-2]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8410,11 +8501,13 @@ iter = stack_pointer[-1]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8434,11 +8527,13 @@ iter = _stack_item_1; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8462,6 +8557,7 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8481,6 +8577,7 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8499,6 +8596,7 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8520,6 +8618,7 @@ PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8550,6 +8649,7 @@ int result = _PyList_GetItemRefNoLock((PyListObject *)list_o, PyStackRef_UntagInt(null_or_index), &next); stack_pointer = _PyFrame_GetStackPointer(frame); if (result <= 0) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -8576,6 +8676,7 @@ iter = _stack_item_0; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8593,6 +8694,7 @@ iter = stack_pointer[-2]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8609,6 +8711,7 @@ iter = stack_pointer[-1]; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8628,6 +8731,7 @@ iter = _stack_item_1; PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8650,6 +8754,7 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = null_or_index; @@ -8667,6 +8772,7 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -8683,6 +8789,7 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = null_or_index; @@ -8702,6 +8809,7 @@ PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = null_or_index; @@ -8742,10 +8850,12 @@ iter = _stack_item_0; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8761,10 +8871,12 @@ iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8779,10 +8891,12 @@ iter = stack_pointer[-1]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8800,10 +8914,12 @@ iter = _stack_item_1; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } #endif @@ -8824,6 +8940,7 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -8839,6 +8956,7 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -8853,6 +8971,7 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -8870,6 +8989,7 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -8902,7 +9022,6 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -8928,6 +9047,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -8938,6 +9058,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -8947,6 +9068,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9006,7 +9128,6 @@ _PyErr_Format(tstate, PyExc_TypeError, errfmt, owner); stack_pointer = _PyFrame_GetStackPointer(frame); } - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -9044,7 +9165,6 @@ Py_XDECREF(original_tb); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -9136,6 +9256,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9152,6 +9273,7 @@ assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES); PyDictValues *ivs = _PyObject_InlineValues(owner_o); if (!FT_ATOMIC_LOAD_UINT8(ivs->valid)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9173,6 +9295,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9198,6 +9321,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9221,6 +9345,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9238,6 +9363,7 @@ PyHeapTypeObject *owner_heap_type = (PyHeapTypeObject *)owner_cls; PyDictKeysObject *keys = owner_heap_type->ht_cached_keys; if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != keys_version) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9260,6 +9386,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9286,6 +9413,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9480,6 +9608,7 @@ stack_pointer[0] = owner; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9496,6 +9625,7 @@ char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset; PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr); if (dict != NULL) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9517,6 +9647,7 @@ stack_pointer[1] = owner; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9542,6 +9673,7 @@ stack_pointer[2] = owner; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9674,7 +9806,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (temp == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -9692,10 +9823,12 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9709,6 +9842,7 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9723,6 +9857,7 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -9739,6 +9874,7 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -9757,6 +9893,7 @@ assert(PyFunction_Check(callable_o)); PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -9776,16 +9913,20 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (((PyFunctionObject *)func)->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!PyStackRef_IsNull(null)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9822,9 +9963,11 @@ callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(callable_o) == &PyMethod_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9871,7 +10014,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -9902,7 +10044,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -9920,9 +10061,11 @@ null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; if (!PyStackRef_IsNull(null)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable)) != &PyMethod_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -9954,6 +10097,7 @@ CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); if (tstate->interp->eval_frame) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9968,6 +10112,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -9985,6 +10130,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10005,6 +10151,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10027,6 +10174,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null))) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -10042,6 +10190,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; PyCodeObject *code = (PyCodeObject *)func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10052,6 +10201,7 @@ CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10066,6 +10216,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10083,6 +10234,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10103,6 +10255,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10304,6 +10457,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10318,6 +10472,7 @@ _PyStackRef null; null = stack_pointer[-2]; if (!PyStackRef_IsNull(null)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10334,6 +10489,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10355,6 +10511,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10373,6 +10530,7 @@ nos = _stack_item_0; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -10387,6 +10545,7 @@ nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -10400,6 +10559,7 @@ nos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -10416,6 +10576,7 @@ nos = _stack_item_1; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -10438,6 +10599,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10462,6 +10624,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10518,6 +10681,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10560,7 +10724,6 @@ PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10584,6 +10747,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10626,7 +10790,6 @@ PyStackRef_CLOSE(arg); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10646,15 +10809,18 @@ uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyStackRef_IsNull(self_or_null)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyType_Check(callable_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = (PyTypeObject *)callable_o; if (FT_ATOMIC_LOAD_UINT32_RELAXED(tp->tp_version_tag) != type_version) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10665,6 +10831,7 @@ PyFunctionObject *init_func = (PyFunctionObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(cls->_spec_cache.init); PyCodeObject *code = (PyCodeObject *)init_func->func_code; if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize + _Py_InitCleanup.co_framesize)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10673,7 +10840,6 @@ PyObject *self_o = PyType_GenericAlloc(tp, 0); stack_pointer = _PyFrame_GetStackPointer(frame); if (self_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10716,7 +10882,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyEval_FrameClearAndPop(tstate, shim); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10742,7 +10907,6 @@ "__init__() should return None, not '%.200s'", Py_TYPE(PyStackRef_AsPyObjectBorrow(should_be_none))->tp_name); stack_pointer = _PyFrame_GetStackPointer(frame); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10762,6 +10926,7 @@ callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyType_Check(callable_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10773,6 +10938,7 @@ total_args++; } if (tp->tp_vectorcall == NULL) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10797,7 +10963,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10824,7 +10989,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10853,15 +11017,19 @@ total_args++; } if (total_args != 1) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!PyCFunction_CheckExact(callable_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (PyCFunction_GET_FLAGS(callable_o) != METH_O) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -10881,7 +11049,6 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10911,10 +11078,12 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (PyCFunction_GET_FLAGS(callable_o) != METH_FASTCALL) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -10940,7 +11109,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -10971,7 +11139,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11001,10 +11168,12 @@ total_args++; } if (!PyCFunction_CheckExact(callable_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (PyCFunction_GET_FLAGS(callable_o) != (METH_FASTCALL | METH_KEYWORDS)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -11033,7 +11202,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11061,7 +11229,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11088,6 +11255,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -11122,14 +11290,12 @@ Py_ssize_t len_i = PyObject_Length(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (len_i < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *res_o = PyLong_FromSsize_t(len_i); assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11164,6 +11330,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -11200,7 +11367,6 @@ int retval = PyObject_IsInstance(inst_o, cls_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (retval < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11242,6 +11408,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -11264,10 +11431,12 @@ assert(oparg == 1); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); if (!PyList_CheckExact(self_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!LOCK_OBJECT(self_o)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -11285,7 +11454,6 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (err) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11317,22 +11485,27 @@ } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (total_args != 2) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_O) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _PyStackRef arg_stackref = arguments[1]; _PyStackRef self_stackref = arguments[0]; if (!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref), method->d_common.d_type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11363,7 +11536,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11393,20 +11565,24 @@ total_args++; } if (total_args == 0) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyTypeObject *d_type = method->d_common.d_type; PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); assert(self != NULL); if (!Py_IS_TYPE(self, d_type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11431,7 +11607,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11461,7 +11636,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11491,22 +11665,27 @@ total_args++; } if (total_args != 1) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; _PyStackRef self_stackref = args[0]; PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref); if (!Py_IS_TYPE(self, method->d_common.d_type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (meth->ml_flags != METH_NOARGS) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11525,7 +11704,6 @@ PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11555,19 +11733,23 @@ total_args++; } if (total_args == 0) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_FASTCALL) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); assert(self != NULL); if (!Py_IS_TYPE(self, method->d_common.d_type)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11592,7 +11774,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11621,7 +11802,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11705,7 +11885,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (temp == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11724,10 +11903,12 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11746,16 +11927,20 @@ uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (((PyFunctionObject *)func)->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (!PyStackRef_IsNull(null)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11794,9 +11979,11 @@ callable = stack_pointer[-2 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(callable_o) == &PyMethod_Type) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11850,7 +12037,6 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11891,7 +12077,6 @@ stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11913,7 +12098,6 @@ int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (err < 0) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11921,7 +12105,6 @@ PyObject *tuple_o = PySequence_Tuple(callargs_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (tuple_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -11959,7 +12142,6 @@ PyStackRef_CLOSE(codeobj_st); stack_pointer = _PyFrame_GetStackPointer(frame); if (func_obj == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -12053,7 +12235,6 @@ PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func); stack_pointer = _PyFrame_GetStackPointer(frame); if (gen == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -12099,7 +12280,6 @@ stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); if (slice_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -12131,7 +12311,6 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (result_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -12161,7 +12340,6 @@ PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -12202,7 +12380,6 @@ stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -12246,7 +12423,6 @@ PyObject *res_o = _PyEval_BinaryOps[oparg](lhs_o, rhs_o); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { - UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } @@ -12314,6 +12490,7 @@ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); if (!is_true) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -12328,6 +12505,7 @@ stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); if (!is_false) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -12346,6 +12524,7 @@ PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); if (1) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } } @@ -12366,6 +12545,7 @@ PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); if (is_none) { + UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } break; @@ -12428,10 +12608,12 @@ uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); if (!_PyThreadState_HasStackSpace(tstate, framesize)) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (tstate->py_recursion_remaining <= 1) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12448,6 +12630,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12455,6 +12638,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12474,6 +12658,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12482,6 +12667,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12504,6 +12690,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12513,6 +12700,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12881,6 +13069,7 @@ CHECK_CURRENT_CACHED_VALUES(0); SET_CURRENT_CACHED_VALUES(0); if (!current_executor->vm_data.valid) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12895,6 +13084,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12912,6 +13102,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -12932,6 +13123,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13347,6 +13539,7 @@ assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); if (func->func_version != func_version) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13364,6 +13557,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13384,6 +13578,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13407,6 +13602,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13546,6 +13742,7 @@ SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13553,6 +13750,7 @@ #endif uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); if (eval_breaker & _PY_EVAL_EVENTS_MASK) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13569,6 +13767,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13579,6 +13778,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13598,6 +13798,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13609,6 +13810,7 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13631,6 +13833,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } @@ -13643,6 +13846,7 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 4f4e592cfe4ee9..fe872b6918a5be 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -71,7 +71,6 @@ def goto_error(self, offset: int, storage: Storage) -> str: storage.copy().flush(self.out) else: storage.stack.copy().flush(self.out) - self.emit("UOP_STAT_INC(uopcode, miss);\n") self.emit("SET_CURRENT_CACHED_VALUES(0);\n") return "JUMP_TO_ERROR();" @@ -92,6 +91,7 @@ def deopt_if( next(tkn_iter) # Semi colon self.emit(") {\n") storage.stack.copy().flush(self.out) + self.emit("UOP_STAT_INC(uopcode, miss);\n") self.emit("SET_CURRENT_CACHED_VALUES(0);\n") self.emit("JUMP_TO_JUMP_TARGET();\n") self.emit("}\n") @@ -112,6 +112,7 @@ def exit_if( # type: ignore[override] emit_to(self.out, tkn_iter, "RPAREN") next(tkn_iter) # Semi colon self.emit(") {\n") + self.emit("UOP_STAT_INC(uopcode, miss);\n") self.emit("JUMP_TO_JUMP_TARGET();\n") self.emit("}\n") return not always_true(first_tkn) From 11de93e51299b2ffb67b4f703cc800de0ce66f25 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 14:48:54 +0100 Subject: [PATCH 08/14] Add missing type annotation --- Tools/cases_generator/tier2_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index fe872b6918a5be..403ee4ddd818ae 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -174,7 +174,7 @@ def write_uop(uop: Uop, emitter: Emitter, stack: Stack, cached_items:int=0) -> S SKIPS = ("_EXTENDED_ARG",) -def is_for_iter_test(uop: Uop): +def is_for_iter_test(uop: Uop) -> bool: return uop.name in ( "_GUARD_NOT_EXHAUSTED_RANGE", "_GUARD_NOT_EXHAUSTED_LIST", "_GUARD_NOT_EXHAUSTED_TUPLE", "_FOR_ITER_TIER_TWO" From 4698695a44239c2157ce69e53aa3dd5a9f497d51 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 14:54:55 +0100 Subject: [PATCH 09/14] Pacify mypy --- Tools/cases_generator/uop_metadata_generator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/cases_generator/uop_metadata_generator.py b/Tools/cases_generator/uop_metadata_generator.py index ad7f46e59b4d6e..f9d8132fc72075 100644 --- a/Tools/cases_generator/uop_metadata_generator.py +++ b/Tools/cases_generator/uop_metadata_generator.py @@ -36,6 +36,7 @@ def uop_cache_info(uop: Uop) -> str | None: max_inputs = i if i < min_inputs: min_inputs = i + max_inputs, delta # type: ignore[possibly-undefined] return f"{{ {min_inputs}, {max_inputs}, {delta}, {{ {', '.join(uops)} }} }}" From 33837a77738d18dd7f66f1d8bd4be172c55f6a2a Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 15:13:19 +0100 Subject: [PATCH 10/14] Add type annotation --- Tools/cases_generator/analyzer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 75bcabace8ccd7..f19b2eea68f8b6 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -3,7 +3,7 @@ import lexer import parser import re -from typing import Optional, Callable +from typing import Optional, Callable, Iterator from parser import Stmt, SimpleStmt, BlockStmt, IfStmt, WhileStmt @@ -1186,7 +1186,7 @@ def analyze_forest(forest: list[parser.AstNode]) -> Analysis: ) -def get_uop_cache_depths(uop: Uop): +def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int]]: if uop.name == "_SPILL_OR_RELOAD": for inputs in range(4): for outputs in range(4): From 8bb12ef1a2422f70c636ccfad6180be4f35989db Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 15:38:49 +0100 Subject: [PATCH 11/14] Avoid overflow gathering stats --- Include/cpython/pystats.h | 2 +- Python/specialize.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Include/cpython/pystats.h b/Include/cpython/pystats.h index cf830b6066f4ab..1728c576f5cc41 100644 --- a/Include/cpython/pystats.h +++ b/Include/cpython/pystats.h @@ -29,7 +29,7 @@ # error "this header file must not be included directly" #endif -#define PYSTATS_MAX_UOP_ID 1024 +#define PYSTATS_MAX_UOP_ID 1500 #define SPECIALIZATION_FAILURE_KINDS 60 diff --git a/Python/specialize.c b/Python/specialize.c index 92f79d39d55208..0e682b3ab36583 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -33,7 +33,7 @@ GCStats _py_gc_stats[NUM_GENERATIONS] = { 0 }; static PyStats _Py_stats_struct = { .gc_stats = _py_gc_stats }; PyStats *_Py_stats = NULL; -#if PYSTATS_MAX_UOP_ID < MAX_UOP_ID +#if PYSTATS_MAX_UOP_ID < MAX_UOP_REGS_ID #error "Not enough space allocated for pystats. Increase PYSTATS_MAX_UOP_ID to at least MAX_UOP_ID" #endif From 920e6de9d32ffa7af9e3dc8e654293de72591861 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 13 Jun 2025 17:57:52 +0100 Subject: [PATCH 12/14] Reduce spilling --- Include/internal/pycore_uop_ids.h | 146 +- Include/internal/pycore_uop_metadata.h | 408 ++--- Python/executor_cases.c.h | 1974 +++++++++------------- Tools/cases_generator/analyzer.py | 9 +- Tools/cases_generator/tier2_generator.py | 7 +- 5 files changed, 1103 insertions(+), 1441 deletions(-) diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index 809c7585e7726e..22ea6e2e1c1ac7 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -337,7 +337,7 @@ extern "C" { #define _WITH_EXCEPT_START WITH_EXCEPT_START #define _YIELD_VALUE YIELD_VALUE #define MAX_UOP_ID 532 -#define _BINARY_OP_r21 533 +#define _BINARY_OP_r01 533 #define _BINARY_OP_ADD_FLOAT_r10 534 #define _BINARY_OP_ADD_FLOAT_r21 535 #define _BINARY_OP_ADD_FLOAT_r32 536 @@ -347,7 +347,7 @@ extern "C" { #define _BINARY_OP_ADD_UNICODE_r10 540 #define _BINARY_OP_ADD_UNICODE_r21 541 #define _BINARY_OP_ADD_UNICODE_r32 542 -#define _BINARY_OP_EXTEND_r21 543 +#define _BINARY_OP_EXTEND_r01 543 #define _BINARY_OP_INPLACE_ADD_UNICODE_r00 544 #define _BINARY_OP_MULTIPLY_FLOAT_r10 545 #define _BINARY_OP_MULTIPLY_FLOAT_r21 546 @@ -356,10 +356,10 @@ extern "C" { #define _BINARY_OP_MULTIPLY_INT_r21 549 #define _BINARY_OP_MULTIPLY_INT_r32 550 #define _BINARY_OP_SUBSCR_CHECK_FUNC_r22 551 -#define _BINARY_OP_SUBSCR_DICT_r21 552 +#define _BINARY_OP_SUBSCR_DICT_r01 552 #define _BINARY_OP_SUBSCR_INIT_CALL_r31 553 -#define _BINARY_OP_SUBSCR_LIST_INT_r11 554 -#define _BINARY_OP_SUBSCR_LIST_SLICE_r21 555 +#define _BINARY_OP_SUBSCR_LIST_INT_r01 554 +#define _BINARY_OP_SUBSCR_LIST_SLICE_r01 555 #define _BINARY_OP_SUBSCR_STR_INT_r11 556 #define _BINARY_OP_SUBSCR_TUPLE_INT_r11 557 #define _BINARY_OP_SUBTRACT_FLOAT_r10 558 @@ -368,32 +368,32 @@ extern "C" { #define _BINARY_OP_SUBTRACT_INT_r10 561 #define _BINARY_OP_SUBTRACT_INT_r21 562 #define _BINARY_OP_SUBTRACT_INT_r32 563 -#define _BINARY_SLICE_r31 564 +#define _BINARY_SLICE_r01 564 #define _BUILD_INTERPOLATION_r01 565 #define _BUILD_LIST_r01 566 #define _BUILD_MAP_r01 567 #define _BUILD_SET_r01 568 #define _BUILD_SLICE_r01 569 #define _BUILD_STRING_r01 570 -#define _BUILD_TEMPLATE_r21 571 +#define _BUILD_TEMPLATE_r01 571 #define _BUILD_TUPLE_r01 572 -#define _CALL_BUILTIN_CLASS_r00 573 -#define _CALL_BUILTIN_FAST_r00 574 -#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00 575 -#define _CALL_BUILTIN_O_r00 576 -#define _CALL_INTRINSIC_1_r11 577 -#define _CALL_INTRINSIC_2_r21 578 -#define _CALL_ISINSTANCE_r31 579 -#define _CALL_KW_NON_PY_r11 580 -#define _CALL_LEN_r31 581 +#define _CALL_BUILTIN_CLASS_r01 573 +#define _CALL_BUILTIN_FAST_r01 574 +#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01 575 +#define _CALL_BUILTIN_O_r01 576 +#define _CALL_INTRINSIC_1_r01 577 +#define _CALL_INTRINSIC_2_r01 578 +#define _CALL_ISINSTANCE_r01 579 +#define _CALL_KW_NON_PY_r01 580 +#define _CALL_LEN_r01 581 #define _CALL_LIST_APPEND_r00 582 -#define _CALL_METHOD_DESCRIPTOR_FAST_r00 583 -#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 584 -#define _CALL_METHOD_DESCRIPTOR_NOARGS_r00 585 -#define _CALL_METHOD_DESCRIPTOR_O_r00 586 +#define _CALL_METHOD_DESCRIPTOR_FAST_r01 583 +#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01 584 +#define _CALL_METHOD_DESCRIPTOR_NOARGS_r01 585 +#define _CALL_METHOD_DESCRIPTOR_O_r01 586 #define _CALL_NON_PY_GENERAL_r01 587 -#define _CALL_STR_1_r31 588 -#define _CALL_TUPLE_1_r31 589 +#define _CALL_STR_1_r01 588 +#define _CALL_TUPLE_1_r01 589 #define _CALL_TYPE_1_r31 590 #define _CHECK_AND_ALLOCATE_OBJECT_r00 591 #define _CHECK_ATTR_CLASS_r00 592 @@ -405,8 +405,8 @@ extern "C" { #define _CHECK_ATTR_METHOD_LAZY_DICT_r22 598 #define _CHECK_ATTR_METHOD_LAZY_DICT_r33 599 #define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 600 -#define _CHECK_EG_MATCH_r22 601 -#define _CHECK_EXC_MATCH_r11 602 +#define _CHECK_EG_MATCH_r02 601 +#define _CHECK_EXC_MATCH_r01 602 #define _CHECK_FUNCTION_r00 603 #define _CHECK_FUNCTION_r11 604 #define _CHECK_FUNCTION_r22 605 @@ -445,7 +445,7 @@ extern "C" { #define _CHECK_VALIDITY_r11 638 #define _CHECK_VALIDITY_r22 639 #define _CHECK_VALIDITY_r33 640 -#define _COMPARE_OP_r21 641 +#define _COMPARE_OP_r01 641 #define _COMPARE_OP_FLOAT_r10 642 #define _COMPARE_OP_FLOAT_r21 643 #define _COMPARE_OP_FLOAT_r32 644 @@ -453,32 +453,32 @@ extern "C" { #define _COMPARE_OP_STR_r10 646 #define _COMPARE_OP_STR_r21 647 #define _COMPARE_OP_STR_r32 648 -#define _CONTAINS_OP_r21 649 -#define _CONTAINS_OP_DICT_r21 650 -#define _CONTAINS_OP_SET_r21 651 -#define _CONVERT_VALUE_r11 652 +#define _CONTAINS_OP_r01 649 +#define _CONTAINS_OP_DICT_r01 650 +#define _CONTAINS_OP_SET_r01 651 +#define _CONVERT_VALUE_r01 652 #define _COPY_r01 653 #define _COPY_FREE_VARS_r00 654 #define _COPY_FREE_VARS_r11 655 #define _COPY_FREE_VARS_r22 656 #define _COPY_FREE_VARS_r33 657 #define _CREATE_INIT_FRAME_r01 658 -#define _DELETE_ATTR_r10 659 +#define _DELETE_ATTR_r00 659 #define _DELETE_DEREF_r00 660 #define _DELETE_FAST_r00 661 #define _DELETE_GLOBAL_r00 662 #define _DELETE_NAME_r00 663 -#define _DELETE_SUBSCR_r20 664 +#define _DELETE_SUBSCR_r00 664 #define _DEOPT_r00 665 -#define _DICT_MERGE_r10 666 -#define _DICT_UPDATE_r10 667 +#define _DICT_MERGE_r00 666 +#define _DICT_UPDATE_r00 667 #define _DO_CALL_r01 668 -#define _DO_CALL_FUNCTION_EX_r31 669 -#define _DO_CALL_KW_r11 670 +#define _DO_CALL_FUNCTION_EX_r01 669 +#define _DO_CALL_KW_r01 670 #define _END_FOR_r10 671 #define _END_SEND_r21 672 #define _ERROR_POP_N_r00 673 -#define _EXIT_INIT_CHECK_r10 674 +#define _EXIT_INIT_CHECK_r00 674 #define _EXIT_TRACE_r00 675 #define _EXIT_TRACE_r10 676 #define _EXIT_TRACE_r20 677 @@ -489,17 +489,17 @@ extern "C" { #define _FATAL_ERROR_r11 682 #define _FATAL_ERROR_r22 683 #define _FATAL_ERROR_r33 684 -#define _FORMAT_SIMPLE_r11 685 -#define _FORMAT_WITH_SPEC_r21 686 +#define _FORMAT_SIMPLE_r01 685 +#define _FORMAT_WITH_SPEC_r01 686 #define _FOR_ITER_r01 687 #define _FOR_ITER_GEN_FRAME_r22 688 -#define _FOR_ITER_TIER_TWO_r00 689 -#define _GET_AITER_r11 690 +#define _FOR_ITER_TIER_TWO_r01 689 +#define _GET_AITER_r01 690 #define _GET_ANEXT_r01 691 -#define _GET_AWAITABLE_r11 692 -#define _GET_ITER_r12 693 +#define _GET_AWAITABLE_r01 692 +#define _GET_ITER_r02 693 #define _GET_LEN_r01 694 -#define _GET_YIELD_FROM_ITER_r11 695 +#define _GET_YIELD_FROM_ITER_r01 695 #define _GUARD_BINARY_OP_EXTEND_r00 696 #define _GUARD_CALLABLE_ISINSTANCE_r33 697 #define _GUARD_CALLABLE_LEN_r33 698 @@ -613,7 +613,7 @@ extern "C" { #define _GUARD_TYPE_VERSION_AND_LOCK_r22 806 #define _GUARD_TYPE_VERSION_AND_LOCK_r33 807 #define _IMPORT_FROM_r01 808 -#define _IMPORT_NAME_r21 809 +#define _IMPORT_NAME_r01 809 #define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 810 #define _INIT_CALL_PY_EXACT_ARGS_r01 811 #define _INIT_CALL_PY_EXACT_ARGS_0_r01 812 @@ -667,14 +667,14 @@ extern "C" { #define _ITER_JUMP_TUPLE_r11 860 #define _ITER_JUMP_TUPLE_r22 861 #define _ITER_JUMP_TUPLE_r33 862 -#define _ITER_NEXT_LIST_r00 863 -#define _ITER_NEXT_LIST_TIER_TWO_r00 864 +#define _ITER_NEXT_LIST_r01 863 +#define _ITER_NEXT_LIST_TIER_TWO_r01 864 #define _ITER_NEXT_RANGE_r23 865 #define _ITER_NEXT_TUPLE_r23 866 #define _JUMP_TO_TOP_r00 867 #define _LIST_APPEND_r10 868 -#define _LIST_EXTEND_r10 869 -#define _LOAD_ATTR_r10 870 +#define _LIST_EXTEND_r00 869 +#define _LOAD_ATTR_r00 870 #define _LOAD_ATTR_CLASS_r11 871 #define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 872 #define _LOAD_ATTR_INSTANCE_VALUE_r11 873 @@ -779,8 +779,8 @@ extern "C" { #define _LOAD_FAST_CHECK_r01 972 #define _LOAD_FAST_LOAD_FAST_r02 973 #define _LOAD_FAST_LOAD_FAST_r13 974 -#define _LOAD_FROM_DICT_OR_DEREF_r11 975 -#define _LOAD_FROM_DICT_OR_GLOBALS_r11 976 +#define _LOAD_FROM_DICT_OR_DEREF_r01 975 +#define _LOAD_FROM_DICT_OR_GLOBALS_r01 976 #define _LOAD_GLOBAL_r00 977 #define _LOAD_GLOBAL_BUILTINS_r00 978 #define _LOAD_GLOBAL_MODULE_r00 979 @@ -802,17 +802,17 @@ extern "C" { #define _LOAD_SMALL_INT_3_r12 995 #define _LOAD_SMALL_INT_3_r23 996 #define _LOAD_SPECIAL_r00 997 -#define _LOAD_SUPER_ATTR_ATTR_r11 998 -#define _LOAD_SUPER_ATTR_METHOD_r22 999 +#define _LOAD_SUPER_ATTR_ATTR_r01 998 +#define _LOAD_SUPER_ATTR_METHOD_r02 999 #define _MAKE_CALLARGS_A_TUPLE_r00 1000 #define _MAKE_CELL_r00 1001 -#define _MAKE_FUNCTION_r11 1002 +#define _MAKE_FUNCTION_r01 1002 #define _MAKE_WARM_r00 1003 #define _MAKE_WARM_r11 1004 #define _MAKE_WARM_r22 1005 #define _MAKE_WARM_r33 1006 -#define _MAP_ADD_r20 1007 -#define _MATCH_CLASS_r31 1008 +#define _MAP_ADD_r00 1007 +#define _MATCH_CLASS_r01 1008 #define _MATCH_KEYS_r01 1009 #define _MATCH_MAPPING_r01 1010 #define _MATCH_MAPPING_r12 1011 @@ -839,7 +839,7 @@ extern "C" { #define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1032 #define _POP_CALL_TWO_r30 1033 #define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1034 -#define _POP_EXCEPT_r10 1035 +#define _POP_EXCEPT_r00 1035 #define _POP_ITER_r20 1036 #define _POP_JUMP_IF_FALSE_r10 1037 #define _POP_JUMP_IF_FALSE_r21 1038 @@ -861,7 +861,7 @@ extern "C" { #define _PUSH_NULL_r23 1054 #define _PUSH_NULL_CONDITIONAL_r00 1055 #define _PY_FRAME_GENERAL_r01 1056 -#define _PY_FRAME_KW_r11 1057 +#define _PY_FRAME_KW_r01 1057 #define _QUICKEN_RESUME_r00 1058 #define _QUICKEN_RESUME_r11 1059 #define _QUICKEN_RESUME_r22 1060 @@ -872,18 +872,18 @@ extern "C" { #define _RESUME_CHECK_r22 1065 #define _RESUME_CHECK_r33 1066 #define _RETURN_GENERATOR_r01 1067 -#define _RETURN_VALUE_r11 1068 +#define _RETURN_VALUE_r01 1068 #define _SAVE_RETURN_OFFSET_r00 1069 #define _SAVE_RETURN_OFFSET_r11 1070 #define _SAVE_RETURN_OFFSET_r22 1071 #define _SAVE_RETURN_OFFSET_r33 1072 -#define _SEND_r11 1073 +#define _SEND_r01 1073 #define _SEND_GEN_FRAME_r00 1074 #define _SEND_GEN_FRAME_r11 1075 #define _SEND_GEN_FRAME_r22 1076 #define _SEND_GEN_FRAME_r33 1077 #define _SETUP_ANNOTATIONS_r00 1078 -#define _SET_ADD_r10 1079 +#define _SET_ADD_r00 1079 #define _SET_FUNCTION_ATTRIBUTE_r10 1080 #define _SET_FUNCTION_ATTRIBUTE_r21 1081 #define _SET_FUNCTION_ATTRIBUTE_r32 1082 @@ -891,7 +891,7 @@ extern "C" { #define _SET_IP_r11 1084 #define _SET_IP_r22 1085 #define _SET_IP_r33 1086 -#define _SET_UPDATE_r10 1087 +#define _SET_UPDATE_r00 1087 #define _SPILL_OR_RELOAD_r01 1088 #define _SPILL_OR_RELOAD_r02 1089 #define _SPILL_OR_RELOAD_r03 1090 @@ -905,11 +905,11 @@ extern "C" { #define _SPILL_OR_RELOAD_r31 1098 #define _SPILL_OR_RELOAD_r32 1099 #define _START_EXECUTOR_r00 1100 -#define _STORE_ATTR_r20 1101 +#define _STORE_ATTR_r00 1101 #define _STORE_ATTR_INSTANCE_VALUE_r20 1102 #define _STORE_ATTR_SLOT_r00 1103 #define _STORE_ATTR_WITH_HINT_r00 1104 -#define _STORE_DEREF_r10 1105 +#define _STORE_DEREF_r00 1105 #define _STORE_FAST_r10 1106 #define _STORE_FAST_0_r10 1107 #define _STORE_FAST_1_r10 1108 @@ -921,18 +921,18 @@ extern "C" { #define _STORE_FAST_7_r10 1114 #define _STORE_FAST_LOAD_FAST_r11 1115 #define _STORE_FAST_STORE_FAST_r20 1116 -#define _STORE_GLOBAL_r10 1117 -#define _STORE_NAME_r10 1118 -#define _STORE_SLICE_r30 1119 -#define _STORE_SUBSCR_r30 1120 -#define _STORE_SUBSCR_DICT_r30 1121 +#define _STORE_GLOBAL_r00 1117 +#define _STORE_NAME_r00 1118 +#define _STORE_SLICE_r00 1119 +#define _STORE_SUBSCR_r00 1120 +#define _STORE_SUBSCR_DICT_r00 1121 #define _STORE_SUBSCR_LIST_INT_r00 1122 #define _SWAP_r11 1123 #define _TIER2_RESUME_CHECK_r00 1124 #define _TIER2_RESUME_CHECK_r11 1125 #define _TIER2_RESUME_CHECK_r22 1126 #define _TIER2_RESUME_CHECK_r33 1127 -#define _TO_BOOL_r11 1128 +#define _TO_BOOL_r01 1128 #define _TO_BOOL_BOOL_r00 1129 #define _TO_BOOL_BOOL_r11 1130 #define _TO_BOOL_BOOL_r22 1131 @@ -944,14 +944,14 @@ extern "C" { #define _TO_BOOL_NONE_r22 1137 #define _TO_BOOL_NONE_r33 1138 #define _TO_BOOL_STR_r11 1139 -#define _UNARY_INVERT_r11 1140 -#define _UNARY_NEGATIVE_r11 1141 +#define _UNARY_INVERT_r01 1140 +#define _UNARY_NEGATIVE_r01 1141 #define _UNARY_NOT_r00 1142 #define _UNARY_NOT_r11 1143 #define _UNARY_NOT_r22 1144 #define _UNARY_NOT_r33 1145 -#define _UNPACK_EX_r10 1146 -#define _UNPACK_SEQUENCE_r10 1147 +#define _UNPACK_EX_r00 1146 +#define _UNPACK_SEQUENCE_r00 1147 #define _UNPACK_SEQUENCE_LIST_r00 1148 #define _UNPACK_SEQUENCE_TUPLE_r00 1149 #define _UNPACK_SEQUENCE_TWO_TUPLE_r11 1150 diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h index 50f6197751015c..1f4766f5f40829 100644 --- a/Include/internal/pycore_uop_metadata.h +++ b/Include/internal/pycore_uop_metadata.h @@ -383,9 +383,9 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_END_FOR] = { 1, 1, -1, { 0, _END_FOR_r10, 0, 0 } }, [_POP_ITER] = { 2, 2, -2, { 0, 0, _POP_ITER_r20, 0 } }, [_END_SEND] = { 2, 2, -1, { 0, 0, _END_SEND_r21, 0 } }, - [_UNARY_NEGATIVE] = { 1, 1, 0, { 0, _UNARY_NEGATIVE_r11, 0, 0 } }, + [_UNARY_NEGATIVE] = { 0, 0, 1, { _UNARY_NEGATIVE_r01, 0, 0, 0 } }, [_UNARY_NOT] = { 0, 3, 0, { _UNARY_NOT_r00, _UNARY_NOT_r11, _UNARY_NOT_r22, _UNARY_NOT_r33 } }, - [_TO_BOOL] = { 1, 1, 0, { 0, _TO_BOOL_r11, 0, 0 } }, + [_TO_BOOL] = { 0, 0, 1, { _TO_BOOL_r01, 0, 0, 0 } }, [_TO_BOOL_BOOL] = { 0, 3, 0, { _TO_BOOL_BOOL_r00, _TO_BOOL_BOOL_r11, _TO_BOOL_BOOL_r22, _TO_BOOL_BOOL_r33 } }, [_TO_BOOL_INT] = { 1, 1, 0, { 0, _TO_BOOL_INT_r11, 0, 0 } }, [_GUARD_NOS_LIST] = { 0, 3, 0, { _GUARD_NOS_LIST_r00, _GUARD_NOS_LIST_r11, _GUARD_NOS_LIST_r22, _GUARD_NOS_LIST_r33 } }, @@ -397,7 +397,7 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_GUARD_TOS_UNICODE] = { 0, 3, 0, { _GUARD_TOS_UNICODE_r00, _GUARD_TOS_UNICODE_r11, _GUARD_TOS_UNICODE_r22, _GUARD_TOS_UNICODE_r33 } }, [_TO_BOOL_STR] = { 1, 1, 0, { 0, _TO_BOOL_STR_r11, 0, 0 } }, [_REPLACE_WITH_TRUE] = { 1, 1, 0, { 0, _REPLACE_WITH_TRUE_r11, 0, 0 } }, - [_UNARY_INVERT] = { 1, 1, 0, { 0, _UNARY_INVERT_r11, 0, 0 } }, + [_UNARY_INVERT] = { 0, 0, 1, { _UNARY_INVERT_r01, 0, 0, 0 } }, [_GUARD_NOS_INT] = { 0, 3, 0, { _GUARD_NOS_INT_r00, _GUARD_NOS_INT_r11, _GUARD_NOS_INT_r22, _GUARD_NOS_INT_r33 } }, [_GUARD_TOS_INT] = { 0, 3, 0, { _GUARD_TOS_INT_r00, _GUARD_TOS_INT_r11, _GUARD_TOS_INT_r22, _GUARD_TOS_INT_r33 } }, [_BINARY_OP_MULTIPLY_INT] = { 1, 3, -1, { 0, _BINARY_OP_MULTIPLY_INT_r10, _BINARY_OP_MULTIPLY_INT_r21, _BINARY_OP_MULTIPLY_INT_r32 } }, @@ -411,47 +411,47 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_BINARY_OP_ADD_UNICODE] = { 1, 3, -1, { 0, _BINARY_OP_ADD_UNICODE_r10, _BINARY_OP_ADD_UNICODE_r21, _BINARY_OP_ADD_UNICODE_r32 } }, [_BINARY_OP_INPLACE_ADD_UNICODE] = { 0, 0, 0, { _BINARY_OP_INPLACE_ADD_UNICODE_r00, 0, 0, 0 } }, [_GUARD_BINARY_OP_EXTEND] = { 0, 0, 0, { _GUARD_BINARY_OP_EXTEND_r00, 0, 0, 0 } }, - [_BINARY_OP_EXTEND] = { 2, 2, -1, { 0, 0, _BINARY_OP_EXTEND_r21, 0 } }, - [_BINARY_SLICE] = { 3, 3, -2, { 0, 0, 0, _BINARY_SLICE_r31 } }, - [_STORE_SLICE] = { 3, 3, -3, { 0, 0, 0, _STORE_SLICE_r30 } }, - [_BINARY_OP_SUBSCR_LIST_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_LIST_INT_r11, 0, 0 } }, - [_BINARY_OP_SUBSCR_LIST_SLICE] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_LIST_SLICE_r21, 0 } }, + [_BINARY_OP_EXTEND] = { 0, 0, 1, { _BINARY_OP_EXTEND_r01, 0, 0, 0 } }, + [_BINARY_SLICE] = { 0, 0, 1, { _BINARY_SLICE_r01, 0, 0, 0 } }, + [_STORE_SLICE] = { 0, 0, 0, { _STORE_SLICE_r00, 0, 0, 0 } }, + [_BINARY_OP_SUBSCR_LIST_INT] = { 0, 0, 1, { _BINARY_OP_SUBSCR_LIST_INT_r01, 0, 0, 0 } }, + [_BINARY_OP_SUBSCR_LIST_SLICE] = { 0, 0, 1, { _BINARY_OP_SUBSCR_LIST_SLICE_r01, 0, 0, 0 } }, [_BINARY_OP_SUBSCR_STR_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_STR_INT_r11, 0, 0 } }, [_GUARD_NOS_TUPLE] = { 0, 3, 0, { _GUARD_NOS_TUPLE_r00, _GUARD_NOS_TUPLE_r11, _GUARD_NOS_TUPLE_r22, _GUARD_NOS_TUPLE_r33 } }, [_GUARD_TOS_TUPLE] = { 0, 3, 0, { _GUARD_TOS_TUPLE_r00, _GUARD_TOS_TUPLE_r11, _GUARD_TOS_TUPLE_r22, _GUARD_TOS_TUPLE_r33 } }, [_BINARY_OP_SUBSCR_TUPLE_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_TUPLE_INT_r11, 0, 0 } }, [_GUARD_NOS_DICT] = { 0, 3, 0, { _GUARD_NOS_DICT_r00, _GUARD_NOS_DICT_r11, _GUARD_NOS_DICT_r22, _GUARD_NOS_DICT_r33 } }, [_GUARD_TOS_DICT] = { 0, 3, 0, { _GUARD_TOS_DICT_r00, _GUARD_TOS_DICT_r11, _GUARD_TOS_DICT_r22, _GUARD_TOS_DICT_r33 } }, - [_BINARY_OP_SUBSCR_DICT] = { 2, 2, -1, { 0, 0, _BINARY_OP_SUBSCR_DICT_r21, 0 } }, + [_BINARY_OP_SUBSCR_DICT] = { 0, 0, 1, { _BINARY_OP_SUBSCR_DICT_r01, 0, 0, 0 } }, [_BINARY_OP_SUBSCR_CHECK_FUNC] = { 2, 2, 0, { 0, 0, _BINARY_OP_SUBSCR_CHECK_FUNC_r22, 0 } }, [_BINARY_OP_SUBSCR_INIT_CALL] = { 3, 3, -2, { 0, 0, 0, _BINARY_OP_SUBSCR_INIT_CALL_r31 } }, [_LIST_APPEND] = { 1, 1, -1, { 0, _LIST_APPEND_r10, 0, 0 } }, - [_SET_ADD] = { 1, 1, -1, { 0, _SET_ADD_r10, 0, 0 } }, - [_STORE_SUBSCR] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_r30 } }, + [_SET_ADD] = { 0, 0, 0, { _SET_ADD_r00, 0, 0, 0 } }, + [_STORE_SUBSCR] = { 0, 0, 0, { _STORE_SUBSCR_r00, 0, 0, 0 } }, [_STORE_SUBSCR_LIST_INT] = { 0, 0, 0, { _STORE_SUBSCR_LIST_INT_r00, 0, 0, 0 } }, - [_STORE_SUBSCR_DICT] = { 3, 3, -3, { 0, 0, 0, _STORE_SUBSCR_DICT_r30 } }, - [_DELETE_SUBSCR] = { 2, 2, -2, { 0, 0, _DELETE_SUBSCR_r20, 0 } }, - [_CALL_INTRINSIC_1] = { 1, 1, 0, { 0, _CALL_INTRINSIC_1_r11, 0, 0 } }, - [_CALL_INTRINSIC_2] = { 2, 2, -1, { 0, 0, _CALL_INTRINSIC_2_r21, 0 } }, - [_RETURN_VALUE] = { 1, 1, 0, { 0, _RETURN_VALUE_r11, 0, 0 } }, - [_GET_AITER] = { 1, 1, 0, { 0, _GET_AITER_r11, 0, 0 } }, + [_STORE_SUBSCR_DICT] = { 0, 0, 0, { _STORE_SUBSCR_DICT_r00, 0, 0, 0 } }, + [_DELETE_SUBSCR] = { 0, 0, 0, { _DELETE_SUBSCR_r00, 0, 0, 0 } }, + [_CALL_INTRINSIC_1] = { 0, 0, 1, { _CALL_INTRINSIC_1_r01, 0, 0, 0 } }, + [_CALL_INTRINSIC_2] = { 0, 0, 1, { _CALL_INTRINSIC_2_r01, 0, 0, 0 } }, + [_RETURN_VALUE] = { 0, 0, 1, { _RETURN_VALUE_r01, 0, 0, 0 } }, + [_GET_AITER] = { 0, 0, 1, { _GET_AITER_r01, 0, 0, 0 } }, [_GET_ANEXT] = { 0, 0, 1, { _GET_ANEXT_r01, 0, 0, 0 } }, - [_GET_AWAITABLE] = { 1, 1, 0, { 0, _GET_AWAITABLE_r11, 0, 0 } }, + [_GET_AWAITABLE] = { 0, 0, 1, { _GET_AWAITABLE_r01, 0, 0, 0 } }, [_SEND_GEN_FRAME] = { 0, 3, 0, { _SEND_GEN_FRAME_r00, _SEND_GEN_FRAME_r11, _SEND_GEN_FRAME_r22, _SEND_GEN_FRAME_r33 } }, [_YIELD_VALUE] = { 0, 3, 0, { _YIELD_VALUE_r00, _YIELD_VALUE_r11, _YIELD_VALUE_r22, _YIELD_VALUE_r33 } }, - [_POP_EXCEPT] = { 1, 1, -1, { 0, _POP_EXCEPT_r10, 0, 0 } }, + [_POP_EXCEPT] = { 0, 0, 0, { _POP_EXCEPT_r00, 0, 0, 0 } }, [_LOAD_COMMON_CONSTANT] = { 0, 2, 1, { _LOAD_COMMON_CONSTANT_r01, _LOAD_COMMON_CONSTANT_r12, _LOAD_COMMON_CONSTANT_r23, 0 } }, [_LOAD_BUILD_CLASS] = { 0, 0, 1, { _LOAD_BUILD_CLASS_r01, 0, 0, 0 } }, - [_STORE_NAME] = { 1, 1, -1, { 0, _STORE_NAME_r10, 0, 0 } }, + [_STORE_NAME] = { 0, 0, 0, { _STORE_NAME_r00, 0, 0, 0 } }, [_DELETE_NAME] = { 0, 0, 0, { _DELETE_NAME_r00, 0, 0, 0 } }, - [_UNPACK_SEQUENCE] = { 1, 1, -1, { 0, _UNPACK_SEQUENCE_r10, 0, 0 } }, + [_UNPACK_SEQUENCE] = { 0, 0, 0, { _UNPACK_SEQUENCE_r00, 0, 0, 0 } }, [_UNPACK_SEQUENCE_TWO_TUPLE] = { 1, 1, 0, { 0, _UNPACK_SEQUENCE_TWO_TUPLE_r11, 0, 0 } }, [_UNPACK_SEQUENCE_TUPLE] = { 0, 0, 0, { _UNPACK_SEQUENCE_TUPLE_r00, 0, 0, 0 } }, [_UNPACK_SEQUENCE_LIST] = { 0, 0, 0, { _UNPACK_SEQUENCE_LIST_r00, 0, 0, 0 } }, - [_UNPACK_EX] = { 1, 1, -1, { 0, _UNPACK_EX_r10, 0, 0 } }, - [_STORE_ATTR] = { 2, 2, -2, { 0, 0, _STORE_ATTR_r20, 0 } }, - [_DELETE_ATTR] = { 1, 1, -1, { 0, _DELETE_ATTR_r10, 0, 0 } }, - [_STORE_GLOBAL] = { 1, 1, -1, { 0, _STORE_GLOBAL_r10, 0, 0 } }, + [_UNPACK_EX] = { 0, 0, 0, { _UNPACK_EX_r00, 0, 0, 0 } }, + [_STORE_ATTR] = { 0, 0, 0, { _STORE_ATTR_r00, 0, 0, 0 } }, + [_DELETE_ATTR] = { 0, 0, 0, { _DELETE_ATTR_r00, 0, 0, 0 } }, + [_STORE_GLOBAL] = { 0, 0, 0, { _STORE_GLOBAL_r00, 0, 0, 0 } }, [_DELETE_GLOBAL] = { 0, 0, 0, { _DELETE_GLOBAL_r00, 0, 0, 0 } }, [_LOAD_LOCALS] = { 0, 0, 1, { _LOAD_LOCALS_r01, 0, 0, 0 } }, [_LOAD_NAME] = { 0, 0, 1, { _LOAD_NAME_r01, 0, 0, 0 } }, @@ -463,26 +463,26 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_DELETE_FAST] = { 0, 0, 0, { _DELETE_FAST_r00, 0, 0, 0 } }, [_MAKE_CELL] = { 0, 0, 0, { _MAKE_CELL_r00, 0, 0, 0 } }, [_DELETE_DEREF] = { 0, 0, 0, { _DELETE_DEREF_r00, 0, 0, 0 } }, - [_LOAD_FROM_DICT_OR_DEREF] = { 1, 1, 0, { 0, _LOAD_FROM_DICT_OR_DEREF_r11, 0, 0 } }, + [_LOAD_FROM_DICT_OR_DEREF] = { 0, 0, 1, { _LOAD_FROM_DICT_OR_DEREF_r01, 0, 0, 0 } }, [_LOAD_DEREF] = { 0, 0, 1, { _LOAD_DEREF_r01, 0, 0, 0 } }, - [_STORE_DEREF] = { 1, 1, -1, { 0, _STORE_DEREF_r10, 0, 0 } }, + [_STORE_DEREF] = { 0, 0, 0, { _STORE_DEREF_r00, 0, 0, 0 } }, [_COPY_FREE_VARS] = { 0, 3, 0, { _COPY_FREE_VARS_r00, _COPY_FREE_VARS_r11, _COPY_FREE_VARS_r22, _COPY_FREE_VARS_r33 } }, [_BUILD_STRING] = { 0, 0, 1, { _BUILD_STRING_r01, 0, 0, 0 } }, [_BUILD_INTERPOLATION] = { 0, 0, 1, { _BUILD_INTERPOLATION_r01, 0, 0, 0 } }, - [_BUILD_TEMPLATE] = { 2, 2, -1, { 0, 0, _BUILD_TEMPLATE_r21, 0 } }, + [_BUILD_TEMPLATE] = { 0, 0, 1, { _BUILD_TEMPLATE_r01, 0, 0, 0 } }, [_BUILD_TUPLE] = { 0, 0, 1, { _BUILD_TUPLE_r01, 0, 0, 0 } }, [_BUILD_LIST] = { 0, 0, 1, { _BUILD_LIST_r01, 0, 0, 0 } }, - [_LIST_EXTEND] = { 1, 1, -1, { 0, _LIST_EXTEND_r10, 0, 0 } }, - [_SET_UPDATE] = { 1, 1, -1, { 0, _SET_UPDATE_r10, 0, 0 } }, + [_LIST_EXTEND] = { 0, 0, 0, { _LIST_EXTEND_r00, 0, 0, 0 } }, + [_SET_UPDATE] = { 0, 0, 0, { _SET_UPDATE_r00, 0, 0, 0 } }, [_BUILD_SET] = { 0, 0, 1, { _BUILD_SET_r01, 0, 0, 0 } }, [_BUILD_MAP] = { 0, 0, 1, { _BUILD_MAP_r01, 0, 0, 0 } }, [_SETUP_ANNOTATIONS] = { 0, 0, 0, { _SETUP_ANNOTATIONS_r00, 0, 0, 0 } }, - [_DICT_UPDATE] = { 1, 1, -1, { 0, _DICT_UPDATE_r10, 0, 0 } }, - [_DICT_MERGE] = { 1, 1, -1, { 0, _DICT_MERGE_r10, 0, 0 } }, - [_MAP_ADD] = { 2, 2, -2, { 0, 0, _MAP_ADD_r20, 0 } }, - [_LOAD_SUPER_ATTR_ATTR] = { 1, 1, 0, { 0, _LOAD_SUPER_ATTR_ATTR_r11, 0, 0 } }, - [_LOAD_SUPER_ATTR_METHOD] = { 2, 2, 0, { 0, 0, _LOAD_SUPER_ATTR_METHOD_r22, 0 } }, - [_LOAD_ATTR] = { 1, 1, -1, { 0, _LOAD_ATTR_r10, 0, 0 } }, + [_DICT_UPDATE] = { 0, 0, 0, { _DICT_UPDATE_r00, 0, 0, 0 } }, + [_DICT_MERGE] = { 0, 0, 0, { _DICT_MERGE_r00, 0, 0, 0 } }, + [_MAP_ADD] = { 0, 0, 0, { _MAP_ADD_r00, 0, 0, 0 } }, + [_LOAD_SUPER_ATTR_ATTR] = { 0, 0, 1, { _LOAD_SUPER_ATTR_ATTR_r01, 0, 0, 0 } }, + [_LOAD_SUPER_ATTR_METHOD] = { 0, 0, 2, { _LOAD_SUPER_ATTR_METHOD_r02, 0, 0, 0 } }, + [_LOAD_ATTR] = { 0, 0, 0, { _LOAD_ATTR_r00, 0, 0, 0 } }, [_GUARD_TYPE_VERSION] = { 0, 3, 0, { _GUARD_TYPE_VERSION_r00, _GUARD_TYPE_VERSION_r11, _GUARD_TYPE_VERSION_r22, _GUARD_TYPE_VERSION_r33 } }, [_GUARD_TYPE_VERSION_AND_LOCK] = { 0, 3, 0, { _GUARD_TYPE_VERSION_AND_LOCK_r00, _GUARD_TYPE_VERSION_AND_LOCK_r11, _GUARD_TYPE_VERSION_AND_LOCK_r22, _GUARD_TYPE_VERSION_AND_LOCK_r33 } }, [_CHECK_MANAGED_OBJECT_HAS_VALUES] = { 0, 3, 0, { _CHECK_MANAGED_OBJECT_HAS_VALUES_r00, _CHECK_MANAGED_OBJECT_HAS_VALUES_r11, _CHECK_MANAGED_OBJECT_HAS_VALUES_r22, _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 } }, @@ -497,31 +497,31 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_STORE_ATTR_INSTANCE_VALUE] = { 2, 2, -2, { 0, 0, _STORE_ATTR_INSTANCE_VALUE_r20, 0 } }, [_STORE_ATTR_WITH_HINT] = { 0, 0, 0, { _STORE_ATTR_WITH_HINT_r00, 0, 0, 0 } }, [_STORE_ATTR_SLOT] = { 0, 0, 0, { _STORE_ATTR_SLOT_r00, 0, 0, 0 } }, - [_COMPARE_OP] = { 2, 2, -1, { 0, 0, _COMPARE_OP_r21, 0 } }, + [_COMPARE_OP] = { 0, 0, 1, { _COMPARE_OP_r01, 0, 0, 0 } }, [_COMPARE_OP_FLOAT] = { 1, 3, -1, { 0, _COMPARE_OP_FLOAT_r10, _COMPARE_OP_FLOAT_r21, _COMPARE_OP_FLOAT_r32 } }, [_COMPARE_OP_INT] = { 1, 1, 0, { 0, _COMPARE_OP_INT_r11, 0, 0 } }, [_COMPARE_OP_STR] = { 1, 3, -1, { 0, _COMPARE_OP_STR_r10, _COMPARE_OP_STR_r21, _COMPARE_OP_STR_r32 } }, [_IS_OP] = { 2, 2, -1, { 0, 0, _IS_OP_r21, 0 } }, - [_CONTAINS_OP] = { 2, 2, -1, { 0, 0, _CONTAINS_OP_r21, 0 } }, + [_CONTAINS_OP] = { 0, 0, 1, { _CONTAINS_OP_r01, 0, 0, 0 } }, [_GUARD_TOS_ANY_SET] = { 0, 3, 0, { _GUARD_TOS_ANY_SET_r00, _GUARD_TOS_ANY_SET_r11, _GUARD_TOS_ANY_SET_r22, _GUARD_TOS_ANY_SET_r33 } }, - [_CONTAINS_OP_SET] = { 2, 2, -1, { 0, 0, _CONTAINS_OP_SET_r21, 0 } }, - [_CONTAINS_OP_DICT] = { 2, 2, -1, { 0, 0, _CONTAINS_OP_DICT_r21, 0 } }, - [_CHECK_EG_MATCH] = { 2, 2, 0, { 0, 0, _CHECK_EG_MATCH_r22, 0 } }, - [_CHECK_EXC_MATCH] = { 1, 1, 0, { 0, _CHECK_EXC_MATCH_r11, 0, 0 } }, - [_IMPORT_NAME] = { 2, 2, -1, { 0, 0, _IMPORT_NAME_r21, 0 } }, + [_CONTAINS_OP_SET] = { 0, 0, 1, { _CONTAINS_OP_SET_r01, 0, 0, 0 } }, + [_CONTAINS_OP_DICT] = { 0, 0, 1, { _CONTAINS_OP_DICT_r01, 0, 0, 0 } }, + [_CHECK_EG_MATCH] = { 0, 0, 2, { _CHECK_EG_MATCH_r02, 0, 0, 0 } }, + [_CHECK_EXC_MATCH] = { 0, 0, 1, { _CHECK_EXC_MATCH_r01, 0, 0, 0 } }, + [_IMPORT_NAME] = { 0, 0, 1, { _IMPORT_NAME_r01, 0, 0, 0 } }, [_IMPORT_FROM] = { 0, 0, 1, { _IMPORT_FROM_r01, 0, 0, 0 } }, [_IS_NONE] = { 1, 1, 0, { 0, _IS_NONE_r11, 0, 0 } }, [_GET_LEN] = { 0, 0, 1, { _GET_LEN_r01, 0, 0, 0 } }, - [_MATCH_CLASS] = { 3, 3, -2, { 0, 0, 0, _MATCH_CLASS_r31 } }, + [_MATCH_CLASS] = { 0, 0, 1, { _MATCH_CLASS_r01, 0, 0, 0 } }, [_MATCH_MAPPING] = { 0, 2, 1, { _MATCH_MAPPING_r01, _MATCH_MAPPING_r12, _MATCH_MAPPING_r23, 0 } }, [_MATCH_SEQUENCE] = { 0, 2, 1, { _MATCH_SEQUENCE_r01, _MATCH_SEQUENCE_r12, _MATCH_SEQUENCE_r23, 0 } }, [_MATCH_KEYS] = { 0, 0, 1, { _MATCH_KEYS_r01, 0, 0, 0 } }, - [_GET_ITER] = { 1, 1, 1, { 0, _GET_ITER_r12, 0, 0 } }, - [_GET_YIELD_FROM_ITER] = { 1, 1, 0, { 0, _GET_YIELD_FROM_ITER_r11, 0, 0 } }, - [_FOR_ITER_TIER_TWO] = { 0, 0, 0, { _FOR_ITER_TIER_TWO_r00, 0, 0, 0 } }, + [_GET_ITER] = { 0, 0, 2, { _GET_ITER_r02, 0, 0, 0 } }, + [_GET_YIELD_FROM_ITER] = { 0, 0, 1, { _GET_YIELD_FROM_ITER_r01, 0, 0, 0 } }, + [_FOR_ITER_TIER_TWO] = { 0, 0, 1, { _FOR_ITER_TIER_TWO_r01, 0, 0, 0 } }, [_ITER_CHECK_LIST] = { 0, 3, 0, { _ITER_CHECK_LIST_r00, _ITER_CHECK_LIST_r11, _ITER_CHECK_LIST_r22, _ITER_CHECK_LIST_r33 } }, [_GUARD_NOT_EXHAUSTED_LIST] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_LIST_r00, _GUARD_NOT_EXHAUSTED_LIST_r11, _GUARD_NOT_EXHAUSTED_LIST_r22, _GUARD_NOT_EXHAUSTED_LIST_r33 } }, - [_ITER_NEXT_LIST_TIER_TWO] = { 0, 0, 0, { _ITER_NEXT_LIST_TIER_TWO_r00, 0, 0, 0 } }, + [_ITER_NEXT_LIST_TIER_TWO] = { 0, 0, 1, { _ITER_NEXT_LIST_TIER_TWO_r01, 0, 0, 0 } }, [_ITER_CHECK_TUPLE] = { 0, 3, 0, { _ITER_CHECK_TUPLE_r00, _ITER_CHECK_TUPLE_r11, _ITER_CHECK_TUPLE_r22, _ITER_CHECK_TUPLE_r33 } }, [_GUARD_NOT_EXHAUSTED_TUPLE] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_TUPLE_r00, _GUARD_NOT_EXHAUSTED_TUPLE_r11, _GUARD_NOT_EXHAUSTED_TUPLE_r22, _GUARD_NOT_EXHAUSTED_TUPLE_r33 } }, [_ITER_NEXT_TUPLE] = { 2, 2, 1, { 0, 0, _ITER_NEXT_TUPLE_r23, 0 } }, @@ -568,43 +568,43 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { [_GUARD_CALLABLE_TYPE_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_TYPE_1_r33 } }, [_CALL_TYPE_1] = { 3, 3, -2, { 0, 0, 0, _CALL_TYPE_1_r31 } }, [_GUARD_CALLABLE_STR_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_STR_1_r33 } }, - [_CALL_STR_1] = { 3, 3, -2, { 0, 0, 0, _CALL_STR_1_r31 } }, + [_CALL_STR_1] = { 0, 0, 1, { _CALL_STR_1_r01, 0, 0, 0 } }, [_GUARD_CALLABLE_TUPLE_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_TUPLE_1_r33 } }, - [_CALL_TUPLE_1] = { 3, 3, -2, { 0, 0, 0, _CALL_TUPLE_1_r31 } }, + [_CALL_TUPLE_1] = { 0, 0, 1, { _CALL_TUPLE_1_r01, 0, 0, 0 } }, [_CHECK_AND_ALLOCATE_OBJECT] = { 0, 0, 0, { _CHECK_AND_ALLOCATE_OBJECT_r00, 0, 0, 0 } }, [_CREATE_INIT_FRAME] = { 0, 0, 1, { _CREATE_INIT_FRAME_r01, 0, 0, 0 } }, - [_EXIT_INIT_CHECK] = { 1, 1, -1, { 0, _EXIT_INIT_CHECK_r10, 0, 0 } }, - [_CALL_BUILTIN_CLASS] = { 0, 0, 0, { _CALL_BUILTIN_CLASS_r00, 0, 0, 0 } }, - [_CALL_BUILTIN_O] = { 0, 0, 0, { _CALL_BUILTIN_O_r00, 0, 0, 0 } }, - [_CALL_BUILTIN_FAST] = { 0, 0, 0, { _CALL_BUILTIN_FAST_r00, 0, 0, 0 } }, - [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = { 0, 0, 0, { _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00, 0, 0, 0 } }, + [_EXIT_INIT_CHECK] = { 0, 0, 0, { _EXIT_INIT_CHECK_r00, 0, 0, 0 } }, + [_CALL_BUILTIN_CLASS] = { 0, 0, 1, { _CALL_BUILTIN_CLASS_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_O] = { 0, 0, 1, { _CALL_BUILTIN_O_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST] = { 0, 0, 1, { _CALL_BUILTIN_FAST_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, [_GUARD_CALLABLE_LEN] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LEN_r33 } }, - [_CALL_LEN] = { 3, 3, -2, { 0, 0, 0, _CALL_LEN_r31 } }, + [_CALL_LEN] = { 0, 0, 1, { _CALL_LEN_r01, 0, 0, 0 } }, [_GUARD_CALLABLE_ISINSTANCE] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_ISINSTANCE_r33 } }, - [_CALL_ISINSTANCE] = { 3, 3, -2, { 0, 0, 0, _CALL_ISINSTANCE_r31 } }, + [_CALL_ISINSTANCE] = { 0, 0, 1, { _CALL_ISINSTANCE_r01, 0, 0, 0 } }, [_GUARD_CALLABLE_LIST_APPEND] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LIST_APPEND_r33 } }, [_CALL_LIST_APPEND] = { 0, 0, 0, { _CALL_LIST_APPEND_r00, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_O] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_O_r00, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_NOARGS] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_NOARGS_r00, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_FAST] = { 0, 0, 0, { _CALL_METHOD_DESCRIPTOR_FAST_r00, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_O] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_O_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_NOARGS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_NOARGS_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_r01, 0, 0, 0 } }, [_MAYBE_EXPAND_METHOD_KW] = { 0, 0, 0, { _MAYBE_EXPAND_METHOD_KW_r00, 0, 0, 0 } }, - [_PY_FRAME_KW] = { 1, 1, 0, { 0, _PY_FRAME_KW_r11, 0, 0 } }, + [_PY_FRAME_KW] = { 0, 0, 1, { _PY_FRAME_KW_r01, 0, 0, 0 } }, [_CHECK_FUNCTION_VERSION_KW] = { 1, 1, 0, { 0, _CHECK_FUNCTION_VERSION_KW_r11, 0, 0 } }, [_CHECK_METHOD_VERSION_KW] = { 1, 1, 0, { 0, _CHECK_METHOD_VERSION_KW_r11, 0, 0 } }, [_EXPAND_METHOD_KW] = { 0, 0, 0, { _EXPAND_METHOD_KW_r00, 0, 0, 0 } }, [_CHECK_IS_NOT_PY_CALLABLE_KW] = { 1, 1, 0, { 0, _CHECK_IS_NOT_PY_CALLABLE_KW_r11, 0, 0 } }, - [_CALL_KW_NON_PY] = { 1, 1, 0, { 0, _CALL_KW_NON_PY_r11, 0, 0 } }, + [_CALL_KW_NON_PY] = { 0, 0, 1, { _CALL_KW_NON_PY_r01, 0, 0, 0 } }, [_MAKE_CALLARGS_A_TUPLE] = { 0, 0, 0, { _MAKE_CALLARGS_A_TUPLE_r00, 0, 0, 0 } }, - [_MAKE_FUNCTION] = { 1, 1, 0, { 0, _MAKE_FUNCTION_r11, 0, 0 } }, + [_MAKE_FUNCTION] = { 0, 0, 1, { _MAKE_FUNCTION_r01, 0, 0, 0 } }, [_SET_FUNCTION_ATTRIBUTE] = { 1, 3, -1, { 0, _SET_FUNCTION_ATTRIBUTE_r10, _SET_FUNCTION_ATTRIBUTE_r21, _SET_FUNCTION_ATTRIBUTE_r32 } }, [_RETURN_GENERATOR] = { 0, 0, 1, { _RETURN_GENERATOR_r01, 0, 0, 0 } }, [_BUILD_SLICE] = { 0, 0, 1, { _BUILD_SLICE_r01, 0, 0, 0 } }, - [_CONVERT_VALUE] = { 1, 1, 0, { 0, _CONVERT_VALUE_r11, 0, 0 } }, - [_FORMAT_SIMPLE] = { 1, 1, 0, { 0, _FORMAT_SIMPLE_r11, 0, 0 } }, - [_FORMAT_WITH_SPEC] = { 2, 2, -1, { 0, 0, _FORMAT_WITH_SPEC_r21, 0 } }, + [_CONVERT_VALUE] = { 0, 0, 1, { _CONVERT_VALUE_r01, 0, 0, 0 } }, + [_FORMAT_SIMPLE] = { 0, 0, 1, { _FORMAT_SIMPLE_r01, 0, 0, 0 } }, + [_FORMAT_WITH_SPEC] = { 0, 0, 1, { _FORMAT_WITH_SPEC_r01, 0, 0, 0 } }, [_COPY] = { 0, 0, 1, { _COPY_r01, 0, 0, 0 } }, - [_BINARY_OP] = { 2, 2, -1, { 0, 0, _BINARY_OP_r21, 0 } }, + [_BINARY_OP] = { 0, 0, 1, { _BINARY_OP_r01, 0, 0, 0 } }, [_SWAP] = { 1, 1, 0, { 0, _SWAP_r11, 0, 0 } }, [_GUARD_IS_TRUE_POP] = { 0, 0, 0, { _GUARD_IS_TRUE_POP_r00, 0, 0, 0 } }, [_GUARD_IS_FALSE_POP] = { 0, 0, 0, { _GUARD_IS_FALSE_POP_r00, 0, 0, 0 } }, @@ -742,12 +742,12 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_END_FOR_r10] = _END_FOR, [_POP_ITER_r20] = _POP_ITER, [_END_SEND_r21] = _END_SEND, - [_UNARY_NEGATIVE_r11] = _UNARY_NEGATIVE, + [_UNARY_NEGATIVE_r01] = _UNARY_NEGATIVE, [_UNARY_NOT_r11] = _UNARY_NOT, [_UNARY_NOT_r00] = _UNARY_NOT, [_UNARY_NOT_r22] = _UNARY_NOT, [_UNARY_NOT_r33] = _UNARY_NOT, - [_TO_BOOL_r11] = _TO_BOOL, + [_TO_BOOL_r01] = _TO_BOOL, [_TO_BOOL_BOOL_r11] = _TO_BOOL_BOOL, [_TO_BOOL_BOOL_r00] = _TO_BOOL_BOOL, [_TO_BOOL_BOOL_r22] = _TO_BOOL_BOOL, @@ -780,7 +780,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_UNICODE_r33] = _GUARD_TOS_UNICODE, [_TO_BOOL_STR_r11] = _TO_BOOL_STR, [_REPLACE_WITH_TRUE_r11] = _REPLACE_WITH_TRUE, - [_UNARY_INVERT_r11] = _UNARY_INVERT, + [_UNARY_INVERT_r01] = _UNARY_INVERT, [_GUARD_NOS_INT_r22] = _GUARD_NOS_INT, [_GUARD_NOS_INT_r00] = _GUARD_NOS_INT, [_GUARD_NOS_INT_r11] = _GUARD_NOS_INT, @@ -820,11 +820,11 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_ADD_UNICODE_r32] = _BINARY_OP_ADD_UNICODE, [_BINARY_OP_INPLACE_ADD_UNICODE_r00] = _BINARY_OP_INPLACE_ADD_UNICODE, [_GUARD_BINARY_OP_EXTEND_r00] = _GUARD_BINARY_OP_EXTEND, - [_BINARY_OP_EXTEND_r21] = _BINARY_OP_EXTEND, - [_BINARY_SLICE_r31] = _BINARY_SLICE, - [_STORE_SLICE_r30] = _STORE_SLICE, - [_BINARY_OP_SUBSCR_LIST_INT_r11] = _BINARY_OP_SUBSCR_LIST_INT, - [_BINARY_OP_SUBSCR_LIST_SLICE_r21] = _BINARY_OP_SUBSCR_LIST_SLICE, + [_BINARY_OP_EXTEND_r01] = _BINARY_OP_EXTEND, + [_BINARY_SLICE_r01] = _BINARY_SLICE, + [_STORE_SLICE_r00] = _STORE_SLICE, + [_BINARY_OP_SUBSCR_LIST_INT_r01] = _BINARY_OP_SUBSCR_LIST_INT, + [_BINARY_OP_SUBSCR_LIST_SLICE_r01] = _BINARY_OP_SUBSCR_LIST_SLICE, [_BINARY_OP_SUBSCR_STR_INT_r11] = _BINARY_OP_SUBSCR_STR_INT, [_GUARD_NOS_TUPLE_r22] = _GUARD_NOS_TUPLE, [_GUARD_NOS_TUPLE_r00] = _GUARD_NOS_TUPLE, @@ -843,21 +843,21 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_DICT_r00] = _GUARD_TOS_DICT, [_GUARD_TOS_DICT_r22] = _GUARD_TOS_DICT, [_GUARD_TOS_DICT_r33] = _GUARD_TOS_DICT, - [_BINARY_OP_SUBSCR_DICT_r21] = _BINARY_OP_SUBSCR_DICT, + [_BINARY_OP_SUBSCR_DICT_r01] = _BINARY_OP_SUBSCR_DICT, [_BINARY_OP_SUBSCR_CHECK_FUNC_r22] = _BINARY_OP_SUBSCR_CHECK_FUNC, [_BINARY_OP_SUBSCR_INIT_CALL_r31] = _BINARY_OP_SUBSCR_INIT_CALL, [_LIST_APPEND_r10] = _LIST_APPEND, - [_SET_ADD_r10] = _SET_ADD, - [_STORE_SUBSCR_r30] = _STORE_SUBSCR, + [_SET_ADD_r00] = _SET_ADD, + [_STORE_SUBSCR_r00] = _STORE_SUBSCR, [_STORE_SUBSCR_LIST_INT_r00] = _STORE_SUBSCR_LIST_INT, - [_STORE_SUBSCR_DICT_r30] = _STORE_SUBSCR_DICT, - [_DELETE_SUBSCR_r20] = _DELETE_SUBSCR, - [_CALL_INTRINSIC_1_r11] = _CALL_INTRINSIC_1, - [_CALL_INTRINSIC_2_r21] = _CALL_INTRINSIC_2, - [_RETURN_VALUE_r11] = _RETURN_VALUE, - [_GET_AITER_r11] = _GET_AITER, + [_STORE_SUBSCR_DICT_r00] = _STORE_SUBSCR_DICT, + [_DELETE_SUBSCR_r00] = _DELETE_SUBSCR, + [_CALL_INTRINSIC_1_r01] = _CALL_INTRINSIC_1, + [_CALL_INTRINSIC_2_r01] = _CALL_INTRINSIC_2, + [_RETURN_VALUE_r01] = _RETURN_VALUE, + [_GET_AITER_r01] = _GET_AITER, [_GET_ANEXT_r01] = _GET_ANEXT, - [_GET_AWAITABLE_r11] = _GET_AWAITABLE, + [_GET_AWAITABLE_r01] = _GET_AWAITABLE, [_SEND_GEN_FRAME_r22] = _SEND_GEN_FRAME, [_SEND_GEN_FRAME_r00] = _SEND_GEN_FRAME, [_SEND_GEN_FRAME_r11] = _SEND_GEN_FRAME, @@ -866,21 +866,21 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_YIELD_VALUE_r00] = _YIELD_VALUE, [_YIELD_VALUE_r22] = _YIELD_VALUE, [_YIELD_VALUE_r33] = _YIELD_VALUE, - [_POP_EXCEPT_r10] = _POP_EXCEPT, + [_POP_EXCEPT_r00] = _POP_EXCEPT, [_LOAD_COMMON_CONSTANT_r01] = _LOAD_COMMON_CONSTANT, [_LOAD_COMMON_CONSTANT_r12] = _LOAD_COMMON_CONSTANT, [_LOAD_COMMON_CONSTANT_r23] = _LOAD_COMMON_CONSTANT, [_LOAD_BUILD_CLASS_r01] = _LOAD_BUILD_CLASS, - [_STORE_NAME_r10] = _STORE_NAME, + [_STORE_NAME_r00] = _STORE_NAME, [_DELETE_NAME_r00] = _DELETE_NAME, - [_UNPACK_SEQUENCE_r10] = _UNPACK_SEQUENCE, + [_UNPACK_SEQUENCE_r00] = _UNPACK_SEQUENCE, [_UNPACK_SEQUENCE_TWO_TUPLE_r11] = _UNPACK_SEQUENCE_TWO_TUPLE, [_UNPACK_SEQUENCE_TUPLE_r00] = _UNPACK_SEQUENCE_TUPLE, [_UNPACK_SEQUENCE_LIST_r00] = _UNPACK_SEQUENCE_LIST, - [_UNPACK_EX_r10] = _UNPACK_EX, - [_STORE_ATTR_r20] = _STORE_ATTR, - [_DELETE_ATTR_r10] = _DELETE_ATTR, - [_STORE_GLOBAL_r10] = _STORE_GLOBAL, + [_UNPACK_EX_r00] = _UNPACK_EX, + [_STORE_ATTR_r00] = _STORE_ATTR, + [_DELETE_ATTR_r00] = _DELETE_ATTR, + [_STORE_GLOBAL_r00] = _STORE_GLOBAL, [_DELETE_GLOBAL_r00] = _DELETE_GLOBAL, [_LOAD_LOCALS_r01] = _LOAD_LOCALS, [_LOAD_NAME_r01] = _LOAD_NAME, @@ -895,29 +895,29 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_DELETE_FAST_r00] = _DELETE_FAST, [_MAKE_CELL_r00] = _MAKE_CELL, [_DELETE_DEREF_r00] = _DELETE_DEREF, - [_LOAD_FROM_DICT_OR_DEREF_r11] = _LOAD_FROM_DICT_OR_DEREF, + [_LOAD_FROM_DICT_OR_DEREF_r01] = _LOAD_FROM_DICT_OR_DEREF, [_LOAD_DEREF_r01] = _LOAD_DEREF, - [_STORE_DEREF_r10] = _STORE_DEREF, + [_STORE_DEREF_r00] = _STORE_DEREF, [_COPY_FREE_VARS_r00] = _COPY_FREE_VARS, [_COPY_FREE_VARS_r11] = _COPY_FREE_VARS, [_COPY_FREE_VARS_r22] = _COPY_FREE_VARS, [_COPY_FREE_VARS_r33] = _COPY_FREE_VARS, [_BUILD_STRING_r01] = _BUILD_STRING, [_BUILD_INTERPOLATION_r01] = _BUILD_INTERPOLATION, - [_BUILD_TEMPLATE_r21] = _BUILD_TEMPLATE, + [_BUILD_TEMPLATE_r01] = _BUILD_TEMPLATE, [_BUILD_TUPLE_r01] = _BUILD_TUPLE, [_BUILD_LIST_r01] = _BUILD_LIST, - [_LIST_EXTEND_r10] = _LIST_EXTEND, - [_SET_UPDATE_r10] = _SET_UPDATE, + [_LIST_EXTEND_r00] = _LIST_EXTEND, + [_SET_UPDATE_r00] = _SET_UPDATE, [_BUILD_SET_r01] = _BUILD_SET, [_BUILD_MAP_r01] = _BUILD_MAP, [_SETUP_ANNOTATIONS_r00] = _SETUP_ANNOTATIONS, - [_DICT_UPDATE_r10] = _DICT_UPDATE, - [_DICT_MERGE_r10] = _DICT_MERGE, - [_MAP_ADD_r20] = _MAP_ADD, - [_LOAD_SUPER_ATTR_ATTR_r11] = _LOAD_SUPER_ATTR_ATTR, - [_LOAD_SUPER_ATTR_METHOD_r22] = _LOAD_SUPER_ATTR_METHOD, - [_LOAD_ATTR_r10] = _LOAD_ATTR, + [_DICT_UPDATE_r00] = _DICT_UPDATE, + [_DICT_MERGE_r00] = _DICT_MERGE, + [_MAP_ADD_r00] = _MAP_ADD, + [_LOAD_SUPER_ATTR_ATTR_r01] = _LOAD_SUPER_ATTR_ATTR, + [_LOAD_SUPER_ATTR_METHOD_r02] = _LOAD_SUPER_ATTR_METHOD, + [_LOAD_ATTR_r00] = _LOAD_ATTR, [_GUARD_TYPE_VERSION_r11] = _GUARD_TYPE_VERSION, [_GUARD_TYPE_VERSION_r00] = _GUARD_TYPE_VERSION, [_GUARD_TYPE_VERSION_r22] = _GUARD_TYPE_VERSION, @@ -950,7 +950,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_STORE_ATTR_INSTANCE_VALUE_r20] = _STORE_ATTR_INSTANCE_VALUE, [_STORE_ATTR_WITH_HINT_r00] = _STORE_ATTR_WITH_HINT, [_STORE_ATTR_SLOT_r00] = _STORE_ATTR_SLOT, - [_COMPARE_OP_r21] = _COMPARE_OP, + [_COMPARE_OP_r01] = _COMPARE_OP, [_COMPARE_OP_FLOAT_r21] = _COMPARE_OP_FLOAT, [_COMPARE_OP_FLOAT_r10] = _COMPARE_OP_FLOAT, [_COMPARE_OP_FLOAT_r32] = _COMPARE_OP_FLOAT, @@ -959,20 +959,20 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_COMPARE_OP_STR_r10] = _COMPARE_OP_STR, [_COMPARE_OP_STR_r32] = _COMPARE_OP_STR, [_IS_OP_r21] = _IS_OP, - [_CONTAINS_OP_r21] = _CONTAINS_OP, + [_CONTAINS_OP_r01] = _CONTAINS_OP, [_GUARD_TOS_ANY_SET_r11] = _GUARD_TOS_ANY_SET, [_GUARD_TOS_ANY_SET_r00] = _GUARD_TOS_ANY_SET, [_GUARD_TOS_ANY_SET_r22] = _GUARD_TOS_ANY_SET, [_GUARD_TOS_ANY_SET_r33] = _GUARD_TOS_ANY_SET, - [_CONTAINS_OP_SET_r21] = _CONTAINS_OP_SET, - [_CONTAINS_OP_DICT_r21] = _CONTAINS_OP_DICT, - [_CHECK_EG_MATCH_r22] = _CHECK_EG_MATCH, - [_CHECK_EXC_MATCH_r11] = _CHECK_EXC_MATCH, - [_IMPORT_NAME_r21] = _IMPORT_NAME, + [_CONTAINS_OP_SET_r01] = _CONTAINS_OP_SET, + [_CONTAINS_OP_DICT_r01] = _CONTAINS_OP_DICT, + [_CHECK_EG_MATCH_r02] = _CHECK_EG_MATCH, + [_CHECK_EXC_MATCH_r01] = _CHECK_EXC_MATCH, + [_IMPORT_NAME_r01] = _IMPORT_NAME, [_IMPORT_FROM_r01] = _IMPORT_FROM, [_IS_NONE_r11] = _IS_NONE, [_GET_LEN_r01] = _GET_LEN, - [_MATCH_CLASS_r31] = _MATCH_CLASS, + [_MATCH_CLASS_r01] = _MATCH_CLASS, [_MATCH_MAPPING_r12] = _MATCH_MAPPING, [_MATCH_MAPPING_r01] = _MATCH_MAPPING, [_MATCH_MAPPING_r23] = _MATCH_MAPPING, @@ -980,9 +980,9 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_MATCH_SEQUENCE_r01] = _MATCH_SEQUENCE, [_MATCH_SEQUENCE_r23] = _MATCH_SEQUENCE, [_MATCH_KEYS_r01] = _MATCH_KEYS, - [_GET_ITER_r12] = _GET_ITER, - [_GET_YIELD_FROM_ITER_r11] = _GET_YIELD_FROM_ITER, - [_FOR_ITER_TIER_TWO_r00] = _FOR_ITER_TIER_TWO, + [_GET_ITER_r02] = _GET_ITER, + [_GET_YIELD_FROM_ITER_r01] = _GET_YIELD_FROM_ITER, + [_FOR_ITER_TIER_TWO_r01] = _FOR_ITER_TIER_TWO, [_ITER_CHECK_LIST_r22] = _ITER_CHECK_LIST, [_ITER_CHECK_LIST_r00] = _ITER_CHECK_LIST, [_ITER_CHECK_LIST_r11] = _ITER_CHECK_LIST, @@ -991,7 +991,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_NOT_EXHAUSTED_LIST_r00] = _GUARD_NOT_EXHAUSTED_LIST, [_GUARD_NOT_EXHAUSTED_LIST_r11] = _GUARD_NOT_EXHAUSTED_LIST, [_GUARD_NOT_EXHAUSTED_LIST_r33] = _GUARD_NOT_EXHAUSTED_LIST, - [_ITER_NEXT_LIST_TIER_TWO_r00] = _ITER_NEXT_LIST_TIER_TWO, + [_ITER_NEXT_LIST_TIER_TWO_r01] = _ITER_NEXT_LIST_TIER_TWO, [_ITER_CHECK_TUPLE_r22] = _ITER_CHECK_TUPLE, [_ITER_CHECK_TUPLE_r00] = _ITER_CHECK_TUPLE, [_ITER_CHECK_TUPLE_r11] = _ITER_CHECK_TUPLE, @@ -1082,45 +1082,45 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_CALLABLE_TYPE_1_r33] = _GUARD_CALLABLE_TYPE_1, [_CALL_TYPE_1_r31] = _CALL_TYPE_1, [_GUARD_CALLABLE_STR_1_r33] = _GUARD_CALLABLE_STR_1, - [_CALL_STR_1_r31] = _CALL_STR_1, + [_CALL_STR_1_r01] = _CALL_STR_1, [_GUARD_CALLABLE_TUPLE_1_r33] = _GUARD_CALLABLE_TUPLE_1, - [_CALL_TUPLE_1_r31] = _CALL_TUPLE_1, + [_CALL_TUPLE_1_r01] = _CALL_TUPLE_1, [_CHECK_AND_ALLOCATE_OBJECT_r00] = _CHECK_AND_ALLOCATE_OBJECT, [_CREATE_INIT_FRAME_r01] = _CREATE_INIT_FRAME, - [_EXIT_INIT_CHECK_r10] = _EXIT_INIT_CHECK, - [_CALL_BUILTIN_CLASS_r00] = _CALL_BUILTIN_CLASS, - [_CALL_BUILTIN_O_r00] = _CALL_BUILTIN_O, - [_CALL_BUILTIN_FAST_r00] = _CALL_BUILTIN_FAST, - [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r00] = _CALL_BUILTIN_FAST_WITH_KEYWORDS, + [_EXIT_INIT_CHECK_r00] = _EXIT_INIT_CHECK, + [_CALL_BUILTIN_CLASS_r01] = _CALL_BUILTIN_CLASS, + [_CALL_BUILTIN_O_r01] = _CALL_BUILTIN_O, + [_CALL_BUILTIN_FAST_r01] = _CALL_BUILTIN_FAST, + [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01] = _CALL_BUILTIN_FAST_WITH_KEYWORDS, [_GUARD_CALLABLE_LEN_r33] = _GUARD_CALLABLE_LEN, - [_CALL_LEN_r31] = _CALL_LEN, + [_CALL_LEN_r01] = _CALL_LEN, [_GUARD_CALLABLE_ISINSTANCE_r33] = _GUARD_CALLABLE_ISINSTANCE, - [_CALL_ISINSTANCE_r31] = _CALL_ISINSTANCE, + [_CALL_ISINSTANCE_r01] = _CALL_ISINSTANCE, [_GUARD_CALLABLE_LIST_APPEND_r33] = _GUARD_CALLABLE_LIST_APPEND, [_CALL_LIST_APPEND_r00] = _CALL_LIST_APPEND, - [_CALL_METHOD_DESCRIPTOR_O_r00] = _CALL_METHOD_DESCRIPTOR_O, - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00] = _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, - [_CALL_METHOD_DESCRIPTOR_NOARGS_r00] = _CALL_METHOD_DESCRIPTOR_NOARGS, - [_CALL_METHOD_DESCRIPTOR_FAST_r00] = _CALL_METHOD_DESCRIPTOR_FAST, + [_CALL_METHOD_DESCRIPTOR_O_r01] = _CALL_METHOD_DESCRIPTOR_O, + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01] = _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, + [_CALL_METHOD_DESCRIPTOR_NOARGS_r01] = _CALL_METHOD_DESCRIPTOR_NOARGS, + [_CALL_METHOD_DESCRIPTOR_FAST_r01] = _CALL_METHOD_DESCRIPTOR_FAST, [_MAYBE_EXPAND_METHOD_KW_r00] = _MAYBE_EXPAND_METHOD_KW, - [_PY_FRAME_KW_r11] = _PY_FRAME_KW, + [_PY_FRAME_KW_r01] = _PY_FRAME_KW, [_CHECK_FUNCTION_VERSION_KW_r11] = _CHECK_FUNCTION_VERSION_KW, [_CHECK_METHOD_VERSION_KW_r11] = _CHECK_METHOD_VERSION_KW, [_EXPAND_METHOD_KW_r00] = _EXPAND_METHOD_KW, [_CHECK_IS_NOT_PY_CALLABLE_KW_r11] = _CHECK_IS_NOT_PY_CALLABLE_KW, - [_CALL_KW_NON_PY_r11] = _CALL_KW_NON_PY, + [_CALL_KW_NON_PY_r01] = _CALL_KW_NON_PY, [_MAKE_CALLARGS_A_TUPLE_r00] = _MAKE_CALLARGS_A_TUPLE, - [_MAKE_FUNCTION_r11] = _MAKE_FUNCTION, + [_MAKE_FUNCTION_r01] = _MAKE_FUNCTION, [_SET_FUNCTION_ATTRIBUTE_r21] = _SET_FUNCTION_ATTRIBUTE, [_SET_FUNCTION_ATTRIBUTE_r10] = _SET_FUNCTION_ATTRIBUTE, [_SET_FUNCTION_ATTRIBUTE_r32] = _SET_FUNCTION_ATTRIBUTE, [_RETURN_GENERATOR_r01] = _RETURN_GENERATOR, [_BUILD_SLICE_r01] = _BUILD_SLICE, - [_CONVERT_VALUE_r11] = _CONVERT_VALUE, - [_FORMAT_SIMPLE_r11] = _FORMAT_SIMPLE, - [_FORMAT_WITH_SPEC_r21] = _FORMAT_WITH_SPEC, + [_CONVERT_VALUE_r01] = _CONVERT_VALUE, + [_FORMAT_SIMPLE_r01] = _FORMAT_SIMPLE, + [_FORMAT_WITH_SPEC_r01] = _FORMAT_WITH_SPEC, [_COPY_r01] = _COPY, - [_BINARY_OP_r21] = _BINARY_OP, + [_BINARY_OP_r01] = _BINARY_OP, [_SWAP_r11] = _SWAP, [_GUARD_IS_TRUE_POP_r00] = _GUARD_IS_TRUE_POP, [_GUARD_IS_FALSE_POP_r00] = _GUARD_IS_FALSE_POP, @@ -1218,7 +1218,7 @@ const uint16_t _PyUop_SpillsAndReloads[4][4] = { const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP] = "_BINARY_OP", - [_BINARY_OP_r21] = "_BINARY_OP_r21", + [_BINARY_OP_r01] = "_BINARY_OP_r01", [_BINARY_OP_ADD_FLOAT] = "_BINARY_OP_ADD_FLOAT", [_BINARY_OP_ADD_FLOAT_r21] = "_BINARY_OP_ADD_FLOAT_r21", [_BINARY_OP_ADD_FLOAT_r10] = "_BINARY_OP_ADD_FLOAT_r10", @@ -1232,7 +1232,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_ADD_UNICODE_r10] = "_BINARY_OP_ADD_UNICODE_r10", [_BINARY_OP_ADD_UNICODE_r32] = "_BINARY_OP_ADD_UNICODE_r32", [_BINARY_OP_EXTEND] = "_BINARY_OP_EXTEND", - [_BINARY_OP_EXTEND_r21] = "_BINARY_OP_EXTEND_r21", + [_BINARY_OP_EXTEND_r01] = "_BINARY_OP_EXTEND_r01", [_BINARY_OP_INPLACE_ADD_UNICODE] = "_BINARY_OP_INPLACE_ADD_UNICODE", [_BINARY_OP_INPLACE_ADD_UNICODE_r00] = "_BINARY_OP_INPLACE_ADD_UNICODE_r00", [_BINARY_OP_MULTIPLY_FLOAT] = "_BINARY_OP_MULTIPLY_FLOAT", @@ -1246,13 +1246,13 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_SUBSCR_CHECK_FUNC] = "_BINARY_OP_SUBSCR_CHECK_FUNC", [_BINARY_OP_SUBSCR_CHECK_FUNC_r22] = "_BINARY_OP_SUBSCR_CHECK_FUNC_r22", [_BINARY_OP_SUBSCR_DICT] = "_BINARY_OP_SUBSCR_DICT", - [_BINARY_OP_SUBSCR_DICT_r21] = "_BINARY_OP_SUBSCR_DICT_r21", + [_BINARY_OP_SUBSCR_DICT_r01] = "_BINARY_OP_SUBSCR_DICT_r01", [_BINARY_OP_SUBSCR_INIT_CALL] = "_BINARY_OP_SUBSCR_INIT_CALL", [_BINARY_OP_SUBSCR_INIT_CALL_r31] = "_BINARY_OP_SUBSCR_INIT_CALL_r31", [_BINARY_OP_SUBSCR_LIST_INT] = "_BINARY_OP_SUBSCR_LIST_INT", - [_BINARY_OP_SUBSCR_LIST_INT_r11] = "_BINARY_OP_SUBSCR_LIST_INT_r11", + [_BINARY_OP_SUBSCR_LIST_INT_r01] = "_BINARY_OP_SUBSCR_LIST_INT_r01", [_BINARY_OP_SUBSCR_LIST_SLICE] = "_BINARY_OP_SUBSCR_LIST_SLICE", - [_BINARY_OP_SUBSCR_LIST_SLICE_r21] = "_BINARY_OP_SUBSCR_LIST_SLICE_r21", + [_BINARY_OP_SUBSCR_LIST_SLICE_r01] = "_BINARY_OP_SUBSCR_LIST_SLICE_r01", [_BINARY_OP_SUBSCR_STR_INT] = "_BINARY_OP_SUBSCR_STR_INT", [_BINARY_OP_SUBSCR_STR_INT_r11] = "_BINARY_OP_SUBSCR_STR_INT_r11", [_BINARY_OP_SUBSCR_TUPLE_INT] = "_BINARY_OP_SUBSCR_TUPLE_INT", @@ -1266,7 +1266,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_SUBTRACT_INT_r10] = "_BINARY_OP_SUBTRACT_INT_r10", [_BINARY_OP_SUBTRACT_INT_r32] = "_BINARY_OP_SUBTRACT_INT_r32", [_BINARY_SLICE] = "_BINARY_SLICE", - [_BINARY_SLICE_r31] = "_BINARY_SLICE_r31", + [_BINARY_SLICE_r01] = "_BINARY_SLICE_r01", [_BUILD_INTERPOLATION] = "_BUILD_INTERPOLATION", [_BUILD_INTERPOLATION_r01] = "_BUILD_INTERPOLATION_r01", [_BUILD_LIST] = "_BUILD_LIST", @@ -1280,43 +1280,43 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BUILD_STRING] = "_BUILD_STRING", [_BUILD_STRING_r01] = "_BUILD_STRING_r01", [_BUILD_TEMPLATE] = "_BUILD_TEMPLATE", - [_BUILD_TEMPLATE_r21] = "_BUILD_TEMPLATE_r21", + [_BUILD_TEMPLATE_r01] = "_BUILD_TEMPLATE_r01", [_BUILD_TUPLE] = "_BUILD_TUPLE", [_BUILD_TUPLE_r01] = "_BUILD_TUPLE_r01", [_CALL_BUILTIN_CLASS] = "_CALL_BUILTIN_CLASS", - [_CALL_BUILTIN_CLASS_r00] = "_CALL_BUILTIN_CLASS_r00", + [_CALL_BUILTIN_CLASS_r01] = "_CALL_BUILTIN_CLASS_r01", [_CALL_BUILTIN_FAST] = "_CALL_BUILTIN_FAST", - [_CALL_BUILTIN_FAST_r00] = "_CALL_BUILTIN_FAST_r00", + [_CALL_BUILTIN_FAST_r01] = "_CALL_BUILTIN_FAST_r01", [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS", - [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r00] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS_r00", + [_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS_r01", [_CALL_BUILTIN_O] = "_CALL_BUILTIN_O", - [_CALL_BUILTIN_O_r00] = "_CALL_BUILTIN_O_r00", + [_CALL_BUILTIN_O_r01] = "_CALL_BUILTIN_O_r01", [_CALL_INTRINSIC_1] = "_CALL_INTRINSIC_1", - [_CALL_INTRINSIC_1_r11] = "_CALL_INTRINSIC_1_r11", + [_CALL_INTRINSIC_1_r01] = "_CALL_INTRINSIC_1_r01", [_CALL_INTRINSIC_2] = "_CALL_INTRINSIC_2", - [_CALL_INTRINSIC_2_r21] = "_CALL_INTRINSIC_2_r21", + [_CALL_INTRINSIC_2_r01] = "_CALL_INTRINSIC_2_r01", [_CALL_ISINSTANCE] = "_CALL_ISINSTANCE", - [_CALL_ISINSTANCE_r31] = "_CALL_ISINSTANCE_r31", + [_CALL_ISINSTANCE_r01] = "_CALL_ISINSTANCE_r01", [_CALL_KW_NON_PY] = "_CALL_KW_NON_PY", - [_CALL_KW_NON_PY_r11] = "_CALL_KW_NON_PY_r11", + [_CALL_KW_NON_PY_r01] = "_CALL_KW_NON_PY_r01", [_CALL_LEN] = "_CALL_LEN", - [_CALL_LEN_r31] = "_CALL_LEN_r31", + [_CALL_LEN_r01] = "_CALL_LEN_r01", [_CALL_LIST_APPEND] = "_CALL_LIST_APPEND", [_CALL_LIST_APPEND_r00] = "_CALL_LIST_APPEND_r00", [_CALL_METHOD_DESCRIPTOR_FAST] = "_CALL_METHOD_DESCRIPTOR_FAST", - [_CALL_METHOD_DESCRIPTOR_FAST_r00] = "_CALL_METHOD_DESCRIPTOR_FAST_r00", + [_CALL_METHOD_DESCRIPTOR_FAST_r01] = "_CALL_METHOD_DESCRIPTOR_FAST_r01", [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00", + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01", [_CALL_METHOD_DESCRIPTOR_NOARGS] = "_CALL_METHOD_DESCRIPTOR_NOARGS", - [_CALL_METHOD_DESCRIPTOR_NOARGS_r00] = "_CALL_METHOD_DESCRIPTOR_NOARGS_r00", + [_CALL_METHOD_DESCRIPTOR_NOARGS_r01] = "_CALL_METHOD_DESCRIPTOR_NOARGS_r01", [_CALL_METHOD_DESCRIPTOR_O] = "_CALL_METHOD_DESCRIPTOR_O", - [_CALL_METHOD_DESCRIPTOR_O_r00] = "_CALL_METHOD_DESCRIPTOR_O_r00", + [_CALL_METHOD_DESCRIPTOR_O_r01] = "_CALL_METHOD_DESCRIPTOR_O_r01", [_CALL_NON_PY_GENERAL] = "_CALL_NON_PY_GENERAL", [_CALL_NON_PY_GENERAL_r01] = "_CALL_NON_PY_GENERAL_r01", [_CALL_STR_1] = "_CALL_STR_1", - [_CALL_STR_1_r31] = "_CALL_STR_1_r31", + [_CALL_STR_1_r01] = "_CALL_STR_1_r01", [_CALL_TUPLE_1] = "_CALL_TUPLE_1", - [_CALL_TUPLE_1_r31] = "_CALL_TUPLE_1_r31", + [_CALL_TUPLE_1_r01] = "_CALL_TUPLE_1_r01", [_CALL_TYPE_1] = "_CALL_TYPE_1", [_CALL_TYPE_1_r31] = "_CALL_TYPE_1_r31", [_CHECK_AND_ALLOCATE_OBJECT] = "_CHECK_AND_ALLOCATE_OBJECT", @@ -1334,9 +1334,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = "_CHECK_CALL_BOUND_METHOD_EXACT_ARGS", [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00] = "_CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00", [_CHECK_EG_MATCH] = "_CHECK_EG_MATCH", - [_CHECK_EG_MATCH_r22] = "_CHECK_EG_MATCH_r22", + [_CHECK_EG_MATCH_r02] = "_CHECK_EG_MATCH_r02", [_CHECK_EXC_MATCH] = "_CHECK_EXC_MATCH", - [_CHECK_EXC_MATCH_r11] = "_CHECK_EXC_MATCH_r11", + [_CHECK_EXC_MATCH_r01] = "_CHECK_EXC_MATCH_r01", [_CHECK_FUNCTION] = "_CHECK_FUNCTION", [_CHECK_FUNCTION_r00] = "_CHECK_FUNCTION_r00", [_CHECK_FUNCTION_r11] = "_CHECK_FUNCTION_r11", @@ -1393,7 +1393,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_CHECK_VALIDITY_r22] = "_CHECK_VALIDITY_r22", [_CHECK_VALIDITY_r33] = "_CHECK_VALIDITY_r33", [_COMPARE_OP] = "_COMPARE_OP", - [_COMPARE_OP_r21] = "_COMPARE_OP_r21", + [_COMPARE_OP_r01] = "_COMPARE_OP_r01", [_COMPARE_OP_FLOAT] = "_COMPARE_OP_FLOAT", [_COMPARE_OP_FLOAT_r21] = "_COMPARE_OP_FLOAT_r21", [_COMPARE_OP_FLOAT_r10] = "_COMPARE_OP_FLOAT_r10", @@ -1405,13 +1405,13 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_COMPARE_OP_STR_r10] = "_COMPARE_OP_STR_r10", [_COMPARE_OP_STR_r32] = "_COMPARE_OP_STR_r32", [_CONTAINS_OP] = "_CONTAINS_OP", - [_CONTAINS_OP_r21] = "_CONTAINS_OP_r21", + [_CONTAINS_OP_r01] = "_CONTAINS_OP_r01", [_CONTAINS_OP_DICT] = "_CONTAINS_OP_DICT", - [_CONTAINS_OP_DICT_r21] = "_CONTAINS_OP_DICT_r21", + [_CONTAINS_OP_DICT_r01] = "_CONTAINS_OP_DICT_r01", [_CONTAINS_OP_SET] = "_CONTAINS_OP_SET", - [_CONTAINS_OP_SET_r21] = "_CONTAINS_OP_SET_r21", + [_CONTAINS_OP_SET_r01] = "_CONTAINS_OP_SET_r01", [_CONVERT_VALUE] = "_CONVERT_VALUE", - [_CONVERT_VALUE_r11] = "_CONVERT_VALUE_r11", + [_CONVERT_VALUE_r01] = "_CONVERT_VALUE_r01", [_COPY] = "_COPY", [_COPY_r01] = "_COPY_r01", [_COPY_FREE_VARS] = "_COPY_FREE_VARS", @@ -1422,7 +1422,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_CREATE_INIT_FRAME] = "_CREATE_INIT_FRAME", [_CREATE_INIT_FRAME_r01] = "_CREATE_INIT_FRAME_r01", [_DELETE_ATTR] = "_DELETE_ATTR", - [_DELETE_ATTR_r10] = "_DELETE_ATTR_r10", + [_DELETE_ATTR_r00] = "_DELETE_ATTR_r00", [_DELETE_DEREF] = "_DELETE_DEREF", [_DELETE_DEREF_r00] = "_DELETE_DEREF_r00", [_DELETE_FAST] = "_DELETE_FAST", @@ -1432,13 +1432,13 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_DELETE_NAME] = "_DELETE_NAME", [_DELETE_NAME_r00] = "_DELETE_NAME_r00", [_DELETE_SUBSCR] = "_DELETE_SUBSCR", - [_DELETE_SUBSCR_r20] = "_DELETE_SUBSCR_r20", + [_DELETE_SUBSCR_r00] = "_DELETE_SUBSCR_r00", [_DEOPT] = "_DEOPT", [_DEOPT_r00] = "_DEOPT_r00", [_DICT_MERGE] = "_DICT_MERGE", - [_DICT_MERGE_r10] = "_DICT_MERGE_r10", + [_DICT_MERGE_r00] = "_DICT_MERGE_r00", [_DICT_UPDATE] = "_DICT_UPDATE", - [_DICT_UPDATE_r10] = "_DICT_UPDATE_r10", + [_DICT_UPDATE_r00] = "_DICT_UPDATE_r00", [_END_FOR] = "_END_FOR", [_END_FOR_r10] = "_END_FOR_r10", [_END_SEND] = "_END_SEND", @@ -1446,7 +1446,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_ERROR_POP_N] = "_ERROR_POP_N", [_ERROR_POP_N_r00] = "_ERROR_POP_N_r00", [_EXIT_INIT_CHECK] = "_EXIT_INIT_CHECK", - [_EXIT_INIT_CHECK_r10] = "_EXIT_INIT_CHECK_r10", + [_EXIT_INIT_CHECK_r00] = "_EXIT_INIT_CHECK_r00", [_EXIT_TRACE] = "_EXIT_TRACE", [_EXIT_TRACE_r00] = "_EXIT_TRACE_r00", [_EXIT_TRACE_r10] = "_EXIT_TRACE_r10", @@ -1462,25 +1462,25 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_FATAL_ERROR_r22] = "_FATAL_ERROR_r22", [_FATAL_ERROR_r33] = "_FATAL_ERROR_r33", [_FORMAT_SIMPLE] = "_FORMAT_SIMPLE", - [_FORMAT_SIMPLE_r11] = "_FORMAT_SIMPLE_r11", + [_FORMAT_SIMPLE_r01] = "_FORMAT_SIMPLE_r01", [_FORMAT_WITH_SPEC] = "_FORMAT_WITH_SPEC", - [_FORMAT_WITH_SPEC_r21] = "_FORMAT_WITH_SPEC_r21", + [_FORMAT_WITH_SPEC_r01] = "_FORMAT_WITH_SPEC_r01", [_FOR_ITER_GEN_FRAME] = "_FOR_ITER_GEN_FRAME", [_FOR_ITER_GEN_FRAME_r22] = "_FOR_ITER_GEN_FRAME_r22", [_FOR_ITER_TIER_TWO] = "_FOR_ITER_TIER_TWO", - [_FOR_ITER_TIER_TWO_r00] = "_FOR_ITER_TIER_TWO_r00", + [_FOR_ITER_TIER_TWO_r01] = "_FOR_ITER_TIER_TWO_r01", [_GET_AITER] = "_GET_AITER", - [_GET_AITER_r11] = "_GET_AITER_r11", + [_GET_AITER_r01] = "_GET_AITER_r01", [_GET_ANEXT] = "_GET_ANEXT", [_GET_ANEXT_r01] = "_GET_ANEXT_r01", [_GET_AWAITABLE] = "_GET_AWAITABLE", - [_GET_AWAITABLE_r11] = "_GET_AWAITABLE_r11", + [_GET_AWAITABLE_r01] = "_GET_AWAITABLE_r01", [_GET_ITER] = "_GET_ITER", - [_GET_ITER_r12] = "_GET_ITER_r12", + [_GET_ITER_r02] = "_GET_ITER_r02", [_GET_LEN] = "_GET_LEN", [_GET_LEN_r01] = "_GET_LEN_r01", [_GET_YIELD_FROM_ITER] = "_GET_YIELD_FROM_ITER", - [_GET_YIELD_FROM_ITER_r11] = "_GET_YIELD_FROM_ITER_r11", + [_GET_YIELD_FROM_ITER_r01] = "_GET_YIELD_FROM_ITER_r01", [_GUARD_BINARY_OP_EXTEND] = "_GUARD_BINARY_OP_EXTEND", [_GUARD_BINARY_OP_EXTEND_r00] = "_GUARD_BINARY_OP_EXTEND_r00", [_GUARD_CALLABLE_ISINSTANCE] = "_GUARD_CALLABLE_ISINSTANCE", @@ -1633,7 +1633,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_IMPORT_FROM] = "_IMPORT_FROM", [_IMPORT_FROM_r01] = "_IMPORT_FROM_r01", [_IMPORT_NAME] = "_IMPORT_NAME", - [_IMPORT_NAME_r21] = "_IMPORT_NAME_r21", + [_IMPORT_NAME_r01] = "_IMPORT_NAME_r01", [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = "_INIT_CALL_BOUND_METHOD_EXACT_ARGS", [_INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00] = "_INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00", [_INIT_CALL_PY_EXACT_ARGS] = "_INIT_CALL_PY_EXACT_ARGS", @@ -1670,7 +1670,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_ITER_CHECK_TUPLE_r11] = "_ITER_CHECK_TUPLE_r11", [_ITER_CHECK_TUPLE_r33] = "_ITER_CHECK_TUPLE_r33", [_ITER_NEXT_LIST_TIER_TWO] = "_ITER_NEXT_LIST_TIER_TWO", - [_ITER_NEXT_LIST_TIER_TWO_r00] = "_ITER_NEXT_LIST_TIER_TWO_r00", + [_ITER_NEXT_LIST_TIER_TWO_r01] = "_ITER_NEXT_LIST_TIER_TWO_r01", [_ITER_NEXT_RANGE] = "_ITER_NEXT_RANGE", [_ITER_NEXT_RANGE_r23] = "_ITER_NEXT_RANGE_r23", [_ITER_NEXT_TUPLE] = "_ITER_NEXT_TUPLE", @@ -1680,9 +1680,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_LIST_APPEND] = "_LIST_APPEND", [_LIST_APPEND_r10] = "_LIST_APPEND_r10", [_LIST_EXTEND] = "_LIST_EXTEND", - [_LIST_EXTEND_r10] = "_LIST_EXTEND_r10", + [_LIST_EXTEND_r00] = "_LIST_EXTEND_r00", [_LOAD_ATTR] = "_LOAD_ATTR", - [_LOAD_ATTR_r10] = "_LOAD_ATTR_r10", + [_LOAD_ATTR_r00] = "_LOAD_ATTR_r00", [_LOAD_ATTR_CLASS] = "_LOAD_ATTR_CLASS", [_LOAD_ATTR_CLASS_r11] = "_LOAD_ATTR_CLASS_r11", [_LOAD_ATTR_INSTANCE_VALUE] = "_LOAD_ATTR_INSTANCE_VALUE", @@ -1821,7 +1821,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_LOAD_FAST_CHECK] = "_LOAD_FAST_CHECK", [_LOAD_FAST_CHECK_r01] = "_LOAD_FAST_CHECK_r01", [_LOAD_FROM_DICT_OR_DEREF] = "_LOAD_FROM_DICT_OR_DEREF", - [_LOAD_FROM_DICT_OR_DEREF_r11] = "_LOAD_FROM_DICT_OR_DEREF_r11", + [_LOAD_FROM_DICT_OR_DEREF_r01] = "_LOAD_FROM_DICT_OR_DEREF_r01", [_LOAD_GLOBAL] = "_LOAD_GLOBAL", [_LOAD_GLOBAL_r00] = "_LOAD_GLOBAL_r00", [_LOAD_GLOBAL_BUILTINS] = "_LOAD_GLOBAL_BUILTINS", @@ -1855,24 +1855,24 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_LOAD_SPECIAL] = "_LOAD_SPECIAL", [_LOAD_SPECIAL_r00] = "_LOAD_SPECIAL_r00", [_LOAD_SUPER_ATTR_ATTR] = "_LOAD_SUPER_ATTR_ATTR", - [_LOAD_SUPER_ATTR_ATTR_r11] = "_LOAD_SUPER_ATTR_ATTR_r11", + [_LOAD_SUPER_ATTR_ATTR_r01] = "_LOAD_SUPER_ATTR_ATTR_r01", [_LOAD_SUPER_ATTR_METHOD] = "_LOAD_SUPER_ATTR_METHOD", - [_LOAD_SUPER_ATTR_METHOD_r22] = "_LOAD_SUPER_ATTR_METHOD_r22", + [_LOAD_SUPER_ATTR_METHOD_r02] = "_LOAD_SUPER_ATTR_METHOD_r02", [_MAKE_CALLARGS_A_TUPLE] = "_MAKE_CALLARGS_A_TUPLE", [_MAKE_CALLARGS_A_TUPLE_r00] = "_MAKE_CALLARGS_A_TUPLE_r00", [_MAKE_CELL] = "_MAKE_CELL", [_MAKE_CELL_r00] = "_MAKE_CELL_r00", [_MAKE_FUNCTION] = "_MAKE_FUNCTION", - [_MAKE_FUNCTION_r11] = "_MAKE_FUNCTION_r11", + [_MAKE_FUNCTION_r01] = "_MAKE_FUNCTION_r01", [_MAKE_WARM] = "_MAKE_WARM", [_MAKE_WARM_r00] = "_MAKE_WARM_r00", [_MAKE_WARM_r11] = "_MAKE_WARM_r11", [_MAKE_WARM_r22] = "_MAKE_WARM_r22", [_MAKE_WARM_r33] = "_MAKE_WARM_r33", [_MAP_ADD] = "_MAP_ADD", - [_MAP_ADD_r20] = "_MAP_ADD_r20", + [_MAP_ADD_r00] = "_MAP_ADD_r00", [_MATCH_CLASS] = "_MATCH_CLASS", - [_MATCH_CLASS_r31] = "_MATCH_CLASS_r31", + [_MATCH_CLASS_r01] = "_MATCH_CLASS_r01", [_MATCH_KEYS] = "_MATCH_KEYS", [_MATCH_KEYS_r01] = "_MATCH_KEYS_r01", [_MATCH_MAPPING] = "_MATCH_MAPPING", @@ -1905,7 +1905,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW] = "_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW", [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31] = "_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31", [_POP_EXCEPT] = "_POP_EXCEPT", - [_POP_EXCEPT_r10] = "_POP_EXCEPT_r10", + [_POP_EXCEPT_r00] = "_POP_EXCEPT_r00", [_POP_ITER] = "_POP_ITER", [_POP_ITER_r20] = "_POP_ITER_r20", [_POP_TOP] = "_POP_TOP", @@ -1933,7 +1933,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_PY_FRAME_GENERAL] = "_PY_FRAME_GENERAL", [_PY_FRAME_GENERAL_r01] = "_PY_FRAME_GENERAL_r01", [_PY_FRAME_KW] = "_PY_FRAME_KW", - [_PY_FRAME_KW_r11] = "_PY_FRAME_KW_r11", + [_PY_FRAME_KW_r01] = "_PY_FRAME_KW_r01", [_REPLACE_WITH_TRUE] = "_REPLACE_WITH_TRUE", [_REPLACE_WITH_TRUE_r11] = "_REPLACE_WITH_TRUE_r11", [_RESUME_CHECK] = "_RESUME_CHECK", @@ -1944,7 +1944,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_RETURN_GENERATOR] = "_RETURN_GENERATOR", [_RETURN_GENERATOR_r01] = "_RETURN_GENERATOR_r01", [_RETURN_VALUE] = "_RETURN_VALUE", - [_RETURN_VALUE_r11] = "_RETURN_VALUE_r11", + [_RETURN_VALUE_r01] = "_RETURN_VALUE_r01", [_SAVE_RETURN_OFFSET] = "_SAVE_RETURN_OFFSET", [_SAVE_RETURN_OFFSET_r00] = "_SAVE_RETURN_OFFSET_r00", [_SAVE_RETURN_OFFSET_r11] = "_SAVE_RETURN_OFFSET_r11", @@ -1958,7 +1958,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_SETUP_ANNOTATIONS] = "_SETUP_ANNOTATIONS", [_SETUP_ANNOTATIONS_r00] = "_SETUP_ANNOTATIONS_r00", [_SET_ADD] = "_SET_ADD", - [_SET_ADD_r10] = "_SET_ADD_r10", + [_SET_ADD_r00] = "_SET_ADD_r00", [_SET_FUNCTION_ATTRIBUTE] = "_SET_FUNCTION_ATTRIBUTE", [_SET_FUNCTION_ATTRIBUTE_r21] = "_SET_FUNCTION_ATTRIBUTE_r21", [_SET_FUNCTION_ATTRIBUTE_r10] = "_SET_FUNCTION_ATTRIBUTE_r10", @@ -1969,7 +1969,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_SET_IP_r22] = "_SET_IP_r22", [_SET_IP_r33] = "_SET_IP_r33", [_SET_UPDATE] = "_SET_UPDATE", - [_SET_UPDATE_r10] = "_SET_UPDATE_r10", + [_SET_UPDATE_r00] = "_SET_UPDATE_r00", [_SPILL_OR_RELOAD] = "_SPILL_OR_RELOAD", [_SPILL_OR_RELOAD_r01] = "_SPILL_OR_RELOAD_r01", [_SPILL_OR_RELOAD_r02] = "_SPILL_OR_RELOAD_r02", @@ -1986,7 +1986,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_START_EXECUTOR] = "_START_EXECUTOR", [_START_EXECUTOR_r00] = "_START_EXECUTOR_r00", [_STORE_ATTR] = "_STORE_ATTR", - [_STORE_ATTR_r20] = "_STORE_ATTR_r20", + [_STORE_ATTR_r00] = "_STORE_ATTR_r00", [_STORE_ATTR_INSTANCE_VALUE] = "_STORE_ATTR_INSTANCE_VALUE", [_STORE_ATTR_INSTANCE_VALUE_r20] = "_STORE_ATTR_INSTANCE_VALUE_r20", [_STORE_ATTR_SLOT] = "_STORE_ATTR_SLOT", @@ -1994,7 +1994,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_STORE_ATTR_WITH_HINT] = "_STORE_ATTR_WITH_HINT", [_STORE_ATTR_WITH_HINT_r00] = "_STORE_ATTR_WITH_HINT_r00", [_STORE_DEREF] = "_STORE_DEREF", - [_STORE_DEREF_r10] = "_STORE_DEREF_r10", + [_STORE_DEREF_r00] = "_STORE_DEREF_r00", [_STORE_FAST] = "_STORE_FAST", [_STORE_FAST_r10] = "_STORE_FAST_r10", [_STORE_FAST_0] = "_STORE_FAST_0", @@ -2014,15 +2014,15 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_STORE_FAST_7] = "_STORE_FAST_7", [_STORE_FAST_7_r10] = "_STORE_FAST_7_r10", [_STORE_GLOBAL] = "_STORE_GLOBAL", - [_STORE_GLOBAL_r10] = "_STORE_GLOBAL_r10", + [_STORE_GLOBAL_r00] = "_STORE_GLOBAL_r00", [_STORE_NAME] = "_STORE_NAME", - [_STORE_NAME_r10] = "_STORE_NAME_r10", + [_STORE_NAME_r00] = "_STORE_NAME_r00", [_STORE_SLICE] = "_STORE_SLICE", - [_STORE_SLICE_r30] = "_STORE_SLICE_r30", + [_STORE_SLICE_r00] = "_STORE_SLICE_r00", [_STORE_SUBSCR] = "_STORE_SUBSCR", - [_STORE_SUBSCR_r30] = "_STORE_SUBSCR_r30", + [_STORE_SUBSCR_r00] = "_STORE_SUBSCR_r00", [_STORE_SUBSCR_DICT] = "_STORE_SUBSCR_DICT", - [_STORE_SUBSCR_DICT_r30] = "_STORE_SUBSCR_DICT_r30", + [_STORE_SUBSCR_DICT_r00] = "_STORE_SUBSCR_DICT_r00", [_STORE_SUBSCR_LIST_INT] = "_STORE_SUBSCR_LIST_INT", [_STORE_SUBSCR_LIST_INT_r00] = "_STORE_SUBSCR_LIST_INT_r00", [_SWAP] = "_SWAP", @@ -2033,7 +2033,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_TIER2_RESUME_CHECK_r22] = "_TIER2_RESUME_CHECK_r22", [_TIER2_RESUME_CHECK_r33] = "_TIER2_RESUME_CHECK_r33", [_TO_BOOL] = "_TO_BOOL", - [_TO_BOOL_r11] = "_TO_BOOL_r11", + [_TO_BOOL_r01] = "_TO_BOOL_r01", [_TO_BOOL_BOOL] = "_TO_BOOL_BOOL", [_TO_BOOL_BOOL_r11] = "_TO_BOOL_BOOL_r11", [_TO_BOOL_BOOL_r00] = "_TO_BOOL_BOOL_r00", @@ -2051,18 +2051,18 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_TO_BOOL_STR] = "_TO_BOOL_STR", [_TO_BOOL_STR_r11] = "_TO_BOOL_STR_r11", [_UNARY_INVERT] = "_UNARY_INVERT", - [_UNARY_INVERT_r11] = "_UNARY_INVERT_r11", + [_UNARY_INVERT_r01] = "_UNARY_INVERT_r01", [_UNARY_NEGATIVE] = "_UNARY_NEGATIVE", - [_UNARY_NEGATIVE_r11] = "_UNARY_NEGATIVE_r11", + [_UNARY_NEGATIVE_r01] = "_UNARY_NEGATIVE_r01", [_UNARY_NOT] = "_UNARY_NOT", [_UNARY_NOT_r11] = "_UNARY_NOT_r11", [_UNARY_NOT_r00] = "_UNARY_NOT_r00", [_UNARY_NOT_r22] = "_UNARY_NOT_r22", [_UNARY_NOT_r33] = "_UNARY_NOT_r33", [_UNPACK_EX] = "_UNPACK_EX", - [_UNPACK_EX_r10] = "_UNPACK_EX_r10", + [_UNPACK_EX_r00] = "_UNPACK_EX_r00", [_UNPACK_SEQUENCE] = "_UNPACK_SEQUENCE", - [_UNPACK_SEQUENCE_r10] = "_UNPACK_SEQUENCE_r10", + [_UNPACK_SEQUENCE_r00] = "_UNPACK_SEQUENCE_r00", [_UNPACK_SEQUENCE_LIST] = "_UNPACK_SEQUENCE_LIST", [_UNPACK_SEQUENCE_LIST_r00] = "_UNPACK_SEQUENCE_LIST_r00", [_UNPACK_SEQUENCE_TUPLE] = "_UNPACK_SEQUENCE_TUPLE", diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index b0be3769612b65..178da454c47628 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -16,37 +16,36 @@ case _NOP_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _NOP_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _NOP_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _CHECK_PERIODIC_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); QSBR_QUIESCENT_STATE(tstate); if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) { @@ -58,12 +57,12 @@ JUMP_TO_ERROR(); } } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) { _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY(); @@ -78,6 +77,7 @@ } } } + SET_CURRENT_CACHED_VALUES(0); break; } @@ -87,7 +87,6 @@ case _RESUME_CHECK_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { UOP_STAT_INC(uopcode, miss); @@ -112,12 +111,12 @@ JUMP_TO_JUMP_TARGET(); } #endif + SET_CURRENT_CACHED_VALUES(0); break; } case _RESUME_CHECK_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { @@ -153,12 +152,12 @@ } #endif _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _RESUME_CHECK_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; #if defined(__EMSCRIPTEN__) @@ -199,12 +198,12 @@ #endif _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _RESUME_CHECK_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -250,6 +249,7 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } @@ -257,7 +257,6 @@ case _LOAD_FAST_CHECK_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); _PyStackRef value_s = GETLOCAL(oparg); @@ -273,24 +272,24 @@ } value = PyStackRef_DUP(value_s); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_0_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 0; @@ -299,12 +298,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_0_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -315,24 +314,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 1; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; @@ -341,12 +340,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -357,24 +356,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 2; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_2_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; @@ -383,12 +382,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -399,24 +398,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 3; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_3_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; @@ -425,12 +424,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -441,24 +440,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_4_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 4; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_4_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; @@ -467,12 +466,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_4_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -483,24 +482,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_5_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 5; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_5_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; @@ -509,12 +508,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_5_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -525,24 +524,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_6_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 6; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_6_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; @@ -551,12 +550,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_6_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -567,24 +566,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_7_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 7; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_7_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; @@ -593,12 +592,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_7_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -609,23 +608,23 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -633,12 +632,12 @@ value = PyStackRef_DUP(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -648,24 +647,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_0_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 0; @@ -674,12 +673,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_0_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -690,24 +689,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 1; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; @@ -716,12 +715,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -732,24 +731,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 2; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_2_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; @@ -758,12 +757,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -774,24 +773,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 3; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_3_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; @@ -800,12 +799,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -816,24 +815,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_4_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 4; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_4_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; @@ -842,12 +841,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_4_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -858,24 +857,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_5_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 5; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_5_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; @@ -884,12 +883,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_5_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -900,24 +899,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_6_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 6; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_6_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; @@ -926,12 +925,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_6_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -942,24 +941,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_7_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 7; assert(oparg == CURRENT_OPARG()); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_7_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; @@ -968,12 +967,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_7_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -984,23 +983,23 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_BORROW_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); assert(!PyStackRef_IsNull(GETLOCAL(oparg))); value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_BORROW_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1008,12 +1007,12 @@ value = PyStackRef_Borrow(GETLOCAL(oparg)); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_BORROW_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1023,23 +1022,23 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_FAST_AND_CLEAR_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); value = GETLOCAL(oparg); GETLOCAL(oparg) = PyStackRef_NULL; _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_FAST_AND_CLEAR_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1047,12 +1046,12 @@ GETLOCAL(oparg) = PyStackRef_NULL; _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_FAST_AND_CLEAR_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1062,23 +1061,23 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_CONST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_CONST_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1086,12 +1085,12 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_CONST_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1101,12 +1100,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_SMALL_INT_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 0; assert(oparg == CURRENT_OPARG()); @@ -1114,12 +1113,12 @@ PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_SMALL_INT_0_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 0; @@ -1129,12 +1128,12 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_SMALL_INT_0_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1146,12 +1145,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_SMALL_INT_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 1; assert(oparg == CURRENT_OPARG()); @@ -1159,12 +1158,12 @@ PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_SMALL_INT_1_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; @@ -1174,12 +1173,12 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_SMALL_INT_1_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1191,12 +1190,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_SMALL_INT_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 2; assert(oparg == CURRENT_OPARG()); @@ -1204,12 +1203,12 @@ PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_SMALL_INT_2_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; @@ -1219,12 +1218,12 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_SMALL_INT_2_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1236,12 +1235,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_SMALL_INT_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = 3; assert(oparg == CURRENT_OPARG()); @@ -1249,12 +1248,12 @@ PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_SMALL_INT_3_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; @@ -1264,12 +1263,12 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_SMALL_INT_3_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1281,24 +1280,24 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_SMALL_INT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); assert(oparg < _PY_NSMALLPOSINTS); PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg]; value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_SMALL_INT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1307,12 +1306,12 @@ value = PyStackRef_FromPyObjectBorrow(obj); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_SMALL_INT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1323,12 +1322,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _STORE_FAST_0_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 0; @@ -1339,12 +1338,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_1_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 1; @@ -1355,12 +1354,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_2_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 2; @@ -1371,12 +1370,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_3_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 3; @@ -1387,12 +1386,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_4_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 4; @@ -1403,12 +1402,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_5_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 5; @@ -1419,12 +1418,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_6_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 6; @@ -1435,12 +1434,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_7_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = 7; @@ -1451,12 +1450,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_FAST_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -1466,24 +1465,24 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _POP_TOP_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _POP_TWO_r20: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1501,32 +1500,32 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(nos); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _PUSH_NULL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; res = PyStackRef_NULL; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _PUSH_NULL_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; res = PyStackRef_NULL; _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _PUSH_NULL_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1534,24 +1533,24 @@ _tos_cache2 = res; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _END_FOR_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _POP_ITER_r20: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef index_or_null; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1562,12 +1561,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iter); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _END_SEND_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef receiver; _PyStackRef val; @@ -1585,19 +1584,15 @@ _tos_cache0 = val; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } - case _UNARY_NEGATIVE_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _UNARY_NEGATIVE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - value = _stack_item_0; - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = stack_pointer[-1]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1612,12 +1607,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _UNARY_NOT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1626,12 +1621,12 @@ res = PyStackRef_IsFalse(value) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _UNARY_NOT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; @@ -1639,12 +1634,12 @@ res = PyStackRef_IsFalse(value) ? PyStackRef_True : PyStackRef_False; stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _UNARY_NOT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1655,12 +1650,12 @@ ? PyStackRef_True : PyStackRef_False; _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _UNARY_NOT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1673,19 +1668,15 @@ _tos_cache2 = res; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } - case _TO_BOOL_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _TO_BOOL_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - value = _stack_item_0; - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = stack_pointer[-1]; _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -1700,12 +1691,12 @@ } res = err ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _TO_BOOL_BOOL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -1715,12 +1706,12 @@ } STAT_INC(TO_BOOL, hit); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _TO_BOOL_BOOL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; if (!PyStackRef_BoolCheck(value)) { @@ -1728,12 +1719,12 @@ JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); + SET_CURRENT_CACHED_VALUES(0); break; } case _TO_BOOL_BOOL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1745,12 +1736,12 @@ STAT_INC(TO_BOOL, hit); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _TO_BOOL_BOOL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1764,12 +1755,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _TO_BOOL_INT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -1791,12 +1782,12 @@ res = PyStackRef_True; } _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_LIST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1808,12 +1799,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = nos; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_LIST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -1821,12 +1812,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_LIST_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -1836,12 +1827,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_LIST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1855,12 +1846,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = nos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TOS_LIST_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -1870,12 +1861,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_LIST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -1883,12 +1874,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_LIST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1900,12 +1891,12 @@ } _tos_cache1 = tos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_LIST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1919,12 +1910,12 @@ _tos_cache2 = tos; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TOS_SLICE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -1934,12 +1925,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_SLICE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -1947,12 +1938,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_SLICE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1964,12 +1955,12 @@ } _tos_cache1 = tos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_SLICE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -1983,12 +1974,12 @@ _tos_cache2 = tos; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _TO_BOOL_LIST_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2009,12 +2000,12 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _TO_BOOL_NONE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2026,12 +2017,12 @@ STAT_INC(TO_BOOL, hit); res = PyStackRef_False; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _TO_BOOL_NONE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; value = stack_pointer[-1]; @@ -2042,12 +2033,12 @@ STAT_INC(TO_BOOL, hit); res = PyStackRef_False; stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _TO_BOOL_NONE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2061,12 +2052,12 @@ res = PyStackRef_False; _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _TO_BOOL_NONE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2082,12 +2073,12 @@ _tos_cache2 = res; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_NOS_UNICODE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2099,12 +2090,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = nos; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_UNICODE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -2112,12 +2103,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_UNICODE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -2127,12 +2118,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_UNICODE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2146,12 +2137,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = nos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TOS_UNICODE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -2161,12 +2152,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_UNICODE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -2174,12 +2165,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_UNICODE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2191,12 +2182,12 @@ } _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_UNICODE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2210,12 +2201,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _TO_BOOL_STR_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2234,12 +2225,12 @@ res = PyStackRef_True; } _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _REPLACE_WITH_TRUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -2249,19 +2240,15 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _UNARY_INVERT_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _UNARY_INVERT_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - value = _stack_item_0; - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + value = stack_pointer[-1]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -2276,12 +2263,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_INT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2293,12 +2280,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = left; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_INT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef left; left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -2306,12 +2293,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_INT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; left = stack_pointer[-1]; @@ -2321,12 +2308,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_INT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2340,12 +2327,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = left; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TOS_INT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -2355,12 +2342,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_INT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -2368,12 +2355,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_INT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2385,12 +2372,12 @@ } _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_INT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2404,12 +2391,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _BINARY_OP_MULTIPLY_INT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2431,12 +2418,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_MULTIPLY_INT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2459,12 +2446,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _BINARY_OP_MULTIPLY_INT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2491,12 +2478,12 @@ res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _BINARY_OP_ADD_INT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2518,12 +2505,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_ADD_INT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2546,12 +2533,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _BINARY_OP_ADD_INT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2578,12 +2565,12 @@ res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _BINARY_OP_SUBTRACT_INT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2605,12 +2592,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_SUBTRACT_INT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2633,12 +2620,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _BINARY_OP_SUBTRACT_INT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2665,12 +2652,12 @@ res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_FLOAT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2682,12 +2669,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = left; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_FLOAT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef left; left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); @@ -2695,12 +2682,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_FLOAT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; left = stack_pointer[-1]; @@ -2710,12 +2697,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_FLOAT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef left; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2729,12 +2716,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = left; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TOS_FLOAT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; value = _stack_item_0; @@ -2744,12 +2731,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_FLOAT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef value; value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); @@ -2757,12 +2744,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_FLOAT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2774,12 +2761,12 @@ } _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_FLOAT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -2793,12 +2780,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _BINARY_OP_MULTIPLY_FLOAT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2820,12 +2807,12 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_MULTIPLY_FLOAT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2847,12 +2834,12 @@ JUMP_TO_ERROR(); } stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _BINARY_OP_MULTIPLY_FLOAT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2880,12 +2867,12 @@ } _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _BINARY_OP_ADD_FLOAT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2907,12 +2894,12 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_ADD_FLOAT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2934,12 +2921,12 @@ JUMP_TO_ERROR(); } stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _BINARY_OP_ADD_FLOAT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2967,12 +2954,12 @@ } _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _BINARY_OP_SUBTRACT_FLOAT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -2994,12 +2981,12 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_SUBTRACT_FLOAT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -3021,12 +3008,12 @@ JUMP_TO_ERROR(); } stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _BINARY_OP_SUBTRACT_FLOAT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -3054,12 +3041,12 @@ } _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _BINARY_OP_ADD_UNICODE_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -3081,12 +3068,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_ADD_UNICODE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -3109,12 +3096,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _BINARY_OP_ADD_UNICODE_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -3141,12 +3128,12 @@ res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _BINARY_OP_INPLACE_ADD_UNICODE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; @@ -3191,12 +3178,12 @@ assert(next_instr->op.code == STORE_FAST); SKIP_OVER(1); #endif + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_BINARY_OP_EXTEND_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; right = stack_pointer[-1]; @@ -3215,29 +3202,23 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _BINARY_OP_EXTEND_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_EXTEND_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - right = _stack_item_1; - left = _stack_item_0; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; STAT_INC(BINARY_OP, hit); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = d->action(left_o, right_o); _PyStackRef tmp = right; @@ -3253,27 +3234,19 @@ assert(WITHIN_STACK_BOUNDS()); res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_SLICE_r31: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); + case _BINARY_SLICE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef stop; _PyStackRef start; _PyStackRef container; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - stop = _stack_item_2; - start = _stack_item_1; - container = _stack_item_0; - stack_pointer[0] = container; - stack_pointer[1] = start; - stack_pointer[2] = stop; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); + stop = stack_pointer[-1]; + start = stack_pointer[-2]; + container = stack_pointer[-3]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -3302,28 +3275,20 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _STORE_SLICE_r30: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(0); + case _STORE_SLICE_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef stop; _PyStackRef start; _PyStackRef container; _PyStackRef v; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - stop = _stack_item_2; - start = _stack_item_1; - container = _stack_item_0; - v = stack_pointer[-1]; - stack_pointer[0] = container; - stack_pointer[1] = start; - stack_pointer[2] = stop; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); + stop = stack_pointer[-1]; + start = stack_pointer[-2]; + container = stack_pointer[-3]; + v = stack_pointer[-4]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start), PyStackRef_AsPyObjectSteal(stop)); @@ -3357,35 +3322,28 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _BINARY_OP_SUBSCR_LIST_INT_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_SUBSCR_LIST_INT_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - sub_st = _stack_item_0; - list_st = stack_pointer[-1]; + sub_st = stack_pointer[-1]; + list_st = stack_pointer[-2]; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); assert(PyList_CheckExact(list)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - stack_pointer[0] = sub_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; #ifdef Py_GIL_DISABLED - stack_pointer[0] = sub_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyList_GetItemRef((PyListObject*)list, index); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3398,9 +3356,6 @@ res = PyStackRef_FromPyObjectSteal(res_o); #else if (index >= PyList_GET_SIZE(list)) { - stack_pointer[0] = sub_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -3409,7 +3364,6 @@ PyObject *res_o = PyList_GET_ITEM(list, index); assert(res_o != NULL); res = PyStackRef_FromPyObjectNew(res_o); - stack_pointer += 1; #endif STAT_INC(BINARY_OP, hit); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -3427,27 +3381,21 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_SUBSCR_LIST_SLICE_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_SUBSCR_LIST_SLICE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - sub_st = _stack_item_1; - list_st = _stack_item_0; + sub_st = stack_pointer[-1]; + list_st = stack_pointer[-2]; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PySlice_Check(sub)); assert(PyList_CheckExact(list)); - stack_pointer[0] = list_st; - stack_pointer[1] = sub_st; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyList_SliceSubscript(list, sub); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3470,12 +3418,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_SUBSCR_STR_INT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef str_st; _PyStackRef res; @@ -3522,12 +3470,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectBorrow(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_TUPLE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3539,12 +3487,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = nos; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_TUPLE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -3552,12 +3500,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_TUPLE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -3567,12 +3515,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3586,12 +3534,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = nos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TOS_TUPLE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -3601,12 +3549,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_TUPLE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -3614,12 +3562,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_TUPLE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3631,12 +3579,12 @@ } _tos_cache1 = tos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3650,12 +3598,12 @@ _tos_cache2 = tos; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _BINARY_OP_SUBSCR_TUPLE_INT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef res; @@ -3697,12 +3645,12 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3714,12 +3662,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = nos; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_DICT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -3727,12 +3675,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -3742,12 +3690,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3761,12 +3709,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = nos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TOS_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -3776,12 +3724,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_DICT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -3789,12 +3737,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3806,12 +3754,12 @@ } _tos_cache1 = tos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -3825,28 +3773,22 @@ _tos_cache2 = tos; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } - case _BINARY_OP_SUBSCR_DICT_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_SUBSCR_DICT_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef sub_st; _PyStackRef dict_st; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - sub_st = _stack_item_1; - dict_st = _stack_item_0; + sub_st = stack_pointer[-1]; + dict_st = stack_pointer[-2]; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); STAT_INC(BINARY_OP, hit); PyObject *res_o; - stack_pointer[0] = dict_st; - stack_pointer[1] = sub_st; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int rc = PyDict_GetItemRef(dict, sub, &res_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3873,12 +3815,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BINARY_OP_SUBSCR_CHECK_FUNC_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef container; _PyStackRef getitem; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3934,12 +3876,12 @@ stack_pointer[0] = container; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(2); break; } case _BINARY_OP_SUBSCR_INIT_CALL_r31: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef getitem; _PyStackRef sub; _PyStackRef container; @@ -3956,12 +3898,12 @@ frame->return_offset = 6 ; new_frame = PyStackRef_Wrap(pushed_frame); _tos_cache0 = new_frame; + SET_CURRENT_CACHED_VALUES(1); break; } case _LIST_APPEND_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef list; _PyStackRef _stack_item_0 = _tos_cache0; @@ -3974,21 +3916,17 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _SET_ADD_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _SET_ADD_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef set; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = _stack_item_0; - set = stack_pointer[-1 - (oparg-1)]; - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + v = stack_pointer[-1]; + set = stack_pointer[-2 - (oparg-1)]; _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectSteal(v)); @@ -4001,26 +3939,18 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } - case _STORE_SUBSCR_r30: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(0); + case _STORE_SUBSCR_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef container; _PyStackRef v; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - sub = _stack_item_2; - container = _stack_item_1; - v = _stack_item_0; - stack_pointer[0] = v; - stack_pointer[1] = container; - stack_pointer[2] = sub; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); + sub = stack_pointer[-1]; + container = stack_pointer[-2]; + v = stack_pointer[-3]; _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v)); _PyStackRef tmp = sub; @@ -4042,12 +3972,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_SUBSCR_LIST_INT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef value; @@ -4090,29 +4020,21 @@ PyStackRef_CLOSE(list_st); Py_DECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } - case _STORE_SUBSCR_DICT_r30: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(0); + case _STORE_SUBSCR_DICT_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef dict_st; _PyStackRef value; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - sub = _stack_item_2; - dict_st = _stack_item_1; - value = _stack_item_0; + sub = stack_pointer[-1]; + dict_st = stack_pointer[-2]; + value = stack_pointer[-3]; PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); STAT_INC(STORE_SUBSCR, hit); - stack_pointer[0] = value; - stack_pointer[1] = dict_st; - stack_pointer[2] = sub; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2((PyDictObject *)dict, PyStackRef_AsPyObjectSteal(sub), @@ -4127,22 +4049,16 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _DELETE_SUBSCR_r20: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); + case _DELETE_SUBSCR_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef sub; _PyStackRef container; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - sub = _stack_item_1; - container = _stack_item_0; - stack_pointer[0] = container; - stack_pointer[1] = sub; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); + sub = stack_pointer[-1]; + container = stack_pointer[-2]; _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub)); @@ -4161,21 +4077,17 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _CALL_INTRINSIC_1_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _CALL_INTRINSIC_1_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - value = _stack_item_0; + value = stack_pointer[-1]; assert(oparg <= MAX_INTRINSIC_1); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4190,27 +4102,21 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_INTRINSIC_2_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _CALL_INTRINSIC_2_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value1_st; _PyStackRef value2_st; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - value1_st = _stack_item_1; - value2_st = _stack_item_0; + value1_st = stack_pointer[-1]; + value2_st = stack_pointer[-2]; assert(oparg <= MAX_INTRINSIC_2); PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st); PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st); - stack_pointer[0] = value2_st; - stack_pointer[1] = value1_st; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1); _PyStackRef tmp = value1_st; @@ -4230,18 +4136,19 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _RETURN_VALUE_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _RETURN_VALUE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef retval; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - retval = _stack_item_0; + retval = stack_pointer[-1]; assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); _PyStackRef temp = PyStackRef_MakeHeapSafe(retval); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); assert(STACK_LEVEL() == 0); _Py_LeaveRecursiveCallPy(tstate); @@ -4253,16 +4160,15 @@ res = temp; LLTRACE_RESUME_FRAME(); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _GET_AITER_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _GET_AITER_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef obj; _PyStackRef iter; - _PyStackRef _stack_item_0 = _tos_cache0; - obj = _stack_item_0; + obj = stack_pointer[-1]; unaryfunc getter = NULL; PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj); PyObject *iter_o; @@ -4271,9 +4177,6 @@ getter = type->tp_as_async->am_aiter; } if (getter == NULL) { - stack_pointer[0] = obj; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_TypeError, "'async for' requires an object with " @@ -4288,9 +4191,6 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } - stack_pointer[0] = obj; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); iter_o = (*getter)(obj_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4317,12 +4217,12 @@ } iter = PyStackRef_FromPyObjectSteal(iter_o); _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(1); break; } case _GET_ANEXT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef aiter; _PyStackRef awaitable; aiter = stack_pointer[-1]; @@ -4335,20 +4235,16 @@ } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); _tos_cache0 = awaitable; + SET_CURRENT_CACHED_VALUES(1); break; } - case _GET_AWAITABLE_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _GET_AWAITABLE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef iterable; _PyStackRef iter; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - iterable = _stack_item_0; - stack_pointer[0] = iterable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + iterable = stack_pointer[-1]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4363,6 +4259,7 @@ } iter = PyStackRef_FromPyObjectSteal(iter_o); _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(1); break; } @@ -4370,7 +4267,6 @@ case _SEND_GEN_FRAME_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef v; _PyStackRef receiver; _PyStackRef gen_frame; @@ -4410,12 +4306,12 @@ gen_frame = PyStackRef_Wrap(pushed_frame); _tos_cache1 = gen_frame; _tos_cache0 = receiver; + SET_CURRENT_CACHED_VALUES(2); break; } case _SEND_GEN_FRAME_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef v; _PyStackRef receiver; _PyStackRef gen_frame; @@ -4444,12 +4340,12 @@ pushed_frame->previous = frame; gen_frame = PyStackRef_Wrap(pushed_frame); stack_pointer[-1] = gen_frame; + SET_CURRENT_CACHED_VALUES(0); break; } case _SEND_GEN_FRAME_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef v; _PyStackRef receiver; _PyStackRef gen_frame; @@ -4485,12 +4381,12 @@ pushed_frame->previous = frame; gen_frame = PyStackRef_Wrap(pushed_frame); _tos_cache0 = gen_frame; + SET_CURRENT_CACHED_VALUES(1); break; } case _SEND_GEN_FRAME_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef v; _PyStackRef receiver; _PyStackRef gen_frame; @@ -4534,12 +4430,12 @@ _tos_cache2 = gen_frame; _tos_cache1 = receiver; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _YIELD_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef retval; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4573,12 +4469,12 @@ value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _YIELD_VALUE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef retval; _PyStackRef value; oparg = CURRENT_OPARG(); @@ -4615,12 +4511,12 @@ stack_pointer[0] = value; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _YIELD_VALUE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef retval; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4661,12 +4557,12 @@ _tos_cache0 = _stack_item_0; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(2); break; } case _YIELD_VALUE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef retval; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -4710,19 +4606,15 @@ _tos_cache0 = _stack_item_0; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(3); break; } - case _POP_EXCEPT_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _POP_EXCEPT_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef exc_value; - _PyStackRef _stack_item_0 = _tos_cache0; - exc_value = _stack_item_0; + exc_value = stack_pointer[-1]; _PyErr_StackItem *exc_info = tstate->exc_info; - stack_pointer[0] = exc_value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); Py_XSETREF(exc_info->exc_value, PyStackRef_IsNone(exc_value) @@ -4730,23 +4622,23 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _LOAD_COMMON_CONSTANT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); assert(oparg < NUM_COMMON_CONSTANTS); value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_COMMON_CONSTANT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -4754,12 +4646,12 @@ value = PyStackRef_FromPyObjectNew(tstate->interp->common_consts[oparg]); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_COMMON_CONSTANT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -4769,12 +4661,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_BUILD_CLASS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef bc; PyObject *bc_o; _PyFrame_SetStackPointer(frame, stack_pointer); @@ -4794,23 +4686,19 @@ } bc = PyStackRef_FromPyObjectSteal(bc_o); _tos_cache0 = bc; + SET_CURRENT_CACHED_VALUES(1); break; } - case _STORE_NAME_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _STORE_NAME_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef v; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = _stack_item_0; + v = stack_pointer[-1]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); int err; if (ns == NULL) { - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_Format(tstate, PyExc_SystemError, "no locals found when storing %R", name); @@ -4824,17 +4712,11 @@ JUMP_TO_ERROR(); } if (PyDict_CheckExact(ns)) { - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); err = PyDict_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); } else { - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); err = PyObject_SetItem(ns, name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -4848,12 +4730,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _DELETE_NAME_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); PyObject *ns = LOCALS(); @@ -4878,19 +4760,20 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _UNPACK_SEQUENCE_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _UNPACK_SEQUENCE_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *top; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = _stack_item_0; - top = &stack_pointer[oparg]; + seq = stack_pointer[-1]; + top = &stack_pointer[-1 + oparg]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top); Py_DECREF(seq_o); @@ -4901,12 +4784,12 @@ } stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _UNPACK_SEQUENCE_TWO_TUPLE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef seq; _PyStackRef val1; _PyStackRef val0; @@ -4937,12 +4820,12 @@ _tos_cache0 = val0; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _UNPACK_SEQUENCE_TUPLE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; oparg = CURRENT_OPARG(); @@ -4965,12 +4848,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _UNPACK_SEQUENCE_LIST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *values; oparg = CURRENT_OPARG(); @@ -5002,19 +4885,20 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } - case _UNPACK_EX_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _UNPACK_EX_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef seq; _PyStackRef *top; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = _stack_item_0; - top = &stack_pointer[1 + (oparg & 0xFF) + (oparg >> 8)]; + seq = stack_pointer[-1]; + top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)]; PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top); Py_DECREF(seq_o); @@ -5025,24 +4909,18 @@ } stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } - case _STORE_ATTR_r20: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); + case _STORE_ATTR_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef v; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - owner = _stack_item_1; - v = _stack_item_0; + owner = stack_pointer[-1]; + v = stack_pointer[-2]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - stack_pointer[0] = v; - stack_pointer[1] = owner; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner), name, PyStackRef_AsPyObjectBorrow(v)); @@ -5061,20 +4939,16 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _DELETE_ATTR_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _DELETE_ATTR_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef owner; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - owner = _stack_item_0; + owner = stack_pointer[-1]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - stack_pointer[0] = owner; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyObject_DelAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5087,20 +4961,16 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _STORE_GLOBAL_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _STORE_GLOBAL_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef v; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = _stack_item_0; + v = stack_pointer[-1]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5113,12 +4983,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _DELETE_GLOBAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); _PyFrame_SetStackPointer(frame, stack_pointer); @@ -5136,12 +5006,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _LOAD_LOCALS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef locals; PyObject *l = LOCALS(); if (l == NULL) { @@ -5154,6 +5024,7 @@ } locals = PyStackRef_FromPyObjectNew(l); _tos_cache0 = locals; + SET_CURRENT_CACHED_VALUES(1); break; } @@ -5161,7 +5032,6 @@ case _LOAD_NAME_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef v; oparg = CURRENT_OPARG(); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); @@ -5174,12 +5044,12 @@ } v = PyStackRef_FromPyObjectSteal(v_o); _tos_cache0 = v; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_GLOBAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *res; oparg = CURRENT_OPARG(); res = &stack_pointer[0]; @@ -5193,12 +5063,12 @@ } stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _PUSH_NULL_CONDITIONAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *null; oparg = CURRENT_OPARG(); null = &stack_pointer[0]; @@ -5207,12 +5077,12 @@ } stack_pointer += (oparg & 1); assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_GLOBALS_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); if (!PyDict_CheckExact(dict)) { @@ -5227,12 +5097,12 @@ JUMP_TO_JUMP_TARGET(); } assert(DK_IS_UNICODE(keys)); + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_GLOBALS_VERSION_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint16_t version = (uint16_t)CURRENT_OPERAND0(); PyDictObject *dict = (PyDictObject *)GLOBALS(); @@ -5255,12 +5125,12 @@ } assert(DK_IS_UNICODE(keys)); _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_GLOBALS_VERSION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint16_t version = (uint16_t)CURRENT_OPERAND0(); @@ -5287,12 +5157,12 @@ assert(DK_IS_UNICODE(keys)); _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_GLOBALS_VERSION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -5323,12 +5193,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_GLOBAL_MODULE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); @@ -5367,12 +5237,12 @@ stack_pointer[0] = res; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _LOAD_GLOBAL_BUILTINS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); uint16_t index = (uint16_t)CURRENT_OPERAND1(); @@ -5410,12 +5280,12 @@ stack_pointer[0] = res; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _DELETE_FAST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); _PyStackRef v = GETLOCAL(oparg); if (PyStackRef_IsNull(v)) { @@ -5433,12 +5303,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _MAKE_CELL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *initial = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *cell = PyCell_New(initial); @@ -5451,12 +5321,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _DELETE_DEREF_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyObject *cell = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); PyObject *oldobj = PyCell_SwapTakeRef((PyCellObject *)cell, NULL); @@ -5470,26 +5340,22 @@ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(oldobj); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } - case _LOAD_FROM_DICT_OR_DEREF_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _LOAD_FROM_DICT_OR_DEREF_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef class_dict_st; _PyStackRef value; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - class_dict_st = _stack_item_0; + class_dict_st = stack_pointer[-1]; PyObject *value_o; PyObject *name; PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st); assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); name = PyTuple_GET_ITEM(_PyFrame_GetCode(frame)->co_localsplusnames, oparg); - stack_pointer[0] = class_dict_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyMapping_GetOptionalItem(class_dict, name, &value_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5515,12 +5381,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_DEREF_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; oparg = CURRENT_OPARG(); PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); @@ -5538,31 +5404,27 @@ JUMP_TO_ERROR(); } _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } - case _STORE_DEREF_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _STORE_DEREF_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef v; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - v = _stack_item_0; + v = stack_pointer[-1]; PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _COPY_FREE_VARS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); @@ -5574,12 +5436,12 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } + SET_CURRENT_CACHED_VALUES(0); break; } case _COPY_FREE_VARS_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); PyCodeObject *co = _PyFrame_GetCode(frame); @@ -5593,12 +5455,12 @@ frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _COPY_FREE_VARS_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); @@ -5614,12 +5476,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _COPY_FREE_VARS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -5637,12 +5499,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _BUILD_STRING_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *pieces; _PyStackRef str; oparg = CURRENT_OPARG(); @@ -5680,12 +5542,12 @@ } str = PyStackRef_FromPyObjectSteal(str_o); _tos_cache0 = str; + SET_CURRENT_CACHED_VALUES(1); break; } case _BUILD_INTERPOLATION_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *format; _PyStackRef str; _PyStackRef value; @@ -5733,25 +5595,19 @@ } interpolation = PyStackRef_FromPyObjectSteal(interpolation_o); _tos_cache0 = interpolation; + SET_CURRENT_CACHED_VALUES(1); break; } - case _BUILD_TEMPLATE_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _BUILD_TEMPLATE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef interpolations; _PyStackRef strings; _PyStackRef template; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - interpolations = _stack_item_1; - strings = _stack_item_0; + interpolations = stack_pointer[-1]; + strings = stack_pointer[-2]; PyObject *strings_o = PyStackRef_AsPyObjectBorrow(strings); PyObject *interpolations_o = PyStackRef_AsPyObjectBorrow(interpolations); - stack_pointer[0] = strings; - stack_pointer[1] = interpolations; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *template_o = _PyTemplate_Build(strings_o, interpolations_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5771,12 +5627,12 @@ } template = PyStackRef_FromPyObjectSteal(template_o); _tos_cache0 = template; + SET_CURRENT_CACHED_VALUES(1); break; } case _BUILD_TUPLE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef tup; oparg = CURRENT_OPARG(); @@ -5790,12 +5646,12 @@ _tos_cache0 = tup; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _BUILD_LIST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef list; oparg = CURRENT_OPARG(); @@ -5811,23 +5667,19 @@ _tos_cache0 = list; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } - case _LIST_EXTEND_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _LIST_EXTEND_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef iterable_st; _PyStackRef list_st; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - iterable_st = _stack_item_0; - list_st = stack_pointer[-1 - (oparg-1)]; + iterable_st = stack_pointer[-1]; + list_st = stack_pointer[-2 - (oparg-1)]; PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st); - stack_pointer[0] = iterable_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -5859,21 +5711,17 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } - case _SET_UPDATE_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _SET_UPDATE_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef iterable; _PyStackRef set; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - iterable = _stack_item_0; - set = stack_pointer[-1 - (oparg-1)]; - stack_pointer[0] = iterable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + iterable = stack_pointer[-1]; + set = stack_pointer[-2 - (oparg-1)]; _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set), PyStackRef_AsPyObjectBorrow(iterable)); @@ -5887,12 +5735,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _BUILD_SET_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef set; oparg = CURRENT_OPARG(); @@ -5942,12 +5790,12 @@ _tos_cache0 = set; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _BUILD_MAP_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *values; _PyStackRef map; oparg = CURRENT_OPARG(); @@ -5990,12 +5838,12 @@ } map = PyStackRef_FromPyObjectStealMortal(map_o); _tos_cache0 = map; + SET_CURRENT_CACHED_VALUES(1); break; } case _SETUP_ANNOTATIONS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); PyObject *ann_dict; if (LOCALS() == NULL) { _PyFrame_SetStackPointer(frame, stack_pointer); @@ -6035,23 +5883,19 @@ Py_DECREF(ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); } + SET_CURRENT_CACHED_VALUES(0); break; } - case _DICT_UPDATE_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _DICT_UPDATE_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef update; _PyStackRef dict; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - update = _stack_item_0; - dict = stack_pointer[-1 - (oparg - 1)]; + update = stack_pointer[-1]; + dict = stack_pointer[-2 - (oparg - 1)]; PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); - stack_pointer[0] = update; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = PyDict_Update(dict_o, update_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6079,26 +5923,22 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } - case _DICT_MERGE_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _DICT_MERGE_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef update; _PyStackRef dict; _PyStackRef callable; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - update = _stack_item_0; - dict = stack_pointer[-1 - (oparg - 1)]; - callable = stack_pointer[-4 - (oparg - 1)]; + update = stack_pointer[-1]; + dict = stack_pointer[-2 - (oparg - 1)]; + callable = stack_pointer[-5 - (oparg - 1)]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict); PyObject *update_o = PyStackRef_AsPyObjectBorrow(update); - stack_pointer[0] = update; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_MergeEx(dict_o, update_o, 2); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6119,27 +5959,21 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } - case _MAP_ADD_r20: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); + case _MAP_ADD_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef key; _PyStackRef dict_st; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - value = _stack_item_1; - key = _stack_item_0; - dict_st = stack_pointer[-1 - (oparg - 1)]; + value = stack_pointer[-1]; + key = stack_pointer[-2]; + dict_st = stack_pointer[-3 - (oparg - 1)]; PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st); assert(PyDict_CheckExact(dict)); - stack_pointer[0] = key; - stack_pointer[1] = value; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyDict_SetItem_Take2( (PyDictObject *)dict, @@ -6155,46 +5989,36 @@ } stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } - case _LOAD_SUPER_ATTR_ATTR_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _LOAD_SUPER_ATTR_ATTR_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef self_st; _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef attr_st; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - self_st = _stack_item_0; - class_st = stack_pointer[-1]; - global_super_st = stack_pointer[-2]; + self_st = stack_pointer[-1]; + class_st = stack_pointer[-2]; + global_super_st = stack_pointer[-3]; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(!(oparg & 1)); if (global_super != (PyObject *)&PySuper_Type) { - stack_pointer[0] = self_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyType_Check(class)) { - stack_pointer[0] = self_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); - stack_pointer[0] = self_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); _PyStackRef tmp = self_st; @@ -6218,41 +6042,31 @@ } attr_st = PyStackRef_FromPyObjectSteal(attr); _tos_cache0 = attr_st; + SET_CURRENT_CACHED_VALUES(1); break; } - case _LOAD_SUPER_ATTR_METHOD_r22: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); + case _LOAD_SUPER_ATTR_METHOD_r02: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef self_st; _PyStackRef class_st; _PyStackRef global_super_st; _PyStackRef attr; _PyStackRef self_or_null; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - self_st = _stack_item_1; - class_st = _stack_item_0; - global_super_st = stack_pointer[-1]; + self_st = stack_pointer[-1]; + class_st = stack_pointer[-2]; + global_super_st = stack_pointer[-3]; PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st); PyObject *class = PyStackRef_AsPyObjectBorrow(class_st); PyObject *self = PyStackRef_AsPyObjectBorrow(self_st); assert(oparg & 1); if (global_super != (PyObject *)&PySuper_Type) { - stack_pointer[0] = class_st; - stack_pointer[1] = self_st; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyType_Check(class)) { - stack_pointer[0] = class_st; - stack_pointer[1] = self_st; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -6261,10 +6075,6 @@ PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); PyTypeObject *cls = (PyTypeObject *)class; int method_found = 0; - stack_pointer[0] = class_st; - stack_pointer[1] = self_st; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attr_o = _PySuper_Lookup(cls, self, name, Py_TYPE(self)->tp_getattro == PyObject_GenericGetAttr ? &method_found : NULL); @@ -6301,26 +6111,22 @@ attr = PyStackRef_FromPyObjectSteal(attr_o); _tos_cache1 = self_or_null; _tos_cache0 = attr; + SET_CURRENT_CACHED_VALUES(2); break; } - case _LOAD_ATTR_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _LOAD_ATTR_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef attr; _PyStackRef *self_or_null; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - owner = _stack_item_0; - self_or_null = &stack_pointer[1]; + owner = stack_pointer[-1]; + self_or_null = &stack_pointer[0]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1); PyObject *attr_o; if (oparg & 1) { attr_o = NULL; - stack_pointer[0] = owner; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int is_meth = _PyObject_GetMethod(PyStackRef_AsPyObjectBorrow(owner), name, &attr_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6343,9 +6149,6 @@ } } else { - stack_pointer[0] = owner; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); attr_o = PyObject_GetAttr(PyStackRef_AsPyObjectBorrow(owner), name); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -6364,12 +6167,12 @@ stack_pointer[-1] = attr; stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TYPE_VERSION_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -6381,12 +6184,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TYPE_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); @@ -6396,12 +6199,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TYPE_VERSION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6415,12 +6218,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TYPE_VERSION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6436,12 +6239,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_TYPE_VERSION_AND_LOCK_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -6461,12 +6264,12 @@ } } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TYPE_VERSION_AND_LOCK_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); @@ -6484,12 +6287,12 @@ JUMP_TO_JUMP_TARGET(); } } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TYPE_VERSION_AND_LOCK_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6511,12 +6314,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TYPE_VERSION_AND_LOCK_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6540,12 +6343,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -6561,12 +6364,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -6577,12 +6380,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6601,12 +6404,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_MANAGED_OBJECT_HAS_VALUES_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6628,12 +6431,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_ATTR_INSTANCE_VALUE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6675,12 +6478,12 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_MODULE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6744,12 +6547,12 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_WITH_HINT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6848,12 +6651,12 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_SLOT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -6896,12 +6699,12 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_ATTR_CLASS_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -6917,12 +6720,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_ATTR_CLASS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t type_version = (uint32_t)CURRENT_OPERAND0(); @@ -6936,12 +6739,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_ATTR_CLASS_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6959,12 +6762,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_ATTR_CLASS_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -6984,12 +6787,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_ATTR_CLASS_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7010,12 +6813,12 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_PROPERTY_FRAME_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7063,12 +6866,12 @@ pushed_frame->localsplus[0] = owner; new_frame = PyStackRef_Wrap(pushed_frame); _tos_cache0 = new_frame; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_PROPERTY_FRAME_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef new_frame; oparg = CURRENT_OPARG(); @@ -7103,12 +6906,12 @@ pushed_frame->localsplus[0] = owner; new_frame = PyStackRef_Wrap(pushed_frame); stack_pointer[-1] = new_frame; + SET_CURRENT_CACHED_VALUES(0); break; } case _LOAD_ATTR_PROPERTY_FRAME_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7162,12 +6965,12 @@ new_frame = PyStackRef_Wrap(pushed_frame); _tos_cache1 = new_frame; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_ATTR_PROPERTY_FRAME_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7227,6 +7030,7 @@ _tos_cache2 = new_frame; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } @@ -7234,7 +7038,6 @@ case _GUARD_DORV_NO_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -7250,12 +7053,12 @@ } } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_DORV_NO_DICT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -7269,12 +7072,12 @@ JUMP_TO_JUMP_TARGET(); } } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_DORV_NO_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7292,12 +7095,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_DORV_NO_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7317,12 +7120,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _STORE_ATTR_INSTANCE_VALUE_r20: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -7346,12 +7149,12 @@ PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_ATTR_WITH_HINT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; oparg = CURRENT_OPARG(); @@ -7422,12 +7225,12 @@ PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _STORE_ATTR_SLOT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; _PyStackRef value; owner = stack_pointer[-1]; @@ -7450,27 +7253,21 @@ PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } - case _COMPARE_OP_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _COMPARE_OP_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = _stack_item_1; - left = _stack_item_0; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert((oparg >> 5) <= Py_GE); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5); _PyStackRef tmp = right; @@ -7503,12 +7300,12 @@ res = PyStackRef_FromPyObjectSteal(res_o); } _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _COMPARE_OP_FLOAT_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7527,12 +7324,12 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _COMPARE_OP_FLOAT_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7550,12 +7347,12 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _COMPARE_OP_FLOAT_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7576,12 +7373,12 @@ res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _COMPARE_OP_INT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7619,12 +7416,12 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _COMPARE_OP_STR_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7645,12 +7442,12 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _COMPARE_OP_STR_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7670,12 +7467,12 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; stack_pointer[-1] = res; + SET_CURRENT_CACHED_VALUES(0); break; } case _COMPARE_OP_STR_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; @@ -7698,12 +7495,12 @@ res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache1 = res; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _IS_OP_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef right; _PyStackRef left; _PyStackRef b; @@ -7726,26 +7523,20 @@ stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CONTAINS_OP_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _CONTAINS_OP_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef b; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = _stack_item_1; - left = _stack_item_0; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = PySequence_Contains(right_o, left_o); _PyStackRef tmp = right; @@ -7765,12 +7556,12 @@ } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_ANY_SET_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; tos = _stack_item_0; @@ -7784,12 +7575,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_TOS_ANY_SET_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef tos; tos = stack_pointer[-1]; PyObject *o = PyStackRef_AsPyObjectBorrow(tos); @@ -7798,12 +7589,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_TOS_ANY_SET_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7820,12 +7611,12 @@ } _tos_cache1 = tos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_TOS_ANY_SET_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef tos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -7845,28 +7636,22 @@ _tos_cache2 = tos; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } - case _CONTAINS_OP_SET_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _CONTAINS_OP_SET_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef b; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = _stack_item_1; - left = _stack_item_0; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyAnySet_CheckExact(right_o)); STAT_INC(CONTAINS_OP, hit); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = _PySet_Contains((PySetObject *)right_o, left_o); _PyStackRef tmp = right; @@ -7886,28 +7671,22 @@ } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CONTAINS_OP_DICT_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _CONTAINS_OP_DICT_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef b; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - right = _stack_item_1; - left = _stack_item_0; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyDict_CheckExact(right_o)); STAT_INC(CONTAINS_OP, hit); - stack_pointer[0] = left; - stack_pointer[1] = right; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int res = PyDict_Contains(right_o, left_o); _PyStackRef tmp = right; @@ -7927,26 +7706,20 @@ } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CHECK_EG_MATCH_r22: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); + case _CHECK_EG_MATCH_r02: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef match_type_st; _PyStackRef exc_value_st; _PyStackRef rest; _PyStackRef match; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - match_type_st = _stack_item_1; - exc_value_st = _stack_item_0; + match_type_st = stack_pointer[-1]; + exc_value_st = stack_pointer[-2]; PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st); PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st); - stack_pointer[0] = exc_value_st; - stack_pointer[1] = match_type_st; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptStarTypeValid(tstate, match_type); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8000,24 +7773,20 @@ match = PyStackRef_FromPyObjectSteal(match_o); _tos_cache1 = match; _tos_cache0 = rest; + SET_CURRENT_CACHED_VALUES(2); break; } - case _CHECK_EXC_MATCH_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _CHECK_EXC_MATCH_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef b; - _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyExceptionInstance_Check(left_o)); - stack_pointer[0] = right; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int err = _PyEval_CheckExceptTypeValid(tstate, right_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8035,25 +7804,19 @@ stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + SET_CURRENT_CACHED_VALUES(1); break; } - case _IMPORT_NAME_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _IMPORT_NAME_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef fromlist; _PyStackRef level; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - fromlist = _stack_item_1; - level = _stack_item_0; + fromlist = stack_pointer[-1]; + level = stack_pointer[-2]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - stack_pointer[0] = level; - stack_pointer[1] = fromlist; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_ImportName(tstate, frame, name, PyStackRef_AsPyObjectBorrow(fromlist), @@ -8075,12 +7838,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _IMPORT_FROM_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef from; _PyStackRef res; oparg = CURRENT_OPARG(); @@ -8095,6 +7858,7 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } @@ -8104,7 +7868,6 @@ case _IS_NONE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; _PyStackRef b; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8126,12 +7889,12 @@ stack_pointer += -1; } _tos_cache0 = b; + SET_CURRENT_CACHED_VALUES(1); break; } case _GET_LEN_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef obj; _PyStackRef len; obj = stack_pointer[-1]; @@ -8149,29 +7912,21 @@ } len = PyStackRef_FromPyObjectSteal(len_o); _tos_cache0 = len; + SET_CURRENT_CACHED_VALUES(1); break; } - case _MATCH_CLASS_r31: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); + case _MATCH_CLASS_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef names; _PyStackRef type; _PyStackRef subject; _PyStackRef attrs; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - names = _stack_item_2; - type = _stack_item_1; - subject = _stack_item_0; + names = stack_pointer[-1]; + type = stack_pointer[-2]; + subject = stack_pointer[-3]; assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names))); - stack_pointer[0] = subject; - stack_pointer[1] = type; - stack_pointer[2] = names; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *attrs_o = _PyEval_MatchClass(tstate, PyStackRef_AsPyObjectBorrow(subject), @@ -8204,12 +7959,12 @@ attrs = PyStackRef_None; } _tos_cache0 = attrs; + SET_CURRENT_CACHED_VALUES(1); break; } case _MATCH_MAPPING_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8218,24 +7973,24 @@ res = match ? PyStackRef_True : PyStackRef_False; _tos_cache1 = res; _tos_cache0 = subject; + SET_CURRENT_CACHED_VALUES(2); break; } case _MATCH_MAPPING_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _MATCH_MAPPING_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8246,12 +8001,12 @@ _tos_cache2 = res; _tos_cache1 = subject; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _MATCH_SEQUENCE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8260,24 +8015,24 @@ res = match ? PyStackRef_True : PyStackRef_False; _tos_cache1 = res; _tos_cache0 = subject; + SET_CURRENT_CACHED_VALUES(2); break; } case _MATCH_SEQUENCE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef subject; _PyStackRef res; subject = stack_pointer[-1]; int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _MATCH_SEQUENCE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef subject; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8288,12 +8043,12 @@ _tos_cache2 = res; _tos_cache1 = subject; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _MATCH_KEYS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef keys; _PyStackRef subject; _PyStackRef values_or_none; @@ -8309,25 +8064,20 @@ } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); _tos_cache0 = values_or_none; + SET_CURRENT_CACHED_VALUES(1); break; } - case _GET_ITER_r12: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); + case _GET_ITER_r02: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef iterable; _PyStackRef iter; _PyStackRef index_or_null; - _PyStackRef _stack_item_0 = _tos_cache0; - iterable = _stack_item_0; + iterable = stack_pointer[-1]; #ifdef Py_STATS - stack_pointer[0] = iterable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _Py_GatherStats_GetIter(iterable); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; #endif PyTypeObject *tp = PyStackRef_TYPE(iterable); @@ -8336,9 +8086,6 @@ index_or_null = PyStackRef_TagInt(0); } else { - stack_pointer[0] = iterable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8353,25 +8100,24 @@ } iter = PyStackRef_FromPyObjectSteal(iter_o); index_or_null = PyStackRef_NULL; + stack_pointer += 1; } _tos_cache1 = index_or_null; _tos_cache0 = iter; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(2); break; } - case _GET_YIELD_FROM_ITER_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _GET_YIELD_FROM_ITER_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef iterable; _PyStackRef iter; - _PyStackRef _stack_item_0 = _tos_cache0; - iterable = _stack_item_0; + iterable = stack_pointer[-1]; PyObject *iterable_o = PyStackRef_AsPyObjectBorrow(iterable); if (PyCoro_CheckExact(iterable_o)) { if (!(_PyFrame_GetCode(frame)->co_flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE))) { - stack_pointer[0] = iterable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyErr_SetString(tstate, PyExc_TypeError, "cannot 'yield from' a coroutine object " @@ -8386,9 +8132,6 @@ iter = iterable; } else { - stack_pointer[0] = iterable; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *iter_o = PyObject_GetIter(iterable_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -8403,15 +8146,17 @@ stack_pointer[-1] = iterable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; } _tos_cache0 = iter; + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */ - case _FOR_ITER_TIER_TWO_r00: { + case _FOR_ITER_TIER_TWO_r01: { CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; @@ -8433,11 +8178,9 @@ } } next = item; + _tos_cache0 = next; stack_pointer[-1] = null_or_index; - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); + SET_CURRENT_CACHED_VALUES(1); break; } @@ -8445,7 +8188,6 @@ case _ITER_CHECK_LIST_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8466,12 +8208,12 @@ #endif _tos_cache1 = null_or_index; _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(2); break; } case _ITER_CHECK_LIST_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -8488,12 +8230,12 @@ JUMP_TO_JUMP_TARGET(); } #endif + SET_CURRENT_CACHED_VALUES(0); break; } case _ITER_CHECK_LIST_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8512,12 +8254,12 @@ } #endif _tos_cache0 = null_or_index; + SET_CURRENT_CACHED_VALUES(1); break; } case _ITER_CHECK_LIST_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8540,6 +8282,7 @@ _tos_cache2 = null_or_index; _tos_cache1 = iter; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } @@ -8631,9 +8374,8 @@ /* _ITER_NEXT_LIST is not a viable micro-op for tier 2 because it is replaced */ - case _ITER_NEXT_LIST_TIER_TWO_r00: { + case _ITER_NEXT_LIST_TIER_TWO_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -8658,16 +8400,14 @@ next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(list_o, PyStackRef_UntagInt(null_or_index))); #endif null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index); + _tos_cache0 = next; stack_pointer[-1] = null_or_index; - stack_pointer[0] = next; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _ITER_CHECK_TUPLE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8682,12 +8422,12 @@ assert(PyStackRef_IsTaggedInt(null_or_index)); _tos_cache1 = null_or_index; _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(2); break; } case _ITER_CHECK_TUPLE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef null_or_index; _PyStackRef iter; null_or_index = stack_pointer[-1]; @@ -8698,12 +8438,12 @@ JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); + SET_CURRENT_CACHED_VALUES(0); break; } case _ITER_CHECK_TUPLE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8716,12 +8456,12 @@ } assert(PyStackRef_IsTaggedInt(null_or_index)); _tos_cache0 = null_or_index; + SET_CURRENT_CACHED_VALUES(1); break; } case _ITER_CHECK_TUPLE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; @@ -8738,6 +8478,7 @@ _tos_cache2 = null_or_index; _tos_cache1 = iter; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } @@ -8821,7 +8562,6 @@ case _ITER_NEXT_TUPLE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef null_or_index; _PyStackRef iter; _PyStackRef next; @@ -8838,12 +8578,12 @@ _tos_cache2 = next; _tos_cache1 = null_or_index; _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(3); break; } case _ITER_CHECK_RANGE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8861,12 +8601,12 @@ #endif _tos_cache1 = _stack_item_1; _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(2); break; } case _ITER_CHECK_RANGE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef iter; iter = stack_pointer[-2]; _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); @@ -8880,12 +8620,12 @@ JUMP_TO_JUMP_TARGET(); } #endif + SET_CURRENT_CACHED_VALUES(0); break; } case _ITER_CHECK_RANGE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; iter = stack_pointer[-1]; @@ -8901,12 +8641,12 @@ } #endif _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _ITER_CHECK_RANGE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef iter; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -8926,6 +8666,7 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = iter; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } @@ -9001,7 +8742,6 @@ case _ITER_NEXT_RANGE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef iter; _PyStackRef next; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9029,12 +8769,12 @@ _tos_cache2 = next; _tos_cache1 = _stack_item_1; _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(3); break; } case _FOR_ITER_GEN_FRAME_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef iter; _PyStackRef gen_frame; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9086,12 +8826,12 @@ stack_pointer[0] = iter; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(2); break; } case _INSERT_NULL_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self; _PyStackRef *method_and_self; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9101,12 +8841,12 @@ method_and_self[0] = PyStackRef_NULL; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _LOAD_SPECIAL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *method_and_self; oparg = CURRENT_OPARG(); method_and_self = &stack_pointer[-2]; @@ -9131,12 +8871,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _WITH_EXCEPT_START_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef val; _PyStackRef lasti; _PyStackRef exit_self; @@ -9170,12 +8910,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _PUSH_EXC_INFO_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; @@ -9193,12 +8933,12 @@ new_exc = exc; _tos_cache1 = new_exc; _tos_cache0 = prev_exc; + SET_CURRENT_CACHED_VALUES(2); break; } case _PUSH_EXC_INFO_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; @@ -9215,12 +8955,12 @@ new_exc = exc; _tos_cache0 = new_exc; stack_pointer[-1] = prev_exc; + SET_CURRENT_CACHED_VALUES(1); break; } case _PUSH_EXC_INFO_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef exc; _PyStackRef prev_exc; _PyStackRef new_exc; @@ -9240,12 +8980,12 @@ _tos_cache2 = new_exc; _tos_cache1 = prev_exc; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -9261,12 +9001,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); @@ -9277,12 +9017,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9301,12 +9041,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9328,12 +9068,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_KEYS_VERSION_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -9350,12 +9090,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_KEYS_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint32_t keys_version = (uint32_t)CURRENT_OPERAND0(); @@ -9367,12 +9107,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_KEYS_VERSION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9392,12 +9132,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_KEYS_VERSION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9420,12 +9160,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_ATTR_METHOD_WITH_VALUES_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9441,12 +9181,12 @@ self = owner; _tos_cache1 = self; _tos_cache0 = attr; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_ATTR_METHOD_WITH_VALUES_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9461,12 +9201,12 @@ self = owner; _tos_cache0 = self; stack_pointer[-1] = attr; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_METHOD_WITH_VALUES_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9484,12 +9224,12 @@ _tos_cache2 = self; _tos_cache1 = attr; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_ATTR_METHOD_NO_DICT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9506,12 +9246,12 @@ self = owner; _tos_cache1 = self; _tos_cache0 = attr; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_ATTR_METHOD_NO_DICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9527,12 +9267,12 @@ self = owner; _tos_cache0 = self; stack_pointer[-1] = attr; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_METHOD_NO_DICT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9551,12 +9291,12 @@ _tos_cache2 = self; _tos_cache1 = attr; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9571,12 +9311,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); _tos_cache0 = attr; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef _stack_item_0 = _tos_cache0; @@ -9592,12 +9332,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); _tos_cache0 = attr; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; owner = _stack_item_0; @@ -9613,12 +9353,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef owner; owner = stack_pointer[-1]; uint16_t dictoffset = (uint16_t)CURRENT_OPERAND0(); @@ -9629,12 +9369,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9653,12 +9393,12 @@ } _tos_cache1 = owner; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_ATTR_METHOD_LAZY_DICT_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -9680,12 +9420,12 @@ _tos_cache2 = owner; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_ATTR_METHOD_LAZY_DICT_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9701,12 +9441,12 @@ self = owner; _tos_cache1 = self; _tos_cache0 = attr; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_ATTR_METHOD_LAZY_DICT_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9721,12 +9461,12 @@ self = owner; _tos_cache0 = self; stack_pointer[-1] = attr; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_ATTR_METHOD_LAZY_DICT_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef owner; _PyStackRef attr; _PyStackRef self; @@ -9744,12 +9484,12 @@ _tos_cache2 = self; _tos_cache1 = attr; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _MAYBE_EXPAND_METHOD_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -9770,6 +9510,7 @@ } stack_pointer[-2 - oparg] = callable; stack_pointer[-1 - oparg] = self_or_null; + SET_CURRENT_CACHED_VALUES(0); break; } @@ -9779,7 +9520,6 @@ case _PY_FRAME_GENERAL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -9811,12 +9551,12 @@ } new_frame = PyStackRef_Wrap(temp); _tos_cache0 = new_frame; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_FUNCTION_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -9831,12 +9571,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_FUNCTION_VERSION_INLINE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = (PyObject *)CURRENT_OPERAND1(); assert(PyFunction_Check(callable_o)); @@ -9845,12 +9585,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_FUNCTION_VERSION_INLINE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); PyObject *callable_o = (PyObject *)CURRENT_OPERAND1(); @@ -9861,12 +9601,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_FUNCTION_VERSION_INLINE_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); @@ -9879,12 +9619,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_FUNCTION_VERSION_INLINE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -9899,12 +9639,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _CHECK_METHOD_VERSION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -9929,12 +9669,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _EXPAND_METHOD_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -9952,12 +9692,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_IS_NOT_PY_CALLABLE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -9970,12 +9710,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CALL_NON_PY_GENERAL_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10049,12 +9789,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -10068,12 +9808,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -10090,23 +9830,23 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_PEP_523_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); if (tstate->interp->eval_frame) { UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_PEP_523_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (tstate->interp->eval_frame) { stack_pointer[0] = _stack_item_0; @@ -10117,12 +9857,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_PEP_523_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (tstate->interp->eval_frame) { @@ -10136,12 +9876,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_PEP_523_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -10158,12 +9898,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _CHECK_FUNCTION_EXACT_ARGS_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -10177,12 +9917,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_STACK_SPACE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef callable; oparg = CURRENT_OPARG(); callable = stack_pointer[-2 - oparg]; @@ -10194,23 +9934,23 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_RECURSION_REMAINING_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); if (tstate->py_recursion_remaining <= 1) { UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_RECURSION_REMAINING_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (tstate->py_recursion_remaining <= 1) { stack_pointer[0] = _stack_item_0; @@ -10221,12 +9961,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_RECURSION_REMAINING_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (tstate->py_recursion_remaining <= 1) { @@ -10240,12 +9980,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_RECURSION_REMAINING_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -10262,12 +10002,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _INIT_CALL_PY_EXACT_ARGS_0_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10289,12 +10029,12 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _INIT_CALL_PY_EXACT_ARGS_1_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10316,12 +10056,12 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _INIT_CALL_PY_EXACT_ARGS_2_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10343,12 +10083,12 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _INIT_CALL_PY_EXACT_ARGS_3_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10370,12 +10110,12 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _INIT_CALL_PY_EXACT_ARGS_4_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10397,12 +10137,12 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _INIT_CALL_PY_EXACT_ARGS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10423,12 +10163,12 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _PUSH_FRAME_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef new_frame; _PyStackRef _stack_item_0 = _tos_cache0; new_frame = _stack_item_0; @@ -10442,12 +10182,12 @@ LOAD_SP(); LOAD_IP(0); LLTRACE_RESUME_FRAME(); + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_NULL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10463,12 +10203,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = null; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_NULL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; null = stack_pointer[-2]; if (!PyStackRef_IsNull(null)) { @@ -10476,12 +10216,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_NULL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; null = stack_pointer[-1]; @@ -10494,12 +10234,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_NULL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10518,12 +10258,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = null; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_NOS_NOT_NULL_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10535,12 +10275,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = nos; + SET_CURRENT_CACHED_VALUES(2); break; } case _GUARD_NOS_NOT_NULL_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef nos; nos = stack_pointer[-2]; PyObject *o = PyStackRef_AsPyObjectBorrow(nos); @@ -10548,12 +10288,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_NOS_NOT_NULL_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; nos = stack_pointer[-1]; @@ -10563,12 +10303,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_NOS_NOT_NULL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef nos; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10582,12 +10322,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = nos; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_THIRD_NULL_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef null; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10606,12 +10346,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = null; + SET_CURRENT_CACHED_VALUES(3); break; } case _GUARD_CALLABLE_TYPE_1_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10631,12 +10371,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = callable; + SET_CURRENT_CACHED_VALUES(3); break; } case _CALL_TYPE_1_r31: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; @@ -10663,12 +10403,12 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_CALLABLE_STR_1_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10688,31 +10428,23 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = callable; + SET_CURRENT_CACHED_VALUES(3); break; } - case _CALL_STR_1_r31: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); + case _CALL_STR_1_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = _stack_item_2; - null = _stack_item_1; - callable = _stack_item_0; + arg = stack_pointer[-1]; + null = stack_pointer[-2]; + callable = stack_pointer[-3]; PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); STAT_INC(CALL, hit); - stack_pointer[0] = callable; - stack_pointer[1] = null; - stack_pointer[2] = arg; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Str(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10729,12 +10461,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_CALLABLE_TUPLE_1_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -10754,31 +10486,23 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = callable; + SET_CURRENT_CACHED_VALUES(3); break; } - case _CALL_TUPLE_1_r31: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); + case _CALL_TUPLE_1_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = _stack_item_2; - null = _stack_item_1; - callable = _stack_item_0; + arg = stack_pointer[-1]; + null = stack_pointer[-2]; + callable = stack_pointer[-3]; PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); assert(oparg == 1); STAT_INC(CALL, hit); - stack_pointer[0] = callable; - stack_pointer[1] = null; - stack_pointer[2] = arg; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PySequence_Tuple(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -10795,12 +10519,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_AND_ALLOCATE_OBJECT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -10851,12 +10575,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _CREATE_INIT_FRAME_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef self; _PyStackRef init; @@ -10889,19 +10613,15 @@ tstate->py_recursion_remaining--; init_frame = PyStackRef_Wrap(temp); _tos_cache0 = init_frame; + SET_CURRENT_CACHED_VALUES(1); break; } - case _EXIT_INIT_CHECK_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); + case _EXIT_INIT_CHECK_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef should_be_none; - _PyStackRef _stack_item_0 = _tos_cache0; - should_be_none = _stack_item_0; + should_be_none = stack_pointer[-1]; if (!PyStackRef_IsNone(should_be_none)) { - stack_pointer[0] = should_be_none; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyErr_Format(PyExc_TypeError, "__init__() should return None, not '%.200s'", @@ -10910,12 +10630,14 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } - case _CALL_BUILTIN_CLASS_r00: { + case _CALL_BUILTIN_CLASS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -10993,15 +10715,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_BUILTIN_O_r00: { + case _CALL_BUILTIN_O_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11053,15 +10773,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_BUILTIN_FAST_r00: { + case _CALL_BUILTIN_FAST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11143,15 +10861,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00: { + case _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11233,15 +10949,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_CALLABLE_LEN_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11262,30 +10976,22 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = callable; + SET_CURRENT_CACHED_VALUES(3); break; } - case _CALL_LEN_r31: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); + case _CALL_LEN_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef arg; _PyStackRef null; _PyStackRef callable; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - arg = _stack_item_2; - null = _stack_item_1; - callable = _stack_item_0; + arg = stack_pointer[-1]; + null = stack_pointer[-2]; + callable = stack_pointer[-3]; (void)null; STAT_INC(CALL, hit); PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg); - stack_pointer[0] = callable; - stack_pointer[1] = null; - stack_pointer[2] = arg; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); Py_ssize_t len_i = PyObject_Length(arg_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11311,12 +11017,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_CALLABLE_ISINSTANCE_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11337,32 +11043,24 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } - case _CALL_ISINSTANCE_r31: { - CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); + case _CALL_ISINSTANCE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef cls; _PyStackRef instance; _PyStackRef null; _PyStackRef callable; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - cls = _stack_item_2; - instance = _stack_item_1; - null = _stack_item_0; - callable = stack_pointer[-1]; + cls = stack_pointer[-1]; + instance = stack_pointer[-2]; + null = stack_pointer[-3]; + callable = stack_pointer[-4]; STAT_INC(CALL, hit); PyObject *inst_o = PyStackRef_AsPyObjectBorrow(instance); PyObject *cls_o = PyStackRef_AsPyObjectBorrow(cls); - stack_pointer[0] = null; - stack_pointer[1] = instance; - stack_pointer[2] = cls; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); int retval = PyObject_IsInstance(inst_o, cls_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -11389,12 +11087,12 @@ res = retval ? PyStackRef_True : PyStackRef_False; assert((!PyStackRef_IsNull(res)) ^ (_PyErr_Occurred(tstate) != NULL)); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _GUARD_CALLABLE_LIST_APPEND_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -11415,12 +11113,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = callable; + SET_CURRENT_CACHED_VALUES(3); break; } case _CALL_LIST_APPEND_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; @@ -11462,12 +11160,12 @@ assert(next_instr->op.code == POP_TOP); SKIP_OVER(1); #endif + SET_CURRENT_CACHED_VALUES(0); break; } - case _CALL_METHOD_DESCRIPTOR_O_r00: { + case _CALL_METHOD_DESCRIPTOR_O_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11540,15 +11238,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00: { + case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11640,15 +11336,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_METHOD_DESCRIPTOR_NOARGS_r00: { + case _CALL_METHOD_DESCRIPTOR_NOARGS_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11708,15 +11402,13 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_METHOD_DESCRIPTOR_FAST_r00: { + case _CALL_METHOD_DESCRIPTOR_FAST_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; @@ -11806,9 +11498,8 @@ JUMP_TO_ERROR(); } res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } @@ -11816,7 +11507,6 @@ case _MAYBE_EXPAND_METHOD_KW_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -11837,25 +11527,24 @@ } stack_pointer[-3 - oparg] = callable; stack_pointer[-2 - oparg] = self_or_null; + SET_CURRENT_CACHED_VALUES(0); break; } /* _DO_CALL_KW is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _PY_FRAME_KW_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _PY_FRAME_KW_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef kwnames; _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; _PyStackRef new_frame; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - kwnames = _stack_item_0; - args = &stack_pointer[-oparg]; - self_or_null = stack_pointer[-1 - oparg]; - callable = stack_pointer[-2 - oparg]; + kwnames = stack_pointer[-1]; + args = &stack_pointer[-1 - oparg]; + self_or_null = stack_pointer[-2 - oparg]; + callable = stack_pointer[-3 - oparg]; PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); int total_args = oparg; _PyStackRef *arguments = args; @@ -11868,9 +11557,6 @@ assert(Py_TYPE(callable_o) == &PyFunction_Type); int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags; PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o)); - stack_pointer[0] = kwnames; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyInterpreterFrame *temp = _PyEvalFramePushAndInit( tstate, callable, locals, @@ -11890,12 +11576,12 @@ } new_frame = PyStackRef_Wrap(temp); _tos_cache0 = new_frame; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_FUNCTION_VERSION_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -11912,12 +11598,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_METHOD_VERSION_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -11944,12 +11630,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _EXPAND_METHOD_KW_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef self_or_null; _PyStackRef callable; oparg = CURRENT_OPARG(); @@ -11967,12 +11653,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable_s); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_IS_NOT_PY_CALLABLE_KW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); @@ -11987,23 +11673,22 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CALL_KW_NON_PY_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _CALL_KW_NON_PY_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef kwnames; _PyStackRef *args; _PyStackRef self_or_null; _PyStackRef callable; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - kwnames = _stack_item_0; - args = &stack_pointer[-oparg]; - self_or_null = stack_pointer[-1 - oparg]; - callable = stack_pointer[-2 - oparg]; + kwnames = stack_pointer[-1]; + args = &stack_pointer[-1 - oparg]; + self_or_null = stack_pointer[-2 - oparg]; + callable = stack_pointer[-3 - oparg]; #if TIER_ONE assert(opcode != INSTRUMENTED_CALL); #endif @@ -12019,7 +11704,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = kwnames; kwnames = PyStackRef_NULL; - stack_pointer[0] = kwnames; + stack_pointer[-1] = kwnames; PyStackRef_CLOSE(tmp); for (int _i = oparg; --_i >= 0;) { tmp = args[_i]; @@ -12028,23 +11713,20 @@ } tmp = self_or_null; self_or_null = PyStackRef_NULL; - stack_pointer[-1 - oparg] = self_or_null; + stack_pointer[-2 - oparg] = self_or_null; PyStackRef_XCLOSE(tmp); tmp = callable; callable = PyStackRef_NULL; - stack_pointer[-2 - oparg] = callable; + stack_pointer[-3 - oparg] = callable; PyStackRef_CLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2 - oparg; + stack_pointer += -3 - oparg; assert(WITHIN_STACK_BOUNDS()); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames); int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o); - stack_pointer[0] = kwnames; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall( callable_o, args_o, @@ -12082,12 +11764,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _MAKE_CALLARGS_A_TUPLE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef callargs; _PyStackRef func; callargs = stack_pointer[-2]; @@ -12116,22 +11798,18 @@ stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer[-2] = callargs; + SET_CURRENT_CACHED_VALUES(0); break; } /* _DO_CALL_FUNCTION_EX is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */ - case _MAKE_FUNCTION_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _MAKE_FUNCTION_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef codeobj_st; _PyStackRef func; - _PyStackRef _stack_item_0 = _tos_cache0; - codeobj_st = _stack_item_0; + codeobj_st = stack_pointer[-1]; PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st); - stack_pointer[0] = codeobj_st; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); @@ -12149,12 +11827,12 @@ func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); _tos_cache0 = func; + SET_CURRENT_CACHED_VALUES(1); break; } case _SET_FUNCTION_ATTRIBUTE_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; @@ -12173,12 +11851,12 @@ assert(*ptr == NULL); *ptr = attr; _tos_cache0 = func_out; + SET_CURRENT_CACHED_VALUES(1); break; } case _SET_FUNCTION_ATTRIBUTE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; @@ -12196,12 +11874,12 @@ assert(*ptr == NULL); *ptr = attr; stack_pointer[-1] = func_out; + SET_CURRENT_CACHED_VALUES(0); break; } case _SET_FUNCTION_ATTRIBUTE_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef func_in; _PyStackRef attr_st; _PyStackRef func_out; @@ -12222,12 +11900,12 @@ *ptr = attr; _tos_cache1 = func_out; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _RETURN_GENERATOR_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef res; assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); @@ -12255,12 +11933,12 @@ res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _BUILD_SLICE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef *args; _PyStackRef slice; oparg = CURRENT_OPARG(); @@ -12285,23 +11963,19 @@ } slice = PyStackRef_FromPyObjectStealMortal(slice_o); _tos_cache0 = slice; + SET_CURRENT_CACHED_VALUES(1); break; } - case _CONVERT_VALUE_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _CONVERT_VALUE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef result; - _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - value = _stack_item_0; + value = stack_pointer[-1]; conversion_func conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = _PyEval_ConversionFuncs[oparg]; - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *result_o = conv_fn(PyStackRef_AsPyObjectBorrow(value)); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12316,21 +11990,17 @@ } result = PyStackRef_FromPyObjectSteal(result_o); _tos_cache0 = result; + SET_CURRENT_CACHED_VALUES(1); break; } - case _FORMAT_SIMPLE_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); + case _FORMAT_SIMPLE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef value; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - value = _stack_item_0; + value = stack_pointer[-1]; PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(value_o, NULL); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12347,25 +12017,20 @@ } else { res = value; + stack_pointer += -1; } _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _FORMAT_WITH_SPEC_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _FORMAT_WITH_SPEC_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef fmt_spec; _PyStackRef value; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - fmt_spec = _stack_item_1; - value = _stack_item_0; - stack_pointer[0] = value; - stack_pointer[1] = fmt_spec; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); + fmt_spec = stack_pointer[-1]; + value = stack_pointer[-2]; _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec)); _PyStackRef tmp = fmt_spec; @@ -12385,12 +12050,12 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } case _COPY_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef bottom; _PyStackRef top; oparg = CURRENT_OPARG(); @@ -12398,27 +12063,21 @@ assert(oparg > 0); top = PyStackRef_DUP(bottom); _tos_cache0 = top; + SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef rhs; _PyStackRef lhs; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - rhs = _stack_item_1; - lhs = _stack_item_0; + rhs = stack_pointer[-1]; + lhs = stack_pointer[-2]; PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs); PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs); assert(_PyEval_BinaryOps[oparg]); - stack_pointer[0] = lhs; - stack_pointer[1] = rhs; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = _PyEval_BinaryOps[oparg](lhs_o, rhs_o); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -12442,12 +12101,12 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _SWAP_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef top; _PyStackRef bottom; _PyStackRef _stack_item_0 = _tos_cache0; @@ -12460,6 +12119,7 @@ assert(oparg >= 2); _tos_cache0 = top; stack_pointer[-1 - (oparg-2)] = bottom; + SET_CURRENT_CACHED_VALUES(1); break; } @@ -12483,7 +12143,6 @@ case _GUARD_IS_TRUE_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; flag = stack_pointer[-1]; int is_true = PyStackRef_IsTrue(flag); @@ -12493,12 +12152,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_IS_FALSE_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef flag; flag = stack_pointer[-1]; int is_false = PyStackRef_IsFalse(flag); @@ -12508,12 +12167,12 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_IS_NONE_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef val; val = stack_pointer[-1]; int is_none = PyStackRef_IsNone(val); @@ -12530,12 +12189,12 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _GUARD_IS_NOT_NONE_POP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef val; val = stack_pointer[-1]; int is_none = PyStackRef_IsNone(val); @@ -12548,49 +12207,49 @@ UOP_STAT_INC(uopcode, miss); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _JUMP_TO_TOP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); + SET_CURRENT_CACHED_VALUES(0); break; } case _SET_IP_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; + SET_CURRENT_CACHED_VALUES(0); break; } case _SET_IP_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _SET_IP_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *instr_ptr = (PyObject *)CURRENT_OPERAND0(); frame->instr_ptr = (_Py_CODEUNIT *)instr_ptr; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _SET_IP_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -12599,12 +12258,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _CHECK_STACK_SPACE_OPERAND_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); if (!_PyThreadState_HasStackSpace(tstate, framesize)) { @@ -12617,12 +12276,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_STACK_SPACE_OPERAND_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); assert(framesize <= INT_MAX); @@ -12643,12 +12302,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_STACK_SPACE_OPERAND_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t framesize = (uint32_t)CURRENT_OPERAND0(); @@ -12673,12 +12332,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_STACK_SPACE_OPERAND_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -12707,12 +12366,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _SAVE_RETURN_OFFSET_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); #if TIER_ONE frame->return_offset = (uint16_t)(next_instr - this_instr); @@ -12720,12 +12379,12 @@ #if TIER_TWO frame->return_offset = oparg; #endif + SET_CURRENT_CACHED_VALUES(0); break; } case _SAVE_RETURN_OFFSET_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); #if TIER_ONE @@ -12735,12 +12394,12 @@ frame->return_offset = oparg; #endif _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _SAVE_RETURN_OFFSET_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); @@ -12752,12 +12411,12 @@ #endif _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _SAVE_RETURN_OFFSET_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -12771,12 +12430,12 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _EXIT_TRACE_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); _PyExitData *exit = (_PyExitData *)exit_p; PyCodeObject *code = _PyFrame_GetCode(frame); @@ -12825,12 +12484,12 @@ exit->executor = executor; } GOTO_TIER_TWO(exit->executor); + SET_CURRENT_CACHED_VALUES(0); break; } case _EXIT_TRACE_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); _PyExitData *exit = (_PyExitData *)exit_p; @@ -12898,12 +12557,12 @@ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); + SET_CURRENT_CACHED_VALUES(0); break; } case _EXIT_TRACE_r20: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; PyObject *exit_p = (PyObject *)CURRENT_OPERAND0(); @@ -12977,12 +12636,12 @@ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); + SET_CURRENT_CACHED_VALUES(0); break; } case _EXIT_TRACE_r30: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13062,23 +12721,23 @@ stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_VALIDITY_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); if (!current_executor->vm_data.valid) { UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_VALIDITY_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; if (!current_executor->vm_data.valid) { stack_pointer[0] = _stack_item_0; @@ -13089,12 +12748,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_VALIDITY_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; if (!current_executor->vm_data.valid) { @@ -13108,12 +12767,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_VALIDITY_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13130,34 +12789,34 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_CONST_INLINE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectNew(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_CONST_INLINE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectNew(ptr); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_CONST_INLINE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13166,12 +12825,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _POP_TOP_LOAD_CONST_INLINE_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -13182,34 +12841,34 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectNew(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_CONST_INLINE_BORROW_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef value; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_CONST_INLINE_BORROW_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; PyObject *ptr = (PyObject *)CURRENT_OPERAND0(); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_CONST_INLINE_BORROW_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; @@ -13218,12 +12877,12 @@ _tos_cache2 = value; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _POP_CALL_r20: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef null; _PyStackRef callable; _PyStackRef _stack_item_0 = _tos_cache0; @@ -13234,12 +12893,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _POP_CALL_ONE_r30: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef pop; _PyStackRef null; _PyStackRef callable; @@ -13262,12 +12921,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _POP_CALL_TWO_r30: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef pop2; _PyStackRef pop1; _PyStackRef null; @@ -13297,12 +12956,12 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); + SET_CURRENT_CACHED_VALUES(0); break; } case _POP_TOP_LOAD_CONST_INLINE_BORROW_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef value; _PyStackRef _stack_item_0 = _tos_cache0; @@ -13313,12 +12972,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _POP_TWO_LOAD_CONST_INLINE_BORROW_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop2; _PyStackRef pop1; _PyStackRef value; @@ -13340,12 +12999,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _POP_CALL_LOAD_CONST_INLINE_BORROW_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef null; _PyStackRef callable; _PyStackRef value; @@ -13360,12 +13019,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop; _PyStackRef null; _PyStackRef callable; @@ -13392,12 +13051,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef pop2; _PyStackRef pop1; _PyStackRef null; @@ -13431,12 +13090,12 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_CONST_UNDER_INLINE_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef old; _PyStackRef value; _PyStackRef new; @@ -13447,12 +13106,12 @@ value = PyStackRef_FromPyObjectNew(ptr); _tos_cache1 = new; _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_CONST_UNDER_INLINE_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef old; _PyStackRef value; _PyStackRef new; @@ -13462,12 +13121,12 @@ value = PyStackRef_FromPyObjectNew(ptr); _tos_cache0 = new; stack_pointer[-1] = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_CONST_UNDER_INLINE_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef old; _PyStackRef value; _PyStackRef new; @@ -13480,12 +13139,12 @@ _tos_cache2 = new; _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _LOAD_CONST_UNDER_INLINE_BORROW_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef old; _PyStackRef value; _PyStackRef new; @@ -13496,12 +13155,12 @@ value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache1 = new; _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(2); break; } case _LOAD_CONST_UNDER_INLINE_BORROW_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef old; _PyStackRef value; _PyStackRef new; @@ -13511,12 +13170,12 @@ value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = new; stack_pointer[-1] = value; + SET_CURRENT_CACHED_VALUES(1); break; } case _LOAD_CONST_UNDER_INLINE_BORROW_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef old; _PyStackRef value; _PyStackRef new; @@ -13529,12 +13188,12 @@ _tos_cache2 = new; _tos_cache1 = value; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _CHECK_FUNCTION_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); @@ -13543,12 +13202,12 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + SET_CURRENT_CACHED_VALUES(0); break; } case _CHECK_FUNCTION_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); @@ -13562,12 +13221,12 @@ JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _CHECK_FUNCTION_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; uint32_t func_version = (uint32_t)CURRENT_OPERAND0(); @@ -13584,12 +13243,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _CHECK_FUNCTION_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13609,45 +13268,45 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _START_EXECUTOR_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); PyObject *executor = (PyObject *)CURRENT_OPERAND0(); #ifndef _Py_JIT current_executor = (_PyExecutorObject*)executor; #endif assert(((_PyExecutorObject *)executor)->vm_data.valid); + SET_CURRENT_CACHED_VALUES(0); break; } case _MAKE_WARM_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); current_executor->vm_data.warm = true; if (--tstate->interp->trace_run_counter == 0) { _Py_set_eval_breaker_bit(tstate, _PY_EVAL_JIT_INVALIDATE_COLD_BIT); } + SET_CURRENT_CACHED_VALUES(0); break; } case _MAKE_WARM_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; current_executor->vm_data.warm = true; if (--tstate->interp->trace_run_counter == 0) { _Py_set_eval_breaker_bit(tstate, _PY_EVAL_JIT_INVALIDATE_COLD_BIT); } _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _MAKE_WARM_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; current_executor->vm_data.warm = true; @@ -13656,12 +13315,12 @@ } _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _MAKE_WARM_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13672,42 +13331,42 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _FATAL_ERROR_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); assert(0); Py_FatalError("Fatal error uop executed."); + SET_CURRENT_CACHED_VALUES(0); break; } case _FATAL_ERROR_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; assert(0); Py_FatalError("Fatal error uop executed."); _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _FATAL_ERROR_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; assert(0); Py_FatalError("Fatal error uop executed."); _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _FATAL_ERROR_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13716,30 +13375,30 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _DEOPT_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); GOTO_TIER_ONE(_PyFrame_GetBytecode(frame) + CURRENT_TARGET()); + SET_CURRENT_CACHED_VALUES(0); break; } case _ERROR_POP_N_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); uint32_t target = (uint32_t)CURRENT_OPERAND0(); assert(oparg == 0); frame->instr_ptr = _PyFrame_GetBytecode(frame) + target; GOTO_TIER_ONE(NULL); + SET_CURRENT_CACHED_VALUES(0); break; } case _TIER2_RESUME_CHECK_r00: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(0); #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { UOP_STAT_INC(uopcode, miss); @@ -13755,12 +13414,12 @@ JUMP_TO_JUMP_TARGET(); } assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); + SET_CURRENT_CACHED_VALUES(0); break; } case _TIER2_RESUME_CHECK_r11: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; #if defined(__EMSCRIPTEN__) if (_Py_emscripten_signal_clock == 0) { @@ -13784,12 +13443,12 @@ } assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(1); break; } case _TIER2_RESUME_CHECK_r22: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; #if defined(__EMSCRIPTEN__) @@ -13817,12 +13476,12 @@ assert(tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)); _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(2); break; } case _TIER2_RESUME_CHECK_r33: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13854,99 +13513,99 @@ _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; + SET_CURRENT_CACHED_VALUES(3); break; } case _SPILL_OR_RELOAD_r01: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(1); _tos_cache0 = stack_pointer[-1]; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _SPILL_OR_RELOAD_r02: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(2); _tos_cache1 = stack_pointer[-1]; _tos_cache0 = stack_pointer[-2]; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(2); break; } case _SPILL_OR_RELOAD_r03: { CHECK_CURRENT_CACHED_VALUES(0); - SET_CURRENT_CACHED_VALUES(3); _tos_cache2 = stack_pointer[-1]; _tos_cache1 = stack_pointer[-2]; _tos_cache0 = stack_pointer[-3]; stack_pointer += -3; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(3); break; } case _SPILL_OR_RELOAD_r10: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _SPILL_OR_RELOAD_r12: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache1 = _stack_item_0; _tos_cache0 = stack_pointer[-1]; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(2); break; } case _SPILL_OR_RELOAD_r13: { CHECK_CURRENT_CACHED_VALUES(1); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _tos_cache2 = _stack_item_0; _tos_cache1 = stack_pointer[-1]; _tos_cache0 = stack_pointer[-2]; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(3); break; } case _SPILL_OR_RELOAD_r20: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; stack_pointer[0] = _stack_item_0; stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _SPILL_OR_RELOAD_r21: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _tos_cache0 = _stack_item_1; stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _SPILL_OR_RELOAD_r23: { CHECK_CURRENT_CACHED_VALUES(2); - SET_CURRENT_CACHED_VALUES(3); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _tos_cache2 = _stack_item_1; @@ -13954,12 +13613,12 @@ _tos_cache0 = stack_pointer[-1]; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(3); break; } case _SPILL_OR_RELOAD_r30: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(0); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13968,12 +13627,12 @@ stack_pointer[2] = _stack_item_2; stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); break; } case _SPILL_OR_RELOAD_r31: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(1); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13982,12 +13641,12 @@ stack_pointer[1] = _stack_item_1; stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(1); break; } case _SPILL_OR_RELOAD_r32: { CHECK_CURRENT_CACHED_VALUES(3); - SET_CURRENT_CACHED_VALUES(2); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; @@ -13996,6 +13655,7 @@ stack_pointer[0] = _stack_item_0; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(2); break; } diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index f19b2eea68f8b6..654bd44256e790 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1200,6 +1200,11 @@ def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int]]: if uop.name in ("_START_EXECUTOR", "_JUMP_TO_TOP", "_DEOPT", "_ERROR_POP_N"): yield 0, 0 return + non_decref_escape = False + for call in uop.properties.escaping_calls.values(): + if "DECREF" in call.call.text or "CLOSE" in call.call.text: + continue + non_decref_escape = True has_exit = uop.properties.deopts or uop.properties.side_exit ideal_inputs = 0 has_array = False @@ -1218,11 +1223,13 @@ def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int]]: if item.peek and uop.properties.escapes: break ideal_outputs += 1 - if ideal_inputs > 3: ideal_inputs = 3 if ideal_outputs > 3: ideal_outputs = 3 + if non_decref_escape: + yield 0, ideal_outputs + return # If a uop has an exit, we can get in a mess if the stack caching # changes during execution. if has_exit and ideal_inputs != ideal_outputs: diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 403ee4ddd818ae..69fb71e2dd7caa 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -207,20 +207,15 @@ def generate_tier2( ) continue for inputs, outputs in get_uop_cache_depths(uop): - if inputs != outputs and (uop.properties.deopts or uop.properties.side_exit): - raise analysis_error(f"{uop.name} has side exit and differing cache depths", uop.body.open) out.emit(f"case {uop.name}_r{inputs}{outputs}: {{\n") out.emit(f"CHECK_CURRENT_CACHED_VALUES({inputs});\n") - if not is_for_iter_test(uop): - out.emit(f"SET_CURRENT_CACHED_VALUES({outputs});\n") declare_variables(uop, out) stack = Stack() stack.push_cache([f"_tos_cache{i}" for i in range(inputs)], out) stack._print(out) stack = write_uop(uop, emitter, stack, outputs) out.start_line() - if is_for_iter_test(uop): - out.emit(f"SET_CURRENT_CACHED_VALUES({outputs});\n") + out.emit(f"SET_CURRENT_CACHED_VALUES({outputs});\n") if not uop.properties.always_exits: out.emit("break;\n") out.start_line() From 2850d723e6948e3d362f036223565ffff3aaaad9 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 19 Jun 2025 14:58:35 +0100 Subject: [PATCH 13/14] Improve heuristics for stack caching --- Include/internal/pycore_opcode_metadata.h | 44 +- Include/internal/pycore_uop_ids.h | 1258 ++++++----- Include/internal/pycore_uop_metadata.h | 786 ++++--- Python/executor_cases.c.h | 1891 +++++------------ Python/optimizer.c | 7 + Tools/cases_generator/analyzer.py | 36 +- Tools/cases_generator/generators_common.py | 2 + .../opcode_metadata_generator.py | 2 +- Tools/cases_generator/tier2_generator.py | 9 +- Tools/cases_generator/uop_id_generator.py | 2 +- .../cases_generator/uop_metadata_generator.py | 12 +- 11 files changed, 1533 insertions(+), 2516 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index dd1bf2d1d2b51a..a5eed2c8eafd14 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -1029,7 +1029,7 @@ enum InstructionFormat { #define HAS_EXIT_FLAG (1024) #define HAS_PURE_FLAG (2048) #define HAS_PASSTHROUGH_FLAG (4096) -#define HAS_OPARG_AND_1_FLAG (8192) +#define HAS_SYNC_SP_FLAG (8192) #define HAS_ERROR_NO_POP_FLAG (16384) #define HAS_NO_SAVE_IP_FLAG (32768) #define OPCODE_HAS_ARG(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ARG_FLAG)) @@ -1045,7 +1045,7 @@ enum InstructionFormat { #define OPCODE_HAS_EXIT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EXIT_FLAG)) #define OPCODE_HAS_PURE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PURE_FLAG)) #define OPCODE_HAS_PASSTHROUGH(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PASSTHROUGH_FLAG)) -#define OPCODE_HAS_OPARG_AND_1(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_OPARG_AND_1_FLAG)) +#define OPCODE_HAS_SYNC_SP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_SYNC_SP_FLAG)) #define OPCODE_HAS_ERROR_NO_POP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_NO_POP_FLAG)) #define OPCODE_HAS_NO_SAVE_IP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NO_SAVE_IP_FLAG)) @@ -1079,7 +1079,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [BINARY_OP_MULTIPLY_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, [BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG }, [BINARY_OP_SUBSCR_DICT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG }, + [BINARY_OP_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_SYNC_SP_FLAG }, [BINARY_OP_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_SUBSCR_LIST_SLICE] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [BINARY_OP_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, @@ -1096,22 +1096,22 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [BUILD_TEMPLATE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [BUILD_TUPLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG }, [CACHE] = { true, INSTR_FMT_IX, 0 }, - [CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_ALLOC_AND_ENTER_INIT] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BOUND_METHOD_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, + [CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, + [CALL_ALLOC_AND_ENTER_INIT] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, + [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, + [CALL_BOUND_METHOD_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, [CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, + [CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, [CALL_INTRINSIC_1] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_INTRINSIC_2] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_ISINSTANCE] = { true, INSTR_FMT_IXC00, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_KW_BOUND_METHOD] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, + [CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, + [CALL_KW_BOUND_METHOD] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, [CALL_KW_NON_PY] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_KW_PY] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, + [CALL_KW_PY] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, [CALL_LEN] = { true, INSTR_FMT_IXC00, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [CALL_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, @@ -1119,8 +1119,8 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [CALL_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_NON_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [CALL_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, + [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_SYNC_SP_FLAG }, + [CALL_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, [CALL_STR_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_TUPLE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [CALL_TYPE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG }, @@ -1154,7 +1154,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [FORMAT_SIMPLE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [FORMAT_WITH_SPEC] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [FOR_ITER_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, + [FOR_ITER_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_SYNC_SP_FLAG }, [FOR_ITER_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [FOR_ITER_RANGE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG }, [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG }, @@ -1166,9 +1166,9 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [GET_YIELD_FROM_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [IMPORT_FROM] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, + [INSTRUMENTED_CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, + [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, + [INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, [INSTRUMENTED_END_ASYNC_FOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, [INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG }, [INSTRUMENTED_END_SEND] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, @@ -1176,7 +1176,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [INSTRUMENTED_INSTRUCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [INSTRUMENTED_JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [INSTRUMENTED_JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [INSTRUMENTED_LINE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, + [INSTRUMENTED_LINE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, [INSTRUMENTED_LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [INSTRUMENTED_NOT_TAKEN] = { true, INSTR_FMT_IX, 0 }, [INSTRUMENTED_POP_ITER] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, @@ -1199,7 +1199,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [LOAD_ATTR] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [LOAD_ATTR_CLASS] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG }, + [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_SYNC_SP_FLAG }, [LOAD_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, [LOAD_ATTR_METHOD_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG }, @@ -1207,7 +1207,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [LOAD_ATTR_MODULE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG }, [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR_PROPERTY] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, + [LOAD_ATTR_PROPERTY] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_SYNC_SP_FLAG }, [LOAD_ATTR_SLOT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [LOAD_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, [LOAD_BUILD_CLASS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, @@ -1257,8 +1257,8 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { [RESUME_CHECK] = { true, INSTR_FMT_IX, HAS_DEOPT_FLAG }, [RETURN_GENERATOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [RETURN_VALUE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, - [SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, + [SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG }, + [SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_SYNC_SP_FLAG }, [SETUP_ANNOTATIONS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [SET_ADD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, [SET_FUNCTION_ATTRIBUTE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h index 07f108d2c70d0c..274780fd9b9138 100644 --- a/Include/internal/pycore_uop_ids.h +++ b/Include/internal/pycore_uop_ids.h @@ -348,652 +348,618 @@ extern "C" { #define _YIELD_VALUE YIELD_VALUE #define MAX_UOP_ID 544 #define _BINARY_OP_r01 545 -#define _BINARY_OP_ADD_FLOAT_r10 546 -#define _BINARY_OP_ADD_FLOAT_r21 547 -#define _BINARY_OP_ADD_FLOAT_r32 548 -#define _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r10 549 -#define _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21 550 -#define _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r32 551 -#define _BINARY_OP_ADD_INT_r11 552 -#define _BINARY_OP_ADD_UNICODE_r10 553 -#define _BINARY_OP_ADD_UNICODE_r21 554 -#define _BINARY_OP_ADD_UNICODE_r32 555 -#define _BINARY_OP_EXTEND_r01 556 -#define _BINARY_OP_INPLACE_ADD_UNICODE_r00 557 -#define _BINARY_OP_MULTIPLY_FLOAT_r10 558 -#define _BINARY_OP_MULTIPLY_FLOAT_r21 559 -#define _BINARY_OP_MULTIPLY_FLOAT_r32 560 -#define _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r10 561 -#define _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21 562 -#define _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r32 563 -#define _BINARY_OP_MULTIPLY_INT_r11 564 -#define _BINARY_OP_SUBSCR_CHECK_FUNC_r22 565 -#define _BINARY_OP_SUBSCR_DICT_r01 566 -#define _BINARY_OP_SUBSCR_INIT_CALL_r31 567 -#define _BINARY_OP_SUBSCR_LIST_INT_r01 568 -#define _BINARY_OP_SUBSCR_LIST_SLICE_r01 569 -#define _BINARY_OP_SUBSCR_STR_INT_r11 570 -#define _BINARY_OP_SUBSCR_TUPLE_INT_r11 571 -#define _BINARY_OP_SUBTRACT_FLOAT_r10 572 -#define _BINARY_OP_SUBTRACT_FLOAT_r21 573 -#define _BINARY_OP_SUBTRACT_FLOAT_r32 574 -#define _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r10 575 -#define _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21 576 -#define _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r32 577 -#define _BINARY_OP_SUBTRACT_INT_r11 578 -#define _BINARY_SLICE_r01 579 -#define _BUILD_INTERPOLATION_r01 580 -#define _BUILD_LIST_r01 581 -#define _BUILD_MAP_r01 582 -#define _BUILD_SET_r01 583 -#define _BUILD_SLICE_r01 584 -#define _BUILD_STRING_r01 585 -#define _BUILD_TEMPLATE_r01 586 -#define _BUILD_TUPLE_r01 587 -#define _CALL_BUILTIN_CLASS_r01 588 -#define _CALL_BUILTIN_FAST_r01 589 -#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01 590 -#define _CALL_BUILTIN_O_r01 591 -#define _CALL_INTRINSIC_1_r01 592 -#define _CALL_INTRINSIC_2_r01 593 -#define _CALL_ISINSTANCE_r01 594 -#define _CALL_KW_NON_PY_r01 595 -#define _CALL_LEN_r01 596 -#define _CALL_LIST_APPEND_r00 597 -#define _CALL_METHOD_DESCRIPTOR_FAST_r01 598 -#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01 599 -#define _CALL_METHOD_DESCRIPTOR_NOARGS_r01 600 -#define _CALL_METHOD_DESCRIPTOR_O_r01 601 -#define _CALL_NON_PY_GENERAL_r01 602 -#define _CALL_STR_1_r01 603 -#define _CALL_TUPLE_1_r01 604 -#define _CALL_TYPE_1_r31 605 -#define _CHECK_AND_ALLOCATE_OBJECT_r00 606 -#define _CHECK_ATTR_CLASS_r00 607 -#define _CHECK_ATTR_CLASS_r11 608 -#define _CHECK_ATTR_CLASS_r22 609 -#define _CHECK_ATTR_CLASS_r33 610 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r00 611 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 612 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 613 -#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 614 -#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 615 -#define _CHECK_EG_MATCH_r02 616 -#define _CHECK_EXC_MATCH_r01 617 -#define _CHECK_FUNCTION_r00 618 -#define _CHECK_FUNCTION_r11 619 -#define _CHECK_FUNCTION_r22 620 -#define _CHECK_FUNCTION_r33 621 -#define _CHECK_FUNCTION_EXACT_ARGS_r00 622 -#define _CHECK_FUNCTION_VERSION_r00 623 -#define _CHECK_FUNCTION_VERSION_INLINE_r00 624 -#define _CHECK_FUNCTION_VERSION_INLINE_r11 625 -#define _CHECK_FUNCTION_VERSION_INLINE_r22 626 -#define _CHECK_FUNCTION_VERSION_INLINE_r33 627 -#define _CHECK_FUNCTION_VERSION_KW_r11 628 -#define _CHECK_IS_NOT_PY_CALLABLE_r00 629 -#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 630 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r00 631 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 632 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 633 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 634 -#define _CHECK_METHOD_VERSION_r00 635 -#define _CHECK_METHOD_VERSION_KW_r11 636 -#define _CHECK_PEP_523_r00 637 -#define _CHECK_PEP_523_r11 638 -#define _CHECK_PEP_523_r22 639 -#define _CHECK_PEP_523_r33 640 -#define _CHECK_PERIODIC_r00 641 -#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 642 -#define _CHECK_RECURSION_REMAINING_r00 643 -#define _CHECK_RECURSION_REMAINING_r11 644 -#define _CHECK_RECURSION_REMAINING_r22 645 -#define _CHECK_RECURSION_REMAINING_r33 646 -#define _CHECK_STACK_SPACE_r00 647 -#define _CHECK_STACK_SPACE_OPERAND_r00 648 -#define _CHECK_STACK_SPACE_OPERAND_r11 649 -#define _CHECK_STACK_SPACE_OPERAND_r22 650 -#define _CHECK_STACK_SPACE_OPERAND_r33 651 -#define _CHECK_VALIDITY_r00 652 -#define _CHECK_VALIDITY_r11 653 -#define _CHECK_VALIDITY_r22 654 -#define _CHECK_VALIDITY_r33 655 -#define _COMPARE_OP_r01 656 -#define _COMPARE_OP_FLOAT_r10 657 -#define _COMPARE_OP_FLOAT_r21 658 -#define _COMPARE_OP_FLOAT_r32 659 -#define _COMPARE_OP_INT_r10 660 -#define _COMPARE_OP_INT_r21 661 -#define _COMPARE_OP_INT_r32 662 -#define _COMPARE_OP_STR_r10 663 -#define _COMPARE_OP_STR_r21 664 -#define _COMPARE_OP_STR_r32 665 -#define _CONTAINS_OP_r01 666 -#define _CONTAINS_OP_DICT_r01 667 -#define _CONTAINS_OP_SET_r01 668 -#define _CONVERT_VALUE_r01 669 -#define _COPY_r01 670 -#define _COPY_1_r01 671 -#define _COPY_1_r12 672 -#define _COPY_1_r23 673 -#define _COPY_2_r23 674 -#define _COPY_3_r33 675 -#define _COPY_FREE_VARS_r00 676 -#define _COPY_FREE_VARS_r11 677 -#define _COPY_FREE_VARS_r22 678 -#define _COPY_FREE_VARS_r33 679 -#define _CREATE_INIT_FRAME_r01 680 -#define _DELETE_ATTR_r00 681 -#define _DELETE_DEREF_r00 682 -#define _DELETE_FAST_r00 683 -#define _DELETE_GLOBAL_r00 684 -#define _DELETE_NAME_r00 685 -#define _DELETE_SUBSCR_r00 686 -#define _DEOPT_r00 687 -#define _DICT_MERGE_r00 688 -#define _DICT_UPDATE_r00 689 -#define _DO_CALL_r01 690 -#define _DO_CALL_FUNCTION_EX_r01 691 -#define _DO_CALL_KW_r01 692 -#define _END_FOR_r10 693 -#define _END_SEND_r21 694 -#define _ERROR_POP_N_r00 695 -#define _EXIT_INIT_CHECK_r00 696 -#define _EXIT_TRACE_r00 697 -#define _EXIT_TRACE_r10 698 -#define _EXIT_TRACE_r20 699 -#define _EXIT_TRACE_r30 700 -#define _EXPAND_METHOD_r00 701 -#define _EXPAND_METHOD_KW_r00 702 -#define _FATAL_ERROR_r00 703 -#define _FATAL_ERROR_r11 704 -#define _FATAL_ERROR_r22 705 -#define _FATAL_ERROR_r33 706 -#define _FORMAT_SIMPLE_r01 707 -#define _FORMAT_WITH_SPEC_r01 708 -#define _FOR_ITER_r01 709 -#define _FOR_ITER_GEN_FRAME_r22 710 -#define _FOR_ITER_TIER_TWO_r01 711 -#define _GET_AITER_r01 712 -#define _GET_ANEXT_r01 713 -#define _GET_AWAITABLE_r01 714 -#define _GET_ITER_r02 715 -#define _GET_LEN_r01 716 -#define _GET_YIELD_FROM_ITER_r01 717 -#define _GUARD_BINARY_OP_EXTEND_r00 718 -#define _GUARD_CALLABLE_ISINSTANCE_r33 719 -#define _GUARD_CALLABLE_LEN_r33 720 -#define _GUARD_CALLABLE_LIST_APPEND_r33 721 -#define _GUARD_CALLABLE_STR_1_r33 722 -#define _GUARD_CALLABLE_TUPLE_1_r33 723 -#define _GUARD_CALLABLE_TYPE_1_r33 724 -#define _GUARD_DORV_NO_DICT_r00 725 -#define _GUARD_DORV_NO_DICT_r11 726 -#define _GUARD_DORV_NO_DICT_r22 727 -#define _GUARD_DORV_NO_DICT_r33 728 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00 729 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 730 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 731 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 732 -#define _GUARD_GLOBALS_VERSION_r00 733 -#define _GUARD_GLOBALS_VERSION_r11 734 -#define _GUARD_GLOBALS_VERSION_r22 735 -#define _GUARD_GLOBALS_VERSION_r33 736 -#define _GUARD_IS_FALSE_POP_r00 737 -#define _GUARD_IS_NONE_POP_r00 738 -#define _GUARD_IS_NOT_NONE_POP_r00 739 -#define _GUARD_IS_TRUE_POP_r00 740 -#define _GUARD_KEYS_VERSION_r00 741 -#define _GUARD_KEYS_VERSION_r11 742 -#define _GUARD_KEYS_VERSION_r22 743 -#define _GUARD_KEYS_VERSION_r33 744 -#define _GUARD_NOS_DICT_r00 745 -#define _GUARD_NOS_DICT_r11 746 -#define _GUARD_NOS_DICT_r22 747 -#define _GUARD_NOS_DICT_r33 748 -#define _GUARD_NOS_FLOAT_r00 749 -#define _GUARD_NOS_FLOAT_r11 750 -#define _GUARD_NOS_FLOAT_r22 751 -#define _GUARD_NOS_FLOAT_r33 752 -#define _GUARD_NOS_INT_r00 753 -#define _GUARD_NOS_INT_r11 754 -#define _GUARD_NOS_INT_r22 755 -#define _GUARD_NOS_INT_r33 756 -#define _GUARD_NOS_LIST_r00 757 -#define _GUARD_NOS_LIST_r11 758 -#define _GUARD_NOS_LIST_r22 759 -#define _GUARD_NOS_LIST_r33 760 -#define _GUARD_NOS_NOT_NULL_r00 761 -#define _GUARD_NOS_NOT_NULL_r11 762 -#define _GUARD_NOS_NOT_NULL_r22 763 -#define _GUARD_NOS_NOT_NULL_r33 764 -#define _GUARD_NOS_NULL_r00 765 -#define _GUARD_NOS_NULL_r11 766 -#define _GUARD_NOS_NULL_r22 767 -#define _GUARD_NOS_NULL_r33 768 -#define _GUARD_NOS_OVERFLOWED_r00 769 -#define _GUARD_NOS_OVERFLOWED_r11 770 -#define _GUARD_NOS_OVERFLOWED_r22 771 -#define _GUARD_NOS_OVERFLOWED_r33 772 -#define _GUARD_NOS_TUPLE_r00 773 -#define _GUARD_NOS_TUPLE_r11 774 -#define _GUARD_NOS_TUPLE_r22 775 -#define _GUARD_NOS_TUPLE_r33 776 -#define _GUARD_NOS_UNICODE_r00 777 -#define _GUARD_NOS_UNICODE_r11 778 -#define _GUARD_NOS_UNICODE_r22 779 -#define _GUARD_NOS_UNICODE_r33 780 -#define _GUARD_NOT_EXHAUSTED_LIST_r00 781 -#define _GUARD_NOT_EXHAUSTED_LIST_r11 782 -#define _GUARD_NOT_EXHAUSTED_LIST_r22 783 -#define _GUARD_NOT_EXHAUSTED_LIST_r33 784 -#define _GUARD_NOT_EXHAUSTED_RANGE_r00 785 -#define _GUARD_NOT_EXHAUSTED_RANGE_r11 786 -#define _GUARD_NOT_EXHAUSTED_RANGE_r22 787 -#define _GUARD_NOT_EXHAUSTED_RANGE_r33 788 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r00 789 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r11 790 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 791 -#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 792 -#define _GUARD_THIRD_NULL_r33 793 -#define _GUARD_TOS_ANY_SET_r00 794 -#define _GUARD_TOS_ANY_SET_r11 795 -#define _GUARD_TOS_ANY_SET_r22 796 -#define _GUARD_TOS_ANY_SET_r33 797 -#define _GUARD_TOS_DICT_r00 798 -#define _GUARD_TOS_DICT_r11 799 -#define _GUARD_TOS_DICT_r22 800 -#define _GUARD_TOS_DICT_r33 801 -#define _GUARD_TOS_FLOAT_r00 802 -#define _GUARD_TOS_FLOAT_r11 803 -#define _GUARD_TOS_FLOAT_r22 804 -#define _GUARD_TOS_FLOAT_r33 805 -#define _GUARD_TOS_INT_r00 806 -#define _GUARD_TOS_INT_r11 807 -#define _GUARD_TOS_INT_r22 808 -#define _GUARD_TOS_INT_r33 809 -#define _GUARD_TOS_LIST_r00 810 -#define _GUARD_TOS_LIST_r11 811 -#define _GUARD_TOS_LIST_r22 812 -#define _GUARD_TOS_LIST_r33 813 -#define _GUARD_TOS_OVERFLOWED_r00 814 -#define _GUARD_TOS_OVERFLOWED_r11 815 -#define _GUARD_TOS_OVERFLOWED_r22 816 -#define _GUARD_TOS_OVERFLOWED_r33 817 -#define _GUARD_TOS_SLICE_r00 818 -#define _GUARD_TOS_SLICE_r11 819 -#define _GUARD_TOS_SLICE_r22 820 -#define _GUARD_TOS_SLICE_r33 821 -#define _GUARD_TOS_TUPLE_r00 822 -#define _GUARD_TOS_TUPLE_r11 823 -#define _GUARD_TOS_TUPLE_r22 824 -#define _GUARD_TOS_TUPLE_r33 825 -#define _GUARD_TOS_UNICODE_r00 826 -#define _GUARD_TOS_UNICODE_r11 827 -#define _GUARD_TOS_UNICODE_r22 828 -#define _GUARD_TOS_UNICODE_r33 829 -#define _GUARD_TYPE_VERSION_r00 830 -#define _GUARD_TYPE_VERSION_r11 831 -#define _GUARD_TYPE_VERSION_r22 832 -#define _GUARD_TYPE_VERSION_r33 833 -#define _GUARD_TYPE_VERSION_AND_LOCK_r00 834 -#define _GUARD_TYPE_VERSION_AND_LOCK_r11 835 -#define _GUARD_TYPE_VERSION_AND_LOCK_r22 836 -#define _GUARD_TYPE_VERSION_AND_LOCK_r33 837 -#define _IMPORT_FROM_r01 838 -#define _IMPORT_NAME_r01 839 -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 840 -#define _INIT_CALL_PY_EXACT_ARGS_r01 841 -#define _INIT_CALL_PY_EXACT_ARGS_0_r01 842 -#define _INIT_CALL_PY_EXACT_ARGS_1_r01 843 -#define _INIT_CALL_PY_EXACT_ARGS_2_r01 844 -#define _INIT_CALL_PY_EXACT_ARGS_3_r01 845 -#define _INIT_CALL_PY_EXACT_ARGS_4_r01 846 -#define _INSERT_NULL_r10 847 -#define _INSTRUMENTED_FOR_ITER_r01 848 -#define _INSTRUMENTED_INSTRUCTION_r00 849 -#define _INSTRUMENTED_JUMP_FORWARD_r00 850 -#define _INSTRUMENTED_JUMP_FORWARD_r11 851 -#define _INSTRUMENTED_JUMP_FORWARD_r22 852 -#define _INSTRUMENTED_JUMP_FORWARD_r33 853 -#define _INSTRUMENTED_LINE_r00 854 -#define _INSTRUMENTED_NOT_TAKEN_r00 855 -#define _INSTRUMENTED_NOT_TAKEN_r11 856 -#define _INSTRUMENTED_NOT_TAKEN_r22 857 -#define _INSTRUMENTED_NOT_TAKEN_r33 858 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 859 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 860 -#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 861 -#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 862 -#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 863 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 864 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 865 -#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 866 -#define _IS_NONE_r11 867 -#define _IS_OP_r21 868 -#define _ITER_CHECK_LIST_r00 869 -#define _ITER_CHECK_LIST_r11 870 -#define _ITER_CHECK_LIST_r22 871 -#define _ITER_CHECK_LIST_r33 872 -#define _ITER_CHECK_RANGE_r00 873 -#define _ITER_CHECK_RANGE_r11 874 -#define _ITER_CHECK_RANGE_r22 875 -#define _ITER_CHECK_RANGE_r33 876 -#define _ITER_CHECK_TUPLE_r00 877 -#define _ITER_CHECK_TUPLE_r11 878 -#define _ITER_CHECK_TUPLE_r22 879 -#define _ITER_CHECK_TUPLE_r33 880 -#define _ITER_JUMP_LIST_r00 881 -#define _ITER_JUMP_LIST_r11 882 -#define _ITER_JUMP_LIST_r22 883 -#define _ITER_JUMP_LIST_r33 884 -#define _ITER_JUMP_RANGE_r00 885 -#define _ITER_JUMP_RANGE_r11 886 -#define _ITER_JUMP_RANGE_r22 887 -#define _ITER_JUMP_RANGE_r33 888 -#define _ITER_JUMP_TUPLE_r00 889 -#define _ITER_JUMP_TUPLE_r11 890 -#define _ITER_JUMP_TUPLE_r22 891 -#define _ITER_JUMP_TUPLE_r33 892 -#define _ITER_NEXT_LIST_r01 893 -#define _ITER_NEXT_LIST_TIER_TWO_r01 894 -#define _ITER_NEXT_RANGE_r23 895 -#define _ITER_NEXT_TUPLE_r23 896 -#define _JUMP_TO_TOP_r00 897 -#define _LIST_APPEND_r10 898 -#define _LIST_EXTEND_r00 899 -#define _LOAD_ATTR_r00 900 -#define _LOAD_ATTR_CLASS_r11 901 -#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 902 -#define _LOAD_ATTR_INSTANCE_VALUE_r11 903 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r01 904 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 905 -#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 906 -#define _LOAD_ATTR_METHOD_NO_DICT_r01 907 -#define _LOAD_ATTR_METHOD_NO_DICT_r12 908 -#define _LOAD_ATTR_METHOD_NO_DICT_r23 909 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r01 910 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 911 -#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 912 -#define _LOAD_ATTR_MODULE_r11 913 -#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 914 -#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 915 -#define _LOAD_ATTR_PROPERTY_FRAME_r00 916 -#define _LOAD_ATTR_PROPERTY_FRAME_r11 917 -#define _LOAD_ATTR_PROPERTY_FRAME_r22 918 -#define _LOAD_ATTR_PROPERTY_FRAME_r33 919 -#define _LOAD_ATTR_SLOT_r11 920 -#define _LOAD_ATTR_WITH_HINT_r11 921 -#define _LOAD_BUILD_CLASS_r01 922 -#define _LOAD_BYTECODE_r00 923 -#define _LOAD_COMMON_CONSTANT_r01 924 -#define _LOAD_COMMON_CONSTANT_r12 925 -#define _LOAD_COMMON_CONSTANT_r23 926 -#define _LOAD_CONST_r01 927 -#define _LOAD_CONST_r12 928 -#define _LOAD_CONST_r23 929 -#define _LOAD_CONST_INLINE_r01 930 -#define _LOAD_CONST_INLINE_r12 931 -#define _LOAD_CONST_INLINE_r23 932 -#define _LOAD_CONST_INLINE_BORROW_r01 933 -#define _LOAD_CONST_INLINE_BORROW_r12 934 -#define _LOAD_CONST_INLINE_BORROW_r23 935 -#define _LOAD_CONST_UNDER_INLINE_r01 936 -#define _LOAD_CONST_UNDER_INLINE_r12 937 -#define _LOAD_CONST_UNDER_INLINE_r23 938 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r01 939 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 940 -#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 941 -#define _LOAD_DEREF_r01 942 -#define _LOAD_FAST_r01 943 -#define _LOAD_FAST_r12 944 -#define _LOAD_FAST_r23 945 -#define _LOAD_FAST_0_r01 946 -#define _LOAD_FAST_0_r12 947 -#define _LOAD_FAST_0_r23 948 -#define _LOAD_FAST_1_r01 949 -#define _LOAD_FAST_1_r12 950 -#define _LOAD_FAST_1_r23 951 -#define _LOAD_FAST_2_r01 952 -#define _LOAD_FAST_2_r12 953 -#define _LOAD_FAST_2_r23 954 -#define _LOAD_FAST_3_r01 955 -#define _LOAD_FAST_3_r12 956 -#define _LOAD_FAST_3_r23 957 -#define _LOAD_FAST_4_r01 958 -#define _LOAD_FAST_4_r12 959 -#define _LOAD_FAST_4_r23 960 -#define _LOAD_FAST_5_r01 961 -#define _LOAD_FAST_5_r12 962 -#define _LOAD_FAST_5_r23 963 -#define _LOAD_FAST_6_r01 964 -#define _LOAD_FAST_6_r12 965 -#define _LOAD_FAST_6_r23 966 -#define _LOAD_FAST_7_r01 967 -#define _LOAD_FAST_7_r12 968 -#define _LOAD_FAST_7_r23 969 -#define _LOAD_FAST_AND_CLEAR_r01 970 -#define _LOAD_FAST_AND_CLEAR_r12 971 -#define _LOAD_FAST_AND_CLEAR_r23 972 -#define _LOAD_FAST_BORROW_r01 973 -#define _LOAD_FAST_BORROW_r12 974 -#define _LOAD_FAST_BORROW_r23 975 -#define _LOAD_FAST_BORROW_0_r01 976 -#define _LOAD_FAST_BORROW_0_r12 977 -#define _LOAD_FAST_BORROW_0_r23 978 -#define _LOAD_FAST_BORROW_1_r01 979 -#define _LOAD_FAST_BORROW_1_r12 980 -#define _LOAD_FAST_BORROW_1_r23 981 -#define _LOAD_FAST_BORROW_2_r01 982 -#define _LOAD_FAST_BORROW_2_r12 983 -#define _LOAD_FAST_BORROW_2_r23 984 -#define _LOAD_FAST_BORROW_3_r01 985 -#define _LOAD_FAST_BORROW_3_r12 986 -#define _LOAD_FAST_BORROW_3_r23 987 -#define _LOAD_FAST_BORROW_4_r01 988 -#define _LOAD_FAST_BORROW_4_r12 989 -#define _LOAD_FAST_BORROW_4_r23 990 -#define _LOAD_FAST_BORROW_5_r01 991 -#define _LOAD_FAST_BORROW_5_r12 992 -#define _LOAD_FAST_BORROW_5_r23 993 -#define _LOAD_FAST_BORROW_6_r01 994 -#define _LOAD_FAST_BORROW_6_r12 995 -#define _LOAD_FAST_BORROW_6_r23 996 -#define _LOAD_FAST_BORROW_7_r01 997 -#define _LOAD_FAST_BORROW_7_r12 998 -#define _LOAD_FAST_BORROW_7_r23 999 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1000 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1001 -#define _LOAD_FAST_CHECK_r01 1002 -#define _LOAD_FAST_LOAD_FAST_r02 1003 -#define _LOAD_FAST_LOAD_FAST_r13 1004 -#define _LOAD_FROM_DICT_OR_DEREF_r01 1005 -#define _LOAD_FROM_DICT_OR_GLOBALS_r01 1006 -#define _LOAD_GLOBAL_r00 1007 -#define _LOAD_GLOBAL_BUILTINS_r00 1008 -#define _LOAD_GLOBAL_MODULE_r00 1009 -#define _LOAD_LOCALS_r01 1010 -#define _LOAD_NAME_r01 1011 -#define _LOAD_SMALL_INT_r01 1012 -#define _LOAD_SMALL_INT_r12 1013 -#define _LOAD_SMALL_INT_r23 1014 -#define _LOAD_SMALL_INT_0_r01 1015 -#define _LOAD_SMALL_INT_0_r12 1016 -#define _LOAD_SMALL_INT_0_r23 1017 -#define _LOAD_SMALL_INT_1_r01 1018 -#define _LOAD_SMALL_INT_1_r12 1019 -#define _LOAD_SMALL_INT_1_r23 1020 -#define _LOAD_SMALL_INT_2_r01 1021 -#define _LOAD_SMALL_INT_2_r12 1022 -#define _LOAD_SMALL_INT_2_r23 1023 -#define _LOAD_SMALL_INT_3_r01 1024 -#define _LOAD_SMALL_INT_3_r12 1025 -#define _LOAD_SMALL_INT_3_r23 1026 -#define _LOAD_SPECIAL_r00 1027 -#define _LOAD_SUPER_ATTR_ATTR_r01 1028 -#define _LOAD_SUPER_ATTR_METHOD_r02 1029 -#define _MAKE_CALLARGS_A_TUPLE_r00 1030 -#define _MAKE_CELL_r00 1031 -#define _MAKE_FUNCTION_r01 1032 -#define _MAKE_WARM_r00 1033 -#define _MAKE_WARM_r11 1034 -#define _MAKE_WARM_r22 1035 -#define _MAKE_WARM_r33 1036 -#define _MAP_ADD_r00 1037 -#define _MATCH_CLASS_r01 1038 -#define _MATCH_KEYS_r01 1039 -#define _MATCH_MAPPING_r01 1040 -#define _MATCH_MAPPING_r12 1041 -#define _MATCH_MAPPING_r23 1042 -#define _MATCH_SEQUENCE_r01 1043 -#define _MATCH_SEQUENCE_r12 1044 -#define _MATCH_SEQUENCE_r23 1045 -#define _MAYBE_EXPAND_METHOD_r00 1046 -#define _MAYBE_EXPAND_METHOD_KW_r00 1047 -#define _MONITOR_CALL_r00 1048 -#define _MONITOR_CALL_KW_r00 1049 -#define _MONITOR_JUMP_BACKWARD_r00 1050 -#define _MONITOR_JUMP_BACKWARD_r11 1051 -#define _MONITOR_JUMP_BACKWARD_r22 1052 -#define _MONITOR_JUMP_BACKWARD_r33 1053 -#define _MONITOR_RESUME_r00 1054 -#define _NOP_r00 1055 -#define _NOP_r11 1056 -#define _NOP_r22 1057 -#define _NOP_r33 1058 -#define _POP_CALL_r20 1059 -#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1060 -#define _POP_CALL_ONE_r30 1061 -#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1062 -#define _POP_CALL_TWO_r30 1063 -#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1064 -#define _POP_EXCEPT_r00 1065 -#define _POP_ITER_r20 1066 -#define _POP_JUMP_IF_FALSE_r10 1067 -#define _POP_JUMP_IF_FALSE_r21 1068 -#define _POP_JUMP_IF_FALSE_r32 1069 -#define _POP_JUMP_IF_TRUE_r10 1070 -#define _POP_JUMP_IF_TRUE_r21 1071 -#define _POP_JUMP_IF_TRUE_r32 1072 -#define _POP_TOP_r10 1073 -#define _POP_TOP_LOAD_CONST_INLINE_r11 1074 -#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1075 -#define _POP_TWO_r20 1076 -#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1077 -#define _PUSH_EXC_INFO_r01 1078 -#define _PUSH_EXC_INFO_r12 1079 -#define _PUSH_EXC_INFO_r23 1080 -#define _PUSH_FRAME_r10 1081 -#define _PUSH_NULL_r01 1082 -#define _PUSH_NULL_r12 1083 -#define _PUSH_NULL_r23 1084 -#define _PUSH_NULL_CONDITIONAL_r00 1085 -#define _PY_FRAME_GENERAL_r01 1086 -#define _PY_FRAME_KW_r01 1087 -#define _QUICKEN_RESUME_r00 1088 -#define _QUICKEN_RESUME_r11 1089 -#define _QUICKEN_RESUME_r22 1090 -#define _QUICKEN_RESUME_r33 1091 -#define _REPLACE_WITH_TRUE_r11 1092 -#define _RESUME_CHECK_r00 1093 -#define _RESUME_CHECK_r11 1094 -#define _RESUME_CHECK_r22 1095 -#define _RESUME_CHECK_r33 1096 -#define _RETURN_GENERATOR_r01 1097 -#define _RETURN_VALUE_r01 1098 -#define _SAVE_RETURN_OFFSET_r00 1099 -#define _SAVE_RETURN_OFFSET_r11 1100 -#define _SAVE_RETURN_OFFSET_r22 1101 -#define _SAVE_RETURN_OFFSET_r33 1102 -#define _SEND_r01 1103 -#define _SEND_GEN_FRAME_r00 1104 -#define _SEND_GEN_FRAME_r11 1105 -#define _SEND_GEN_FRAME_r22 1106 -#define _SEND_GEN_FRAME_r33 1107 -#define _SETUP_ANNOTATIONS_r00 1108 -#define _SET_ADD_r00 1109 -#define _SET_FUNCTION_ATTRIBUTE_r10 1110 -#define _SET_FUNCTION_ATTRIBUTE_r21 1111 -#define _SET_FUNCTION_ATTRIBUTE_r32 1112 -#define _SET_IP_r00 1113 -#define _SET_IP_r11 1114 -#define _SET_IP_r22 1115 -#define _SET_IP_r33 1116 -#define _SET_UPDATE_r00 1117 -#define _SPILL_OR_RELOAD_r01 1118 -#define _SPILL_OR_RELOAD_r02 1119 -#define _SPILL_OR_RELOAD_r03 1120 -#define _SPILL_OR_RELOAD_r10 1121 -#define _SPILL_OR_RELOAD_r12 1122 -#define _SPILL_OR_RELOAD_r13 1123 -#define _SPILL_OR_RELOAD_r20 1124 -#define _SPILL_OR_RELOAD_r21 1125 -#define _SPILL_OR_RELOAD_r23 1126 -#define _SPILL_OR_RELOAD_r30 1127 -#define _SPILL_OR_RELOAD_r31 1128 -#define _SPILL_OR_RELOAD_r32 1129 -#define _START_EXECUTOR_r00 1130 -#define _STORE_ATTR_r00 1131 -#define _STORE_ATTR_INSTANCE_VALUE_r20 1132 -#define _STORE_ATTR_SLOT_r00 1133 -#define _STORE_ATTR_WITH_HINT_r00 1134 -#define _STORE_DEREF_r00 1135 -#define _STORE_FAST_r10 1136 -#define _STORE_FAST_0_r10 1137 -#define _STORE_FAST_1_r10 1138 -#define _STORE_FAST_2_r10 1139 -#define _STORE_FAST_3_r10 1140 -#define _STORE_FAST_4_r10 1141 -#define _STORE_FAST_5_r10 1142 -#define _STORE_FAST_6_r10 1143 -#define _STORE_FAST_7_r10 1144 -#define _STORE_FAST_LOAD_FAST_r11 1145 -#define _STORE_FAST_STORE_FAST_r20 1146 -#define _STORE_GLOBAL_r00 1147 -#define _STORE_NAME_r00 1148 -#define _STORE_SLICE_r00 1149 -#define _STORE_SUBSCR_r00 1150 -#define _STORE_SUBSCR_DICT_r00 1151 -#define _STORE_SUBSCR_LIST_INT_r00 1152 -#define _SWAP_r11 1153 -#define _SWAP_2_r00 1154 -#define _SWAP_2_r11 1155 -#define _SWAP_2_r22 1156 -#define _SWAP_2_r33 1157 -#define _SWAP_3_r33 1158 -#define _TIER2_RESUME_CHECK_r00 1159 -#define _TIER2_RESUME_CHECK_r11 1160 -#define _TIER2_RESUME_CHECK_r22 1161 -#define _TIER2_RESUME_CHECK_r33 1162 -#define _TO_BOOL_r01 1163 -#define _TO_BOOL_BOOL_r00 1164 -#define _TO_BOOL_BOOL_r11 1165 -#define _TO_BOOL_BOOL_r22 1166 -#define _TO_BOOL_BOOL_r33 1167 -#define _TO_BOOL_INT_r11 1168 -#define _TO_BOOL_LIST_r11 1169 -#define _TO_BOOL_NONE_r00 1170 -#define _TO_BOOL_NONE_r11 1171 -#define _TO_BOOL_NONE_r22 1172 -#define _TO_BOOL_NONE_r33 1173 -#define _TO_BOOL_STR_r11 1174 -#define _UNARY_INVERT_r01 1175 -#define _UNARY_NEGATIVE_r01 1176 -#define _UNARY_NOT_r00 1177 -#define _UNARY_NOT_r11 1178 -#define _UNARY_NOT_r22 1179 -#define _UNARY_NOT_r33 1180 -#define _UNPACK_EX_r00 1181 -#define _UNPACK_SEQUENCE_r00 1182 -#define _UNPACK_SEQUENCE_LIST_r00 1183 -#define _UNPACK_SEQUENCE_TUPLE_r00 1184 -#define _UNPACK_SEQUENCE_TWO_TUPLE_r11 1185 -#define _WITH_EXCEPT_START_r01 1186 -#define _YIELD_VALUE_r00 1187 -#define _YIELD_VALUE_r11 1188 -#define _YIELD_VALUE_r22 1189 -#define _YIELD_VALUE_r33 1190 -#define MAX_UOP_REGS_ID 1190 +#define _BINARY_OP_ADD_FLOAT_r21 546 +#define _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21 547 +#define _BINARY_OP_ADD_INT_r21 548 +#define _BINARY_OP_ADD_UNICODE_r21 549 +#define _BINARY_OP_EXTEND_r01 550 +#define _BINARY_OP_INPLACE_ADD_UNICODE_r00 551 +#define _BINARY_OP_MULTIPLY_FLOAT_r21 552 +#define _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21 553 +#define _BINARY_OP_MULTIPLY_INT_r21 554 +#define _BINARY_OP_SUBSCR_CHECK_FUNC_r23 555 +#define _BINARY_OP_SUBSCR_DICT_r01 556 +#define _BINARY_OP_SUBSCR_INIT_CALL_r31 557 +#define _BINARY_OP_SUBSCR_LIST_INT_r01 558 +#define _BINARY_OP_SUBSCR_LIST_SLICE_r01 559 +#define _BINARY_OP_SUBSCR_STR_INT_r21 560 +#define _BINARY_OP_SUBSCR_TUPLE_INT_r21 561 +#define _BINARY_OP_SUBTRACT_FLOAT_r21 562 +#define _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21 563 +#define _BINARY_OP_SUBTRACT_INT_r21 564 +#define _BINARY_SLICE_r01 565 +#define _BUILD_INTERPOLATION_r01 566 +#define _BUILD_LIST_r01 567 +#define _BUILD_MAP_r01 568 +#define _BUILD_SET_r01 569 +#define _BUILD_SLICE_r01 570 +#define _BUILD_STRING_r01 571 +#define _BUILD_TEMPLATE_r01 572 +#define _BUILD_TUPLE_r01 573 +#define _CALL_BUILTIN_CLASS_r01 574 +#define _CALL_BUILTIN_FAST_r01 575 +#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01 576 +#define _CALL_BUILTIN_O_r01 577 +#define _CALL_INTRINSIC_1_r01 578 +#define _CALL_INTRINSIC_2_r01 579 +#define _CALL_ISINSTANCE_r01 580 +#define _CALL_KW_NON_PY_r01 581 +#define _CALL_LEN_r01 582 +#define _CALL_LIST_APPEND_r30 583 +#define _CALL_METHOD_DESCRIPTOR_FAST_r01 584 +#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01 585 +#define _CALL_METHOD_DESCRIPTOR_NOARGS_r01 586 +#define _CALL_METHOD_DESCRIPTOR_O_r01 587 +#define _CALL_NON_PY_GENERAL_r01 588 +#define _CALL_STR_1_r01 589 +#define _CALL_TUPLE_1_r01 590 +#define _CALL_TYPE_1_r31 591 +#define _CHECK_AND_ALLOCATE_OBJECT_r00 592 +#define _CHECK_ATTR_CLASS_r00 593 +#define _CHECK_ATTR_CLASS_r11 594 +#define _CHECK_ATTR_CLASS_r22 595 +#define _CHECK_ATTR_CLASS_r33 596 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r00 597 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 598 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 599 +#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 600 +#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 601 +#define _CHECK_EG_MATCH_r02 602 +#define _CHECK_EXC_MATCH_r01 603 +#define _CHECK_FUNCTION_r00 604 +#define _CHECK_FUNCTION_r11 605 +#define _CHECK_FUNCTION_r22 606 +#define _CHECK_FUNCTION_r33 607 +#define _CHECK_FUNCTION_EXACT_ARGS_r00 608 +#define _CHECK_FUNCTION_VERSION_r00 609 +#define _CHECK_FUNCTION_VERSION_INLINE_r00 610 +#define _CHECK_FUNCTION_VERSION_INLINE_r11 611 +#define _CHECK_FUNCTION_VERSION_INLINE_r22 612 +#define _CHECK_FUNCTION_VERSION_INLINE_r33 613 +#define _CHECK_FUNCTION_VERSION_KW_r11 614 +#define _CHECK_IS_NOT_PY_CALLABLE_r00 615 +#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 616 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r00 617 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 618 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 619 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 620 +#define _CHECK_METHOD_VERSION_r00 621 +#define _CHECK_METHOD_VERSION_KW_r11 622 +#define _CHECK_PEP_523_r00 623 +#define _CHECK_PEP_523_r11 624 +#define _CHECK_PEP_523_r22 625 +#define _CHECK_PEP_523_r33 626 +#define _CHECK_PERIODIC_r00 627 +#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 628 +#define _CHECK_RECURSION_REMAINING_r00 629 +#define _CHECK_RECURSION_REMAINING_r11 630 +#define _CHECK_RECURSION_REMAINING_r22 631 +#define _CHECK_RECURSION_REMAINING_r33 632 +#define _CHECK_STACK_SPACE_r00 633 +#define _CHECK_STACK_SPACE_OPERAND_r00 634 +#define _CHECK_STACK_SPACE_OPERAND_r11 635 +#define _CHECK_STACK_SPACE_OPERAND_r22 636 +#define _CHECK_STACK_SPACE_OPERAND_r33 637 +#define _CHECK_VALIDITY_r00 638 +#define _CHECK_VALIDITY_r11 639 +#define _CHECK_VALIDITY_r22 640 +#define _CHECK_VALIDITY_r33 641 +#define _COMPARE_OP_r01 642 +#define _COMPARE_OP_FLOAT_r21 643 +#define _COMPARE_OP_INT_r21 644 +#define _COMPARE_OP_STR_r21 645 +#define _CONTAINS_OP_r01 646 +#define _CONTAINS_OP_DICT_r01 647 +#define _CONTAINS_OP_SET_r01 648 +#define _CONVERT_VALUE_r01 649 +#define _COPY_r01 650 +#define _COPY_1_r01 651 +#define _COPY_1_r12 652 +#define _COPY_1_r23 653 +#define _COPY_2_r23 654 +#define _COPY_3_r33 655 +#define _COPY_FREE_VARS_r00 656 +#define _CREATE_INIT_FRAME_r01 657 +#define _DELETE_ATTR_r00 658 +#define _DELETE_DEREF_r00 659 +#define _DELETE_FAST_r00 660 +#define _DELETE_GLOBAL_r00 661 +#define _DELETE_NAME_r00 662 +#define _DELETE_SUBSCR_r00 663 +#define _DEOPT_r00 664 +#define _DICT_MERGE_r00 665 +#define _DICT_UPDATE_r00 666 +#define _DO_CALL_r01 667 +#define _DO_CALL_FUNCTION_EX_r01 668 +#define _DO_CALL_KW_r01 669 +#define _END_FOR_r10 670 +#define _END_SEND_r21 671 +#define _ERROR_POP_N_r00 672 +#define _EXIT_INIT_CHECK_r00 673 +#define _EXIT_TRACE_r00 674 +#define _EXIT_TRACE_r10 675 +#define _EXIT_TRACE_r20 676 +#define _EXIT_TRACE_r30 677 +#define _EXPAND_METHOD_r00 678 +#define _EXPAND_METHOD_KW_r00 679 +#define _FATAL_ERROR_r00 680 +#define _FATAL_ERROR_r11 681 +#define _FATAL_ERROR_r22 682 +#define _FATAL_ERROR_r33 683 +#define _FORMAT_SIMPLE_r01 684 +#define _FORMAT_WITH_SPEC_r01 685 +#define _FOR_ITER_r01 686 +#define _FOR_ITER_GEN_FRAME_r23 687 +#define _FOR_ITER_TIER_TWO_r01 688 +#define _GET_AITER_r01 689 +#define _GET_ANEXT_r01 690 +#define _GET_AWAITABLE_r01 691 +#define _GET_ITER_r02 692 +#define _GET_LEN_r01 693 +#define _GET_YIELD_FROM_ITER_r01 694 +#define _GUARD_BINARY_OP_EXTEND_r00 695 +#define _GUARD_CALLABLE_ISINSTANCE_r33 696 +#define _GUARD_CALLABLE_LEN_r33 697 +#define _GUARD_CALLABLE_LIST_APPEND_r33 698 +#define _GUARD_CALLABLE_STR_1_r33 699 +#define _GUARD_CALLABLE_TUPLE_1_r33 700 +#define _GUARD_CALLABLE_TYPE_1_r33 701 +#define _GUARD_DORV_NO_DICT_r00 702 +#define _GUARD_DORV_NO_DICT_r11 703 +#define _GUARD_DORV_NO_DICT_r22 704 +#define _GUARD_DORV_NO_DICT_r33 705 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00 706 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 707 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 708 +#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 709 +#define _GUARD_GLOBALS_VERSION_r00 710 +#define _GUARD_GLOBALS_VERSION_r11 711 +#define _GUARD_GLOBALS_VERSION_r22 712 +#define _GUARD_GLOBALS_VERSION_r33 713 +#define _GUARD_IS_FALSE_POP_r10 714 +#define _GUARD_IS_NONE_POP_r10 715 +#define _GUARD_IS_NOT_NONE_POP_r10 716 +#define _GUARD_IS_TRUE_POP_r10 717 +#define _GUARD_KEYS_VERSION_r00 718 +#define _GUARD_KEYS_VERSION_r11 719 +#define _GUARD_KEYS_VERSION_r22 720 +#define _GUARD_KEYS_VERSION_r33 721 +#define _GUARD_NOS_DICT_r00 722 +#define _GUARD_NOS_DICT_r11 723 +#define _GUARD_NOS_DICT_r22 724 +#define _GUARD_NOS_DICT_r33 725 +#define _GUARD_NOS_FLOAT_r00 726 +#define _GUARD_NOS_FLOAT_r11 727 +#define _GUARD_NOS_FLOAT_r22 728 +#define _GUARD_NOS_FLOAT_r33 729 +#define _GUARD_NOS_INT_r00 730 +#define _GUARD_NOS_INT_r11 731 +#define _GUARD_NOS_INT_r22 732 +#define _GUARD_NOS_INT_r33 733 +#define _GUARD_NOS_LIST_r00 734 +#define _GUARD_NOS_LIST_r11 735 +#define _GUARD_NOS_LIST_r22 736 +#define _GUARD_NOS_LIST_r33 737 +#define _GUARD_NOS_NOT_NULL_r00 738 +#define _GUARD_NOS_NOT_NULL_r11 739 +#define _GUARD_NOS_NOT_NULL_r22 740 +#define _GUARD_NOS_NOT_NULL_r33 741 +#define _GUARD_NOS_NULL_r00 742 +#define _GUARD_NOS_NULL_r11 743 +#define _GUARD_NOS_NULL_r22 744 +#define _GUARD_NOS_NULL_r33 745 +#define _GUARD_NOS_OVERFLOWED_r00 746 +#define _GUARD_NOS_OVERFLOWED_r11 747 +#define _GUARD_NOS_OVERFLOWED_r22 748 +#define _GUARD_NOS_OVERFLOWED_r33 749 +#define _GUARD_NOS_TUPLE_r00 750 +#define _GUARD_NOS_TUPLE_r11 751 +#define _GUARD_NOS_TUPLE_r22 752 +#define _GUARD_NOS_TUPLE_r33 753 +#define _GUARD_NOS_UNICODE_r00 754 +#define _GUARD_NOS_UNICODE_r11 755 +#define _GUARD_NOS_UNICODE_r22 756 +#define _GUARD_NOS_UNICODE_r33 757 +#define _GUARD_NOT_EXHAUSTED_LIST_r00 758 +#define _GUARD_NOT_EXHAUSTED_LIST_r11 759 +#define _GUARD_NOT_EXHAUSTED_LIST_r22 760 +#define _GUARD_NOT_EXHAUSTED_LIST_r33 761 +#define _GUARD_NOT_EXHAUSTED_RANGE_r00 762 +#define _GUARD_NOT_EXHAUSTED_RANGE_r11 763 +#define _GUARD_NOT_EXHAUSTED_RANGE_r22 764 +#define _GUARD_NOT_EXHAUSTED_RANGE_r33 765 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r00 766 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r11 767 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 768 +#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 769 +#define _GUARD_THIRD_NULL_r33 770 +#define _GUARD_TOS_ANY_SET_r00 771 +#define _GUARD_TOS_ANY_SET_r11 772 +#define _GUARD_TOS_ANY_SET_r22 773 +#define _GUARD_TOS_ANY_SET_r33 774 +#define _GUARD_TOS_DICT_r00 775 +#define _GUARD_TOS_DICT_r11 776 +#define _GUARD_TOS_DICT_r22 777 +#define _GUARD_TOS_DICT_r33 778 +#define _GUARD_TOS_FLOAT_r00 779 +#define _GUARD_TOS_FLOAT_r11 780 +#define _GUARD_TOS_FLOAT_r22 781 +#define _GUARD_TOS_FLOAT_r33 782 +#define _GUARD_TOS_INT_r00 783 +#define _GUARD_TOS_INT_r11 784 +#define _GUARD_TOS_INT_r22 785 +#define _GUARD_TOS_INT_r33 786 +#define _GUARD_TOS_LIST_r00 787 +#define _GUARD_TOS_LIST_r11 788 +#define _GUARD_TOS_LIST_r22 789 +#define _GUARD_TOS_LIST_r33 790 +#define _GUARD_TOS_OVERFLOWED_r00 791 +#define _GUARD_TOS_OVERFLOWED_r11 792 +#define _GUARD_TOS_OVERFLOWED_r22 793 +#define _GUARD_TOS_OVERFLOWED_r33 794 +#define _GUARD_TOS_SLICE_r00 795 +#define _GUARD_TOS_SLICE_r11 796 +#define _GUARD_TOS_SLICE_r22 797 +#define _GUARD_TOS_SLICE_r33 798 +#define _GUARD_TOS_TUPLE_r00 799 +#define _GUARD_TOS_TUPLE_r11 800 +#define _GUARD_TOS_TUPLE_r22 801 +#define _GUARD_TOS_TUPLE_r33 802 +#define _GUARD_TOS_UNICODE_r00 803 +#define _GUARD_TOS_UNICODE_r11 804 +#define _GUARD_TOS_UNICODE_r22 805 +#define _GUARD_TOS_UNICODE_r33 806 +#define _GUARD_TYPE_VERSION_r00 807 +#define _GUARD_TYPE_VERSION_r11 808 +#define _GUARD_TYPE_VERSION_r22 809 +#define _GUARD_TYPE_VERSION_r33 810 +#define _GUARD_TYPE_VERSION_AND_LOCK_r00 811 +#define _GUARD_TYPE_VERSION_AND_LOCK_r11 812 +#define _GUARD_TYPE_VERSION_AND_LOCK_r22 813 +#define _GUARD_TYPE_VERSION_AND_LOCK_r33 814 +#define _IMPORT_FROM_r01 815 +#define _IMPORT_NAME_r01 816 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 817 +#define _INIT_CALL_PY_EXACT_ARGS_r01 818 +#define _INIT_CALL_PY_EXACT_ARGS_0_r01 819 +#define _INIT_CALL_PY_EXACT_ARGS_1_r01 820 +#define _INIT_CALL_PY_EXACT_ARGS_2_r01 821 +#define _INIT_CALL_PY_EXACT_ARGS_3_r01 822 +#define _INIT_CALL_PY_EXACT_ARGS_4_r01 823 +#define _INSERT_NULL_r10 824 +#define _INSTRUMENTED_FOR_ITER_r01 825 +#define _INSTRUMENTED_INSTRUCTION_r00 826 +#define _INSTRUMENTED_JUMP_FORWARD_r00 827 +#define _INSTRUMENTED_JUMP_FORWARD_r11 828 +#define _INSTRUMENTED_JUMP_FORWARD_r22 829 +#define _INSTRUMENTED_JUMP_FORWARD_r33 830 +#define _INSTRUMENTED_LINE_r00 831 +#define _INSTRUMENTED_NOT_TAKEN_r00 832 +#define _INSTRUMENTED_NOT_TAKEN_r11 833 +#define _INSTRUMENTED_NOT_TAKEN_r22 834 +#define _INSTRUMENTED_NOT_TAKEN_r33 835 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 836 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 837 +#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 838 +#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 839 +#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 840 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 841 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 842 +#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 843 +#define _IS_NONE_r11 844 +#define _IS_OP_r21 845 +#define _ITER_CHECK_LIST_r00 846 +#define _ITER_CHECK_LIST_r11 847 +#define _ITER_CHECK_LIST_r22 848 +#define _ITER_CHECK_LIST_r33 849 +#define _ITER_CHECK_RANGE_r00 850 +#define _ITER_CHECK_RANGE_r11 851 +#define _ITER_CHECK_RANGE_r22 852 +#define _ITER_CHECK_RANGE_r33 853 +#define _ITER_CHECK_TUPLE_r00 854 +#define _ITER_CHECK_TUPLE_r11 855 +#define _ITER_CHECK_TUPLE_r22 856 +#define _ITER_CHECK_TUPLE_r33 857 +#define _ITER_JUMP_LIST_r00 858 +#define _ITER_JUMP_LIST_r11 859 +#define _ITER_JUMP_LIST_r22 860 +#define _ITER_JUMP_LIST_r33 861 +#define _ITER_JUMP_RANGE_r00 862 +#define _ITER_JUMP_RANGE_r11 863 +#define _ITER_JUMP_RANGE_r22 864 +#define _ITER_JUMP_RANGE_r33 865 +#define _ITER_JUMP_TUPLE_r00 866 +#define _ITER_JUMP_TUPLE_r11 867 +#define _ITER_JUMP_TUPLE_r22 868 +#define _ITER_JUMP_TUPLE_r33 869 +#define _ITER_NEXT_LIST_r01 870 +#define _ITER_NEXT_LIST_TIER_TWO_r01 871 +#define _ITER_NEXT_RANGE_r23 872 +#define _ITER_NEXT_TUPLE_r23 873 +#define _JUMP_TO_TOP_r00 874 +#define _LIST_APPEND_r10 875 +#define _LIST_EXTEND_r00 876 +#define _LOAD_ATTR_r00 877 +#define _LOAD_ATTR_CLASS_r11 878 +#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 879 +#define _LOAD_ATTR_INSTANCE_VALUE_r11 880 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r01 881 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 882 +#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 883 +#define _LOAD_ATTR_METHOD_NO_DICT_r01 884 +#define _LOAD_ATTR_METHOD_NO_DICT_r12 885 +#define _LOAD_ATTR_METHOD_NO_DICT_r23 886 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r01 887 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 888 +#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 889 +#define _LOAD_ATTR_MODULE_r11 890 +#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 891 +#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 892 +#define _LOAD_ATTR_PROPERTY_FRAME_r11 893 +#define _LOAD_ATTR_SLOT_r11 894 +#define _LOAD_ATTR_WITH_HINT_r11 895 +#define _LOAD_BUILD_CLASS_r01 896 +#define _LOAD_BYTECODE_r00 897 +#define _LOAD_COMMON_CONSTANT_r01 898 +#define _LOAD_COMMON_CONSTANT_r12 899 +#define _LOAD_COMMON_CONSTANT_r23 900 +#define _LOAD_CONST_r01 901 +#define _LOAD_CONST_r12 902 +#define _LOAD_CONST_r23 903 +#define _LOAD_CONST_INLINE_r01 904 +#define _LOAD_CONST_INLINE_r12 905 +#define _LOAD_CONST_INLINE_r23 906 +#define _LOAD_CONST_INLINE_BORROW_r01 907 +#define _LOAD_CONST_INLINE_BORROW_r12 908 +#define _LOAD_CONST_INLINE_BORROW_r23 909 +#define _LOAD_CONST_UNDER_INLINE_r01 910 +#define _LOAD_CONST_UNDER_INLINE_r12 911 +#define _LOAD_CONST_UNDER_INLINE_r23 912 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r01 913 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 914 +#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 915 +#define _LOAD_DEREF_r01 916 +#define _LOAD_FAST_r01 917 +#define _LOAD_FAST_r12 918 +#define _LOAD_FAST_r23 919 +#define _LOAD_FAST_0_r01 920 +#define _LOAD_FAST_0_r12 921 +#define _LOAD_FAST_0_r23 922 +#define _LOAD_FAST_1_r01 923 +#define _LOAD_FAST_1_r12 924 +#define _LOAD_FAST_1_r23 925 +#define _LOAD_FAST_2_r01 926 +#define _LOAD_FAST_2_r12 927 +#define _LOAD_FAST_2_r23 928 +#define _LOAD_FAST_3_r01 929 +#define _LOAD_FAST_3_r12 930 +#define _LOAD_FAST_3_r23 931 +#define _LOAD_FAST_4_r01 932 +#define _LOAD_FAST_4_r12 933 +#define _LOAD_FAST_4_r23 934 +#define _LOAD_FAST_5_r01 935 +#define _LOAD_FAST_5_r12 936 +#define _LOAD_FAST_5_r23 937 +#define _LOAD_FAST_6_r01 938 +#define _LOAD_FAST_6_r12 939 +#define _LOAD_FAST_6_r23 940 +#define _LOAD_FAST_7_r01 941 +#define _LOAD_FAST_7_r12 942 +#define _LOAD_FAST_7_r23 943 +#define _LOAD_FAST_AND_CLEAR_r01 944 +#define _LOAD_FAST_AND_CLEAR_r12 945 +#define _LOAD_FAST_AND_CLEAR_r23 946 +#define _LOAD_FAST_BORROW_r01 947 +#define _LOAD_FAST_BORROW_r12 948 +#define _LOAD_FAST_BORROW_r23 949 +#define _LOAD_FAST_BORROW_0_r01 950 +#define _LOAD_FAST_BORROW_0_r12 951 +#define _LOAD_FAST_BORROW_0_r23 952 +#define _LOAD_FAST_BORROW_1_r01 953 +#define _LOAD_FAST_BORROW_1_r12 954 +#define _LOAD_FAST_BORROW_1_r23 955 +#define _LOAD_FAST_BORROW_2_r01 956 +#define _LOAD_FAST_BORROW_2_r12 957 +#define _LOAD_FAST_BORROW_2_r23 958 +#define _LOAD_FAST_BORROW_3_r01 959 +#define _LOAD_FAST_BORROW_3_r12 960 +#define _LOAD_FAST_BORROW_3_r23 961 +#define _LOAD_FAST_BORROW_4_r01 962 +#define _LOAD_FAST_BORROW_4_r12 963 +#define _LOAD_FAST_BORROW_4_r23 964 +#define _LOAD_FAST_BORROW_5_r01 965 +#define _LOAD_FAST_BORROW_5_r12 966 +#define _LOAD_FAST_BORROW_5_r23 967 +#define _LOAD_FAST_BORROW_6_r01 968 +#define _LOAD_FAST_BORROW_6_r12 969 +#define _LOAD_FAST_BORROW_6_r23 970 +#define _LOAD_FAST_BORROW_7_r01 971 +#define _LOAD_FAST_BORROW_7_r12 972 +#define _LOAD_FAST_BORROW_7_r23 973 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 974 +#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 975 +#define _LOAD_FAST_CHECK_r01 976 +#define _LOAD_FAST_LOAD_FAST_r02 977 +#define _LOAD_FAST_LOAD_FAST_r13 978 +#define _LOAD_FROM_DICT_OR_DEREF_r01 979 +#define _LOAD_FROM_DICT_OR_GLOBALS_r01 980 +#define _LOAD_GLOBAL_r00 981 +#define _LOAD_GLOBAL_BUILTINS_r01 982 +#define _LOAD_GLOBAL_MODULE_r01 983 +#define _LOAD_LOCALS_r01 984 +#define _LOAD_NAME_r01 985 +#define _LOAD_SMALL_INT_r01 986 +#define _LOAD_SMALL_INT_r12 987 +#define _LOAD_SMALL_INT_r23 988 +#define _LOAD_SMALL_INT_0_r01 989 +#define _LOAD_SMALL_INT_0_r12 990 +#define _LOAD_SMALL_INT_0_r23 991 +#define _LOAD_SMALL_INT_1_r01 992 +#define _LOAD_SMALL_INT_1_r12 993 +#define _LOAD_SMALL_INT_1_r23 994 +#define _LOAD_SMALL_INT_2_r01 995 +#define _LOAD_SMALL_INT_2_r12 996 +#define _LOAD_SMALL_INT_2_r23 997 +#define _LOAD_SMALL_INT_3_r01 998 +#define _LOAD_SMALL_INT_3_r12 999 +#define _LOAD_SMALL_INT_3_r23 1000 +#define _LOAD_SPECIAL_r00 1001 +#define _LOAD_SUPER_ATTR_ATTR_r01 1002 +#define _LOAD_SUPER_ATTR_METHOD_r02 1003 +#define _MAKE_CALLARGS_A_TUPLE_r00 1004 +#define _MAKE_CELL_r00 1005 +#define _MAKE_FUNCTION_r01 1006 +#define _MAKE_WARM_r00 1007 +#define _MAKE_WARM_r11 1008 +#define _MAKE_WARM_r22 1009 +#define _MAKE_WARM_r33 1010 +#define _MAP_ADD_r00 1011 +#define _MATCH_CLASS_r01 1012 +#define _MATCH_KEYS_r01 1013 +#define _MATCH_MAPPING_r01 1014 +#define _MATCH_MAPPING_r12 1015 +#define _MATCH_MAPPING_r23 1016 +#define _MATCH_SEQUENCE_r01 1017 +#define _MATCH_SEQUENCE_r12 1018 +#define _MATCH_SEQUENCE_r23 1019 +#define _MAYBE_EXPAND_METHOD_r00 1020 +#define _MAYBE_EXPAND_METHOD_KW_r00 1021 +#define _MONITOR_CALL_r00 1022 +#define _MONITOR_CALL_KW_r00 1023 +#define _MONITOR_JUMP_BACKWARD_r00 1024 +#define _MONITOR_JUMP_BACKWARD_r11 1025 +#define _MONITOR_JUMP_BACKWARD_r22 1026 +#define _MONITOR_JUMP_BACKWARD_r33 1027 +#define _MONITOR_RESUME_r00 1028 +#define _NOP_r00 1029 +#define _NOP_r11 1030 +#define _NOP_r22 1031 +#define _NOP_r33 1032 +#define _POP_CALL_r20 1033 +#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1034 +#define _POP_CALL_ONE_r30 1035 +#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1036 +#define _POP_CALL_TWO_r30 1037 +#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1038 +#define _POP_EXCEPT_r00 1039 +#define _POP_ITER_r20 1040 +#define _POP_JUMP_IF_FALSE_r10 1041 +#define _POP_JUMP_IF_FALSE_r21 1042 +#define _POP_JUMP_IF_FALSE_r32 1043 +#define _POP_JUMP_IF_TRUE_r10 1044 +#define _POP_JUMP_IF_TRUE_r21 1045 +#define _POP_JUMP_IF_TRUE_r32 1046 +#define _POP_TOP_r10 1047 +#define _POP_TOP_LOAD_CONST_INLINE_r11 1048 +#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1049 +#define _POP_TWO_r20 1050 +#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1051 +#define _PUSH_EXC_INFO_r01 1052 +#define _PUSH_EXC_INFO_r12 1053 +#define _PUSH_EXC_INFO_r23 1054 +#define _PUSH_FRAME_r10 1055 +#define _PUSH_NULL_r01 1056 +#define _PUSH_NULL_r12 1057 +#define _PUSH_NULL_r23 1058 +#define _PUSH_NULL_CONDITIONAL_r00 1059 +#define _PY_FRAME_GENERAL_r01 1060 +#define _PY_FRAME_KW_r01 1061 +#define _QUICKEN_RESUME_r00 1062 +#define _QUICKEN_RESUME_r11 1063 +#define _QUICKEN_RESUME_r22 1064 +#define _QUICKEN_RESUME_r33 1065 +#define _REPLACE_WITH_TRUE_r11 1066 +#define _RESUME_CHECK_r00 1067 +#define _RESUME_CHECK_r11 1068 +#define _RESUME_CHECK_r22 1069 +#define _RESUME_CHECK_r33 1070 +#define _RETURN_GENERATOR_r01 1071 +#define _RETURN_VALUE_r01 1072 +#define _SAVE_RETURN_OFFSET_r00 1073 +#define _SAVE_RETURN_OFFSET_r11 1074 +#define _SAVE_RETURN_OFFSET_r22 1075 +#define _SAVE_RETURN_OFFSET_r33 1076 +#define _SEND_r01 1077 +#define _SEND_GEN_FRAME_r22 1078 +#define _SETUP_ANNOTATIONS_r00 1079 +#define _SET_ADD_r00 1080 +#define _SET_FUNCTION_ATTRIBUTE_r21 1081 +#define _SET_IP_r00 1082 +#define _SET_IP_r11 1083 +#define _SET_IP_r22 1084 +#define _SET_IP_r33 1085 +#define _SET_UPDATE_r00 1086 +#define _SPILL_OR_RELOAD_r01 1087 +#define _SPILL_OR_RELOAD_r02 1088 +#define _SPILL_OR_RELOAD_r03 1089 +#define _SPILL_OR_RELOAD_r10 1090 +#define _SPILL_OR_RELOAD_r12 1091 +#define _SPILL_OR_RELOAD_r13 1092 +#define _SPILL_OR_RELOAD_r20 1093 +#define _SPILL_OR_RELOAD_r21 1094 +#define _SPILL_OR_RELOAD_r23 1095 +#define _SPILL_OR_RELOAD_r30 1096 +#define _SPILL_OR_RELOAD_r31 1097 +#define _SPILL_OR_RELOAD_r32 1098 +#define _START_EXECUTOR_r00 1099 +#define _STORE_ATTR_r00 1100 +#define _STORE_ATTR_INSTANCE_VALUE_r20 1101 +#define _STORE_ATTR_SLOT_r20 1102 +#define _STORE_ATTR_WITH_HINT_r00 1103 +#define _STORE_DEREF_r00 1104 +#define _STORE_FAST_r10 1105 +#define _STORE_FAST_0_r10 1106 +#define _STORE_FAST_1_r10 1107 +#define _STORE_FAST_2_r10 1108 +#define _STORE_FAST_3_r10 1109 +#define _STORE_FAST_4_r10 1110 +#define _STORE_FAST_5_r10 1111 +#define _STORE_FAST_6_r10 1112 +#define _STORE_FAST_7_r10 1113 +#define _STORE_FAST_LOAD_FAST_r11 1114 +#define _STORE_FAST_STORE_FAST_r20 1115 +#define _STORE_GLOBAL_r00 1116 +#define _STORE_NAME_r00 1117 +#define _STORE_SLICE_r00 1118 +#define _STORE_SUBSCR_r00 1119 +#define _STORE_SUBSCR_DICT_r00 1120 +#define _STORE_SUBSCR_LIST_INT_r30 1121 +#define _SWAP_r11 1122 +#define _SWAP_2_r00 1123 +#define _SWAP_2_r11 1124 +#define _SWAP_2_r22 1125 +#define _SWAP_2_r33 1126 +#define _SWAP_3_r33 1127 +#define _TIER2_RESUME_CHECK_r00 1128 +#define _TIER2_RESUME_CHECK_r11 1129 +#define _TIER2_RESUME_CHECK_r22 1130 +#define _TIER2_RESUME_CHECK_r33 1131 +#define _TO_BOOL_r01 1132 +#define _TO_BOOL_BOOL_r00 1133 +#define _TO_BOOL_BOOL_r11 1134 +#define _TO_BOOL_BOOL_r22 1135 +#define _TO_BOOL_BOOL_r33 1136 +#define _TO_BOOL_INT_r11 1137 +#define _TO_BOOL_LIST_r11 1138 +#define _TO_BOOL_NONE_r00 1139 +#define _TO_BOOL_NONE_r11 1140 +#define _TO_BOOL_NONE_r22 1141 +#define _TO_BOOL_NONE_r33 1142 +#define _TO_BOOL_STR_r11 1143 +#define _UNARY_INVERT_r01 1144 +#define _UNARY_NEGATIVE_r01 1145 +#define _UNARY_NOT_r00 1146 +#define _UNARY_NOT_r11 1147 +#define _UNARY_NOT_r22 1148 +#define _UNARY_NOT_r33 1149 +#define _UNPACK_EX_r00 1150 +#define _UNPACK_SEQUENCE_r00 1151 +#define _UNPACK_SEQUENCE_LIST_r10 1152 +#define _UNPACK_SEQUENCE_TUPLE_r10 1153 +#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1154 +#define _WITH_EXCEPT_START_r01 1155 +#define _YIELD_VALUE_r11 1156 +#define MAX_UOP_REGS_ID 1156 #ifdef __cplusplus } diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h index 9cb2ec943855eb..906c8b13d75909 100644 --- a/Include/internal/pycore_uop_metadata.h +++ b/Include/internal/pycore_uop_metadata.h @@ -19,8 +19,8 @@ extern const char * const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1]; extern int _PyUop_num_popped(int opcode, int oparg); typedef struct _pyuop_info { - int8_t min_input; int8_t max_input; - int8_t delta; uint16_t opcodes[4]; + int8_t min_input; int8_t max_input; int8_t delta; + int8_t exit_depth_is_output; uint16_t opcodes[4]; } _PyUopCachingInfo; extern const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1]; @@ -238,7 +238,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_CHECK_ATTR_METHOD_LAZY_DICT] = HAS_DEOPT_FLAG, [_LOAD_ATTR_METHOD_LAZY_DICT] = HAS_ARG_FLAG, [_MAYBE_EXPAND_METHOD] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_PY_FRAME_GENERAL] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, + [_PY_FRAME_GENERAL] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG, [_CHECK_FUNCTION_VERSION] = HAS_ARG_FLAG | HAS_EXIT_FLAG, [_CHECK_FUNCTION_VERSION_INLINE] = HAS_EXIT_FLAG, [_CHECK_METHOD_VERSION] = HAS_ARG_FLAG | HAS_EXIT_FLAG, @@ -257,7 +257,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_INIT_CALL_PY_EXACT_ARGS_3] = HAS_PURE_FLAG, [_INIT_CALL_PY_EXACT_ARGS_4] = HAS_PURE_FLAG, [_INIT_CALL_PY_EXACT_ARGS] = HAS_ARG_FLAG | HAS_PURE_FLAG, - [_PUSH_FRAME] = 0, + [_PUSH_FRAME] = HAS_SYNC_SP_FLAG, [_GUARD_NOS_NULL] = HAS_DEOPT_FLAG, [_GUARD_NOS_NOT_NULL] = HAS_EXIT_FLAG, [_GUARD_THIRD_NULL] = HAS_DEOPT_FLAG, @@ -268,7 +268,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_GUARD_CALLABLE_TUPLE_1] = HAS_DEOPT_FLAG, [_CALL_TUPLE_1] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_CHECK_AND_ALLOCATE_OBJECT] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_CREATE_INIT_FRAME] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, + [_CREATE_INIT_FRAME] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG, [_EXIT_INIT_CHECK] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, [_CALL_BUILTIN_CLASS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_CALL_BUILTIN_O] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, @@ -285,7 +285,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_CALL_METHOD_DESCRIPTOR_NOARGS] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_CALL_METHOD_DESCRIPTOR_FAST] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, [_MAYBE_EXPAND_METHOD_KW] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_PY_FRAME_KW] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, + [_PY_FRAME_KW] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG, [_CHECK_FUNCTION_VERSION_KW] = HAS_ARG_FLAG | HAS_EXIT_FLAG, [_CHECK_METHOD_VERSION_KW] = HAS_ARG_FLAG | HAS_EXIT_FLAG, [_EXPAND_METHOD_KW] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, @@ -307,15 +307,15 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_SWAP_2] = HAS_PURE_FLAG, [_SWAP_3] = HAS_PURE_FLAG, [_SWAP] = HAS_ARG_FLAG | HAS_PURE_FLAG, - [_GUARD_IS_TRUE_POP] = HAS_EXIT_FLAG, - [_GUARD_IS_FALSE_POP] = HAS_EXIT_FLAG, - [_GUARD_IS_NONE_POP] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_IS_NOT_NONE_POP] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG, + [_GUARD_IS_TRUE_POP] = HAS_EXIT_FLAG | HAS_SYNC_SP_FLAG, + [_GUARD_IS_FALSE_POP] = HAS_EXIT_FLAG | HAS_SYNC_SP_FLAG, + [_GUARD_IS_NONE_POP] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG, + [_GUARD_IS_NOT_NONE_POP] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG, [_JUMP_TO_TOP] = 0, [_SET_IP] = 0, [_CHECK_STACK_SPACE_OPERAND] = HAS_DEOPT_FLAG, [_SAVE_RETURN_OFFSET] = HAS_ARG_FLAG, - [_EXIT_TRACE] = HAS_ESCAPES_FLAG, + [_EXIT_TRACE] = HAS_ESCAPES_FLAG | HAS_SYNC_SP_FLAG, [_CHECK_VALIDITY] = HAS_DEOPT_FLAG, [_LOAD_CONST_INLINE] = HAS_PURE_FLAG, [_POP_TOP_LOAD_CONST_INLINE] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG, @@ -334,8 +334,8 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { [_START_EXECUTOR] = 0, [_MAKE_WARM] = 0, [_FATAL_ERROR] = 0, - [_DEOPT] = 0, - [_ERROR_POP_N] = HAS_ARG_FLAG, + [_DEOPT] = HAS_SYNC_SP_FLAG, + [_ERROR_POP_N] = HAS_ARG_FLAG | HAS_SYNC_SP_FLAG, [_TIER2_RESUME_CHECK] = HAS_DEOPT_FLAG, [_SPILL_OR_RELOAD] = 0, }; @@ -351,314 +351,314 @@ const ReplicationRange _PyUop_Replication[MAX_UOP_ID+1] = { }; const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = { - [_NOP] = { 0, 3, 0, { _NOP_r00, _NOP_r11, _NOP_r22, _NOP_r33 } }, - [_CHECK_PERIODIC] = { 0, 0, 0, { _CHECK_PERIODIC_r00, 0, 0, 0 } }, - [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = { 0, 0, 0, { _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00, 0, 0, 0 } }, - [_RESUME_CHECK] = { 0, 3, 0, { _RESUME_CHECK_r00, _RESUME_CHECK_r11, _RESUME_CHECK_r22, _RESUME_CHECK_r33 } }, - [_LOAD_FAST_CHECK] = { 0, 0, 1, { _LOAD_FAST_CHECK_r01, 0, 0, 0 } }, - [_LOAD_FAST_0] = { 0, 2, 1, { _LOAD_FAST_0_r01, _LOAD_FAST_0_r12, _LOAD_FAST_0_r23, 0 } }, - [_LOAD_FAST_1] = { 0, 2, 1, { _LOAD_FAST_1_r01, _LOAD_FAST_1_r12, _LOAD_FAST_1_r23, 0 } }, - [_LOAD_FAST_2] = { 0, 2, 1, { _LOAD_FAST_2_r01, _LOAD_FAST_2_r12, _LOAD_FAST_2_r23, 0 } }, - [_LOAD_FAST_3] = { 0, 2, 1, { _LOAD_FAST_3_r01, _LOAD_FAST_3_r12, _LOAD_FAST_3_r23, 0 } }, - [_LOAD_FAST_4] = { 0, 2, 1, { _LOAD_FAST_4_r01, _LOAD_FAST_4_r12, _LOAD_FAST_4_r23, 0 } }, - [_LOAD_FAST_5] = { 0, 2, 1, { _LOAD_FAST_5_r01, _LOAD_FAST_5_r12, _LOAD_FAST_5_r23, 0 } }, - [_LOAD_FAST_6] = { 0, 2, 1, { _LOAD_FAST_6_r01, _LOAD_FAST_6_r12, _LOAD_FAST_6_r23, 0 } }, - [_LOAD_FAST_7] = { 0, 2, 1, { _LOAD_FAST_7_r01, _LOAD_FAST_7_r12, _LOAD_FAST_7_r23, 0 } }, - [_LOAD_FAST] = { 0, 2, 1, { _LOAD_FAST_r01, _LOAD_FAST_r12, _LOAD_FAST_r23, 0 } }, - [_LOAD_FAST_BORROW_0] = { 0, 2, 1, { _LOAD_FAST_BORROW_0_r01, _LOAD_FAST_BORROW_0_r12, _LOAD_FAST_BORROW_0_r23, 0 } }, - [_LOAD_FAST_BORROW_1] = { 0, 2, 1, { _LOAD_FAST_BORROW_1_r01, _LOAD_FAST_BORROW_1_r12, _LOAD_FAST_BORROW_1_r23, 0 } }, - [_LOAD_FAST_BORROW_2] = { 0, 2, 1, { _LOAD_FAST_BORROW_2_r01, _LOAD_FAST_BORROW_2_r12, _LOAD_FAST_BORROW_2_r23, 0 } }, - [_LOAD_FAST_BORROW_3] = { 0, 2, 1, { _LOAD_FAST_BORROW_3_r01, _LOAD_FAST_BORROW_3_r12, _LOAD_FAST_BORROW_3_r23, 0 } }, - [_LOAD_FAST_BORROW_4] = { 0, 2, 1, { _LOAD_FAST_BORROW_4_r01, _LOAD_FAST_BORROW_4_r12, _LOAD_FAST_BORROW_4_r23, 0 } }, - [_LOAD_FAST_BORROW_5] = { 0, 2, 1, { _LOAD_FAST_BORROW_5_r01, _LOAD_FAST_BORROW_5_r12, _LOAD_FAST_BORROW_5_r23, 0 } }, - [_LOAD_FAST_BORROW_6] = { 0, 2, 1, { _LOAD_FAST_BORROW_6_r01, _LOAD_FAST_BORROW_6_r12, _LOAD_FAST_BORROW_6_r23, 0 } }, - [_LOAD_FAST_BORROW_7] = { 0, 2, 1, { _LOAD_FAST_BORROW_7_r01, _LOAD_FAST_BORROW_7_r12, _LOAD_FAST_BORROW_7_r23, 0 } }, - [_LOAD_FAST_BORROW] = { 0, 2, 1, { _LOAD_FAST_BORROW_r01, _LOAD_FAST_BORROW_r12, _LOAD_FAST_BORROW_r23, 0 } }, - [_LOAD_FAST_AND_CLEAR] = { 0, 2, 1, { _LOAD_FAST_AND_CLEAR_r01, _LOAD_FAST_AND_CLEAR_r12, _LOAD_FAST_AND_CLEAR_r23, 0 } }, - [_LOAD_CONST] = { 0, 2, 1, { _LOAD_CONST_r01, _LOAD_CONST_r12, _LOAD_CONST_r23, 0 } }, - [_LOAD_SMALL_INT_0] = { 0, 2, 1, { _LOAD_SMALL_INT_0_r01, _LOAD_SMALL_INT_0_r12, _LOAD_SMALL_INT_0_r23, 0 } }, - [_LOAD_SMALL_INT_1] = { 0, 2, 1, { _LOAD_SMALL_INT_1_r01, _LOAD_SMALL_INT_1_r12, _LOAD_SMALL_INT_1_r23, 0 } }, - [_LOAD_SMALL_INT_2] = { 0, 2, 1, { _LOAD_SMALL_INT_2_r01, _LOAD_SMALL_INT_2_r12, _LOAD_SMALL_INT_2_r23, 0 } }, - [_LOAD_SMALL_INT_3] = { 0, 2, 1, { _LOAD_SMALL_INT_3_r01, _LOAD_SMALL_INT_3_r12, _LOAD_SMALL_INT_3_r23, 0 } }, - [_LOAD_SMALL_INT] = { 0, 2, 1, { _LOAD_SMALL_INT_r01, _LOAD_SMALL_INT_r12, _LOAD_SMALL_INT_r23, 0 } }, - [_STORE_FAST_0] = { 1, 1, -1, { 0, _STORE_FAST_0_r10, 0, 0 } }, - [_STORE_FAST_1] = { 1, 1, -1, { 0, _STORE_FAST_1_r10, 0, 0 } }, - [_STORE_FAST_2] = { 1, 1, -1, { 0, _STORE_FAST_2_r10, 0, 0 } }, - [_STORE_FAST_3] = { 1, 1, -1, { 0, _STORE_FAST_3_r10, 0, 0 } }, - [_STORE_FAST_4] = { 1, 1, -1, { 0, _STORE_FAST_4_r10, 0, 0 } }, - [_STORE_FAST_5] = { 1, 1, -1, { 0, _STORE_FAST_5_r10, 0, 0 } }, - [_STORE_FAST_6] = { 1, 1, -1, { 0, _STORE_FAST_6_r10, 0, 0 } }, - [_STORE_FAST_7] = { 1, 1, -1, { 0, _STORE_FAST_7_r10, 0, 0 } }, - [_STORE_FAST] = { 1, 1, -1, { 0, _STORE_FAST_r10, 0, 0 } }, - [_POP_TOP] = { 1, 1, -1, { 0, _POP_TOP_r10, 0, 0 } }, - [_POP_TWO] = { 2, 2, -2, { 0, 0, _POP_TWO_r20, 0 } }, - [_PUSH_NULL] = { 0, 2, 1, { _PUSH_NULL_r01, _PUSH_NULL_r12, _PUSH_NULL_r23, 0 } }, - [_END_FOR] = { 1, 1, -1, { 0, _END_FOR_r10, 0, 0 } }, - [_POP_ITER] = { 2, 2, -2, { 0, 0, _POP_ITER_r20, 0 } }, - [_END_SEND] = { 2, 2, -1, { 0, 0, _END_SEND_r21, 0 } }, - [_UNARY_NEGATIVE] = { 0, 0, 1, { _UNARY_NEGATIVE_r01, 0, 0, 0 } }, - [_UNARY_NOT] = { 0, 3, 0, { _UNARY_NOT_r00, _UNARY_NOT_r11, _UNARY_NOT_r22, _UNARY_NOT_r33 } }, - [_TO_BOOL] = { 0, 0, 1, { _TO_BOOL_r01, 0, 0, 0 } }, - [_TO_BOOL_BOOL] = { 0, 3, 0, { _TO_BOOL_BOOL_r00, _TO_BOOL_BOOL_r11, _TO_BOOL_BOOL_r22, _TO_BOOL_BOOL_r33 } }, - [_TO_BOOL_INT] = { 1, 1, 0, { 0, _TO_BOOL_INT_r11, 0, 0 } }, - [_GUARD_NOS_LIST] = { 0, 3, 0, { _GUARD_NOS_LIST_r00, _GUARD_NOS_LIST_r11, _GUARD_NOS_LIST_r22, _GUARD_NOS_LIST_r33 } }, - [_GUARD_TOS_LIST] = { 0, 3, 0, { _GUARD_TOS_LIST_r00, _GUARD_TOS_LIST_r11, _GUARD_TOS_LIST_r22, _GUARD_TOS_LIST_r33 } }, - [_GUARD_TOS_SLICE] = { 0, 3, 0, { _GUARD_TOS_SLICE_r00, _GUARD_TOS_SLICE_r11, _GUARD_TOS_SLICE_r22, _GUARD_TOS_SLICE_r33 } }, - [_TO_BOOL_LIST] = { 1, 1, 0, { 0, _TO_BOOL_LIST_r11, 0, 0 } }, - [_TO_BOOL_NONE] = { 0, 3, 0, { _TO_BOOL_NONE_r00, _TO_BOOL_NONE_r11, _TO_BOOL_NONE_r22, _TO_BOOL_NONE_r33 } }, - [_GUARD_NOS_UNICODE] = { 0, 3, 0, { _GUARD_NOS_UNICODE_r00, _GUARD_NOS_UNICODE_r11, _GUARD_NOS_UNICODE_r22, _GUARD_NOS_UNICODE_r33 } }, - [_GUARD_TOS_UNICODE] = { 0, 3, 0, { _GUARD_TOS_UNICODE_r00, _GUARD_TOS_UNICODE_r11, _GUARD_TOS_UNICODE_r22, _GUARD_TOS_UNICODE_r33 } }, - [_TO_BOOL_STR] = { 1, 1, 0, { 0, _TO_BOOL_STR_r11, 0, 0 } }, - [_REPLACE_WITH_TRUE] = { 1, 1, 0, { 0, _REPLACE_WITH_TRUE_r11, 0, 0 } }, - [_UNARY_INVERT] = { 0, 0, 1, { _UNARY_INVERT_r01, 0, 0, 0 } }, - [_GUARD_NOS_INT] = { 0, 3, 0, { _GUARD_NOS_INT_r00, _GUARD_NOS_INT_r11, _GUARD_NOS_INT_r22, _GUARD_NOS_INT_r33 } }, - [_GUARD_TOS_INT] = { 0, 3, 0, { _GUARD_TOS_INT_r00, _GUARD_TOS_INT_r11, _GUARD_TOS_INT_r22, _GUARD_TOS_INT_r33 } }, - [_GUARD_NOS_OVERFLOWED] = { 0, 3, 0, { _GUARD_NOS_OVERFLOWED_r00, _GUARD_NOS_OVERFLOWED_r11, _GUARD_NOS_OVERFLOWED_r22, _GUARD_NOS_OVERFLOWED_r33 } }, - [_GUARD_TOS_OVERFLOWED] = { 0, 3, 0, { _GUARD_TOS_OVERFLOWED_r00, _GUARD_TOS_OVERFLOWED_r11, _GUARD_TOS_OVERFLOWED_r22, _GUARD_TOS_OVERFLOWED_r33 } }, - [_BINARY_OP_MULTIPLY_INT] = { 1, 1, 0, { 0, _BINARY_OP_MULTIPLY_INT_r11, 0, 0 } }, - [_BINARY_OP_ADD_INT] = { 1, 1, 0, { 0, _BINARY_OP_ADD_INT_r11, 0, 0 } }, - [_BINARY_OP_SUBTRACT_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBTRACT_INT_r11, 0, 0 } }, - [_GUARD_NOS_FLOAT] = { 0, 3, 0, { _GUARD_NOS_FLOAT_r00, _GUARD_NOS_FLOAT_r11, _GUARD_NOS_FLOAT_r22, _GUARD_NOS_FLOAT_r33 } }, - [_GUARD_TOS_FLOAT] = { 0, 3, 0, { _GUARD_TOS_FLOAT_r00, _GUARD_TOS_FLOAT_r11, _GUARD_TOS_FLOAT_r22, _GUARD_TOS_FLOAT_r33 } }, - [_BINARY_OP_MULTIPLY_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_MULTIPLY_FLOAT_r10, _BINARY_OP_MULTIPLY_FLOAT_r21, _BINARY_OP_MULTIPLY_FLOAT_r32 } }, - [_BINARY_OP_ADD_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_ADD_FLOAT_r10, _BINARY_OP_ADD_FLOAT_r21, _BINARY_OP_ADD_FLOAT_r32 } }, - [_BINARY_OP_SUBTRACT_FLOAT] = { 1, 3, -1, { 0, _BINARY_OP_SUBTRACT_FLOAT_r10, _BINARY_OP_SUBTRACT_FLOAT_r21, _BINARY_OP_SUBTRACT_FLOAT_r32 } }, - [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS] = { 1, 3, -1, { 0, _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r10, _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21, _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r32 } }, - [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS] = { 1, 3, -1, { 0, _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r10, _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21, _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r32 } }, - [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS] = { 1, 3, -1, { 0, _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r10, _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21, _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r32 } }, - [_BINARY_OP_ADD_UNICODE] = { 1, 3, -1, { 0, _BINARY_OP_ADD_UNICODE_r10, _BINARY_OP_ADD_UNICODE_r21, _BINARY_OP_ADD_UNICODE_r32 } }, - [_BINARY_OP_INPLACE_ADD_UNICODE] = { 0, 0, 0, { _BINARY_OP_INPLACE_ADD_UNICODE_r00, 0, 0, 0 } }, - [_GUARD_BINARY_OP_EXTEND] = { 0, 0, 0, { _GUARD_BINARY_OP_EXTEND_r00, 0, 0, 0 } }, - [_BINARY_OP_EXTEND] = { 0, 0, 1, { _BINARY_OP_EXTEND_r01, 0, 0, 0 } }, - [_BINARY_SLICE] = { 0, 0, 1, { _BINARY_SLICE_r01, 0, 0, 0 } }, - [_STORE_SLICE] = { 0, 0, 0, { _STORE_SLICE_r00, 0, 0, 0 } }, - [_BINARY_OP_SUBSCR_LIST_INT] = { 0, 0, 1, { _BINARY_OP_SUBSCR_LIST_INT_r01, 0, 0, 0 } }, - [_BINARY_OP_SUBSCR_LIST_SLICE] = { 0, 0, 1, { _BINARY_OP_SUBSCR_LIST_SLICE_r01, 0, 0, 0 } }, - [_BINARY_OP_SUBSCR_STR_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_STR_INT_r11, 0, 0 } }, - [_GUARD_NOS_TUPLE] = { 0, 3, 0, { _GUARD_NOS_TUPLE_r00, _GUARD_NOS_TUPLE_r11, _GUARD_NOS_TUPLE_r22, _GUARD_NOS_TUPLE_r33 } }, - [_GUARD_TOS_TUPLE] = { 0, 3, 0, { _GUARD_TOS_TUPLE_r00, _GUARD_TOS_TUPLE_r11, _GUARD_TOS_TUPLE_r22, _GUARD_TOS_TUPLE_r33 } }, - [_BINARY_OP_SUBSCR_TUPLE_INT] = { 1, 1, 0, { 0, _BINARY_OP_SUBSCR_TUPLE_INT_r11, 0, 0 } }, - [_GUARD_NOS_DICT] = { 0, 3, 0, { _GUARD_NOS_DICT_r00, _GUARD_NOS_DICT_r11, _GUARD_NOS_DICT_r22, _GUARD_NOS_DICT_r33 } }, - [_GUARD_TOS_DICT] = { 0, 3, 0, { _GUARD_TOS_DICT_r00, _GUARD_TOS_DICT_r11, _GUARD_TOS_DICT_r22, _GUARD_TOS_DICT_r33 } }, - [_BINARY_OP_SUBSCR_DICT] = { 0, 0, 1, { _BINARY_OP_SUBSCR_DICT_r01, 0, 0, 0 } }, - [_BINARY_OP_SUBSCR_CHECK_FUNC] = { 2, 2, 0, { 0, 0, _BINARY_OP_SUBSCR_CHECK_FUNC_r22, 0 } }, - [_BINARY_OP_SUBSCR_INIT_CALL] = { 3, 3, -2, { 0, 0, 0, _BINARY_OP_SUBSCR_INIT_CALL_r31 } }, - [_LIST_APPEND] = { 1, 1, -1, { 0, _LIST_APPEND_r10, 0, 0 } }, - [_SET_ADD] = { 0, 0, 0, { _SET_ADD_r00, 0, 0, 0 } }, - [_STORE_SUBSCR] = { 0, 0, 0, { _STORE_SUBSCR_r00, 0, 0, 0 } }, - [_STORE_SUBSCR_LIST_INT] = { 0, 0, 0, { _STORE_SUBSCR_LIST_INT_r00, 0, 0, 0 } }, - [_STORE_SUBSCR_DICT] = { 0, 0, 0, { _STORE_SUBSCR_DICT_r00, 0, 0, 0 } }, - [_DELETE_SUBSCR] = { 0, 0, 0, { _DELETE_SUBSCR_r00, 0, 0, 0 } }, - [_CALL_INTRINSIC_1] = { 0, 0, 1, { _CALL_INTRINSIC_1_r01, 0, 0, 0 } }, - [_CALL_INTRINSIC_2] = { 0, 0, 1, { _CALL_INTRINSIC_2_r01, 0, 0, 0 } }, - [_RETURN_VALUE] = { 0, 0, 1, { _RETURN_VALUE_r01, 0, 0, 0 } }, - [_GET_AITER] = { 0, 0, 1, { _GET_AITER_r01, 0, 0, 0 } }, - [_GET_ANEXT] = { 0, 0, 1, { _GET_ANEXT_r01, 0, 0, 0 } }, - [_GET_AWAITABLE] = { 0, 0, 1, { _GET_AWAITABLE_r01, 0, 0, 0 } }, - [_SEND_GEN_FRAME] = { 0, 3, 0, { _SEND_GEN_FRAME_r00, _SEND_GEN_FRAME_r11, _SEND_GEN_FRAME_r22, _SEND_GEN_FRAME_r33 } }, - [_YIELD_VALUE] = { 0, 3, 0, { _YIELD_VALUE_r00, _YIELD_VALUE_r11, _YIELD_VALUE_r22, _YIELD_VALUE_r33 } }, - [_POP_EXCEPT] = { 0, 0, 0, { _POP_EXCEPT_r00, 0, 0, 0 } }, - [_LOAD_COMMON_CONSTANT] = { 0, 2, 1, { _LOAD_COMMON_CONSTANT_r01, _LOAD_COMMON_CONSTANT_r12, _LOAD_COMMON_CONSTANT_r23, 0 } }, - [_LOAD_BUILD_CLASS] = { 0, 0, 1, { _LOAD_BUILD_CLASS_r01, 0, 0, 0 } }, - [_STORE_NAME] = { 0, 0, 0, { _STORE_NAME_r00, 0, 0, 0 } }, - [_DELETE_NAME] = { 0, 0, 0, { _DELETE_NAME_r00, 0, 0, 0 } }, - [_UNPACK_SEQUENCE] = { 0, 0, 0, { _UNPACK_SEQUENCE_r00, 0, 0, 0 } }, - [_UNPACK_SEQUENCE_TWO_TUPLE] = { 1, 1, 0, { 0, _UNPACK_SEQUENCE_TWO_TUPLE_r11, 0, 0 } }, - [_UNPACK_SEQUENCE_TUPLE] = { 0, 0, 0, { _UNPACK_SEQUENCE_TUPLE_r00, 0, 0, 0 } }, - [_UNPACK_SEQUENCE_LIST] = { 0, 0, 0, { _UNPACK_SEQUENCE_LIST_r00, 0, 0, 0 } }, - [_UNPACK_EX] = { 0, 0, 0, { _UNPACK_EX_r00, 0, 0, 0 } }, - [_STORE_ATTR] = { 0, 0, 0, { _STORE_ATTR_r00, 0, 0, 0 } }, - [_DELETE_ATTR] = { 0, 0, 0, { _DELETE_ATTR_r00, 0, 0, 0 } }, - [_STORE_GLOBAL] = { 0, 0, 0, { _STORE_GLOBAL_r00, 0, 0, 0 } }, - [_DELETE_GLOBAL] = { 0, 0, 0, { _DELETE_GLOBAL_r00, 0, 0, 0 } }, - [_LOAD_LOCALS] = { 0, 0, 1, { _LOAD_LOCALS_r01, 0, 0, 0 } }, - [_LOAD_NAME] = { 0, 0, 1, { _LOAD_NAME_r01, 0, 0, 0 } }, - [_LOAD_GLOBAL] = { 0, 0, 0, { _LOAD_GLOBAL_r00, 0, 0, 0 } }, - [_PUSH_NULL_CONDITIONAL] = { 0, 0, 0, { _PUSH_NULL_CONDITIONAL_r00, 0, 0, 0 } }, - [_GUARD_GLOBALS_VERSION] = { 0, 3, 0, { _GUARD_GLOBALS_VERSION_r00, _GUARD_GLOBALS_VERSION_r11, _GUARD_GLOBALS_VERSION_r22, _GUARD_GLOBALS_VERSION_r33 } }, - [_LOAD_GLOBAL_MODULE] = { 0, 0, 0, { _LOAD_GLOBAL_MODULE_r00, 0, 0, 0 } }, - [_LOAD_GLOBAL_BUILTINS] = { 0, 0, 0, { _LOAD_GLOBAL_BUILTINS_r00, 0, 0, 0 } }, - [_DELETE_FAST] = { 0, 0, 0, { _DELETE_FAST_r00, 0, 0, 0 } }, - [_MAKE_CELL] = { 0, 0, 0, { _MAKE_CELL_r00, 0, 0, 0 } }, - [_DELETE_DEREF] = { 0, 0, 0, { _DELETE_DEREF_r00, 0, 0, 0 } }, - [_LOAD_FROM_DICT_OR_DEREF] = { 0, 0, 1, { _LOAD_FROM_DICT_OR_DEREF_r01, 0, 0, 0 } }, - [_LOAD_DEREF] = { 0, 0, 1, { _LOAD_DEREF_r01, 0, 0, 0 } }, - [_STORE_DEREF] = { 0, 0, 0, { _STORE_DEREF_r00, 0, 0, 0 } }, - [_COPY_FREE_VARS] = { 0, 3, 0, { _COPY_FREE_VARS_r00, _COPY_FREE_VARS_r11, _COPY_FREE_VARS_r22, _COPY_FREE_VARS_r33 } }, - [_BUILD_STRING] = { 0, 0, 1, { _BUILD_STRING_r01, 0, 0, 0 } }, - [_BUILD_INTERPOLATION] = { 0, 0, 1, { _BUILD_INTERPOLATION_r01, 0, 0, 0 } }, - [_BUILD_TEMPLATE] = { 0, 0, 1, { _BUILD_TEMPLATE_r01, 0, 0, 0 } }, - [_BUILD_TUPLE] = { 0, 0, 1, { _BUILD_TUPLE_r01, 0, 0, 0 } }, - [_BUILD_LIST] = { 0, 0, 1, { _BUILD_LIST_r01, 0, 0, 0 } }, - [_LIST_EXTEND] = { 0, 0, 0, { _LIST_EXTEND_r00, 0, 0, 0 } }, - [_SET_UPDATE] = { 0, 0, 0, { _SET_UPDATE_r00, 0, 0, 0 } }, - [_BUILD_SET] = { 0, 0, 1, { _BUILD_SET_r01, 0, 0, 0 } }, - [_BUILD_MAP] = { 0, 0, 1, { _BUILD_MAP_r01, 0, 0, 0 } }, - [_SETUP_ANNOTATIONS] = { 0, 0, 0, { _SETUP_ANNOTATIONS_r00, 0, 0, 0 } }, - [_DICT_UPDATE] = { 0, 0, 0, { _DICT_UPDATE_r00, 0, 0, 0 } }, - [_DICT_MERGE] = { 0, 0, 0, { _DICT_MERGE_r00, 0, 0, 0 } }, - [_MAP_ADD] = { 0, 0, 0, { _MAP_ADD_r00, 0, 0, 0 } }, - [_LOAD_SUPER_ATTR_ATTR] = { 0, 0, 1, { _LOAD_SUPER_ATTR_ATTR_r01, 0, 0, 0 } }, - [_LOAD_SUPER_ATTR_METHOD] = { 0, 0, 2, { _LOAD_SUPER_ATTR_METHOD_r02, 0, 0, 0 } }, - [_LOAD_ATTR] = { 0, 0, 0, { _LOAD_ATTR_r00, 0, 0, 0 } }, - [_GUARD_TYPE_VERSION] = { 0, 3, 0, { _GUARD_TYPE_VERSION_r00, _GUARD_TYPE_VERSION_r11, _GUARD_TYPE_VERSION_r22, _GUARD_TYPE_VERSION_r33 } }, - [_GUARD_TYPE_VERSION_AND_LOCK] = { 0, 3, 0, { _GUARD_TYPE_VERSION_AND_LOCK_r00, _GUARD_TYPE_VERSION_AND_LOCK_r11, _GUARD_TYPE_VERSION_AND_LOCK_r22, _GUARD_TYPE_VERSION_AND_LOCK_r33 } }, - [_CHECK_MANAGED_OBJECT_HAS_VALUES] = { 0, 3, 0, { _CHECK_MANAGED_OBJECT_HAS_VALUES_r00, _CHECK_MANAGED_OBJECT_HAS_VALUES_r11, _CHECK_MANAGED_OBJECT_HAS_VALUES_r22, _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 } }, - [_LOAD_ATTR_INSTANCE_VALUE] = { 1, 1, 0, { 0, _LOAD_ATTR_INSTANCE_VALUE_r11, 0, 0 } }, - [_LOAD_ATTR_MODULE] = { 1, 1, 0, { 0, _LOAD_ATTR_MODULE_r11, 0, 0 } }, - [_LOAD_ATTR_WITH_HINT] = { 1, 1, 0, { 0, _LOAD_ATTR_WITH_HINT_r11, 0, 0 } }, - [_LOAD_ATTR_SLOT] = { 1, 1, 0, { 0, _LOAD_ATTR_SLOT_r11, 0, 0 } }, - [_CHECK_ATTR_CLASS] = { 0, 3, 0, { _CHECK_ATTR_CLASS_r00, _CHECK_ATTR_CLASS_r11, _CHECK_ATTR_CLASS_r22, _CHECK_ATTR_CLASS_r33 } }, - [_LOAD_ATTR_CLASS] = { 1, 1, 0, { 0, _LOAD_ATTR_CLASS_r11, 0, 0 } }, - [_LOAD_ATTR_PROPERTY_FRAME] = { 0, 3, 0, { _LOAD_ATTR_PROPERTY_FRAME_r00, _LOAD_ATTR_PROPERTY_FRAME_r11, _LOAD_ATTR_PROPERTY_FRAME_r22, _LOAD_ATTR_PROPERTY_FRAME_r33 } }, - [_GUARD_DORV_NO_DICT] = { 0, 3, 0, { _GUARD_DORV_NO_DICT_r00, _GUARD_DORV_NO_DICT_r11, _GUARD_DORV_NO_DICT_r22, _GUARD_DORV_NO_DICT_r33 } }, - [_STORE_ATTR_INSTANCE_VALUE] = { 2, 2, -2, { 0, 0, _STORE_ATTR_INSTANCE_VALUE_r20, 0 } }, - [_STORE_ATTR_WITH_HINT] = { 0, 0, 0, { _STORE_ATTR_WITH_HINT_r00, 0, 0, 0 } }, - [_STORE_ATTR_SLOT] = { 0, 0, 0, { _STORE_ATTR_SLOT_r00, 0, 0, 0 } }, - [_COMPARE_OP] = { 0, 0, 1, { _COMPARE_OP_r01, 0, 0, 0 } }, - [_COMPARE_OP_FLOAT] = { 1, 3, -1, { 0, _COMPARE_OP_FLOAT_r10, _COMPARE_OP_FLOAT_r21, _COMPARE_OP_FLOAT_r32 } }, - [_COMPARE_OP_INT] = { 1, 3, -1, { 0, _COMPARE_OP_INT_r10, _COMPARE_OP_INT_r21, _COMPARE_OP_INT_r32 } }, - [_COMPARE_OP_STR] = { 1, 3, -1, { 0, _COMPARE_OP_STR_r10, _COMPARE_OP_STR_r21, _COMPARE_OP_STR_r32 } }, - [_IS_OP] = { 2, 2, -1, { 0, 0, _IS_OP_r21, 0 } }, - [_CONTAINS_OP] = { 0, 0, 1, { _CONTAINS_OP_r01, 0, 0, 0 } }, - [_GUARD_TOS_ANY_SET] = { 0, 3, 0, { _GUARD_TOS_ANY_SET_r00, _GUARD_TOS_ANY_SET_r11, _GUARD_TOS_ANY_SET_r22, _GUARD_TOS_ANY_SET_r33 } }, - [_CONTAINS_OP_SET] = { 0, 0, 1, { _CONTAINS_OP_SET_r01, 0, 0, 0 } }, - [_CONTAINS_OP_DICT] = { 0, 0, 1, { _CONTAINS_OP_DICT_r01, 0, 0, 0 } }, - [_CHECK_EG_MATCH] = { 0, 0, 2, { _CHECK_EG_MATCH_r02, 0, 0, 0 } }, - [_CHECK_EXC_MATCH] = { 0, 0, 1, { _CHECK_EXC_MATCH_r01, 0, 0, 0 } }, - [_IMPORT_NAME] = { 0, 0, 1, { _IMPORT_NAME_r01, 0, 0, 0 } }, - [_IMPORT_FROM] = { 0, 0, 1, { _IMPORT_FROM_r01, 0, 0, 0 } }, - [_IS_NONE] = { 1, 1, 0, { 0, _IS_NONE_r11, 0, 0 } }, - [_GET_LEN] = { 0, 0, 1, { _GET_LEN_r01, 0, 0, 0 } }, - [_MATCH_CLASS] = { 0, 0, 1, { _MATCH_CLASS_r01, 0, 0, 0 } }, - [_MATCH_MAPPING] = { 0, 2, 1, { _MATCH_MAPPING_r01, _MATCH_MAPPING_r12, _MATCH_MAPPING_r23, 0 } }, - [_MATCH_SEQUENCE] = { 0, 2, 1, { _MATCH_SEQUENCE_r01, _MATCH_SEQUENCE_r12, _MATCH_SEQUENCE_r23, 0 } }, - [_MATCH_KEYS] = { 0, 0, 1, { _MATCH_KEYS_r01, 0, 0, 0 } }, - [_GET_ITER] = { 0, 0, 2, { _GET_ITER_r02, 0, 0, 0 } }, - [_GET_YIELD_FROM_ITER] = { 0, 0, 1, { _GET_YIELD_FROM_ITER_r01, 0, 0, 0 } }, - [_FOR_ITER_TIER_TWO] = { 0, 0, 1, { _FOR_ITER_TIER_TWO_r01, 0, 0, 0 } }, - [_ITER_CHECK_LIST] = { 0, 3, 0, { _ITER_CHECK_LIST_r00, _ITER_CHECK_LIST_r11, _ITER_CHECK_LIST_r22, _ITER_CHECK_LIST_r33 } }, - [_GUARD_NOT_EXHAUSTED_LIST] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_LIST_r00, _GUARD_NOT_EXHAUSTED_LIST_r11, _GUARD_NOT_EXHAUSTED_LIST_r22, _GUARD_NOT_EXHAUSTED_LIST_r33 } }, - [_ITER_NEXT_LIST_TIER_TWO] = { 0, 0, 1, { _ITER_NEXT_LIST_TIER_TWO_r01, 0, 0, 0 } }, - [_ITER_CHECK_TUPLE] = { 0, 3, 0, { _ITER_CHECK_TUPLE_r00, _ITER_CHECK_TUPLE_r11, _ITER_CHECK_TUPLE_r22, _ITER_CHECK_TUPLE_r33 } }, - [_GUARD_NOT_EXHAUSTED_TUPLE] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_TUPLE_r00, _GUARD_NOT_EXHAUSTED_TUPLE_r11, _GUARD_NOT_EXHAUSTED_TUPLE_r22, _GUARD_NOT_EXHAUSTED_TUPLE_r33 } }, - [_ITER_NEXT_TUPLE] = { 2, 2, 1, { 0, 0, _ITER_NEXT_TUPLE_r23, 0 } }, - [_ITER_CHECK_RANGE] = { 0, 3, 0, { _ITER_CHECK_RANGE_r00, _ITER_CHECK_RANGE_r11, _ITER_CHECK_RANGE_r22, _ITER_CHECK_RANGE_r33 } }, - [_GUARD_NOT_EXHAUSTED_RANGE] = { 0, 3, 0, { _GUARD_NOT_EXHAUSTED_RANGE_r00, _GUARD_NOT_EXHAUSTED_RANGE_r11, _GUARD_NOT_EXHAUSTED_RANGE_r22, _GUARD_NOT_EXHAUSTED_RANGE_r33 } }, - [_ITER_NEXT_RANGE] = { 2, 2, 1, { 0, 0, _ITER_NEXT_RANGE_r23, 0 } }, - [_FOR_ITER_GEN_FRAME] = { 2, 2, 0, { 0, 0, _FOR_ITER_GEN_FRAME_r22, 0 } }, - [_INSERT_NULL] = { 1, 1, -1, { 0, _INSERT_NULL_r10, 0, 0 } }, - [_LOAD_SPECIAL] = { 0, 0, 0, { _LOAD_SPECIAL_r00, 0, 0, 0 } }, - [_WITH_EXCEPT_START] = { 0, 0, 1, { _WITH_EXCEPT_START_r01, 0, 0, 0 } }, - [_PUSH_EXC_INFO] = { 0, 2, 1, { _PUSH_EXC_INFO_r01, _PUSH_EXC_INFO_r12, _PUSH_EXC_INFO_r23, 0 } }, - [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT] = { 0, 3, 0, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 } }, - [_GUARD_KEYS_VERSION] = { 0, 3, 0, { _GUARD_KEYS_VERSION_r00, _GUARD_KEYS_VERSION_r11, _GUARD_KEYS_VERSION_r22, _GUARD_KEYS_VERSION_r33 } }, - [_LOAD_ATTR_METHOD_WITH_VALUES] = { 0, 2, 1, { _LOAD_ATTR_METHOD_WITH_VALUES_r01, _LOAD_ATTR_METHOD_WITH_VALUES_r12, _LOAD_ATTR_METHOD_WITH_VALUES_r23, 0 } }, - [_LOAD_ATTR_METHOD_NO_DICT] = { 0, 2, 1, { _LOAD_ATTR_METHOD_NO_DICT_r01, _LOAD_ATTR_METHOD_NO_DICT_r12, _LOAD_ATTR_METHOD_NO_DICT_r23, 0 } }, - [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { 1, 1, 0, { 0, _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11, 0, 0 } }, - [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { 1, 1, 0, { 0, _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11, 0, 0 } }, - [_CHECK_ATTR_METHOD_LAZY_DICT] = { 0, 3, 0, { _CHECK_ATTR_METHOD_LAZY_DICT_r00, _CHECK_ATTR_METHOD_LAZY_DICT_r11, _CHECK_ATTR_METHOD_LAZY_DICT_r22, _CHECK_ATTR_METHOD_LAZY_DICT_r33 } }, - [_LOAD_ATTR_METHOD_LAZY_DICT] = { 0, 2, 1, { _LOAD_ATTR_METHOD_LAZY_DICT_r01, _LOAD_ATTR_METHOD_LAZY_DICT_r12, _LOAD_ATTR_METHOD_LAZY_DICT_r23, 0 } }, - [_MAYBE_EXPAND_METHOD] = { 0, 0, 0, { _MAYBE_EXPAND_METHOD_r00, 0, 0, 0 } }, - [_PY_FRAME_GENERAL] = { 0, 0, 1, { _PY_FRAME_GENERAL_r01, 0, 0, 0 } }, - [_CHECK_FUNCTION_VERSION] = { 0, 0, 0, { _CHECK_FUNCTION_VERSION_r00, 0, 0, 0 } }, - [_CHECK_FUNCTION_VERSION_INLINE] = { 0, 3, 0, { _CHECK_FUNCTION_VERSION_INLINE_r00, _CHECK_FUNCTION_VERSION_INLINE_r11, _CHECK_FUNCTION_VERSION_INLINE_r22, _CHECK_FUNCTION_VERSION_INLINE_r33 } }, - [_CHECK_METHOD_VERSION] = { 0, 0, 0, { _CHECK_METHOD_VERSION_r00, 0, 0, 0 } }, - [_EXPAND_METHOD] = { 0, 0, 0, { _EXPAND_METHOD_r00, 0, 0, 0 } }, - [_CHECK_IS_NOT_PY_CALLABLE] = { 0, 0, 0, { _CHECK_IS_NOT_PY_CALLABLE_r00, 0, 0, 0 } }, - [_CALL_NON_PY_GENERAL] = { 0, 0, 1, { _CALL_NON_PY_GENERAL_r01, 0, 0, 0 } }, - [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = { 0, 0, 0, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00, 0, 0, 0 } }, - [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = { 0, 0, 0, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00, 0, 0, 0 } }, - [_CHECK_PEP_523] = { 0, 3, 0, { _CHECK_PEP_523_r00, _CHECK_PEP_523_r11, _CHECK_PEP_523_r22, _CHECK_PEP_523_r33 } }, - [_CHECK_FUNCTION_EXACT_ARGS] = { 0, 0, 0, { _CHECK_FUNCTION_EXACT_ARGS_r00, 0, 0, 0 } }, - [_CHECK_STACK_SPACE] = { 0, 0, 0, { _CHECK_STACK_SPACE_r00, 0, 0, 0 } }, - [_CHECK_RECURSION_REMAINING] = { 0, 3, 0, { _CHECK_RECURSION_REMAINING_r00, _CHECK_RECURSION_REMAINING_r11, _CHECK_RECURSION_REMAINING_r22, _CHECK_RECURSION_REMAINING_r33 } }, - [_INIT_CALL_PY_EXACT_ARGS_0] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_0_r01, 0, 0, 0 } }, - [_INIT_CALL_PY_EXACT_ARGS_1] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_1_r01, 0, 0, 0 } }, - [_INIT_CALL_PY_EXACT_ARGS_2] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_2_r01, 0, 0, 0 } }, - [_INIT_CALL_PY_EXACT_ARGS_3] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_3_r01, 0, 0, 0 } }, - [_INIT_CALL_PY_EXACT_ARGS_4] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_4_r01, 0, 0, 0 } }, - [_INIT_CALL_PY_EXACT_ARGS] = { 0, 0, 1, { _INIT_CALL_PY_EXACT_ARGS_r01, 0, 0, 0 } }, - [_PUSH_FRAME] = { 1, 1, -1, { 0, _PUSH_FRAME_r10, 0, 0 } }, - [_GUARD_NOS_NULL] = { 0, 3, 0, { _GUARD_NOS_NULL_r00, _GUARD_NOS_NULL_r11, _GUARD_NOS_NULL_r22, _GUARD_NOS_NULL_r33 } }, - [_GUARD_NOS_NOT_NULL] = { 0, 3, 0, { _GUARD_NOS_NOT_NULL_r00, _GUARD_NOS_NOT_NULL_r11, _GUARD_NOS_NOT_NULL_r22, _GUARD_NOS_NOT_NULL_r33 } }, - [_GUARD_THIRD_NULL] = { 3, 3, 0, { 0, 0, 0, _GUARD_THIRD_NULL_r33 } }, - [_GUARD_CALLABLE_TYPE_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_TYPE_1_r33 } }, - [_CALL_TYPE_1] = { 3, 3, -2, { 0, 0, 0, _CALL_TYPE_1_r31 } }, - [_GUARD_CALLABLE_STR_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_STR_1_r33 } }, - [_CALL_STR_1] = { 0, 0, 1, { _CALL_STR_1_r01, 0, 0, 0 } }, - [_GUARD_CALLABLE_TUPLE_1] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_TUPLE_1_r33 } }, - [_CALL_TUPLE_1] = { 0, 0, 1, { _CALL_TUPLE_1_r01, 0, 0, 0 } }, - [_CHECK_AND_ALLOCATE_OBJECT] = { 0, 0, 0, { _CHECK_AND_ALLOCATE_OBJECT_r00, 0, 0, 0 } }, - [_CREATE_INIT_FRAME] = { 0, 0, 1, { _CREATE_INIT_FRAME_r01, 0, 0, 0 } }, - [_EXIT_INIT_CHECK] = { 0, 0, 0, { _EXIT_INIT_CHECK_r00, 0, 0, 0 } }, - [_CALL_BUILTIN_CLASS] = { 0, 0, 1, { _CALL_BUILTIN_CLASS_r01, 0, 0, 0 } }, - [_CALL_BUILTIN_O] = { 0, 0, 1, { _CALL_BUILTIN_O_r01, 0, 0, 0 } }, - [_CALL_BUILTIN_FAST] = { 0, 0, 1, { _CALL_BUILTIN_FAST_r01, 0, 0, 0 } }, - [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, - [_GUARD_CALLABLE_LEN] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LEN_r33 } }, - [_CALL_LEN] = { 0, 0, 1, { _CALL_LEN_r01, 0, 0, 0 } }, - [_GUARD_CALLABLE_ISINSTANCE] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_ISINSTANCE_r33 } }, - [_CALL_ISINSTANCE] = { 0, 0, 1, { _CALL_ISINSTANCE_r01, 0, 0, 0 } }, - [_GUARD_CALLABLE_LIST_APPEND] = { 3, 3, 0, { 0, 0, 0, _GUARD_CALLABLE_LIST_APPEND_r33 } }, - [_CALL_LIST_APPEND] = { 0, 0, 0, { _CALL_LIST_APPEND_r00, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_O] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_O_r01, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_NOARGS] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_NOARGS_r01, 0, 0, 0 } }, - [_CALL_METHOD_DESCRIPTOR_FAST] = { 0, 0, 1, { _CALL_METHOD_DESCRIPTOR_FAST_r01, 0, 0, 0 } }, - [_MAYBE_EXPAND_METHOD_KW] = { 0, 0, 0, { _MAYBE_EXPAND_METHOD_KW_r00, 0, 0, 0 } }, - [_PY_FRAME_KW] = { 0, 0, 1, { _PY_FRAME_KW_r01, 0, 0, 0 } }, - [_CHECK_FUNCTION_VERSION_KW] = { 1, 1, 0, { 0, _CHECK_FUNCTION_VERSION_KW_r11, 0, 0 } }, - [_CHECK_METHOD_VERSION_KW] = { 1, 1, 0, { 0, _CHECK_METHOD_VERSION_KW_r11, 0, 0 } }, - [_EXPAND_METHOD_KW] = { 0, 0, 0, { _EXPAND_METHOD_KW_r00, 0, 0, 0 } }, - [_CHECK_IS_NOT_PY_CALLABLE_KW] = { 1, 1, 0, { 0, _CHECK_IS_NOT_PY_CALLABLE_KW_r11, 0, 0 } }, - [_CALL_KW_NON_PY] = { 0, 0, 1, { _CALL_KW_NON_PY_r01, 0, 0, 0 } }, - [_MAKE_CALLARGS_A_TUPLE] = { 0, 0, 0, { _MAKE_CALLARGS_A_TUPLE_r00, 0, 0, 0 } }, - [_MAKE_FUNCTION] = { 0, 0, 1, { _MAKE_FUNCTION_r01, 0, 0, 0 } }, - [_SET_FUNCTION_ATTRIBUTE] = { 1, 3, -1, { 0, _SET_FUNCTION_ATTRIBUTE_r10, _SET_FUNCTION_ATTRIBUTE_r21, _SET_FUNCTION_ATTRIBUTE_r32 } }, - [_RETURN_GENERATOR] = { 0, 0, 1, { _RETURN_GENERATOR_r01, 0, 0, 0 } }, - [_BUILD_SLICE] = { 0, 0, 1, { _BUILD_SLICE_r01, 0, 0, 0 } }, - [_CONVERT_VALUE] = { 0, 0, 1, { _CONVERT_VALUE_r01, 0, 0, 0 } }, - [_FORMAT_SIMPLE] = { 0, 0, 1, { _FORMAT_SIMPLE_r01, 0, 0, 0 } }, - [_FORMAT_WITH_SPEC] = { 0, 0, 1, { _FORMAT_WITH_SPEC_r01, 0, 0, 0 } }, - [_COPY_1] = { 0, 2, 1, { _COPY_1_r01, _COPY_1_r12, _COPY_1_r23, 0 } }, - [_COPY_2] = { 2, 2, 1, { 0, 0, _COPY_2_r23, 0 } }, - [_COPY_3] = { 3, 3, 0, { 0, 0, 0, _COPY_3_r33 } }, - [_COPY] = { 0, 0, 1, { _COPY_r01, 0, 0, 0 } }, - [_BINARY_OP] = { 0, 0, 1, { _BINARY_OP_r01, 0, 0, 0 } }, - [_SWAP_2] = { 0, 3, 0, { _SWAP_2_r00, _SWAP_2_r11, _SWAP_2_r22, _SWAP_2_r33 } }, - [_SWAP_3] = { 3, 3, 0, { 0, 0, 0, _SWAP_3_r33 } }, - [_SWAP] = { 1, 1, 0, { 0, _SWAP_r11, 0, 0 } }, - [_GUARD_IS_TRUE_POP] = { 0, 0, 0, { _GUARD_IS_TRUE_POP_r00, 0, 0, 0 } }, - [_GUARD_IS_FALSE_POP] = { 0, 0, 0, { _GUARD_IS_FALSE_POP_r00, 0, 0, 0 } }, - [_GUARD_IS_NONE_POP] = { 0, 0, 0, { _GUARD_IS_NONE_POP_r00, 0, 0, 0 } }, - [_GUARD_IS_NOT_NONE_POP] = { 0, 0, 0, { _GUARD_IS_NOT_NONE_POP_r00, 0, 0, 0 } }, - [_JUMP_TO_TOP] = { 0, 0, 0, { _JUMP_TO_TOP_r00, 0, 0, 0 } }, - [_SET_IP] = { 0, 3, 0, { _SET_IP_r00, _SET_IP_r11, _SET_IP_r22, _SET_IP_r33 } }, - [_CHECK_STACK_SPACE_OPERAND] = { 0, 3, 0, { _CHECK_STACK_SPACE_OPERAND_r00, _CHECK_STACK_SPACE_OPERAND_r11, _CHECK_STACK_SPACE_OPERAND_r22, _CHECK_STACK_SPACE_OPERAND_r33 } }, - [_SAVE_RETURN_OFFSET] = { 0, 3, 0, { _SAVE_RETURN_OFFSET_r00, _SAVE_RETURN_OFFSET_r11, _SAVE_RETURN_OFFSET_r22, _SAVE_RETURN_OFFSET_r33 } }, - [_EXIT_TRACE] = { 0, 3, -3, { _EXIT_TRACE_r00, _EXIT_TRACE_r10, _EXIT_TRACE_r20, _EXIT_TRACE_r30 } }, - [_CHECK_VALIDITY] = { 0, 3, 0, { _CHECK_VALIDITY_r00, _CHECK_VALIDITY_r11, _CHECK_VALIDITY_r22, _CHECK_VALIDITY_r33 } }, - [_LOAD_CONST_INLINE] = { 0, 2, 1, { _LOAD_CONST_INLINE_r01, _LOAD_CONST_INLINE_r12, _LOAD_CONST_INLINE_r23, 0 } }, - [_POP_TOP_LOAD_CONST_INLINE] = { 1, 1, 0, { 0, _POP_TOP_LOAD_CONST_INLINE_r11, 0, 0 } }, - [_LOAD_CONST_INLINE_BORROW] = { 0, 2, 1, { _LOAD_CONST_INLINE_BORROW_r01, _LOAD_CONST_INLINE_BORROW_r12, _LOAD_CONST_INLINE_BORROW_r23, 0 } }, - [_POP_CALL] = { 2, 2, -2, { 0, 0, _POP_CALL_r20, 0 } }, - [_POP_CALL_ONE] = { 3, 3, -3, { 0, 0, 0, _POP_CALL_ONE_r30 } }, - [_POP_CALL_TWO] = { 3, 3, -3, { 0, 0, 0, _POP_CALL_TWO_r30 } }, - [_POP_TOP_LOAD_CONST_INLINE_BORROW] = { 1, 1, 0, { 0, _POP_TOP_LOAD_CONST_INLINE_BORROW_r11, 0, 0 } }, - [_POP_TWO_LOAD_CONST_INLINE_BORROW] = { 2, 2, -1, { 0, 0, _POP_TWO_LOAD_CONST_INLINE_BORROW_r21, 0 } }, - [_POP_CALL_LOAD_CONST_INLINE_BORROW] = { 2, 2, -1, { 0, 0, _POP_CALL_LOAD_CONST_INLINE_BORROW_r21, 0 } }, - [_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW] = { 3, 3, -2, { 0, 0, 0, _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 } }, - [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW] = { 3, 3, -2, { 0, 0, 0, _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 } }, - [_LOAD_CONST_UNDER_INLINE] = { 0, 2, 1, { _LOAD_CONST_UNDER_INLINE_r01, _LOAD_CONST_UNDER_INLINE_r12, _LOAD_CONST_UNDER_INLINE_r23, 0 } }, - [_LOAD_CONST_UNDER_INLINE_BORROW] = { 0, 2, 1, { _LOAD_CONST_UNDER_INLINE_BORROW_r01, _LOAD_CONST_UNDER_INLINE_BORROW_r12, _LOAD_CONST_UNDER_INLINE_BORROW_r23, 0 } }, - [_CHECK_FUNCTION] = { 0, 3, 0, { _CHECK_FUNCTION_r00, _CHECK_FUNCTION_r11, _CHECK_FUNCTION_r22, _CHECK_FUNCTION_r33 } }, - [_START_EXECUTOR] = { 0, 0, 0, { _START_EXECUTOR_r00, 0, 0, 0 } }, - [_MAKE_WARM] = { 0, 3, 0, { _MAKE_WARM_r00, _MAKE_WARM_r11, _MAKE_WARM_r22, _MAKE_WARM_r33 } }, - [_FATAL_ERROR] = { 0, 3, 0, { _FATAL_ERROR_r00, _FATAL_ERROR_r11, _FATAL_ERROR_r22, _FATAL_ERROR_r33 } }, - [_DEOPT] = { 0, 0, 0, { _DEOPT_r00, 0, 0, 0 } }, - [_ERROR_POP_N] = { 0, 0, 0, { _ERROR_POP_N_r00, 0, 0, 0 } }, - [_TIER2_RESUME_CHECK] = { 0, 3, 0, { _TIER2_RESUME_CHECK_r00, _TIER2_RESUME_CHECK_r11, _TIER2_RESUME_CHECK_r22, _TIER2_RESUME_CHECK_r33 } }, + [_NOP] = { 0, 3, 0, 1, { _NOP_r00, _NOP_r11, _NOP_r22, _NOP_r33 } }, + [_CHECK_PERIODIC] = { 0, 0, 0, 1, { _CHECK_PERIODIC_r00, 0, 0, 0 } }, + [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = { 0, 0, 0, 1, { _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00, 0, 0, 0 } }, + [_RESUME_CHECK] = { 0, 3, 0, 1, { _RESUME_CHECK_r00, _RESUME_CHECK_r11, _RESUME_CHECK_r22, _RESUME_CHECK_r33 } }, + [_LOAD_FAST_CHECK] = { 0, 0, 1, 0, { _LOAD_FAST_CHECK_r01, 0, 0, 0 } }, + [_LOAD_FAST_0] = { 0, 2, 1, 0, { _LOAD_FAST_0_r01, _LOAD_FAST_0_r12, _LOAD_FAST_0_r23, 0 } }, + [_LOAD_FAST_1] = { 0, 2, 1, 0, { _LOAD_FAST_1_r01, _LOAD_FAST_1_r12, _LOAD_FAST_1_r23, 0 } }, + [_LOAD_FAST_2] = { 0, 2, 1, 0, { _LOAD_FAST_2_r01, _LOAD_FAST_2_r12, _LOAD_FAST_2_r23, 0 } }, + [_LOAD_FAST_3] = { 0, 2, 1, 0, { _LOAD_FAST_3_r01, _LOAD_FAST_3_r12, _LOAD_FAST_3_r23, 0 } }, + [_LOAD_FAST_4] = { 0, 2, 1, 0, { _LOAD_FAST_4_r01, _LOAD_FAST_4_r12, _LOAD_FAST_4_r23, 0 } }, + [_LOAD_FAST_5] = { 0, 2, 1, 0, { _LOAD_FAST_5_r01, _LOAD_FAST_5_r12, _LOAD_FAST_5_r23, 0 } }, + [_LOAD_FAST_6] = { 0, 2, 1, 0, { _LOAD_FAST_6_r01, _LOAD_FAST_6_r12, _LOAD_FAST_6_r23, 0 } }, + [_LOAD_FAST_7] = { 0, 2, 1, 0, { _LOAD_FAST_7_r01, _LOAD_FAST_7_r12, _LOAD_FAST_7_r23, 0 } }, + [_LOAD_FAST] = { 0, 2, 1, 0, { _LOAD_FAST_r01, _LOAD_FAST_r12, _LOAD_FAST_r23, 0 } }, + [_LOAD_FAST_BORROW_0] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_0_r01, _LOAD_FAST_BORROW_0_r12, _LOAD_FAST_BORROW_0_r23, 0 } }, + [_LOAD_FAST_BORROW_1] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_1_r01, _LOAD_FAST_BORROW_1_r12, _LOAD_FAST_BORROW_1_r23, 0 } }, + [_LOAD_FAST_BORROW_2] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_2_r01, _LOAD_FAST_BORROW_2_r12, _LOAD_FAST_BORROW_2_r23, 0 } }, + [_LOAD_FAST_BORROW_3] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_3_r01, _LOAD_FAST_BORROW_3_r12, _LOAD_FAST_BORROW_3_r23, 0 } }, + [_LOAD_FAST_BORROW_4] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_4_r01, _LOAD_FAST_BORROW_4_r12, _LOAD_FAST_BORROW_4_r23, 0 } }, + [_LOAD_FAST_BORROW_5] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_5_r01, _LOAD_FAST_BORROW_5_r12, _LOAD_FAST_BORROW_5_r23, 0 } }, + [_LOAD_FAST_BORROW_6] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_6_r01, _LOAD_FAST_BORROW_6_r12, _LOAD_FAST_BORROW_6_r23, 0 } }, + [_LOAD_FAST_BORROW_7] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_7_r01, _LOAD_FAST_BORROW_7_r12, _LOAD_FAST_BORROW_7_r23, 0 } }, + [_LOAD_FAST_BORROW] = { 0, 2, 1, 0, { _LOAD_FAST_BORROW_r01, _LOAD_FAST_BORROW_r12, _LOAD_FAST_BORROW_r23, 0 } }, + [_LOAD_FAST_AND_CLEAR] = { 0, 2, 1, 0, { _LOAD_FAST_AND_CLEAR_r01, _LOAD_FAST_AND_CLEAR_r12, _LOAD_FAST_AND_CLEAR_r23, 0 } }, + [_LOAD_CONST] = { 0, 2, 1, 0, { _LOAD_CONST_r01, _LOAD_CONST_r12, _LOAD_CONST_r23, 0 } }, + [_LOAD_SMALL_INT_0] = { 0, 2, 1, 0, { _LOAD_SMALL_INT_0_r01, _LOAD_SMALL_INT_0_r12, _LOAD_SMALL_INT_0_r23, 0 } }, + [_LOAD_SMALL_INT_1] = { 0, 2, 1, 0, { _LOAD_SMALL_INT_1_r01, _LOAD_SMALL_INT_1_r12, _LOAD_SMALL_INT_1_r23, 0 } }, + [_LOAD_SMALL_INT_2] = { 0, 2, 1, 0, { _LOAD_SMALL_INT_2_r01, _LOAD_SMALL_INT_2_r12, _LOAD_SMALL_INT_2_r23, 0 } }, + [_LOAD_SMALL_INT_3] = { 0, 2, 1, 0, { _LOAD_SMALL_INT_3_r01, _LOAD_SMALL_INT_3_r12, _LOAD_SMALL_INT_3_r23, 0 } }, + [_LOAD_SMALL_INT] = { 0, 2, 1, 0, { _LOAD_SMALL_INT_r01, _LOAD_SMALL_INT_r12, _LOAD_SMALL_INT_r23, 0 } }, + [_STORE_FAST_0] = { 1, 1, -1, 0, { 0, _STORE_FAST_0_r10, 0, 0 } }, + [_STORE_FAST_1] = { 1, 1, -1, 0, { 0, _STORE_FAST_1_r10, 0, 0 } }, + [_STORE_FAST_2] = { 1, 1, -1, 0, { 0, _STORE_FAST_2_r10, 0, 0 } }, + [_STORE_FAST_3] = { 1, 1, -1, 0, { 0, _STORE_FAST_3_r10, 0, 0 } }, + [_STORE_FAST_4] = { 1, 1, -1, 0, { 0, _STORE_FAST_4_r10, 0, 0 } }, + [_STORE_FAST_5] = { 1, 1, -1, 0, { 0, _STORE_FAST_5_r10, 0, 0 } }, + [_STORE_FAST_6] = { 1, 1, -1, 0, { 0, _STORE_FAST_6_r10, 0, 0 } }, + [_STORE_FAST_7] = { 1, 1, -1, 0, { 0, _STORE_FAST_7_r10, 0, 0 } }, + [_STORE_FAST] = { 1, 1, -1, 0, { 0, _STORE_FAST_r10, 0, 0 } }, + [_POP_TOP] = { 1, 1, -1, 0, { 0, _POP_TOP_r10, 0, 0 } }, + [_POP_TWO] = { 2, 2, -2, 0, { 0, 0, _POP_TWO_r20, 0 } }, + [_PUSH_NULL] = { 0, 2, 1, 0, { _PUSH_NULL_r01, _PUSH_NULL_r12, _PUSH_NULL_r23, 0 } }, + [_END_FOR] = { 1, 1, -1, 0, { 0, _END_FOR_r10, 0, 0 } }, + [_POP_ITER] = { 2, 2, -2, 0, { 0, 0, _POP_ITER_r20, 0 } }, + [_END_SEND] = { 2, 2, -1, 0, { 0, 0, _END_SEND_r21, 0 } }, + [_UNARY_NEGATIVE] = { 0, 0, 1, 0, { _UNARY_NEGATIVE_r01, 0, 0, 0 } }, + [_UNARY_NOT] = { 0, 3, 0, 1, { _UNARY_NOT_r00, _UNARY_NOT_r11, _UNARY_NOT_r22, _UNARY_NOT_r33 } }, + [_TO_BOOL] = { 0, 0, 1, 0, { _TO_BOOL_r01, 0, 0, 0 } }, + [_TO_BOOL_BOOL] = { 0, 3, 0, 1, { _TO_BOOL_BOOL_r00, _TO_BOOL_BOOL_r11, _TO_BOOL_BOOL_r22, _TO_BOOL_BOOL_r33 } }, + [_TO_BOOL_INT] = { 1, 1, 0, 1, { 0, _TO_BOOL_INT_r11, 0, 0 } }, + [_GUARD_NOS_LIST] = { 0, 3, 0, 1, { _GUARD_NOS_LIST_r00, _GUARD_NOS_LIST_r11, _GUARD_NOS_LIST_r22, _GUARD_NOS_LIST_r33 } }, + [_GUARD_TOS_LIST] = { 0, 3, 0, 1, { _GUARD_TOS_LIST_r00, _GUARD_TOS_LIST_r11, _GUARD_TOS_LIST_r22, _GUARD_TOS_LIST_r33 } }, + [_GUARD_TOS_SLICE] = { 0, 3, 0, 1, { _GUARD_TOS_SLICE_r00, _GUARD_TOS_SLICE_r11, _GUARD_TOS_SLICE_r22, _GUARD_TOS_SLICE_r33 } }, + [_TO_BOOL_LIST] = { 1, 1, 0, 1, { 0, _TO_BOOL_LIST_r11, 0, 0 } }, + [_TO_BOOL_NONE] = { 0, 3, 0, 1, { _TO_BOOL_NONE_r00, _TO_BOOL_NONE_r11, _TO_BOOL_NONE_r22, _TO_BOOL_NONE_r33 } }, + [_GUARD_NOS_UNICODE] = { 0, 3, 0, 1, { _GUARD_NOS_UNICODE_r00, _GUARD_NOS_UNICODE_r11, _GUARD_NOS_UNICODE_r22, _GUARD_NOS_UNICODE_r33 } }, + [_GUARD_TOS_UNICODE] = { 0, 3, 0, 1, { _GUARD_TOS_UNICODE_r00, _GUARD_TOS_UNICODE_r11, _GUARD_TOS_UNICODE_r22, _GUARD_TOS_UNICODE_r33 } }, + [_TO_BOOL_STR] = { 1, 1, 0, 1, { 0, _TO_BOOL_STR_r11, 0, 0 } }, + [_REPLACE_WITH_TRUE] = { 1, 1, 0, 1, { 0, _REPLACE_WITH_TRUE_r11, 0, 0 } }, + [_UNARY_INVERT] = { 0, 0, 1, 0, { _UNARY_INVERT_r01, 0, 0, 0 } }, + [_GUARD_NOS_INT] = { 0, 3, 0, 1, { _GUARD_NOS_INT_r00, _GUARD_NOS_INT_r11, _GUARD_NOS_INT_r22, _GUARD_NOS_INT_r33 } }, + [_GUARD_TOS_INT] = { 0, 3, 0, 1, { _GUARD_TOS_INT_r00, _GUARD_TOS_INT_r11, _GUARD_TOS_INT_r22, _GUARD_TOS_INT_r33 } }, + [_GUARD_NOS_OVERFLOWED] = { 0, 3, 0, 1, { _GUARD_NOS_OVERFLOWED_r00, _GUARD_NOS_OVERFLOWED_r11, _GUARD_NOS_OVERFLOWED_r22, _GUARD_NOS_OVERFLOWED_r33 } }, + [_GUARD_TOS_OVERFLOWED] = { 0, 3, 0, 1, { _GUARD_TOS_OVERFLOWED_r00, _GUARD_TOS_OVERFLOWED_r11, _GUARD_TOS_OVERFLOWED_r22, _GUARD_TOS_OVERFLOWED_r33 } }, + [_BINARY_OP_MULTIPLY_INT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_MULTIPLY_INT_r21, 0 } }, + [_BINARY_OP_ADD_INT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_ADD_INT_r21, 0 } }, + [_BINARY_OP_SUBTRACT_INT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_SUBTRACT_INT_r21, 0 } }, + [_GUARD_NOS_FLOAT] = { 0, 3, 0, 1, { _GUARD_NOS_FLOAT_r00, _GUARD_NOS_FLOAT_r11, _GUARD_NOS_FLOAT_r22, _GUARD_NOS_FLOAT_r33 } }, + [_GUARD_TOS_FLOAT] = { 0, 3, 0, 1, { _GUARD_TOS_FLOAT_r00, _GUARD_TOS_FLOAT_r11, _GUARD_TOS_FLOAT_r22, _GUARD_TOS_FLOAT_r33 } }, + [_BINARY_OP_MULTIPLY_FLOAT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_MULTIPLY_FLOAT_r21, 0 } }, + [_BINARY_OP_ADD_FLOAT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_ADD_FLOAT_r21, 0 } }, + [_BINARY_OP_SUBTRACT_FLOAT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_SUBTRACT_FLOAT_r21, 0 } }, + [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21, 0 } }, + [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21, 0 } }, + [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21, 0 } }, + [_BINARY_OP_ADD_UNICODE] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_ADD_UNICODE_r21, 0 } }, + [_BINARY_OP_INPLACE_ADD_UNICODE] = { 0, 0, 0, 1, { _BINARY_OP_INPLACE_ADD_UNICODE_r00, 0, 0, 0 } }, + [_GUARD_BINARY_OP_EXTEND] = { 0, 0, 0, 1, { _GUARD_BINARY_OP_EXTEND_r00, 0, 0, 0 } }, + [_BINARY_OP_EXTEND] = { 0, 0, 1, 0, { _BINARY_OP_EXTEND_r01, 0, 0, 0 } }, + [_BINARY_SLICE] = { 0, 0, 1, 0, { _BINARY_SLICE_r01, 0, 0, 0 } }, + [_STORE_SLICE] = { 0, 0, 0, 1, { _STORE_SLICE_r00, 0, 0, 0 } }, + [_BINARY_OP_SUBSCR_LIST_INT] = { 0, 0, 1, 0, { _BINARY_OP_SUBSCR_LIST_INT_r01, 0, 0, 0 } }, + [_BINARY_OP_SUBSCR_LIST_SLICE] = { 0, 0, 1, 0, { _BINARY_OP_SUBSCR_LIST_SLICE_r01, 0, 0, 0 } }, + [_BINARY_OP_SUBSCR_STR_INT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_SUBSCR_STR_INT_r21, 0 } }, + [_GUARD_NOS_TUPLE] = { 0, 3, 0, 1, { _GUARD_NOS_TUPLE_r00, _GUARD_NOS_TUPLE_r11, _GUARD_NOS_TUPLE_r22, _GUARD_NOS_TUPLE_r33 } }, + [_GUARD_TOS_TUPLE] = { 0, 3, 0, 1, { _GUARD_TOS_TUPLE_r00, _GUARD_TOS_TUPLE_r11, _GUARD_TOS_TUPLE_r22, _GUARD_TOS_TUPLE_r33 } }, + [_BINARY_OP_SUBSCR_TUPLE_INT] = { 2, 2, -1, 0, { 0, 0, _BINARY_OP_SUBSCR_TUPLE_INT_r21, 0 } }, + [_GUARD_NOS_DICT] = { 0, 3, 0, 1, { _GUARD_NOS_DICT_r00, _GUARD_NOS_DICT_r11, _GUARD_NOS_DICT_r22, _GUARD_NOS_DICT_r33 } }, + [_GUARD_TOS_DICT] = { 0, 3, 0, 1, { _GUARD_TOS_DICT_r00, _GUARD_TOS_DICT_r11, _GUARD_TOS_DICT_r22, _GUARD_TOS_DICT_r33 } }, + [_BINARY_OP_SUBSCR_DICT] = { 0, 0, 1, 0, { _BINARY_OP_SUBSCR_DICT_r01, 0, 0, 0 } }, + [_BINARY_OP_SUBSCR_CHECK_FUNC] = { 2, 2, 1, 0, { 0, 0, _BINARY_OP_SUBSCR_CHECK_FUNC_r23, 0 } }, + [_BINARY_OP_SUBSCR_INIT_CALL] = { 3, 3, -2, 0, { 0, 0, 0, _BINARY_OP_SUBSCR_INIT_CALL_r31 } }, + [_LIST_APPEND] = { 1, 1, -1, 0, { 0, _LIST_APPEND_r10, 0, 0 } }, + [_SET_ADD] = { 0, 0, 0, 1, { _SET_ADD_r00, 0, 0, 0 } }, + [_STORE_SUBSCR] = { 0, 0, 0, 1, { _STORE_SUBSCR_r00, 0, 0, 0 } }, + [_STORE_SUBSCR_LIST_INT] = { 3, 3, -3, 0, { 0, 0, 0, _STORE_SUBSCR_LIST_INT_r30 } }, + [_STORE_SUBSCR_DICT] = { 0, 0, 0, 1, { _STORE_SUBSCR_DICT_r00, 0, 0, 0 } }, + [_DELETE_SUBSCR] = { 0, 0, 0, 1, { _DELETE_SUBSCR_r00, 0, 0, 0 } }, + [_CALL_INTRINSIC_1] = { 0, 0, 1, 0, { _CALL_INTRINSIC_1_r01, 0, 0, 0 } }, + [_CALL_INTRINSIC_2] = { 0, 0, 1, 0, { _CALL_INTRINSIC_2_r01, 0, 0, 0 } }, + [_RETURN_VALUE] = { 0, 0, 1, 0, { _RETURN_VALUE_r01, 0, 0, 0 } }, + [_GET_AITER] = { 0, 0, 1, 0, { _GET_AITER_r01, 0, 0, 0 } }, + [_GET_ANEXT] = { 0, 0, 1, 0, { _GET_ANEXT_r01, 0, 0, 0 } }, + [_GET_AWAITABLE] = { 0, 0, 1, 0, { _GET_AWAITABLE_r01, 0, 0, 0 } }, + [_SEND_GEN_FRAME] = { 2, 2, 0, 1, { 0, 0, _SEND_GEN_FRAME_r22, 0 } }, + [_YIELD_VALUE] = { 1, 1, 0, 1, { 0, _YIELD_VALUE_r11, 0, 0 } }, + [_POP_EXCEPT] = { 0, 0, 0, 1, { _POP_EXCEPT_r00, 0, 0, 0 } }, + [_LOAD_COMMON_CONSTANT] = { 0, 2, 1, 0, { _LOAD_COMMON_CONSTANT_r01, _LOAD_COMMON_CONSTANT_r12, _LOAD_COMMON_CONSTANT_r23, 0 } }, + [_LOAD_BUILD_CLASS] = { 0, 0, 1, 0, { _LOAD_BUILD_CLASS_r01, 0, 0, 0 } }, + [_STORE_NAME] = { 0, 0, 0, 1, { _STORE_NAME_r00, 0, 0, 0 } }, + [_DELETE_NAME] = { 0, 0, 0, 1, { _DELETE_NAME_r00, 0, 0, 0 } }, + [_UNPACK_SEQUENCE] = { 0, 0, 0, 1, { _UNPACK_SEQUENCE_r00, 0, 0, 0 } }, + [_UNPACK_SEQUENCE_TWO_TUPLE] = { 1, 1, 1, 0, { 0, _UNPACK_SEQUENCE_TWO_TUPLE_r12, 0, 0 } }, + [_UNPACK_SEQUENCE_TUPLE] = { 1, 1, -1, 0, { 0, _UNPACK_SEQUENCE_TUPLE_r10, 0, 0 } }, + [_UNPACK_SEQUENCE_LIST] = { 1, 1, -1, 0, { 0, _UNPACK_SEQUENCE_LIST_r10, 0, 0 } }, + [_UNPACK_EX] = { 0, 0, 0, 1, { _UNPACK_EX_r00, 0, 0, 0 } }, + [_STORE_ATTR] = { 0, 0, 0, 1, { _STORE_ATTR_r00, 0, 0, 0 } }, + [_DELETE_ATTR] = { 0, 0, 0, 1, { _DELETE_ATTR_r00, 0, 0, 0 } }, + [_STORE_GLOBAL] = { 0, 0, 0, 1, { _STORE_GLOBAL_r00, 0, 0, 0 } }, + [_DELETE_GLOBAL] = { 0, 0, 0, 1, { _DELETE_GLOBAL_r00, 0, 0, 0 } }, + [_LOAD_LOCALS] = { 0, 0, 1, 0, { _LOAD_LOCALS_r01, 0, 0, 0 } }, + [_LOAD_NAME] = { 0, 0, 1, 0, { _LOAD_NAME_r01, 0, 0, 0 } }, + [_LOAD_GLOBAL] = { 0, 0, 0, 1, { _LOAD_GLOBAL_r00, 0, 0, 0 } }, + [_PUSH_NULL_CONDITIONAL] = { 0, 0, 0, 1, { _PUSH_NULL_CONDITIONAL_r00, 0, 0, 0 } }, + [_GUARD_GLOBALS_VERSION] = { 0, 3, 0, 1, { _GUARD_GLOBALS_VERSION_r00, _GUARD_GLOBALS_VERSION_r11, _GUARD_GLOBALS_VERSION_r22, _GUARD_GLOBALS_VERSION_r33 } }, + [_LOAD_GLOBAL_MODULE] = { 0, 0, 1, 0, { _LOAD_GLOBAL_MODULE_r01, 0, 0, 0 } }, + [_LOAD_GLOBAL_BUILTINS] = { 0, 0, 1, 0, { _LOAD_GLOBAL_BUILTINS_r01, 0, 0, 0 } }, + [_DELETE_FAST] = { 0, 0, 0, 1, { _DELETE_FAST_r00, 0, 0, 0 } }, + [_MAKE_CELL] = { 0, 0, 0, 1, { _MAKE_CELL_r00, 0, 0, 0 } }, + [_DELETE_DEREF] = { 0, 0, 0, 1, { _DELETE_DEREF_r00, 0, 0, 0 } }, + [_LOAD_FROM_DICT_OR_DEREF] = { 0, 0, 1, 0, { _LOAD_FROM_DICT_OR_DEREF_r01, 0, 0, 0 } }, + [_LOAD_DEREF] = { 0, 0, 1, 0, { _LOAD_DEREF_r01, 0, 0, 0 } }, + [_STORE_DEREF] = { 0, 0, 0, 1, { _STORE_DEREF_r00, 0, 0, 0 } }, + [_COPY_FREE_VARS] = { 0, 0, 0, 1, { _COPY_FREE_VARS_r00, 0, 0, 0 } }, + [_BUILD_STRING] = { 0, 0, 1, 0, { _BUILD_STRING_r01, 0, 0, 0 } }, + [_BUILD_INTERPOLATION] = { 0, 0, 1, 0, { _BUILD_INTERPOLATION_r01, 0, 0, 0 } }, + [_BUILD_TEMPLATE] = { 0, 0, 1, 0, { _BUILD_TEMPLATE_r01, 0, 0, 0 } }, + [_BUILD_TUPLE] = { 0, 0, 1, 0, { _BUILD_TUPLE_r01, 0, 0, 0 } }, + [_BUILD_LIST] = { 0, 0, 1, 0, { _BUILD_LIST_r01, 0, 0, 0 } }, + [_LIST_EXTEND] = { 0, 0, 0, 1, { _LIST_EXTEND_r00, 0, 0, 0 } }, + [_SET_UPDATE] = { 0, 0, 0, 1, { _SET_UPDATE_r00, 0, 0, 0 } }, + [_BUILD_SET] = { 0, 0, 1, 0, { _BUILD_SET_r01, 0, 0, 0 } }, + [_BUILD_MAP] = { 0, 0, 1, 0, { _BUILD_MAP_r01, 0, 0, 0 } }, + [_SETUP_ANNOTATIONS] = { 0, 0, 0, 1, { _SETUP_ANNOTATIONS_r00, 0, 0, 0 } }, + [_DICT_UPDATE] = { 0, 0, 0, 1, { _DICT_UPDATE_r00, 0, 0, 0 } }, + [_DICT_MERGE] = { 0, 0, 0, 1, { _DICT_MERGE_r00, 0, 0, 0 } }, + [_MAP_ADD] = { 0, 0, 0, 1, { _MAP_ADD_r00, 0, 0, 0 } }, + [_LOAD_SUPER_ATTR_ATTR] = { 0, 0, 1, 0, { _LOAD_SUPER_ATTR_ATTR_r01, 0, 0, 0 } }, + [_LOAD_SUPER_ATTR_METHOD] = { 0, 0, 2, 0, { _LOAD_SUPER_ATTR_METHOD_r02, 0, 0, 0 } }, + [_LOAD_ATTR] = { 0, 0, 0, 1, { _LOAD_ATTR_r00, 0, 0, 0 } }, + [_GUARD_TYPE_VERSION] = { 0, 3, 0, 1, { _GUARD_TYPE_VERSION_r00, _GUARD_TYPE_VERSION_r11, _GUARD_TYPE_VERSION_r22, _GUARD_TYPE_VERSION_r33 } }, + [_GUARD_TYPE_VERSION_AND_LOCK] = { 0, 3, 0, 1, { _GUARD_TYPE_VERSION_AND_LOCK_r00, _GUARD_TYPE_VERSION_AND_LOCK_r11, _GUARD_TYPE_VERSION_AND_LOCK_r22, _GUARD_TYPE_VERSION_AND_LOCK_r33 } }, + [_CHECK_MANAGED_OBJECT_HAS_VALUES] = { 0, 3, 0, 1, { _CHECK_MANAGED_OBJECT_HAS_VALUES_r00, _CHECK_MANAGED_OBJECT_HAS_VALUES_r11, _CHECK_MANAGED_OBJECT_HAS_VALUES_r22, _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 } }, + [_LOAD_ATTR_INSTANCE_VALUE] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_INSTANCE_VALUE_r11, 0, 0 } }, + [_LOAD_ATTR_MODULE] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_MODULE_r11, 0, 0 } }, + [_LOAD_ATTR_WITH_HINT] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_WITH_HINT_r11, 0, 0 } }, + [_LOAD_ATTR_SLOT] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_SLOT_r11, 0, 0 } }, + [_CHECK_ATTR_CLASS] = { 0, 3, 0, 1, { _CHECK_ATTR_CLASS_r00, _CHECK_ATTR_CLASS_r11, _CHECK_ATTR_CLASS_r22, _CHECK_ATTR_CLASS_r33 } }, + [_LOAD_ATTR_CLASS] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_CLASS_r11, 0, 0 } }, + [_LOAD_ATTR_PROPERTY_FRAME] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_PROPERTY_FRAME_r11, 0, 0 } }, + [_GUARD_DORV_NO_DICT] = { 0, 3, 0, 1, { _GUARD_DORV_NO_DICT_r00, _GUARD_DORV_NO_DICT_r11, _GUARD_DORV_NO_DICT_r22, _GUARD_DORV_NO_DICT_r33 } }, + [_STORE_ATTR_INSTANCE_VALUE] = { 2, 2, -2, 0, { 0, 0, _STORE_ATTR_INSTANCE_VALUE_r20, 0 } }, + [_STORE_ATTR_WITH_HINT] = { 0, 0, 0, 1, { _STORE_ATTR_WITH_HINT_r00, 0, 0, 0 } }, + [_STORE_ATTR_SLOT] = { 2, 2, -2, 0, { 0, 0, _STORE_ATTR_SLOT_r20, 0 } }, + [_COMPARE_OP] = { 0, 0, 1, 0, { _COMPARE_OP_r01, 0, 0, 0 } }, + [_COMPARE_OP_FLOAT] = { 2, 2, -1, 0, { 0, 0, _COMPARE_OP_FLOAT_r21, 0 } }, + [_COMPARE_OP_INT] = { 2, 2, -1, 0, { 0, 0, _COMPARE_OP_INT_r21, 0 } }, + [_COMPARE_OP_STR] = { 2, 2, -1, 0, { 0, 0, _COMPARE_OP_STR_r21, 0 } }, + [_IS_OP] = { 2, 2, -1, 0, { 0, 0, _IS_OP_r21, 0 } }, + [_CONTAINS_OP] = { 0, 0, 1, 0, { _CONTAINS_OP_r01, 0, 0, 0 } }, + [_GUARD_TOS_ANY_SET] = { 0, 3, 0, 1, { _GUARD_TOS_ANY_SET_r00, _GUARD_TOS_ANY_SET_r11, _GUARD_TOS_ANY_SET_r22, _GUARD_TOS_ANY_SET_r33 } }, + [_CONTAINS_OP_SET] = { 0, 0, 1, 0, { _CONTAINS_OP_SET_r01, 0, 0, 0 } }, + [_CONTAINS_OP_DICT] = { 0, 0, 1, 0, { _CONTAINS_OP_DICT_r01, 0, 0, 0 } }, + [_CHECK_EG_MATCH] = { 0, 0, 2, 0, { _CHECK_EG_MATCH_r02, 0, 0, 0 } }, + [_CHECK_EXC_MATCH] = { 0, 0, 1, 0, { _CHECK_EXC_MATCH_r01, 0, 0, 0 } }, + [_IMPORT_NAME] = { 0, 0, 1, 0, { _IMPORT_NAME_r01, 0, 0, 0 } }, + [_IMPORT_FROM] = { 0, 0, 1, 0, { _IMPORT_FROM_r01, 0, 0, 0 } }, + [_IS_NONE] = { 1, 1, 0, 1, { 0, _IS_NONE_r11, 0, 0 } }, + [_GET_LEN] = { 0, 0, 1, 0, { _GET_LEN_r01, 0, 0, 0 } }, + [_MATCH_CLASS] = { 0, 0, 1, 0, { _MATCH_CLASS_r01, 0, 0, 0 } }, + [_MATCH_MAPPING] = { 0, 2, 1, 0, { _MATCH_MAPPING_r01, _MATCH_MAPPING_r12, _MATCH_MAPPING_r23, 0 } }, + [_MATCH_SEQUENCE] = { 0, 2, 1, 0, { _MATCH_SEQUENCE_r01, _MATCH_SEQUENCE_r12, _MATCH_SEQUENCE_r23, 0 } }, + [_MATCH_KEYS] = { 0, 0, 1, 0, { _MATCH_KEYS_r01, 0, 0, 0 } }, + [_GET_ITER] = { 0, 0, 2, 0, { _GET_ITER_r02, 0, 0, 0 } }, + [_GET_YIELD_FROM_ITER] = { 0, 0, 1, 0, { _GET_YIELD_FROM_ITER_r01, 0, 0, 0 } }, + [_FOR_ITER_TIER_TWO] = { 0, 0, 1, 0, { _FOR_ITER_TIER_TWO_r01, 0, 0, 0 } }, + [_ITER_CHECK_LIST] = { 0, 3, 0, 1, { _ITER_CHECK_LIST_r00, _ITER_CHECK_LIST_r11, _ITER_CHECK_LIST_r22, _ITER_CHECK_LIST_r33 } }, + [_GUARD_NOT_EXHAUSTED_LIST] = { 0, 3, 0, 1, { _GUARD_NOT_EXHAUSTED_LIST_r00, _GUARD_NOT_EXHAUSTED_LIST_r11, _GUARD_NOT_EXHAUSTED_LIST_r22, _GUARD_NOT_EXHAUSTED_LIST_r33 } }, + [_ITER_NEXT_LIST_TIER_TWO] = { 0, 0, 1, 0, { _ITER_NEXT_LIST_TIER_TWO_r01, 0, 0, 0 } }, + [_ITER_CHECK_TUPLE] = { 0, 3, 0, 1, { _ITER_CHECK_TUPLE_r00, _ITER_CHECK_TUPLE_r11, _ITER_CHECK_TUPLE_r22, _ITER_CHECK_TUPLE_r33 } }, + [_GUARD_NOT_EXHAUSTED_TUPLE] = { 0, 3, 0, 1, { _GUARD_NOT_EXHAUSTED_TUPLE_r00, _GUARD_NOT_EXHAUSTED_TUPLE_r11, _GUARD_NOT_EXHAUSTED_TUPLE_r22, _GUARD_NOT_EXHAUSTED_TUPLE_r33 } }, + [_ITER_NEXT_TUPLE] = { 2, 2, 1, 0, { 0, 0, _ITER_NEXT_TUPLE_r23, 0 } }, + [_ITER_CHECK_RANGE] = { 0, 3, 0, 1, { _ITER_CHECK_RANGE_r00, _ITER_CHECK_RANGE_r11, _ITER_CHECK_RANGE_r22, _ITER_CHECK_RANGE_r33 } }, + [_GUARD_NOT_EXHAUSTED_RANGE] = { 0, 3, 0, 1, { _GUARD_NOT_EXHAUSTED_RANGE_r00, _GUARD_NOT_EXHAUSTED_RANGE_r11, _GUARD_NOT_EXHAUSTED_RANGE_r22, _GUARD_NOT_EXHAUSTED_RANGE_r33 } }, + [_ITER_NEXT_RANGE] = { 2, 2, 1, 0, { 0, 0, _ITER_NEXT_RANGE_r23, 0 } }, + [_FOR_ITER_GEN_FRAME] = { 2, 2, 1, 0, { 0, 0, _FOR_ITER_GEN_FRAME_r23, 0 } }, + [_INSERT_NULL] = { 1, 1, -1, 0, { 0, _INSERT_NULL_r10, 0, 0 } }, + [_LOAD_SPECIAL] = { 0, 0, 0, 1, { _LOAD_SPECIAL_r00, 0, 0, 0 } }, + [_WITH_EXCEPT_START] = { 0, 0, 1, 0, { _WITH_EXCEPT_START_r01, 0, 0, 0 } }, + [_PUSH_EXC_INFO] = { 0, 2, 1, 0, { _PUSH_EXC_INFO_r01, _PUSH_EXC_INFO_r12, _PUSH_EXC_INFO_r23, 0 } }, + [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT] = { 0, 3, 0, 1, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r00, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22, _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 } }, + [_GUARD_KEYS_VERSION] = { 0, 3, 0, 1, { _GUARD_KEYS_VERSION_r00, _GUARD_KEYS_VERSION_r11, _GUARD_KEYS_VERSION_r22, _GUARD_KEYS_VERSION_r33 } }, + [_LOAD_ATTR_METHOD_WITH_VALUES] = { 0, 2, 1, 0, { _LOAD_ATTR_METHOD_WITH_VALUES_r01, _LOAD_ATTR_METHOD_WITH_VALUES_r12, _LOAD_ATTR_METHOD_WITH_VALUES_r23, 0 } }, + [_LOAD_ATTR_METHOD_NO_DICT] = { 0, 2, 1, 0, { _LOAD_ATTR_METHOD_NO_DICT_r01, _LOAD_ATTR_METHOD_NO_DICT_r12, _LOAD_ATTR_METHOD_NO_DICT_r23, 0 } }, + [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11, 0, 0 } }, + [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { 1, 1, 0, 1, { 0, _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11, 0, 0 } }, + [_CHECK_ATTR_METHOD_LAZY_DICT] = { 0, 3, 0, 1, { _CHECK_ATTR_METHOD_LAZY_DICT_r00, _CHECK_ATTR_METHOD_LAZY_DICT_r11, _CHECK_ATTR_METHOD_LAZY_DICT_r22, _CHECK_ATTR_METHOD_LAZY_DICT_r33 } }, + [_LOAD_ATTR_METHOD_LAZY_DICT] = { 0, 2, 1, 0, { _LOAD_ATTR_METHOD_LAZY_DICT_r01, _LOAD_ATTR_METHOD_LAZY_DICT_r12, _LOAD_ATTR_METHOD_LAZY_DICT_r23, 0 } }, + [_MAYBE_EXPAND_METHOD] = { 0, 0, 0, 1, { _MAYBE_EXPAND_METHOD_r00, 0, 0, 0 } }, + [_PY_FRAME_GENERAL] = { 0, 0, 1, 0, { _PY_FRAME_GENERAL_r01, 0, 0, 0 } }, + [_CHECK_FUNCTION_VERSION] = { 0, 0, 0, 1, { _CHECK_FUNCTION_VERSION_r00, 0, 0, 0 } }, + [_CHECK_FUNCTION_VERSION_INLINE] = { 0, 3, 0, 1, { _CHECK_FUNCTION_VERSION_INLINE_r00, _CHECK_FUNCTION_VERSION_INLINE_r11, _CHECK_FUNCTION_VERSION_INLINE_r22, _CHECK_FUNCTION_VERSION_INLINE_r33 } }, + [_CHECK_METHOD_VERSION] = { 0, 0, 0, 1, { _CHECK_METHOD_VERSION_r00, 0, 0, 0 } }, + [_EXPAND_METHOD] = { 0, 0, 0, 1, { _EXPAND_METHOD_r00, 0, 0, 0 } }, + [_CHECK_IS_NOT_PY_CALLABLE] = { 0, 0, 0, 1, { _CHECK_IS_NOT_PY_CALLABLE_r00, 0, 0, 0 } }, + [_CALL_NON_PY_GENERAL] = { 0, 0, 1, 0, { _CALL_NON_PY_GENERAL_r01, 0, 0, 0 } }, + [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = { 0, 0, 0, 1, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00, 0, 0, 0 } }, + [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = { 0, 0, 0, 1, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00, 0, 0, 0 } }, + [_CHECK_PEP_523] = { 0, 3, 0, 1, { _CHECK_PEP_523_r00, _CHECK_PEP_523_r11, _CHECK_PEP_523_r22, _CHECK_PEP_523_r33 } }, + [_CHECK_FUNCTION_EXACT_ARGS] = { 0, 0, 0, 1, { _CHECK_FUNCTION_EXACT_ARGS_r00, 0, 0, 0 } }, + [_CHECK_STACK_SPACE] = { 0, 0, 0, 1, { _CHECK_STACK_SPACE_r00, 0, 0, 0 } }, + [_CHECK_RECURSION_REMAINING] = { 0, 3, 0, 1, { _CHECK_RECURSION_REMAINING_r00, _CHECK_RECURSION_REMAINING_r11, _CHECK_RECURSION_REMAINING_r22, _CHECK_RECURSION_REMAINING_r33 } }, + [_INIT_CALL_PY_EXACT_ARGS_0] = { 0, 0, 1, 0, { _INIT_CALL_PY_EXACT_ARGS_0_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_1] = { 0, 0, 1, 0, { _INIT_CALL_PY_EXACT_ARGS_1_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_2] = { 0, 0, 1, 0, { _INIT_CALL_PY_EXACT_ARGS_2_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_3] = { 0, 0, 1, 0, { _INIT_CALL_PY_EXACT_ARGS_3_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS_4] = { 0, 0, 1, 0, { _INIT_CALL_PY_EXACT_ARGS_4_r01, 0, 0, 0 } }, + [_INIT_CALL_PY_EXACT_ARGS] = { 0, 0, 1, 0, { _INIT_CALL_PY_EXACT_ARGS_r01, 0, 0, 0 } }, + [_PUSH_FRAME] = { 1, 1, -1, 1, { 0, _PUSH_FRAME_r10, 0, 0 } }, + [_GUARD_NOS_NULL] = { 0, 3, 0, 1, { _GUARD_NOS_NULL_r00, _GUARD_NOS_NULL_r11, _GUARD_NOS_NULL_r22, _GUARD_NOS_NULL_r33 } }, + [_GUARD_NOS_NOT_NULL] = { 0, 3, 0, 1, { _GUARD_NOS_NOT_NULL_r00, _GUARD_NOS_NOT_NULL_r11, _GUARD_NOS_NOT_NULL_r22, _GUARD_NOS_NOT_NULL_r33 } }, + [_GUARD_THIRD_NULL] = { 3, 3, 0, 1, { 0, 0, 0, _GUARD_THIRD_NULL_r33 } }, + [_GUARD_CALLABLE_TYPE_1] = { 3, 3, 0, 1, { 0, 0, 0, _GUARD_CALLABLE_TYPE_1_r33 } }, + [_CALL_TYPE_1] = { 3, 3, -2, 0, { 0, 0, 0, _CALL_TYPE_1_r31 } }, + [_GUARD_CALLABLE_STR_1] = { 3, 3, 0, 1, { 0, 0, 0, _GUARD_CALLABLE_STR_1_r33 } }, + [_CALL_STR_1] = { 0, 0, 1, 0, { _CALL_STR_1_r01, 0, 0, 0 } }, + [_GUARD_CALLABLE_TUPLE_1] = { 3, 3, 0, 1, { 0, 0, 0, _GUARD_CALLABLE_TUPLE_1_r33 } }, + [_CALL_TUPLE_1] = { 0, 0, 1, 0, { _CALL_TUPLE_1_r01, 0, 0, 0 } }, + [_CHECK_AND_ALLOCATE_OBJECT] = { 0, 0, 0, 1, { _CHECK_AND_ALLOCATE_OBJECT_r00, 0, 0, 0 } }, + [_CREATE_INIT_FRAME] = { 0, 0, 1, 0, { _CREATE_INIT_FRAME_r01, 0, 0, 0 } }, + [_EXIT_INIT_CHECK] = { 0, 0, 0, 1, { _EXIT_INIT_CHECK_r00, 0, 0, 0 } }, + [_CALL_BUILTIN_CLASS] = { 0, 0, 1, 0, { _CALL_BUILTIN_CLASS_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_O] = { 0, 0, 1, 0, { _CALL_BUILTIN_O_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST] = { 0, 0, 1, 0, { _CALL_BUILTIN_FAST_r01, 0, 0, 0 } }, + [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = { 0, 0, 1, 0, { _CALL_BUILTIN_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, + [_GUARD_CALLABLE_LEN] = { 3, 3, 0, 1, { 0, 0, 0, _GUARD_CALLABLE_LEN_r33 } }, + [_CALL_LEN] = { 0, 0, 1, 0, { _CALL_LEN_r01, 0, 0, 0 } }, + [_GUARD_CALLABLE_ISINSTANCE] = { 3, 3, 0, 1, { 0, 0, 0, _GUARD_CALLABLE_ISINSTANCE_r33 } }, + [_CALL_ISINSTANCE] = { 0, 0, 1, 0, { _CALL_ISINSTANCE_r01, 0, 0, 0 } }, + [_GUARD_CALLABLE_LIST_APPEND] = { 3, 3, 0, 1, { 0, 0, 0, _GUARD_CALLABLE_LIST_APPEND_r33 } }, + [_CALL_LIST_APPEND] = { 3, 3, -3, 0, { 0, 0, 0, _CALL_LIST_APPEND_r30 } }, + [_CALL_METHOD_DESCRIPTOR_O] = { 0, 0, 1, 0, { _CALL_METHOD_DESCRIPTOR_O_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { 0, 0, 1, 0, { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_NOARGS] = { 0, 0, 1, 0, { _CALL_METHOD_DESCRIPTOR_NOARGS_r01, 0, 0, 0 } }, + [_CALL_METHOD_DESCRIPTOR_FAST] = { 0, 0, 1, 0, { _CALL_METHOD_DESCRIPTOR_FAST_r01, 0, 0, 0 } }, + [_MAYBE_EXPAND_METHOD_KW] = { 0, 0, 0, 1, { _MAYBE_EXPAND_METHOD_KW_r00, 0, 0, 0 } }, + [_PY_FRAME_KW] = { 0, 0, 1, 0, { _PY_FRAME_KW_r01, 0, 0, 0 } }, + [_CHECK_FUNCTION_VERSION_KW] = { 1, 1, 0, 1, { 0, _CHECK_FUNCTION_VERSION_KW_r11, 0, 0 } }, + [_CHECK_METHOD_VERSION_KW] = { 1, 1, 0, 1, { 0, _CHECK_METHOD_VERSION_KW_r11, 0, 0 } }, + [_EXPAND_METHOD_KW] = { 0, 0, 0, 1, { _EXPAND_METHOD_KW_r00, 0, 0, 0 } }, + [_CHECK_IS_NOT_PY_CALLABLE_KW] = { 1, 1, 0, 1, { 0, _CHECK_IS_NOT_PY_CALLABLE_KW_r11, 0, 0 } }, + [_CALL_KW_NON_PY] = { 0, 0, 1, 0, { _CALL_KW_NON_PY_r01, 0, 0, 0 } }, + [_MAKE_CALLARGS_A_TUPLE] = { 0, 0, 0, 1, { _MAKE_CALLARGS_A_TUPLE_r00, 0, 0, 0 } }, + [_MAKE_FUNCTION] = { 0, 0, 1, 0, { _MAKE_FUNCTION_r01, 0, 0, 0 } }, + [_SET_FUNCTION_ATTRIBUTE] = { 2, 2, -1, 0, { 0, 0, _SET_FUNCTION_ATTRIBUTE_r21, 0 } }, + [_RETURN_GENERATOR] = { 0, 0, 1, 0, { _RETURN_GENERATOR_r01, 0, 0, 0 } }, + [_BUILD_SLICE] = { 0, 0, 1, 0, { _BUILD_SLICE_r01, 0, 0, 0 } }, + [_CONVERT_VALUE] = { 0, 0, 1, 0, { _CONVERT_VALUE_r01, 0, 0, 0 } }, + [_FORMAT_SIMPLE] = { 0, 0, 1, 0, { _FORMAT_SIMPLE_r01, 0, 0, 0 } }, + [_FORMAT_WITH_SPEC] = { 0, 0, 1, 0, { _FORMAT_WITH_SPEC_r01, 0, 0, 0 } }, + [_COPY_1] = { 0, 2, 1, 0, { _COPY_1_r01, _COPY_1_r12, _COPY_1_r23, 0 } }, + [_COPY_2] = { 2, 2, 1, 0, { 0, 0, _COPY_2_r23, 0 } }, + [_COPY_3] = { 3, 3, 0, 1, { 0, 0, 0, _COPY_3_r33 } }, + [_COPY] = { 0, 0, 1, 0, { _COPY_r01, 0, 0, 0 } }, + [_BINARY_OP] = { 0, 0, 1, 0, { _BINARY_OP_r01, 0, 0, 0 } }, + [_SWAP_2] = { 0, 3, 0, 1, { _SWAP_2_r00, _SWAP_2_r11, _SWAP_2_r22, _SWAP_2_r33 } }, + [_SWAP_3] = { 3, 3, 0, 1, { 0, 0, 0, _SWAP_3_r33 } }, + [_SWAP] = { 1, 1, 0, 1, { 0, _SWAP_r11, 0, 0 } }, + [_GUARD_IS_TRUE_POP] = { 1, 1, -1, 1, { 0, _GUARD_IS_TRUE_POP_r10, 0, 0 } }, + [_GUARD_IS_FALSE_POP] = { 1, 1, -1, 1, { 0, _GUARD_IS_FALSE_POP_r10, 0, 0 } }, + [_GUARD_IS_NONE_POP] = { 1, 1, -1, 1, { 0, _GUARD_IS_NONE_POP_r10, 0, 0 } }, + [_GUARD_IS_NOT_NONE_POP] = { 1, 1, -1, 1, { 0, _GUARD_IS_NOT_NONE_POP_r10, 0, 0 } }, + [_JUMP_TO_TOP] = { 0, 0, 0, 1, { _JUMP_TO_TOP_r00, 0, 0, 0 } }, + [_SET_IP] = { 0, 3, 0, 1, { _SET_IP_r00, _SET_IP_r11, _SET_IP_r22, _SET_IP_r33 } }, + [_CHECK_STACK_SPACE_OPERAND] = { 0, 3, 0, 1, { _CHECK_STACK_SPACE_OPERAND_r00, _CHECK_STACK_SPACE_OPERAND_r11, _CHECK_STACK_SPACE_OPERAND_r22, _CHECK_STACK_SPACE_OPERAND_r33 } }, + [_SAVE_RETURN_OFFSET] = { 0, 3, 0, 1, { _SAVE_RETURN_OFFSET_r00, _SAVE_RETURN_OFFSET_r11, _SAVE_RETURN_OFFSET_r22, _SAVE_RETURN_OFFSET_r33 } }, + [_EXIT_TRACE] = { 0, 3, -3, 0, { _EXIT_TRACE_r00, _EXIT_TRACE_r10, _EXIT_TRACE_r20, _EXIT_TRACE_r30 } }, + [_CHECK_VALIDITY] = { 0, 3, 0, 1, { _CHECK_VALIDITY_r00, _CHECK_VALIDITY_r11, _CHECK_VALIDITY_r22, _CHECK_VALIDITY_r33 } }, + [_LOAD_CONST_INLINE] = { 0, 2, 1, 0, { _LOAD_CONST_INLINE_r01, _LOAD_CONST_INLINE_r12, _LOAD_CONST_INLINE_r23, 0 } }, + [_POP_TOP_LOAD_CONST_INLINE] = { 1, 1, 0, 1, { 0, _POP_TOP_LOAD_CONST_INLINE_r11, 0, 0 } }, + [_LOAD_CONST_INLINE_BORROW] = { 0, 2, 1, 0, { _LOAD_CONST_INLINE_BORROW_r01, _LOAD_CONST_INLINE_BORROW_r12, _LOAD_CONST_INLINE_BORROW_r23, 0 } }, + [_POP_CALL] = { 2, 2, -2, 0, { 0, 0, _POP_CALL_r20, 0 } }, + [_POP_CALL_ONE] = { 3, 3, -3, 0, { 0, 0, 0, _POP_CALL_ONE_r30 } }, + [_POP_CALL_TWO] = { 3, 3, -3, 0, { 0, 0, 0, _POP_CALL_TWO_r30 } }, + [_POP_TOP_LOAD_CONST_INLINE_BORROW] = { 1, 1, 0, 1, { 0, _POP_TOP_LOAD_CONST_INLINE_BORROW_r11, 0, 0 } }, + [_POP_TWO_LOAD_CONST_INLINE_BORROW] = { 2, 2, -1, 0, { 0, 0, _POP_TWO_LOAD_CONST_INLINE_BORROW_r21, 0 } }, + [_POP_CALL_LOAD_CONST_INLINE_BORROW] = { 2, 2, -1, 0, { 0, 0, _POP_CALL_LOAD_CONST_INLINE_BORROW_r21, 0 } }, + [_POP_CALL_ONE_LOAD_CONST_INLINE_BORROW] = { 3, 3, -2, 0, { 0, 0, 0, _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 } }, + [_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW] = { 3, 3, -2, 0, { 0, 0, 0, _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 } }, + [_LOAD_CONST_UNDER_INLINE] = { 0, 2, 1, 0, { _LOAD_CONST_UNDER_INLINE_r01, _LOAD_CONST_UNDER_INLINE_r12, _LOAD_CONST_UNDER_INLINE_r23, 0 } }, + [_LOAD_CONST_UNDER_INLINE_BORROW] = { 0, 2, 1, 0, { _LOAD_CONST_UNDER_INLINE_BORROW_r01, _LOAD_CONST_UNDER_INLINE_BORROW_r12, _LOAD_CONST_UNDER_INLINE_BORROW_r23, 0 } }, + [_CHECK_FUNCTION] = { 0, 3, 0, 1, { _CHECK_FUNCTION_r00, _CHECK_FUNCTION_r11, _CHECK_FUNCTION_r22, _CHECK_FUNCTION_r33 } }, + [_START_EXECUTOR] = { 0, 0, 0, 1, { _START_EXECUTOR_r00, 0, 0, 0 } }, + [_MAKE_WARM] = { 0, 3, 0, 1, { _MAKE_WARM_r00, _MAKE_WARM_r11, _MAKE_WARM_r22, _MAKE_WARM_r33 } }, + [_FATAL_ERROR] = { 0, 3, 0, 1, { _FATAL_ERROR_r00, _FATAL_ERROR_r11, _FATAL_ERROR_r22, _FATAL_ERROR_r33 } }, + [_DEOPT] = { 0, 0, 0, 1, { _DEOPT_r00, 0, 0, 0 } }, + [_ERROR_POP_N] = { 0, 0, 0, 1, { _ERROR_POP_N_r00, 0, 0, 0 } }, + [_TIER2_RESUME_CHECK] = { 0, 3, 0, 1, { _TIER2_RESUME_CHECK_r00, _TIER2_RESUME_CHECK_r11, _TIER2_RESUME_CHECK_r22, _TIER2_RESUME_CHECK_r33 } }, }; const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { @@ -820,9 +820,9 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_OVERFLOWED_r00] = _GUARD_TOS_OVERFLOWED, [_GUARD_TOS_OVERFLOWED_r22] = _GUARD_TOS_OVERFLOWED, [_GUARD_TOS_OVERFLOWED_r33] = _GUARD_TOS_OVERFLOWED, - [_BINARY_OP_MULTIPLY_INT_r11] = _BINARY_OP_MULTIPLY_INT, - [_BINARY_OP_ADD_INT_r11] = _BINARY_OP_ADD_INT, - [_BINARY_OP_SUBTRACT_INT_r11] = _BINARY_OP_SUBTRACT_INT, + [_BINARY_OP_MULTIPLY_INT_r21] = _BINARY_OP_MULTIPLY_INT, + [_BINARY_OP_ADD_INT_r21] = _BINARY_OP_ADD_INT, + [_BINARY_OP_SUBTRACT_INT_r21] = _BINARY_OP_SUBTRACT_INT, [_GUARD_NOS_FLOAT_r22] = _GUARD_NOS_FLOAT, [_GUARD_NOS_FLOAT_r00] = _GUARD_NOS_FLOAT, [_GUARD_NOS_FLOAT_r11] = _GUARD_NOS_FLOAT, @@ -832,26 +832,12 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_FLOAT_r22] = _GUARD_TOS_FLOAT, [_GUARD_TOS_FLOAT_r33] = _GUARD_TOS_FLOAT, [_BINARY_OP_MULTIPLY_FLOAT_r21] = _BINARY_OP_MULTIPLY_FLOAT, - [_BINARY_OP_MULTIPLY_FLOAT_r10] = _BINARY_OP_MULTIPLY_FLOAT, - [_BINARY_OP_MULTIPLY_FLOAT_r32] = _BINARY_OP_MULTIPLY_FLOAT, [_BINARY_OP_ADD_FLOAT_r21] = _BINARY_OP_ADD_FLOAT, - [_BINARY_OP_ADD_FLOAT_r10] = _BINARY_OP_ADD_FLOAT, - [_BINARY_OP_ADD_FLOAT_r32] = _BINARY_OP_ADD_FLOAT, [_BINARY_OP_SUBTRACT_FLOAT_r21] = _BINARY_OP_SUBTRACT_FLOAT, - [_BINARY_OP_SUBTRACT_FLOAT_r10] = _BINARY_OP_SUBTRACT_FLOAT, - [_BINARY_OP_SUBTRACT_FLOAT_r32] = _BINARY_OP_SUBTRACT_FLOAT, [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21] = _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS, - [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r10] = _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS, - [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r32] = _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS, [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21] = _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS, - [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r10] = _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS, - [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r32] = _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS, [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21] = _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS, - [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r10] = _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS, - [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r32] = _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS, [_BINARY_OP_ADD_UNICODE_r21] = _BINARY_OP_ADD_UNICODE, - [_BINARY_OP_ADD_UNICODE_r10] = _BINARY_OP_ADD_UNICODE, - [_BINARY_OP_ADD_UNICODE_r32] = _BINARY_OP_ADD_UNICODE, [_BINARY_OP_INPLACE_ADD_UNICODE_r00] = _BINARY_OP_INPLACE_ADD_UNICODE, [_GUARD_BINARY_OP_EXTEND_r00] = _GUARD_BINARY_OP_EXTEND, [_BINARY_OP_EXTEND_r01] = _BINARY_OP_EXTEND, @@ -859,7 +845,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_STORE_SLICE_r00] = _STORE_SLICE, [_BINARY_OP_SUBSCR_LIST_INT_r01] = _BINARY_OP_SUBSCR_LIST_INT, [_BINARY_OP_SUBSCR_LIST_SLICE_r01] = _BINARY_OP_SUBSCR_LIST_SLICE, - [_BINARY_OP_SUBSCR_STR_INT_r11] = _BINARY_OP_SUBSCR_STR_INT, + [_BINARY_OP_SUBSCR_STR_INT_r21] = _BINARY_OP_SUBSCR_STR_INT, [_GUARD_NOS_TUPLE_r22] = _GUARD_NOS_TUPLE, [_GUARD_NOS_TUPLE_r00] = _GUARD_NOS_TUPLE, [_GUARD_NOS_TUPLE_r11] = _GUARD_NOS_TUPLE, @@ -868,7 +854,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_TUPLE_r00] = _GUARD_TOS_TUPLE, [_GUARD_TOS_TUPLE_r22] = _GUARD_TOS_TUPLE, [_GUARD_TOS_TUPLE_r33] = _GUARD_TOS_TUPLE, - [_BINARY_OP_SUBSCR_TUPLE_INT_r11] = _BINARY_OP_SUBSCR_TUPLE_INT, + [_BINARY_OP_SUBSCR_TUPLE_INT_r21] = _BINARY_OP_SUBSCR_TUPLE_INT, [_GUARD_NOS_DICT_r22] = _GUARD_NOS_DICT, [_GUARD_NOS_DICT_r00] = _GUARD_NOS_DICT, [_GUARD_NOS_DICT_r11] = _GUARD_NOS_DICT, @@ -878,12 +864,12 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_TOS_DICT_r22] = _GUARD_TOS_DICT, [_GUARD_TOS_DICT_r33] = _GUARD_TOS_DICT, [_BINARY_OP_SUBSCR_DICT_r01] = _BINARY_OP_SUBSCR_DICT, - [_BINARY_OP_SUBSCR_CHECK_FUNC_r22] = _BINARY_OP_SUBSCR_CHECK_FUNC, + [_BINARY_OP_SUBSCR_CHECK_FUNC_r23] = _BINARY_OP_SUBSCR_CHECK_FUNC, [_BINARY_OP_SUBSCR_INIT_CALL_r31] = _BINARY_OP_SUBSCR_INIT_CALL, [_LIST_APPEND_r10] = _LIST_APPEND, [_SET_ADD_r00] = _SET_ADD, [_STORE_SUBSCR_r00] = _STORE_SUBSCR, - [_STORE_SUBSCR_LIST_INT_r00] = _STORE_SUBSCR_LIST_INT, + [_STORE_SUBSCR_LIST_INT_r30] = _STORE_SUBSCR_LIST_INT, [_STORE_SUBSCR_DICT_r00] = _STORE_SUBSCR_DICT, [_DELETE_SUBSCR_r00] = _DELETE_SUBSCR, [_CALL_INTRINSIC_1_r01] = _CALL_INTRINSIC_1, @@ -893,13 +879,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GET_ANEXT_r01] = _GET_ANEXT, [_GET_AWAITABLE_r01] = _GET_AWAITABLE, [_SEND_GEN_FRAME_r22] = _SEND_GEN_FRAME, - [_SEND_GEN_FRAME_r00] = _SEND_GEN_FRAME, - [_SEND_GEN_FRAME_r11] = _SEND_GEN_FRAME, - [_SEND_GEN_FRAME_r33] = _SEND_GEN_FRAME, [_YIELD_VALUE_r11] = _YIELD_VALUE, - [_YIELD_VALUE_r00] = _YIELD_VALUE, - [_YIELD_VALUE_r22] = _YIELD_VALUE, - [_YIELD_VALUE_r33] = _YIELD_VALUE, [_POP_EXCEPT_r00] = _POP_EXCEPT, [_LOAD_COMMON_CONSTANT_r01] = _LOAD_COMMON_CONSTANT, [_LOAD_COMMON_CONSTANT_r12] = _LOAD_COMMON_CONSTANT, @@ -908,9 +888,9 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_STORE_NAME_r00] = _STORE_NAME, [_DELETE_NAME_r00] = _DELETE_NAME, [_UNPACK_SEQUENCE_r00] = _UNPACK_SEQUENCE, - [_UNPACK_SEQUENCE_TWO_TUPLE_r11] = _UNPACK_SEQUENCE_TWO_TUPLE, - [_UNPACK_SEQUENCE_TUPLE_r00] = _UNPACK_SEQUENCE_TUPLE, - [_UNPACK_SEQUENCE_LIST_r00] = _UNPACK_SEQUENCE_LIST, + [_UNPACK_SEQUENCE_TWO_TUPLE_r12] = _UNPACK_SEQUENCE_TWO_TUPLE, + [_UNPACK_SEQUENCE_TUPLE_r10] = _UNPACK_SEQUENCE_TUPLE, + [_UNPACK_SEQUENCE_LIST_r10] = _UNPACK_SEQUENCE_LIST, [_UNPACK_EX_r00] = _UNPACK_EX, [_STORE_ATTR_r00] = _STORE_ATTR, [_DELETE_ATTR_r00] = _DELETE_ATTR, @@ -924,8 +904,8 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_GLOBALS_VERSION_r11] = _GUARD_GLOBALS_VERSION, [_GUARD_GLOBALS_VERSION_r22] = _GUARD_GLOBALS_VERSION, [_GUARD_GLOBALS_VERSION_r33] = _GUARD_GLOBALS_VERSION, - [_LOAD_GLOBAL_MODULE_r00] = _LOAD_GLOBAL_MODULE, - [_LOAD_GLOBAL_BUILTINS_r00] = _LOAD_GLOBAL_BUILTINS, + [_LOAD_GLOBAL_MODULE_r01] = _LOAD_GLOBAL_MODULE, + [_LOAD_GLOBAL_BUILTINS_r01] = _LOAD_GLOBAL_BUILTINS, [_DELETE_FAST_r00] = _DELETE_FAST, [_MAKE_CELL_r00] = _MAKE_CELL, [_DELETE_DEREF_r00] = _DELETE_DEREF, @@ -933,9 +913,6 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_LOAD_DEREF_r01] = _LOAD_DEREF, [_STORE_DEREF_r00] = _STORE_DEREF, [_COPY_FREE_VARS_r00] = _COPY_FREE_VARS, - [_COPY_FREE_VARS_r11] = _COPY_FREE_VARS, - [_COPY_FREE_VARS_r22] = _COPY_FREE_VARS, - [_COPY_FREE_VARS_r33] = _COPY_FREE_VARS, [_BUILD_STRING_r01] = _BUILD_STRING, [_BUILD_INTERPOLATION_r01] = _BUILD_INTERPOLATION, [_BUILD_TEMPLATE_r01] = _BUILD_TEMPLATE, @@ -974,26 +951,17 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_CHECK_ATTR_CLASS_r33] = _CHECK_ATTR_CLASS, [_LOAD_ATTR_CLASS_r11] = _LOAD_ATTR_CLASS, [_LOAD_ATTR_PROPERTY_FRAME_r11] = _LOAD_ATTR_PROPERTY_FRAME, - [_LOAD_ATTR_PROPERTY_FRAME_r00] = _LOAD_ATTR_PROPERTY_FRAME, - [_LOAD_ATTR_PROPERTY_FRAME_r22] = _LOAD_ATTR_PROPERTY_FRAME, - [_LOAD_ATTR_PROPERTY_FRAME_r33] = _LOAD_ATTR_PROPERTY_FRAME, [_GUARD_DORV_NO_DICT_r11] = _GUARD_DORV_NO_DICT, [_GUARD_DORV_NO_DICT_r00] = _GUARD_DORV_NO_DICT, [_GUARD_DORV_NO_DICT_r22] = _GUARD_DORV_NO_DICT, [_GUARD_DORV_NO_DICT_r33] = _GUARD_DORV_NO_DICT, [_STORE_ATTR_INSTANCE_VALUE_r20] = _STORE_ATTR_INSTANCE_VALUE, [_STORE_ATTR_WITH_HINT_r00] = _STORE_ATTR_WITH_HINT, - [_STORE_ATTR_SLOT_r00] = _STORE_ATTR_SLOT, + [_STORE_ATTR_SLOT_r20] = _STORE_ATTR_SLOT, [_COMPARE_OP_r01] = _COMPARE_OP, [_COMPARE_OP_FLOAT_r21] = _COMPARE_OP_FLOAT, - [_COMPARE_OP_FLOAT_r10] = _COMPARE_OP_FLOAT, - [_COMPARE_OP_FLOAT_r32] = _COMPARE_OP_FLOAT, [_COMPARE_OP_INT_r21] = _COMPARE_OP_INT, - [_COMPARE_OP_INT_r10] = _COMPARE_OP_INT, - [_COMPARE_OP_INT_r32] = _COMPARE_OP_INT, [_COMPARE_OP_STR_r21] = _COMPARE_OP_STR, - [_COMPARE_OP_STR_r10] = _COMPARE_OP_STR, - [_COMPARE_OP_STR_r32] = _COMPARE_OP_STR, [_IS_OP_r21] = _IS_OP, [_CONTAINS_OP_r01] = _CONTAINS_OP, [_GUARD_TOS_ANY_SET_r11] = _GUARD_TOS_ANY_SET, @@ -1046,7 +1014,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_NOT_EXHAUSTED_RANGE_r11] = _GUARD_NOT_EXHAUSTED_RANGE, [_GUARD_NOT_EXHAUSTED_RANGE_r33] = _GUARD_NOT_EXHAUSTED_RANGE, [_ITER_NEXT_RANGE_r23] = _ITER_NEXT_RANGE, - [_FOR_ITER_GEN_FRAME_r22] = _FOR_ITER_GEN_FRAME, + [_FOR_ITER_GEN_FRAME_r23] = _FOR_ITER_GEN_FRAME, [_INSERT_NULL_r10] = _INSERT_NULL, [_LOAD_SPECIAL_r00] = _LOAD_SPECIAL, [_WITH_EXCEPT_START_r01] = _WITH_EXCEPT_START, @@ -1133,7 +1101,7 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_GUARD_CALLABLE_ISINSTANCE_r33] = _GUARD_CALLABLE_ISINSTANCE, [_CALL_ISINSTANCE_r01] = _CALL_ISINSTANCE, [_GUARD_CALLABLE_LIST_APPEND_r33] = _GUARD_CALLABLE_LIST_APPEND, - [_CALL_LIST_APPEND_r00] = _CALL_LIST_APPEND, + [_CALL_LIST_APPEND_r30] = _CALL_LIST_APPEND, [_CALL_METHOD_DESCRIPTOR_O_r01] = _CALL_METHOD_DESCRIPTOR_O, [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r01] = _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, [_CALL_METHOD_DESCRIPTOR_NOARGS_r01] = _CALL_METHOD_DESCRIPTOR_NOARGS, @@ -1148,8 +1116,6 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_MAKE_CALLARGS_A_TUPLE_r00] = _MAKE_CALLARGS_A_TUPLE, [_MAKE_FUNCTION_r01] = _MAKE_FUNCTION, [_SET_FUNCTION_ATTRIBUTE_r21] = _SET_FUNCTION_ATTRIBUTE, - [_SET_FUNCTION_ATTRIBUTE_r10] = _SET_FUNCTION_ATTRIBUTE, - [_SET_FUNCTION_ATTRIBUTE_r32] = _SET_FUNCTION_ATTRIBUTE, [_RETURN_GENERATOR_r01] = _RETURN_GENERATOR, [_BUILD_SLICE_r01] = _BUILD_SLICE, [_CONVERT_VALUE_r01] = _CONVERT_VALUE, @@ -1168,10 +1134,10 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = { [_SWAP_2_r33] = _SWAP_2, [_SWAP_3_r33] = _SWAP_3, [_SWAP_r11] = _SWAP, - [_GUARD_IS_TRUE_POP_r00] = _GUARD_IS_TRUE_POP, - [_GUARD_IS_FALSE_POP_r00] = _GUARD_IS_FALSE_POP, - [_GUARD_IS_NONE_POP_r00] = _GUARD_IS_NONE_POP, - [_GUARD_IS_NOT_NONE_POP_r00] = _GUARD_IS_NOT_NONE_POP, + [_GUARD_IS_TRUE_POP_r10] = _GUARD_IS_TRUE_POP, + [_GUARD_IS_FALSE_POP_r10] = _GUARD_IS_FALSE_POP, + [_GUARD_IS_NONE_POP_r10] = _GUARD_IS_NONE_POP, + [_GUARD_IS_NOT_NONE_POP_r10] = _GUARD_IS_NOT_NONE_POP, [_JUMP_TO_TOP_r00] = _JUMP_TO_TOP, [_SET_IP_r00] = _SET_IP, [_SET_IP_r11] = _SET_IP, @@ -1267,34 +1233,24 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_r01] = "_BINARY_OP_r01", [_BINARY_OP_ADD_FLOAT] = "_BINARY_OP_ADD_FLOAT", [_BINARY_OP_ADD_FLOAT_r21] = "_BINARY_OP_ADD_FLOAT_r21", - [_BINARY_OP_ADD_FLOAT_r10] = "_BINARY_OP_ADD_FLOAT_r10", - [_BINARY_OP_ADD_FLOAT_r32] = "_BINARY_OP_ADD_FLOAT_r32", [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS] = "_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS", [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21] = "_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21", - [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r10] = "_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r10", - [_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r32] = "_BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r32", [_BINARY_OP_ADD_INT] = "_BINARY_OP_ADD_INT", - [_BINARY_OP_ADD_INT_r11] = "_BINARY_OP_ADD_INT_r11", + [_BINARY_OP_ADD_INT_r21] = "_BINARY_OP_ADD_INT_r21", [_BINARY_OP_ADD_UNICODE] = "_BINARY_OP_ADD_UNICODE", [_BINARY_OP_ADD_UNICODE_r21] = "_BINARY_OP_ADD_UNICODE_r21", - [_BINARY_OP_ADD_UNICODE_r10] = "_BINARY_OP_ADD_UNICODE_r10", - [_BINARY_OP_ADD_UNICODE_r32] = "_BINARY_OP_ADD_UNICODE_r32", [_BINARY_OP_EXTEND] = "_BINARY_OP_EXTEND", [_BINARY_OP_EXTEND_r01] = "_BINARY_OP_EXTEND_r01", [_BINARY_OP_INPLACE_ADD_UNICODE] = "_BINARY_OP_INPLACE_ADD_UNICODE", [_BINARY_OP_INPLACE_ADD_UNICODE_r00] = "_BINARY_OP_INPLACE_ADD_UNICODE_r00", [_BINARY_OP_MULTIPLY_FLOAT] = "_BINARY_OP_MULTIPLY_FLOAT", [_BINARY_OP_MULTIPLY_FLOAT_r21] = "_BINARY_OP_MULTIPLY_FLOAT_r21", - [_BINARY_OP_MULTIPLY_FLOAT_r10] = "_BINARY_OP_MULTIPLY_FLOAT_r10", - [_BINARY_OP_MULTIPLY_FLOAT_r32] = "_BINARY_OP_MULTIPLY_FLOAT_r32", [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS] = "_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS", [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21] = "_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21", - [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r10] = "_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r10", - [_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r32] = "_BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r32", [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", - [_BINARY_OP_MULTIPLY_INT_r11] = "_BINARY_OP_MULTIPLY_INT_r11", + [_BINARY_OP_MULTIPLY_INT_r21] = "_BINARY_OP_MULTIPLY_INT_r21", [_BINARY_OP_SUBSCR_CHECK_FUNC] = "_BINARY_OP_SUBSCR_CHECK_FUNC", - [_BINARY_OP_SUBSCR_CHECK_FUNC_r22] = "_BINARY_OP_SUBSCR_CHECK_FUNC_r22", + [_BINARY_OP_SUBSCR_CHECK_FUNC_r23] = "_BINARY_OP_SUBSCR_CHECK_FUNC_r23", [_BINARY_OP_SUBSCR_DICT] = "_BINARY_OP_SUBSCR_DICT", [_BINARY_OP_SUBSCR_DICT_r01] = "_BINARY_OP_SUBSCR_DICT_r01", [_BINARY_OP_SUBSCR_INIT_CALL] = "_BINARY_OP_SUBSCR_INIT_CALL", @@ -1304,19 +1260,15 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_BINARY_OP_SUBSCR_LIST_SLICE] = "_BINARY_OP_SUBSCR_LIST_SLICE", [_BINARY_OP_SUBSCR_LIST_SLICE_r01] = "_BINARY_OP_SUBSCR_LIST_SLICE_r01", [_BINARY_OP_SUBSCR_STR_INT] = "_BINARY_OP_SUBSCR_STR_INT", - [_BINARY_OP_SUBSCR_STR_INT_r11] = "_BINARY_OP_SUBSCR_STR_INT_r11", + [_BINARY_OP_SUBSCR_STR_INT_r21] = "_BINARY_OP_SUBSCR_STR_INT_r21", [_BINARY_OP_SUBSCR_TUPLE_INT] = "_BINARY_OP_SUBSCR_TUPLE_INT", - [_BINARY_OP_SUBSCR_TUPLE_INT_r11] = "_BINARY_OP_SUBSCR_TUPLE_INT_r11", + [_BINARY_OP_SUBSCR_TUPLE_INT_r21] = "_BINARY_OP_SUBSCR_TUPLE_INT_r21", [_BINARY_OP_SUBTRACT_FLOAT] = "_BINARY_OP_SUBTRACT_FLOAT", [_BINARY_OP_SUBTRACT_FLOAT_r21] = "_BINARY_OP_SUBTRACT_FLOAT_r21", - [_BINARY_OP_SUBTRACT_FLOAT_r10] = "_BINARY_OP_SUBTRACT_FLOAT_r10", - [_BINARY_OP_SUBTRACT_FLOAT_r32] = "_BINARY_OP_SUBTRACT_FLOAT_r32", [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS] = "_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS", [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21] = "_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21", - [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r10] = "_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r10", - [_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r32] = "_BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r32", [_BINARY_OP_SUBTRACT_INT] = "_BINARY_OP_SUBTRACT_INT", - [_BINARY_OP_SUBTRACT_INT_r11] = "_BINARY_OP_SUBTRACT_INT_r11", + [_BINARY_OP_SUBTRACT_INT_r21] = "_BINARY_OP_SUBTRACT_INT_r21", [_BINARY_SLICE] = "_BINARY_SLICE", [_BINARY_SLICE_r01] = "_BINARY_SLICE_r01", [_BUILD_INTERPOLATION] = "_BUILD_INTERPOLATION", @@ -1354,7 +1306,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_CALL_LEN] = "_CALL_LEN", [_CALL_LEN_r01] = "_CALL_LEN_r01", [_CALL_LIST_APPEND] = "_CALL_LIST_APPEND", - [_CALL_LIST_APPEND_r00] = "_CALL_LIST_APPEND_r00", + [_CALL_LIST_APPEND_r30] = "_CALL_LIST_APPEND_r30", [_CALL_METHOD_DESCRIPTOR_FAST] = "_CALL_METHOD_DESCRIPTOR_FAST", [_CALL_METHOD_DESCRIPTOR_FAST_r01] = "_CALL_METHOD_DESCRIPTOR_FAST_r01", [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", @@ -1448,16 +1400,10 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_COMPARE_OP_r01] = "_COMPARE_OP_r01", [_COMPARE_OP_FLOAT] = "_COMPARE_OP_FLOAT", [_COMPARE_OP_FLOAT_r21] = "_COMPARE_OP_FLOAT_r21", - [_COMPARE_OP_FLOAT_r10] = "_COMPARE_OP_FLOAT_r10", - [_COMPARE_OP_FLOAT_r32] = "_COMPARE_OP_FLOAT_r32", [_COMPARE_OP_INT] = "_COMPARE_OP_INT", [_COMPARE_OP_INT_r21] = "_COMPARE_OP_INT_r21", - [_COMPARE_OP_INT_r10] = "_COMPARE_OP_INT_r10", - [_COMPARE_OP_INT_r32] = "_COMPARE_OP_INT_r32", [_COMPARE_OP_STR] = "_COMPARE_OP_STR", [_COMPARE_OP_STR_r21] = "_COMPARE_OP_STR_r21", - [_COMPARE_OP_STR_r10] = "_COMPARE_OP_STR_r10", - [_COMPARE_OP_STR_r32] = "_COMPARE_OP_STR_r32", [_CONTAINS_OP] = "_CONTAINS_OP", [_CONTAINS_OP_r01] = "_CONTAINS_OP_r01", [_CONTAINS_OP_DICT] = "_CONTAINS_OP_DICT", @@ -1478,9 +1424,6 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_COPY_3_r33] = "_COPY_3_r33", [_COPY_FREE_VARS] = "_COPY_FREE_VARS", [_COPY_FREE_VARS_r00] = "_COPY_FREE_VARS_r00", - [_COPY_FREE_VARS_r11] = "_COPY_FREE_VARS_r11", - [_COPY_FREE_VARS_r22] = "_COPY_FREE_VARS_r22", - [_COPY_FREE_VARS_r33] = "_COPY_FREE_VARS_r33", [_CREATE_INIT_FRAME] = "_CREATE_INIT_FRAME", [_CREATE_INIT_FRAME_r01] = "_CREATE_INIT_FRAME_r01", [_DELETE_ATTR] = "_DELETE_ATTR", @@ -1528,7 +1471,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_FORMAT_WITH_SPEC] = "_FORMAT_WITH_SPEC", [_FORMAT_WITH_SPEC_r01] = "_FORMAT_WITH_SPEC_r01", [_FOR_ITER_GEN_FRAME] = "_FOR_ITER_GEN_FRAME", - [_FOR_ITER_GEN_FRAME_r22] = "_FOR_ITER_GEN_FRAME_r22", + [_FOR_ITER_GEN_FRAME_r23] = "_FOR_ITER_GEN_FRAME_r23", [_FOR_ITER_TIER_TWO] = "_FOR_ITER_TIER_TWO", [_FOR_ITER_TIER_TWO_r01] = "_FOR_ITER_TIER_TWO_r01", [_GET_AITER] = "_GET_AITER", @@ -1573,13 +1516,13 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_GUARD_GLOBALS_VERSION_r22] = "_GUARD_GLOBALS_VERSION_r22", [_GUARD_GLOBALS_VERSION_r33] = "_GUARD_GLOBALS_VERSION_r33", [_GUARD_IS_FALSE_POP] = "_GUARD_IS_FALSE_POP", - [_GUARD_IS_FALSE_POP_r00] = "_GUARD_IS_FALSE_POP_r00", + [_GUARD_IS_FALSE_POP_r10] = "_GUARD_IS_FALSE_POP_r10", [_GUARD_IS_NONE_POP] = "_GUARD_IS_NONE_POP", - [_GUARD_IS_NONE_POP_r00] = "_GUARD_IS_NONE_POP_r00", + [_GUARD_IS_NONE_POP_r10] = "_GUARD_IS_NONE_POP_r10", [_GUARD_IS_NOT_NONE_POP] = "_GUARD_IS_NOT_NONE_POP", - [_GUARD_IS_NOT_NONE_POP_r00] = "_GUARD_IS_NOT_NONE_POP_r00", + [_GUARD_IS_NOT_NONE_POP_r10] = "_GUARD_IS_NOT_NONE_POP_r10", [_GUARD_IS_TRUE_POP] = "_GUARD_IS_TRUE_POP", - [_GUARD_IS_TRUE_POP_r00] = "_GUARD_IS_TRUE_POP_r00", + [_GUARD_IS_TRUE_POP_r10] = "_GUARD_IS_TRUE_POP_r10", [_GUARD_KEYS_VERSION] = "_GUARD_KEYS_VERSION", [_GUARD_KEYS_VERSION_r11] = "_GUARD_KEYS_VERSION_r11", [_GUARD_KEYS_VERSION_r00] = "_GUARD_KEYS_VERSION_r00", @@ -1779,9 +1722,6 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11] = "_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11", [_LOAD_ATTR_PROPERTY_FRAME] = "_LOAD_ATTR_PROPERTY_FRAME", [_LOAD_ATTR_PROPERTY_FRAME_r11] = "_LOAD_ATTR_PROPERTY_FRAME_r11", - [_LOAD_ATTR_PROPERTY_FRAME_r00] = "_LOAD_ATTR_PROPERTY_FRAME_r00", - [_LOAD_ATTR_PROPERTY_FRAME_r22] = "_LOAD_ATTR_PROPERTY_FRAME_r22", - [_LOAD_ATTR_PROPERTY_FRAME_r33] = "_LOAD_ATTR_PROPERTY_FRAME_r33", [_LOAD_ATTR_SLOT] = "_LOAD_ATTR_SLOT", [_LOAD_ATTR_SLOT_r11] = "_LOAD_ATTR_SLOT_r11", [_LOAD_ATTR_WITH_HINT] = "_LOAD_ATTR_WITH_HINT", @@ -1897,9 +1837,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_LOAD_GLOBAL] = "_LOAD_GLOBAL", [_LOAD_GLOBAL_r00] = "_LOAD_GLOBAL_r00", [_LOAD_GLOBAL_BUILTINS] = "_LOAD_GLOBAL_BUILTINS", - [_LOAD_GLOBAL_BUILTINS_r00] = "_LOAD_GLOBAL_BUILTINS_r00", + [_LOAD_GLOBAL_BUILTINS_r01] = "_LOAD_GLOBAL_BUILTINS_r01", [_LOAD_GLOBAL_MODULE] = "_LOAD_GLOBAL_MODULE", - [_LOAD_GLOBAL_MODULE_r00] = "_LOAD_GLOBAL_MODULE_r00", + [_LOAD_GLOBAL_MODULE_r01] = "_LOAD_GLOBAL_MODULE_r01", [_LOAD_LOCALS] = "_LOAD_LOCALS", [_LOAD_LOCALS_r01] = "_LOAD_LOCALS_r01", [_LOAD_NAME] = "_LOAD_NAME", @@ -2024,17 +1964,12 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_SAVE_RETURN_OFFSET_r33] = "_SAVE_RETURN_OFFSET_r33", [_SEND_GEN_FRAME] = "_SEND_GEN_FRAME", [_SEND_GEN_FRAME_r22] = "_SEND_GEN_FRAME_r22", - [_SEND_GEN_FRAME_r00] = "_SEND_GEN_FRAME_r00", - [_SEND_GEN_FRAME_r11] = "_SEND_GEN_FRAME_r11", - [_SEND_GEN_FRAME_r33] = "_SEND_GEN_FRAME_r33", [_SETUP_ANNOTATIONS] = "_SETUP_ANNOTATIONS", [_SETUP_ANNOTATIONS_r00] = "_SETUP_ANNOTATIONS_r00", [_SET_ADD] = "_SET_ADD", [_SET_ADD_r00] = "_SET_ADD_r00", [_SET_FUNCTION_ATTRIBUTE] = "_SET_FUNCTION_ATTRIBUTE", [_SET_FUNCTION_ATTRIBUTE_r21] = "_SET_FUNCTION_ATTRIBUTE_r21", - [_SET_FUNCTION_ATTRIBUTE_r10] = "_SET_FUNCTION_ATTRIBUTE_r10", - [_SET_FUNCTION_ATTRIBUTE_r32] = "_SET_FUNCTION_ATTRIBUTE_r32", [_SET_IP] = "_SET_IP", [_SET_IP_r00] = "_SET_IP_r00", [_SET_IP_r11] = "_SET_IP_r11", @@ -2062,7 +1997,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_STORE_ATTR_INSTANCE_VALUE] = "_STORE_ATTR_INSTANCE_VALUE", [_STORE_ATTR_INSTANCE_VALUE_r20] = "_STORE_ATTR_INSTANCE_VALUE_r20", [_STORE_ATTR_SLOT] = "_STORE_ATTR_SLOT", - [_STORE_ATTR_SLOT_r00] = "_STORE_ATTR_SLOT_r00", + [_STORE_ATTR_SLOT_r20] = "_STORE_ATTR_SLOT_r20", [_STORE_ATTR_WITH_HINT] = "_STORE_ATTR_WITH_HINT", [_STORE_ATTR_WITH_HINT_r00] = "_STORE_ATTR_WITH_HINT_r00", [_STORE_DEREF] = "_STORE_DEREF", @@ -2096,7 +2031,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_STORE_SUBSCR_DICT] = "_STORE_SUBSCR_DICT", [_STORE_SUBSCR_DICT_r00] = "_STORE_SUBSCR_DICT_r00", [_STORE_SUBSCR_LIST_INT] = "_STORE_SUBSCR_LIST_INT", - [_STORE_SUBSCR_LIST_INT_r00] = "_STORE_SUBSCR_LIST_INT_r00", + [_STORE_SUBSCR_LIST_INT_r30] = "_STORE_SUBSCR_LIST_INT_r30", [_SWAP] = "_SWAP", [_SWAP_r11] = "_SWAP_r11", [_SWAP_2] = "_SWAP_2", @@ -2143,18 +2078,15 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = { [_UNPACK_SEQUENCE] = "_UNPACK_SEQUENCE", [_UNPACK_SEQUENCE_r00] = "_UNPACK_SEQUENCE_r00", [_UNPACK_SEQUENCE_LIST] = "_UNPACK_SEQUENCE_LIST", - [_UNPACK_SEQUENCE_LIST_r00] = "_UNPACK_SEQUENCE_LIST_r00", + [_UNPACK_SEQUENCE_LIST_r10] = "_UNPACK_SEQUENCE_LIST_r10", [_UNPACK_SEQUENCE_TUPLE] = "_UNPACK_SEQUENCE_TUPLE", - [_UNPACK_SEQUENCE_TUPLE_r00] = "_UNPACK_SEQUENCE_TUPLE_r00", + [_UNPACK_SEQUENCE_TUPLE_r10] = "_UNPACK_SEQUENCE_TUPLE_r10", [_UNPACK_SEQUENCE_TWO_TUPLE] = "_UNPACK_SEQUENCE_TWO_TUPLE", - [_UNPACK_SEQUENCE_TWO_TUPLE_r11] = "_UNPACK_SEQUENCE_TWO_TUPLE_r11", + [_UNPACK_SEQUENCE_TWO_TUPLE_r12] = "_UNPACK_SEQUENCE_TWO_TUPLE_r12", [_WITH_EXCEPT_START] = "_WITH_EXCEPT_START", [_WITH_EXCEPT_START_r01] = "_WITH_EXCEPT_START_r01", [_YIELD_VALUE] = "_YIELD_VALUE", [_YIELD_VALUE_r11] = "_YIELD_VALUE_r11", - [_YIELD_VALUE_r00] = "_YIELD_VALUE_r00", - [_YIELD_VALUE_r22] = "_YIELD_VALUE_r22", - [_YIELD_VALUE_r33] = "_YIELD_VALUE_r33", }; int _PyUop_num_popped(int opcode, int oparg) { diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 63598dba9040d5..f799d5f784cb33 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -1702,6 +1702,7 @@ value = _stack_item_0; if (!PyStackRef_BoolCheck(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1716,6 +1717,7 @@ value = stack_pointer[-1]; if (!PyStackRef_BoolCheck(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1731,6 +1733,7 @@ value = _stack_item_1; if (!PyStackRef_BoolCheck(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1749,6 +1752,7 @@ value = _stack_item_2; if (!PyStackRef_BoolCheck(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1768,6 +1772,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -1795,6 +1800,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -1810,6 +1816,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -1824,6 +1831,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -1841,6 +1849,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -1858,6 +1867,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -1872,6 +1882,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -1887,6 +1898,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -1905,6 +1917,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyList_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -1922,6 +1935,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -1936,6 +1950,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -1951,6 +1966,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -1969,6 +1985,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PySlice_Check(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -2012,6 +2029,7 @@ value = _stack_item_0; if (!PyStackRef_IsNone(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2028,6 +2046,7 @@ value = stack_pointer[-1]; if (!PyStackRef_IsNone(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2046,6 +2065,7 @@ value = _stack_item_1; if (!PyStackRef_IsNone(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2066,6 +2086,7 @@ value = _stack_item_2; if (!PyStackRef_IsNone(value)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } STAT_INC(TO_BOOL, hit); @@ -2086,6 +2107,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2101,6 +2123,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2115,6 +2138,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2132,6 +2156,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyUnicode_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2149,6 +2174,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2163,6 +2189,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2178,6 +2205,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2196,6 +2224,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyUnicode_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2276,6 +2305,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckCompact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2291,6 +2321,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckCompact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2305,6 +2336,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckCompact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2322,6 +2354,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyLong_CheckCompact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2339,6 +2372,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckCompact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2353,6 +2387,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckCompact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2368,6 +2403,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckCompact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2386,6 +2422,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyLong_CheckCompact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2405,6 +2442,7 @@ assert(Py_TYPE(left_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2421,6 +2459,7 @@ assert(Py_TYPE(left_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2436,6 +2475,7 @@ assert(Py_TYPE(left_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2454,6 +2494,7 @@ assert(Py_TYPE(left_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2472,6 +2513,7 @@ assert(Py_TYPE(value_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2487,6 +2529,7 @@ assert(Py_TYPE(value_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2503,6 +2546,7 @@ assert(Py_TYPE(value_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2522,6 +2566,7 @@ assert(Py_TYPE(value_o) == &PyLong_Type); if (!_PyLong_IsCompact((PyLongObject *)value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2531,14 +2576,15 @@ break; } - case _BINARY_OP_MULTIPLY_INT_r11: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_MULTIPLY_INT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -2548,25 +2594,25 @@ res = _PyCompactLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o); if (PyStackRef_IsNull(res)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); _tos_cache0 = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_ADD_INT_r11: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_ADD_INT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -2576,25 +2622,25 @@ res = _PyCompactLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o); if (PyStackRef_IsNull(res)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); _tos_cache0 = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_SUBTRACT_INT_r11: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_SUBTRACT_INT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyLong_CheckExact(left_o)); @@ -2604,13 +2650,12 @@ res = _PyCompactLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o); if (PyStackRef_IsNull(res)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); _tos_cache0 = res; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); SET_CURRENT_CACHED_VALUES(1); break; } @@ -2624,6 +2669,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -2639,6 +2685,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2653,6 +2700,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -2670,6 +2718,7 @@ PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); if (!PyFloat_CheckExact(left_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -2687,6 +2736,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = value; @@ -2701,6 +2751,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -2716,6 +2767,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = value; @@ -2734,6 +2786,7 @@ PyObject *value_o = PyStackRef_AsPyObjectBorrow(value); if (!PyFloat_CheckExact(value_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = value; @@ -2770,67 +2823,61 @@ break; } - case _BINARY_OP_MULTIPLY_FLOAT_r10: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_ADD_FLOAT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); assert(PyFloat_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); double dres = - ((PyFloatObject *)left_o)->ob_fval * + ((PyFloatObject *)left_o)->ob_fval + ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - stack_pointer[-1] = res; SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_MULTIPLY_FLOAT_r32: { - CHECK_CURRENT_CACHED_VALUES(3); + case _BINARY_OP_SUBTRACT_FLOAT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - right = _stack_item_2; - left = _stack_item_1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); assert(PyFloat_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); double dres = - ((PyFloatObject *)left_o)->ob_fval * + ((PyFloatObject *)left_o)->ob_fval - ((PyFloatObject *)right_o)->ob_fval; res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); if (PyStackRef_IsNull(res)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = res; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_ADD_FLOAT_r21: { + case _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21: { CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -2845,9 +2892,9 @@ assert(PyFloat_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); double dres = - ((PyFloatObject *)left_o)->ob_fval + + ((PyFloatObject *)left_o)->ob_fval * ((PyFloatObject *)right_o)->ob_fval; - res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); if (PyStackRef_IsNull(res)) { SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); @@ -2857,14 +2904,15 @@ break; } - case _BINARY_OP_ADD_FLOAT_r10: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; + _PyStackRef _stack_item_1 = _tos_cache1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); @@ -2873,51 +2921,44 @@ double dres = ((PyFloatObject *)left_o)->ob_fval + ((PyFloatObject *)right_o)->ob_fval; - res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); if (PyStackRef_IsNull(res)) { - stack_pointer[-1] = res; SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_ADD_FLOAT_r32: { - CHECK_CURRENT_CACHED_VALUES(3); + case _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - right = _stack_item_2; - left = _stack_item_1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); assert(PyFloat_CheckExact(left_o)); assert(PyFloat_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); double dres = - ((PyFloatObject *)left_o)->ob_fval + + ((PyFloatObject *)left_o)->ob_fval - ((PyFloatObject *)right_o)->ob_fval; - res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); + res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); if (PyStackRef_IsNull(res)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = res; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_SUBTRACT_FLOAT_r21: { + case _BINARY_OP_ADD_UNICODE_r21: { CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; @@ -2928,541 +2969,133 @@ left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); + assert(PyUnicode_CheckExact(left_o)); + assert(PyUnicode_CheckExact(right_o)); STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval - - ((PyFloatObject *)right_o)->ob_fval; - res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); - if (PyStackRef_IsNull(res)) { + PyObject *res_o = PyUnicode_Concat(left_o, right_o); + PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); + PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); + if (res_o == NULL) { SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_SUBTRACT_FLOAT_r10: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_INPLACE_ADD_UNICODE_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; + right = stack_pointer[-1]; + left = stack_pointer[-2]; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); + assert(PyUnicode_CheckExact(left_o)); + assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(right))); + int next_oparg; + #if TIER_ONE + assert(next_instr->op.code == STORE_FAST); + next_oparg = next_instr->op.arg; + #else + next_oparg = CURRENT_OPERAND0(); + #endif + _PyStackRef *target_local = &GETLOCAL(next_oparg); + assert(PyUnicode_CheckExact(left_o)); + if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) { + UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); + JUMP_TO_JUMP_TARGET(); + } STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval - - ((PyFloatObject *)right_o)->ob_fval; - res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); - if (PyStackRef_IsNull(res)) { - stack_pointer[-1] = res; + assert(Py_REFCNT(left_o) >= 2 || !PyStackRef_IsHeapSafe(left)); + PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); + PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local); + PyObject *right_o = PyStackRef_AsPyObjectSteal(right); + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyUnicode_Append(&temp, right_o); + stack_pointer = _PyFrame_GetStackPointer(frame); + *target_local = PyStackRef_FromPyObjectSteal(temp); + _PyFrame_SetStackPointer(frame, stack_pointer); + Py_DECREF(right_o); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (PyStackRef_IsNull(*target_local)) { SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } - stack_pointer[-1] = res; + #if TIER_ONE + + assert(next_instr->op.code == STORE_FAST); + SKIP_OVER(1); + #endif SET_CURRENT_CACHED_VALUES(0); break; } - case _BINARY_OP_SUBTRACT_FLOAT_r32: { - CHECK_CURRENT_CACHED_VALUES(3); + case _GUARD_BINARY_OP_EXTEND_r00: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - right = _stack_item_2; - left = _stack_item_1; + right = stack_pointer[-1]; + left = stack_pointer[-2]; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval - - ((PyFloatObject *)right_o)->ob_fval; - res = _PyFloat_FromDouble_ConsumeInputs(left, right, dres); - if (PyStackRef_IsNull(res)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = res; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); + _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; + assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); + assert(d && d->guard); + _PyFrame_SetStackPointer(frame, stack_pointer); + int res = d->guard(left_o, right_o); + stack_pointer = _PyFrame_GetStackPointer(frame); + if (!res) { + UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); + JUMP_TO_JUMP_TARGET(); } - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); + SET_CURRENT_CACHED_VALUES(0); break; } - case _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r21: { - CHECK_CURRENT_CACHED_VALUES(2); + case _BINARY_OP_EXTEND_r01: { + CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef right; _PyStackRef left; _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - right = _stack_item_1; - left = _stack_item_0; + right = stack_pointer[-1]; + left = stack_pointer[-2]; + PyObject *descr = (PyObject *)CURRENT_OPERAND0(); PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); + assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); + _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval * - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } + _PyFrame_SetStackPointer(frame, stack_pointer); + PyObject *res_o = d->action(left_o, right_o); + _PyStackRef tmp = right; + right = PyStackRef_NULL; + stack_pointer[-1] = right; + PyStackRef_CLOSE(tmp); + tmp = left; + left = PyStackRef_NULL; + stack_pointer[-2] = left; + PyStackRef_CLOSE(tmp); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -2; + assert(WITHIN_STACK_BOUNDS()); + res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; SET_CURRENT_CACHED_VALUES(1); break; } - case _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval * - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _BINARY_OP_MULTIPLY_FLOAT__NO_DECREF_INPUTS_r32: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - right = _stack_item_2; - left = _stack_item_1; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval * - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = res; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - - case _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - right = _stack_item_1; - left = _stack_item_0; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval + - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - _tos_cache0 = res; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval + - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _BINARY_OP_ADD_FLOAT__NO_DECREF_INPUTS_r32: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - right = _stack_item_2; - left = _stack_item_1; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval + - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = res; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - - case _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - right = _stack_item_1; - left = _stack_item_0; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval - - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - _tos_cache0 = res; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval - - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _BINARY_OP_SUBTRACT_FLOAT__NO_DECREF_INPUTS_r32: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - right = _stack_item_2; - left = _stack_item_1; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyFloat_CheckExact(left_o)); - assert(PyFloat_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - double dres = - ((PyFloatObject *)left_o)->ob_fval - - ((PyFloatObject *)right_o)->ob_fval; - res = PyStackRef_FromPyObjectSteal(PyFloat_FromDouble(dres)); - if (PyStackRef_IsNull(res)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = res; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - - case _BINARY_OP_ADD_UNICODE_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - right = _stack_item_1; - left = _stack_item_0; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyUnicode_CheckExact(left_o)); - assert(PyUnicode_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - PyObject *res_o = PyUnicode_Concat(left_o, right_o); - PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); - if (res_o == NULL) { - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _BINARY_OP_ADD_UNICODE_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - right = _stack_item_0; - left = stack_pointer[-1]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyUnicode_CheckExact(left_o)); - assert(PyUnicode_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - PyObject *res_o = PyUnicode_Concat(left_o, right_o); - PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); - if (res_o == NULL) { - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - res = PyStackRef_FromPyObjectSteal(res_o); - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _BINARY_OP_ADD_UNICODE_r32: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - right = _stack_item_2; - left = _stack_item_1; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(PyUnicode_CheckExact(left_o)); - assert(PyUnicode_CheckExact(right_o)); - STAT_INC(BINARY_OP, hit); - PyObject *res_o = PyUnicode_Concat(left_o, right_o); - PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); - if (res_o == NULL) { - stack_pointer[0] = _stack_item_0; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - - case _BINARY_OP_INPLACE_ADD_UNICODE_r00: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef right; - _PyStackRef left; - right = stack_pointer[-1]; - left = stack_pointer[-2]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - assert(PyUnicode_CheckExact(left_o)); - assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(right))); - int next_oparg; - #if TIER_ONE - assert(next_instr->op.code == STORE_FAST); - next_oparg = next_instr->op.arg; - #else - next_oparg = CURRENT_OPERAND0(); - #endif - _PyStackRef *target_local = &GETLOCAL(next_oparg); - assert(PyUnicode_CheckExact(left_o)); - if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(BINARY_OP, hit); - assert(Py_REFCNT(left_o) >= 2 || !PyStackRef_IsHeapSafe(left)); - PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); - PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local); - PyObject *right_o = PyStackRef_AsPyObjectSteal(right); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyUnicode_Append(&temp, right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); - *target_local = PyStackRef_FromPyObjectSteal(temp); - _PyFrame_SetStackPointer(frame, stack_pointer); - Py_DECREF(right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (PyStackRef_IsNull(*target_local)) { - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_ERROR(); - } - #if TIER_ONE - - assert(next_instr->op.code == STORE_FAST); - SKIP_OVER(1); - #endif - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _GUARD_BINARY_OP_EXTEND_r00: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef right; - _PyStackRef left; - right = stack_pointer[-1]; - left = stack_pointer[-2]; - PyObject *descr = (PyObject *)CURRENT_OPERAND0(); - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; - assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); - assert(d && d->guard); - _PyFrame_SetStackPointer(frame, stack_pointer); - int res = d->guard(left_o, right_o); - stack_pointer = _PyFrame_GetStackPointer(frame); - if (!res) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _BINARY_OP_EXTEND_r01: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - right = stack_pointer[-1]; - left = stack_pointer[-2]; - PyObject *descr = (PyObject *)CURRENT_OPERAND0(); - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5); - _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr; - STAT_INC(BINARY_OP, hit); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyObject *res_o = d->action(left_o, right_o); - _PyStackRef tmp = right; - right = PyStackRef_NULL; - stack_pointer[-1] = right; - PyStackRef_CLOSE(tmp); - tmp = left; - left = PyStackRef_NULL; - stack_pointer[-2] = left; - PyStackRef_CLOSE(tmp); - stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); - res = PyStackRef_FromPyObjectSteal(res_o); - _tos_cache0 = res; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _BINARY_SLICE_r01: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef stop; - _PyStackRef start; - _PyStackRef container; + case _BINARY_SLICE_r01: { + CHECK_CURRENT_CACHED_VALUES(0); + _PyStackRef stop; + _PyStackRef start; + _PyStackRef container; _PyStackRef res; stop = stack_pointer[-1]; start = stack_pointer[-2]; @@ -3642,21 +3275,23 @@ break; } - case _BINARY_OP_SUBSCR_STR_INT_r11: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_SUBSCR_STR_INT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef sub_st; _PyStackRef str_st; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - sub_st = _stack_item_0; - str_st = stack_pointer[-1]; + _PyStackRef _stack_item_1 = _tos_cache1; + sub_st = _stack_item_1; + str_st = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *str = PyStackRef_AsPyObjectBorrow(str_st); assert(PyLong_CheckExact(sub)); assert(PyUnicode_CheckExact(str)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - stack_pointer[0] = sub_st; - stack_pointer += 1; + stack_pointer[0] = str_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); @@ -3664,8 +3299,9 @@ } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (PyUnicode_GET_LENGTH(str) <= index) { - stack_pointer[0] = sub_st; - stack_pointer += 1; + stack_pointer[0] = str_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); @@ -3673,8 +3309,9 @@ } Py_UCS4 c = PyUnicode_READ_CHAR(str, index); if (Py_ARRAY_LENGTH(_Py_SINGLETON(strings).ascii) <= c) { - stack_pointer[0] = sub_st; - stack_pointer += 1; + stack_pointer[0] = str_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); @@ -3683,8 +3320,6 @@ STAT_INC(BINARY_OP, hit); PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c]; PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(str_st); stack_pointer = _PyFrame_GetStackPointer(frame); @@ -3703,6 +3338,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -3718,6 +3354,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -3732,6 +3369,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -3749,6 +3387,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -3766,6 +3405,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -3780,6 +3420,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -3795,6 +3436,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -3813,6 +3455,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyTuple_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -3822,21 +3465,23 @@ break; } - case _BINARY_OP_SUBSCR_TUPLE_INT_r11: { - CHECK_CURRENT_CACHED_VALUES(1); + case _BINARY_OP_SUBSCR_TUPLE_INT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef sub_st; _PyStackRef tuple_st; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; - sub_st = _stack_item_0; - tuple_st = stack_pointer[-1]; + _PyStackRef _stack_item_1 = _tos_cache1; + sub_st = _stack_item_1; + tuple_st = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st); assert(PyLong_CheckExact(sub)); assert(PyTuple_CheckExact(tuple)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { - stack_pointer[0] = sub_st; - stack_pointer += 1; + stack_pointer[0] = tuple_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); @@ -3844,8 +3489,9 @@ } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (index >= PyTuple_GET_SIZE(tuple)) { - stack_pointer[0] = sub_st; - stack_pointer += 1; + stack_pointer[0] = tuple_st; + stack_pointer[1] = sub_st; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); @@ -3856,6 +3502,9 @@ assert(res_o != NULL); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); res = PyStackRef_FromPyObjectNew(res_o); + stack_pointer[0] = tuple_st; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); _PyStackRef tmp = tuple_st; tuple_st = res; @@ -3878,6 +3527,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -3893,6 +3543,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -3907,6 +3558,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -3924,6 +3576,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -3941,6 +3594,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = tos; @@ -3955,6 +3609,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -3970,6 +3625,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = tos; @@ -3988,6 +3644,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(tos); if (!PyDict_CheckExact(o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = tos; @@ -4039,7 +3696,7 @@ break; } - case _BINARY_OP_SUBSCR_CHECK_FUNC_r22: { + case _BINARY_OP_SUBSCR_CHECK_FUNC_r23: { CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef container; _PyStackRef getitem; @@ -4091,12 +3748,10 @@ } getitem = PyStackRef_FromPyObjectNew(getitem_o); STAT_INC(BINARY_OP, hit); - _tos_cache1 = getitem; - _tos_cache0 = _stack_item_1; - stack_pointer[0] = container; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(2); + _tos_cache2 = getitem; + _tos_cache1 = _stack_item_1; + _tos_cache0 = container; + SET_CURRENT_CACHED_VALUES(3); break; } @@ -4196,25 +3851,38 @@ break; } - case _STORE_SUBSCR_LIST_INT_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _STORE_SUBSCR_LIST_INT_r30: { + CHECK_CURRENT_CACHED_VALUES(3); _PyStackRef sub_st; _PyStackRef list_st; _PyStackRef value; - sub_st = stack_pointer[-1]; - list_st = stack_pointer[-2]; - value = stack_pointer[-3]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; + sub_st = _stack_item_2; + list_st = _stack_item_1; + value = _stack_item_0; PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st); PyObject *list = PyStackRef_AsPyObjectBorrow(list_st); assert(PyLong_CheckExact(sub)); assert(PyList_CheckExact(list)); if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) { + stack_pointer[0] = value; + stack_pointer[1] = list_st; + stack_pointer[2] = sub_st; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; if (!LOCK_OBJECT(list)) { + stack_pointer[0] = value; + stack_pointer[1] = list_st; + stack_pointer[2] = sub_st; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -4222,6 +3890,11 @@ if (index >= PyList_GET_SIZE(list)) { UNLOCK_OBJECT(list); if (true) { + stack_pointer[0] = value; + stack_pointer[1] = list_st; + stack_pointer[2] = sub_st; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -4234,8 +3907,6 @@ assert(old_value != NULL); UNLOCK_OBJECT(list); PyStackRef_CLOSE_SPECIALIZED(sub_st, _PyLong_ExactDealloc); - stack_pointer += -3; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(list_st); Py_DECREF(old_value); @@ -4493,145 +4164,22 @@ _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; oparg = CURRENT_OPARG(); - v = _stack_item_1; - receiver = _stack_item_0; - PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); - if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - stack_pointer[0] = receiver; - stack_pointer[1] = v; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (gen->gi_frame_state >= FRAME_EXECUTING) { - stack_pointer[0] = receiver; - stack_pointer[1] = v; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(SEND, hit); - _PyInterpreterFrame *pushed_frame = &gen->gi_iframe; - _PyFrame_StackPush(pushed_frame, PyStackRef_MakeHeapSafe(v)); - gen->gi_frame_state = FRAME_EXECUTING; - gen->gi_exc_state.previous_item = tstate->exc_info; - tstate->exc_info = &gen->gi_exc_state; - assert( 2 + oparg <= UINT16_MAX); - frame->return_offset = (uint16_t)( 2 + oparg); - pushed_frame->previous = frame; - gen_frame = PyStackRef_Wrap(pushed_frame); - _tos_cache1 = gen_frame; - _tos_cache0 = receiver; - SET_CURRENT_CACHED_VALUES(2); - break; - } - - case _SEND_GEN_FRAME_r00: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef v; - _PyStackRef receiver; - _PyStackRef gen_frame; - oparg = CURRENT_OPARG(); - v = stack_pointer[-1]; - receiver = stack_pointer[-2]; - PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); - if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (gen->gi_frame_state >= FRAME_EXECUTING) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(SEND, hit); - _PyInterpreterFrame *pushed_frame = &gen->gi_iframe; - _PyFrame_StackPush(pushed_frame, PyStackRef_MakeHeapSafe(v)); - gen->gi_frame_state = FRAME_EXECUTING; - gen->gi_exc_state.previous_item = tstate->exc_info; - tstate->exc_info = &gen->gi_exc_state; - assert( 2 + oparg <= UINT16_MAX); - frame->return_offset = (uint16_t)( 2 + oparg); - pushed_frame->previous = frame; - gen_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-1] = gen_frame; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _SEND_GEN_FRAME_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef v; - _PyStackRef receiver; - _PyStackRef gen_frame; - _PyStackRef _stack_item_0 = _tos_cache0; - oparg = CURRENT_OPARG(); - v = _stack_item_0; - receiver = stack_pointer[-1]; - PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); - if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (gen->gi_frame_state >= FRAME_EXECUTING) { - stack_pointer[0] = v; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(SEND, hit); - _PyInterpreterFrame *pushed_frame = &gen->gi_iframe; - _PyFrame_StackPush(pushed_frame, PyStackRef_MakeHeapSafe(v)); - gen->gi_frame_state = FRAME_EXECUTING; - gen->gi_exc_state.previous_item = tstate->exc_info; - tstate->exc_info = &gen->gi_exc_state; - assert( 2 + oparg <= UINT16_MAX); - frame->return_offset = (uint16_t)( 2 + oparg); - pushed_frame->previous = frame; - gen_frame = PyStackRef_Wrap(pushed_frame); - _tos_cache0 = gen_frame; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _SEND_GEN_FRAME_r33: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef v; - _PyStackRef receiver; - _PyStackRef gen_frame; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - v = _stack_item_2; - receiver = _stack_item_1; + v = _stack_item_1; + receiver = _stack_item_0; PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver); if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = receiver; - stack_pointer[2] = v; - stack_pointer += 3; + stack_pointer[0] = receiver; + stack_pointer[1] = v; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (gen->gi_frame_state >= FRAME_EXECUTING) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = receiver; - stack_pointer[2] = v; - stack_pointer += 3; + stack_pointer[0] = receiver; + stack_pointer[1] = v; + stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); @@ -4647,10 +4195,9 @@ frame->return_offset = (uint16_t)( 2 + oparg); pushed_frame->previous = frame; gen_frame = PyStackRef_Wrap(pushed_frame); - _tos_cache2 = gen_frame; - _tos_cache1 = receiver; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(3); + _tos_cache1 = gen_frame; + _tos_cache0 = receiver; + SET_CURRENT_CACHED_VALUES(2); break; } @@ -4693,143 +4240,6 @@ break; } - case _YIELD_VALUE_r00: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef retval; - _PyStackRef value; - oparg = CURRENT_OPARG(); - retval = stack_pointer[-1]; - assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); - frame->instr_ptr++; - PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); - assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1); - assert(oparg == 0 || oparg == 1); - gen->gi_frame_state = FRAME_SUSPENDED + oparg; - _PyStackRef temp = retval; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - tstate->exc_info = gen->gi_exc_state.previous_item; - gen->gi_exc_state.previous_item = NULL; - _Py_LeaveRecursiveCallPy(tstate); - _PyInterpreterFrame *gen_frame = frame; - frame = tstate->current_frame = frame->previous; - gen_frame->previous = NULL; - assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER); - #if TIER_ONE - assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE || - frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR); - #endif - stack_pointer = _PyFrame_GetStackPointer(frame); - LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); - value = PyStackRef_MakeHeapSafe(temp); - LLTRACE_RESUME_FRAME(); - stack_pointer[0] = value; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _YIELD_VALUE_r22: { - CHECK_CURRENT_CACHED_VALUES(2); - _PyStackRef retval; - _PyStackRef value; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - oparg = CURRENT_OPARG(); - retval = _stack_item_1; - assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); - frame->instr_ptr++; - PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); - assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1); - assert(oparg == 0 || oparg == 1); - gen->gi_frame_state = FRAME_SUSPENDED + oparg; - _PyStackRef temp = retval; - stack_pointer[0] = _stack_item_0; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - tstate->exc_info = gen->gi_exc_state.previous_item; - gen->gi_exc_state.previous_item = NULL; - _Py_LeaveRecursiveCallPy(tstate); - _PyInterpreterFrame *gen_frame = frame; - frame = tstate->current_frame = frame->previous; - gen_frame->previous = NULL; - assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER); - #if TIER_ONE - assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE || - frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR); - #endif - stack_pointer = _PyFrame_GetStackPointer(frame); - LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); - value = PyStackRef_MakeHeapSafe(temp); - LLTRACE_RESUME_FRAME(); - _tos_cache1 = value; - _tos_cache0 = _stack_item_0; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(2); - break; - } - - case _YIELD_VALUE_r33: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef retval; - _PyStackRef value; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - retval = _stack_item_2; - assert(frame->owner != FRAME_OWNED_BY_INTERPRETER); - frame->instr_ptr++; - PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame); - assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1); - assert(oparg == 0 || oparg == 1); - gen->gi_frame_state = FRAME_SUSPENDED + oparg; - _PyStackRef temp = retval; - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = _stack_item_1; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - _PyFrame_SetStackPointer(frame, stack_pointer); - tstate->exc_info = gen->gi_exc_state.previous_item; - gen->gi_exc_state.previous_item = NULL; - _Py_LeaveRecursiveCallPy(tstate); - _PyInterpreterFrame *gen_frame = frame; - frame = tstate->current_frame = frame->previous; - gen_frame->previous = NULL; - assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER); - #if TIER_ONE - assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE || - frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT || - _PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR); - #endif - stack_pointer = _PyFrame_GetStackPointer(frame); - LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND); - value = PyStackRef_MakeHeapSafe(temp); - LLTRACE_RESUME_FRAME(); - _tos_cache2 = value; - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(3); - break; - } - case _POP_EXCEPT_r00: { CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef exc_value; @@ -5008,7 +4418,7 @@ break; } - case _UNPACK_SEQUENCE_TWO_TUPLE_r11: { + case _UNPACK_SEQUENCE_TWO_TUPLE_r12: { CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef seq; _PyStackRef val1; @@ -5037,23 +4447,28 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); - _tos_cache0 = val0; - stack_pointer += -1; + _tos_cache1 = val0; + _tos_cache0 = val1; + stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(1); + SET_CURRENT_CACHED_VALUES(2); break; } - case _UNPACK_SEQUENCE_TUPLE_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _UNPACK_SEQUENCE_TUPLE_r10: { + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef seq; _PyStackRef *values; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = stack_pointer[-1]; - values = &stack_pointer[-1]; + seq = _stack_item_0; + values = &stack_pointer[0]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyTuple_CheckExact(seq_o)); if (PyTuple_GET_SIZE(seq_o) != oparg) { + stack_pointer[0] = seq; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -5063,7 +4478,7 @@ for (int i = oparg; --i >= 0; ) { *values++ = PyStackRef_FromPyObjectNew(items[i]); } - stack_pointer += -1 + oparg; + stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); @@ -5072,16 +4487,20 @@ break; } - case _UNPACK_SEQUENCE_LIST_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _UNPACK_SEQUENCE_LIST_r10: { + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef seq; _PyStackRef *values; + _PyStackRef _stack_item_0 = _tos_cache0; oparg = CURRENT_OPARG(); - seq = stack_pointer[-1]; - values = &stack_pointer[-1]; + seq = _stack_item_0; + values = &stack_pointer[0]; PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq); assert(PyList_CheckExact(seq_o)); if (!LOCK_OBJECT(seq_o)) { + stack_pointer[0] = seq; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -5089,6 +4508,9 @@ if (PyList_GET_SIZE(seq_o) != oparg) { UNLOCK_OBJECT(seq_o); if (true) { + stack_pointer[0] = seq; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -5100,7 +4522,7 @@ *values++ = PyStackRef_FromPyObjectNew(items[i]); } UNLOCK_OBJECT(seq_o); - stack_pointer += -1 + oparg; + stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); @@ -5417,7 +4839,7 @@ break; } - case _LOAD_GLOBAL_MODULE_r00: { + case _LOAD_GLOBAL_MODULE_r01: { CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); @@ -5454,14 +4876,12 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _LOAD_GLOBAL_BUILTINS_r00: { + case _LOAD_GLOBAL_BUILTINS_r01: { CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef res; uint16_t version = (uint16_t)CURRENT_OPERAND0(); @@ -5497,10 +4917,8 @@ res = PyStackRef_FromPyObjectNew(res_o); #endif STAT_INC(LOAD_GLOBAL, hit); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } @@ -5623,88 +5041,28 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } - _tos_cache0 = value; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _STORE_DEREF_r00: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef v; - oparg = CURRENT_OPARG(); - v = stack_pointer[-1]; - PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); - _PyFrame_SetStackPointer(frame, stack_pointer); - PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); - stack_pointer = _PyFrame_GetStackPointer(frame); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _COPY_FREE_VARS_r00: { - CHECK_CURRENT_CACHED_VALUES(0); - oparg = CURRENT_OPARG(); - PyCodeObject *co = _PyFrame_GetCode(frame); - assert(PyStackRef_FunctionCheck(frame->f_funcobj)); - PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); - PyObject *closure = func->func_closure; - assert(oparg == co->co_nfreevars); - int offset = co->co_nlocalsplus - oparg; - for (int i = 0; i < oparg; ++i) { - PyObject *o = PyTuple_GET_ITEM(closure, i); - frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); - } - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _COPY_FREE_VARS_r11: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef _stack_item_0 = _tos_cache0; - oparg = CURRENT_OPARG(); - PyCodeObject *co = _PyFrame_GetCode(frame); - assert(PyStackRef_FunctionCheck(frame->f_funcobj)); - PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); - PyObject *closure = func->func_closure; - assert(oparg == co->co_nfreevars); - int offset = co->co_nlocalsplus - oparg; - for (int i = 0; i < oparg; ++i) { - PyObject *o = PyTuple_GET_ITEM(closure, i); - frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); - } - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _COPY_FREE_VARS_r22: { - CHECK_CURRENT_CACHED_VALUES(2); - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - oparg = CURRENT_OPARG(); - PyCodeObject *co = _PyFrame_GetCode(frame); - assert(PyStackRef_FunctionCheck(frame->f_funcobj)); - PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj); - PyObject *closure = func->func_closure; - assert(oparg == co->co_nfreevars); - int offset = co->co_nlocalsplus - oparg; - for (int i = 0; i < oparg; ++i) { - PyObject *o = PyTuple_GET_ITEM(closure, i); - frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); - } - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); + _tos_cache0 = value; + SET_CURRENT_CACHED_VALUES(1); break; } - case _COPY_FREE_VARS_r33: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; + case _STORE_DEREF_r00: { + CHECK_CURRENT_CACHED_VALUES(0); + _PyStackRef v; + oparg = CURRENT_OPARG(); + v = stack_pointer[-1]; + PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg)); + _PyFrame_SetStackPointer(frame, stack_pointer); + PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v)); + stack_pointer = _PyFrame_GetStackPointer(frame); + stack_pointer += -1; + assert(WITHIN_STACK_BOUNDS()); + SET_CURRENT_CACHED_VALUES(0); + break; + } + + case _COPY_FREE_VARS_r00: { + CHECK_CURRENT_CACHED_VALUES(0); oparg = CURRENT_OPARG(); PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyStackRef_FunctionCheck(frame->f_funcobj)); @@ -5716,10 +5074,7 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } - _tos_cache2 = _stack_item_2; - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(3); + SET_CURRENT_CACHED_VALUES(0); break; } @@ -6401,6 +5756,7 @@ assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -6417,6 +5773,7 @@ assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -6434,6 +5791,7 @@ assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -6454,6 +5812,7 @@ assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -6473,6 +5832,7 @@ assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); @@ -6480,6 +5840,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } } @@ -6497,6 +5858,7 @@ assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); @@ -6504,6 +5866,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -6522,6 +5885,7 @@ assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); @@ -6529,6 +5893,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } } @@ -6550,6 +5915,7 @@ assert(type_version != 0); if (!LOCK_OBJECT(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } PyTypeObject *tp = Py_TYPE(owner_o); @@ -6557,6 +5923,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } } @@ -6932,11 +6299,13 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = owner; @@ -6952,11 +6321,13 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -6973,11 +6344,13 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = owner; @@ -6997,11 +6370,13 @@ PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!PyType_Check(owner_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } assert(type_version != 0); if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = owner; @@ -7090,170 +6465,6 @@ break; } - case _LOAD_ATTR_PROPERTY_FRAME_r00: { - CHECK_CURRENT_CACHED_VALUES(0); - _PyStackRef owner; - _PyStackRef new_frame; - oparg = CURRENT_OPARG(); - owner = stack_pointer[-1]; - PyObject *fget = (PyObject *)CURRENT_OPERAND0(); - assert((oparg & 1) == 0); - assert(Py_IS_TYPE(fget, &PyFunction_Type)); - PyFunctionObject *f = (PyFunctionObject *)fget; - PyCodeObject *code = (PyCodeObject *)f->func_code; - if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (code->co_kwonlyargcount) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (code->co_argcount != 1) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(LOAD_ATTR, hit); - _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); - pushed_frame->localsplus[0] = owner; - new_frame = PyStackRef_Wrap(pushed_frame); - stack_pointer[-1] = new_frame; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _LOAD_ATTR_PROPERTY_FRAME_r22: { - CHECK_CURRENT_CACHED_VALUES(2); - _PyStackRef owner; - _PyStackRef new_frame; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - oparg = CURRENT_OPARG(); - owner = _stack_item_1; - PyObject *fget = (PyObject *)CURRENT_OPERAND0(); - assert((oparg & 1) == 0); - assert(Py_IS_TYPE(fget, &PyFunction_Type)); - PyFunctionObject *f = (PyFunctionObject *)fget; - PyCodeObject *code = (PyCodeObject *)f->func_code; - if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = owner; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (code->co_kwonlyargcount) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = owner; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (code->co_argcount != 1) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = owner; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = owner; - stack_pointer += 2; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(LOAD_ATTR, hit); - _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); - pushed_frame->localsplus[0] = owner; - new_frame = PyStackRef_Wrap(pushed_frame); - _tos_cache1 = new_frame; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - - case _LOAD_ATTR_PROPERTY_FRAME_r33: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef owner; - _PyStackRef new_frame; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - owner = _stack_item_2; - PyObject *fget = (PyObject *)CURRENT_OPERAND0(); - assert((oparg & 1) == 0); - assert(Py_IS_TYPE(fget, &PyFunction_Type)); - PyFunctionObject *f = (PyFunctionObject *)fget; - PyCodeObject *code = (PyCodeObject *)f->func_code; - if ((code->co_flags & (CO_VARKEYWORDS | CO_VARARGS | CO_OPTIMIZED)) != CO_OPTIMIZED) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = _stack_item_1; - stack_pointer[2] = owner; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (code->co_kwonlyargcount) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = _stack_item_1; - stack_pointer[2] = owner; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (code->co_argcount != 1) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = _stack_item_1; - stack_pointer[2] = owner; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) { - stack_pointer[0] = _stack_item_0; - stack_pointer[1] = _stack_item_1; - stack_pointer[2] = owner; - stack_pointer += 3; - assert(WITHIN_STACK_BOUNDS()); - UOP_STAT_INC(uopcode, miss); - SET_CURRENT_CACHED_VALUES(0); - JUMP_TO_JUMP_TARGET(); - } - STAT_INC(LOAD_ATTR, hit); - _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame); - pushed_frame->localsplus[0] = owner; - new_frame = PyStackRef_Wrap(pushed_frame); - _tos_cache2 = new_frame; - _tos_cache1 = _stack_item_1; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(3); - break; - } - /* _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN is not a viable micro-op for tier 2 because it has too many cache entries */ case _GUARD_DORV_NO_DICT_r11: { @@ -7269,6 +6480,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } } @@ -7289,6 +6501,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -7310,6 +6523,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } } @@ -7334,6 +6548,7 @@ UNLOCK_OBJECT(owner_o); if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } } @@ -7449,15 +6664,21 @@ break; } - case _STORE_ATTR_SLOT_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _STORE_ATTR_SLOT_r20: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef owner; _PyStackRef value; - owner = stack_pointer[-1]; - value = stack_pointer[-2]; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + owner = _stack_item_1; + value = _stack_item_0; uint16_t index = (uint16_t)CURRENT_OPERAND0(); PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner); if (!LOCK_OBJECT(owner_o)) { + stack_pointer[0] = value; + stack_pointer[1] = owner; + stack_pointer += 2; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -7467,8 +6688,6 @@ PyObject *old_value = *(PyObject **)addr; FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, PyStackRef_AsPyObjectSteal(value)); UNLOCK_OBJECT(owner_o); - stack_pointer += -2; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(owner); Py_XDECREF(old_value); @@ -7519,69 +6738,21 @@ else { res = PyStackRef_FromPyObjectSteal(res_o); } - _tos_cache0 = res; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _COMPARE_OP_FLOAT_r21: { - CHECK_CURRENT_CACHED_VALUES(2); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - oparg = CURRENT_OPARG(); - right = _stack_item_1; - left = _stack_item_0; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - STAT_INC(COMPARE_OP, hit); - double dleft = PyFloat_AS_DOUBLE(left_o); - double dright = PyFloat_AS_DOUBLE(right_o); - int sign_ish = COMPARISON_BIT(dleft, dright); - PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); - res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - _tos_cache0 = res; - SET_CURRENT_CACHED_VALUES(1); - break; - } - - case _COMPARE_OP_FLOAT_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - oparg = CURRENT_OPARG(); - right = _stack_item_0; - left = stack_pointer[-1]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - STAT_INC(COMPARE_OP, hit); - double dleft = PyFloat_AS_DOUBLE(left_o); - double dright = PyFloat_AS_DOUBLE(right_o); - int sign_ish = COMPARISON_BIT(dleft, dright); - PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); - res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } - case _COMPARE_OP_FLOAT_r32: { - CHECK_CURRENT_CACHED_VALUES(3); + case _COMPARE_OP_FLOAT_r21: { + CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; _PyStackRef left; _PyStackRef res; _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - right = _stack_item_2; - left = _stack_item_1; + right = _stack_item_1; + left = _stack_item_0; PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); STAT_INC(COMPARE_OP, hit); @@ -7591,9 +6762,8 @@ PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); + _tos_cache0 = res; + SET_CURRENT_CACHED_VALUES(1); break; } @@ -7625,63 +6795,6 @@ break; } - case _COMPARE_OP_INT_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - oparg = CURRENT_OPARG(); - right = _stack_item_0; - left = stack_pointer[-1]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(_PyLong_IsCompact((PyLongObject *)left_o)); - assert(_PyLong_IsCompact((PyLongObject *)right_o)); - STAT_INC(COMPARE_OP, hit); - assert(_PyLong_DigitCount((PyLongObject *)left_o) <= 1 && - _PyLong_DigitCount((PyLongObject *)right_o) <= 1); - Py_ssize_t ileft = _PyLong_CompactValue((PyLongObject *)left_o); - Py_ssize_t iright = _PyLong_CompactValue((PyLongObject *)right_o); - int sign_ish = COMPARISON_BIT(ileft, iright); - PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); - res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _COMPARE_OP_INT_r32: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - right = _stack_item_2; - left = _stack_item_1; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - assert(_PyLong_IsCompact((PyLongObject *)left_o)); - assert(_PyLong_IsCompact((PyLongObject *)right_o)); - STAT_INC(COMPARE_OP, hit); - assert(_PyLong_DigitCount((PyLongObject *)left_o) <= 1 && - _PyLong_DigitCount((PyLongObject *)right_o) <= 1); - Py_ssize_t ileft = _PyLong_CompactValue((PyLongObject *)left_o); - Py_ssize_t iright = _PyLong_CompactValue((PyLongObject *)right_o); - int sign_ish = COMPARISON_BIT(ileft, iright); - PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); - res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - case _COMPARE_OP_STR_r21: { CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; @@ -7708,59 +6821,6 @@ break; } - case _COMPARE_OP_STR_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - oparg = CURRENT_OPARG(); - right = _stack_item_0; - left = stack_pointer[-1]; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - STAT_INC(COMPARE_OP, hit); - int eq = _PyUnicode_Equal(left_o, right_o); - assert((oparg >> 5) == Py_EQ || (oparg >> 5) == Py_NE); - PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); - assert(eq == 0 || eq == 1); - assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS); - assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); - res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; - stack_pointer[-1] = res; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _COMPARE_OP_STR_r32: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef right; - _PyStackRef left; - _PyStackRef res; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - right = _stack_item_2; - left = _stack_item_1; - PyObject *left_o = PyStackRef_AsPyObjectBorrow(left); - PyObject *right_o = PyStackRef_AsPyObjectBorrow(right); - STAT_INC(COMPARE_OP, hit); - int eq = _PyUnicode_Equal(left_o, right_o); - assert((oparg >> 5) == Py_EQ || (oparg >> 5) == Py_NE); - PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc); - PyStackRef_CLOSE_SPECIALIZED(right, _PyUnicode_ExactDealloc); - assert(eq == 0 || eq == 1); - assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS); - assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); - res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; - _tos_cache1 = res; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - case _IS_OP_r21: { CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef right; @@ -8436,6 +7496,7 @@ } if (true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } @@ -8459,12 +7520,14 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } #endif @@ -8483,12 +7546,14 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif @@ -8506,12 +7571,14 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } #endif @@ -8532,12 +7599,14 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyList_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); #ifdef Py_GIL_DISABLED if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } #endif @@ -8563,6 +7632,7 @@ assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } #endif @@ -8583,6 +7653,7 @@ assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif @@ -8602,6 +7673,7 @@ assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } #endif @@ -8624,6 +7696,7 @@ assert(Py_TYPE(list_o) == &PyList_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } #endif @@ -8679,6 +7752,7 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8697,6 +7771,7 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8714,6 +7789,7 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8734,6 +7810,7 @@ PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(iter_o) != &PyTuple_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } assert(PyStackRef_IsTaggedInt(null_or_index)); @@ -8758,6 +7835,7 @@ assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = null_or_index; @@ -8776,6 +7854,7 @@ assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -8793,6 +7872,7 @@ assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = null_or_index; @@ -8813,6 +7893,7 @@ assert(Py_TYPE(tuple_o) == &PyTuple_Type); if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = null_or_index; @@ -8853,11 +7934,13 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } #endif @@ -8874,11 +7957,13 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } #endif @@ -8894,11 +7979,13 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } #endif @@ -8917,11 +8004,13 @@ _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter); if (Py_TYPE(r) != &PyRangeIter_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } #ifdef Py_GIL_DISABLED if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } #endif @@ -8944,6 +8033,7 @@ assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -8960,6 +8050,7 @@ assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -8975,6 +8066,7 @@ assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -8993,6 +8085,7 @@ assert(Py_TYPE(r) == &PyRangeIter_Type); if (r->len <= 0) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -9035,7 +8128,7 @@ break; } - case _FOR_ITER_GEN_FRAME_r22: { + case _FOR_ITER_GEN_FRAME_r23: { CHECK_CURRENT_CACHED_VALUES(2); _PyStackRef iter; _PyStackRef gen_frame; @@ -9083,12 +8176,10 @@ pushed_frame->previous = frame; frame->return_offset = (uint16_t)( 2 + oparg); gen_frame = PyStackRef_Wrap(pushed_frame); - _tos_cache1 = gen_frame; - _tos_cache0 = _stack_item_1; - stack_pointer[0] = iter; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - SET_CURRENT_CACHED_VALUES(2); + _tos_cache2 = gen_frame; + _tos_cache1 = _stack_item_1; + _tos_cache0 = iter; + SET_CURRENT_CACHED_VALUES(3); break; } @@ -9826,11 +8917,13 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -9845,6 +8938,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -9860,6 +8954,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -9877,6 +8972,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -9896,6 +8992,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -9916,19 +9013,23 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (((PyFunctionObject *)func)->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyStackRef_IsNull(null)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -9966,10 +9067,12 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(callable_o) == &PyMethod_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -10064,10 +9167,12 @@ callable = stack_pointer[-2 - oparg]; if (!PyStackRef_IsNull(null)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable)) != &PyMethod_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -10177,6 +9282,7 @@ PyCodeObject *code = (PyCodeObject *)func->func_code; if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null))) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -10533,6 +9639,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(2); JUMP_TO_JUMP_TARGET(); } _tos_cache1 = _stack_item_1; @@ -10548,6 +9655,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); @@ -10562,6 +9670,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -10579,6 +9688,7 @@ PyObject *o = PyStackRef_AsPyObjectBorrow(nos); if (o == NULL) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(3); JUMP_TO_JUMP_TARGET(); } _tos_cache2 = _stack_item_2; @@ -11000,18 +10110,22 @@ } if (total_args != 1) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!PyCFunction_CheckExact(callable_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (PyCFunction_GET_FLAGS(callable_o) != METH_O) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11379,23 +10493,36 @@ break; } - case _CALL_LIST_APPEND_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _CALL_LIST_APPEND_r30: { + CHECK_CURRENT_CACHED_VALUES(3); _PyStackRef arg; _PyStackRef self; _PyStackRef callable; + _PyStackRef _stack_item_0 = _tos_cache0; + _PyStackRef _stack_item_1 = _tos_cache1; + _PyStackRef _stack_item_2 = _tos_cache2; oparg = CURRENT_OPARG(); - arg = stack_pointer[-1]; - self = stack_pointer[-2]; - callable = stack_pointer[-3]; + arg = _stack_item_2; + self = _stack_item_1; + callable = _stack_item_0; assert(oparg == 1); PyObject *self_o = PyStackRef_AsPyObjectBorrow(self); if (!PyList_CheckExact(self_o)) { + stack_pointer[0] = callable; + stack_pointer[1] = self; + stack_pointer[2] = arg; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!LOCK_OBJECT(self_o)) { + stack_pointer[0] = callable; + stack_pointer[1] = self; + stack_pointer[2] = arg; + stack_pointer += 3; + assert(WITHIN_STACK_BOUNDS()); UOP_STAT_INC(uopcode, miss); SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); @@ -11403,7 +10530,8 @@ STAT_INC(CALL, hit); int err = _PyList_AppendTakeRef((PyListObject *)self_o, PyStackRef_AsPyObjectSteal(arg)); UNLOCK_OBJECT(self_o); - stack_pointer += -2; + stack_pointer[0] = callable; + stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(self); @@ -11446,19 +10574,23 @@ PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (total_args != 2) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_O) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } _PyStackRef arg_stackref = arguments[1]; @@ -11466,6 +10598,7 @@ if (!Py_IS_TYPE(PyStackRef_AsPyObjectBorrow(self_stackref), method->d_common.d_type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11524,16 +10657,19 @@ } if (total_args == 0) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyTypeObject *d_type = method->d_common.d_type; @@ -11541,6 +10677,7 @@ assert(self != NULL); if (!Py_IS_TYPE(self, d_type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11622,11 +10759,13 @@ } if (total_args != 1) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; @@ -11634,14 +10773,17 @@ PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref); if (!Py_IS_TYPE(self, method->d_common.d_type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (meth->ml_flags != METH_NOARGS) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } if (_Py_ReachedRecursionLimit(tstate)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11688,22 +10830,26 @@ } if (total_args == 0) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o; if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyMethodDef *meth = method->d_method; if (meth->ml_flags != METH_FASTCALL) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]); assert(self != NULL); if (!Py_IS_TYPE(self, method->d_common.d_type)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } STAT_INC(CALL, hit); @@ -11852,11 +10998,13 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (!PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } PyFunctionObject *func = (PyFunctionObject *)callable_o; if (func->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11876,19 +11024,23 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (Py_TYPE(callable_o) != &PyMethod_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } PyObject *func = ((PyMethodObject *)callable_o)->im_func; if (!PyFunction_Check(func)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } if (((PyFunctionObject *)func)->func_version != func_version) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } if (!PyStackRef_IsNull(null)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -11928,10 +11080,12 @@ PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable); if (PyFunction_Check(callable_o)) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } if (Py_TYPE(callable_o) == &PyMethod_Type) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(1); JUMP_TO_JUMP_TARGET(); } _tos_cache0 = _stack_item_0; @@ -12117,55 +11271,6 @@ break; } - case _SET_FUNCTION_ATTRIBUTE_r10: { - CHECK_CURRENT_CACHED_VALUES(1); - _PyStackRef func_in; - _PyStackRef attr_st; - _PyStackRef func_out; - _PyStackRef _stack_item_0 = _tos_cache0; - oparg = CURRENT_OPARG(); - func_in = _stack_item_0; - attr_st = stack_pointer[-1]; - PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); - PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); - func_out = func_in; - assert(PyFunction_Check(func)); - size_t offset = _Py_FunctionAttributeOffsets[oparg]; - assert(offset != 0); - PyObject **ptr = (PyObject **)(((char *)func) + offset); - assert(*ptr == NULL); - *ptr = attr; - stack_pointer[-1] = func_out; - SET_CURRENT_CACHED_VALUES(0); - break; - } - - case _SET_FUNCTION_ATTRIBUTE_r32: { - CHECK_CURRENT_CACHED_VALUES(3); - _PyStackRef func_in; - _PyStackRef attr_st; - _PyStackRef func_out; - _PyStackRef _stack_item_0 = _tos_cache0; - _PyStackRef _stack_item_1 = _tos_cache1; - _PyStackRef _stack_item_2 = _tos_cache2; - oparg = CURRENT_OPARG(); - func_in = _stack_item_2; - attr_st = _stack_item_1; - PyObject *func = PyStackRef_AsPyObjectBorrow(func_in); - PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st); - func_out = func_in; - assert(PyFunction_Check(func)); - size_t offset = _Py_FunctionAttributeOffsets[oparg]; - assert(offset != 0); - PyObject **ptr = (PyObject **)(((char *)func) + offset); - assert(*ptr == NULL); - *ptr = attr; - _tos_cache1 = func_out; - _tos_cache0 = _stack_item_0; - SET_CURRENT_CACHED_VALUES(2); - break; - } - case _RETURN_GENERATOR_r01: { CHECK_CURRENT_CACHED_VALUES(0); _PyStackRef res; @@ -12560,70 +11665,68 @@ /* _INSTRUMENTED_POP_JUMP_IF_NOT_NONE is not a viable micro-op for tier 2 because it is instrumented */ - case _GUARD_IS_TRUE_POP_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _GUARD_IS_TRUE_POP_r10: { + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef flag; - flag = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + flag = _stack_item_0; int is_true = PyStackRef_IsTrue(flag); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); if (!is_true) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); break; } - case _GUARD_IS_FALSE_POP_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _GUARD_IS_FALSE_POP_r10: { + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef flag; - flag = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + flag = _stack_item_0; int is_false = PyStackRef_IsFalse(flag); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); if (!is_false) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); break; } - case _GUARD_IS_NONE_POP_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _GUARD_IS_NONE_POP_r10: { + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef val; - val = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + val = _stack_item_0; int is_none = PyStackRef_IsNone(val); if (!is_none) { - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); if (1) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } } - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); SET_CURRENT_CACHED_VALUES(0); break; } - case _GUARD_IS_NOT_NONE_POP_r00: { - CHECK_CURRENT_CACHED_VALUES(0); + case _GUARD_IS_NOT_NONE_POP_r10: { + CHECK_CURRENT_CACHED_VALUES(1); _PyStackRef val; - val = stack_pointer[-1]; + _PyStackRef _stack_item_0 = _tos_cache0; + val = _stack_item_0; int is_none = PyStackRef_IsNone(val); - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(val); stack_pointer = _PyFrame_GetStackPointer(frame); if (is_none) { UOP_STAT_INC(uopcode, miss); + SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } SET_CURRENT_CACHED_VALUES(0); diff --git a/Python/optimizer.c b/Python/optimizer.c index bee639e88585b3..9c9d85a48d3459 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -1008,6 +1008,7 @@ count_exits(_PyUOpInstruction *buffer, int length) static int get_exit_depth(_PyUOpInstruction *inst) { + // TO DO -- Add another generated table for this? int base_opcode = _PyUop_Uncached[inst->opcode]; assert(base_opcode != 0); @@ -1021,6 +1022,12 @@ get_exit_depth(_PyUOpInstruction *inst) break; } } + if (input == -1) { + return -1; + } + if (_PyUop_Caching[base_opcode].exit_depth_is_output) { + return input + _PyUop_Caching[base_opcode].delta; + } return input; } diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index c9e65f8a2d24e1..44536afdf121af 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -25,7 +25,7 @@ class Properties: eval_breaker: bool needs_this: bool always_exits: bool - stores_sp: bool + sync_sp: bool uses_co_consts: bool uses_co_names: bool uses_locals: bool @@ -63,7 +63,7 @@ def from_list(properties: list["Properties"]) -> "Properties": eval_breaker=any(p.eval_breaker for p in properties), needs_this=any(p.needs_this for p in properties), always_exits=any(p.always_exits for p in properties), - stores_sp=any(p.stores_sp for p in properties), + sync_sp=any(p.sync_sp for p in properties), uses_co_consts=any(p.uses_co_consts for p in properties), uses_co_names=any(p.uses_co_names for p in properties), uses_locals=any(p.uses_locals for p in properties), @@ -90,7 +90,7 @@ def infallible(self) -> bool: eval_breaker=False, needs_this=False, always_exits=False, - stores_sp=False, + sync_sp=False, uses_co_consts=False, uses_co_names=False, uses_locals=False, @@ -857,7 +857,7 @@ def compute_properties(op: parser.CodeDef) -> Properties: eval_breaker="CHECK_PERIODIC" in op.name, needs_this=variable_used(op, "this_instr"), always_exits=always_exits(op), - stores_sp=variable_used(op, "SYNC_SP"), + sync_sp=variable_used(op, "SYNC_SP"), uses_co_consts=variable_used(op, "FRAME_CO_CONSTS"), uses_co_names=variable_used(op, "FRAME_CO_NAMES"), uses_locals=variable_used(op, "GETLOCAL") and not has_free, @@ -1215,20 +1215,23 @@ def analyze_forest(forest: list[parser.AstNode]) -> Analysis: instructions, uops, families, pseudos, labels, opmap, first_arg, min_instrumented ) +#Simple heuristic for size to avoid too much stencil duplication +def is_large(uop: Uop) -> bool: + return len(list(uop.body.tokens())) > 80 -def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int]]: +def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int, int]]: if uop.name == "_SPILL_OR_RELOAD": for inputs in range(4): for outputs in range(4): if inputs != outputs: - yield inputs, outputs + yield inputs, outputs, inputs return if uop.name == "_EXIT_TRACE": for i in range(4): - yield i, 0 + yield i, 0, i return if uop.name in ("_START_EXECUTOR", "_JUMP_TO_TOP", "_DEOPT", "_ERROR_POP_N"): - yield 0, 0 + yield 0, 0, 0 return non_decref_escape = False for call in uop.properties.escaping_calls.values(): @@ -1258,16 +1261,17 @@ def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int]]: if ideal_outputs > 3: ideal_outputs = 3 if non_decref_escape: - yield 0, ideal_outputs + yield 0, ideal_outputs, 0 return # If a uop has an exit, we can get in a mess if the stack caching # changes during execution. - if has_exit and ideal_inputs != ideal_outputs: - n = min(ideal_inputs, ideal_outputs) - yield n, n - return - yield ideal_inputs, ideal_outputs - if uop.properties.escapes or uop.properties.stores_sp or has_array: + #if has_exit and ideal_inputs != ideal_outputs: + # n = min(ideal_inputs, ideal_outputs) + # yield n, n + # return + exit_depth = ideal_outputs if uop.properties.sync_sp else ideal_inputs + yield ideal_inputs, ideal_outputs, exit_depth + if uop.properties.escapes or uop.properties.sync_sp or has_array or is_large(uop): return if ideal_inputs >= 3 or ideal_outputs >= 3: return @@ -1278,7 +1282,7 @@ def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int]]: inputs, outputs = inputs-outputs, 0 while inputs <= 3 and outputs <= 3: if inputs != ideal_inputs: - yield inputs, outputs + yield inputs, outputs, inputs inputs += 1 outputs += 1 diff --git a/Tools/cases_generator/generators_common.py b/Tools/cases_generator/generators_common.py index 0001a220601cbe..f0a020f85f40f3 100644 --- a/Tools/cases_generator/generators_common.py +++ b/Tools/cases_generator/generators_common.py @@ -718,6 +718,8 @@ def cflags(p: Properties) -> str: flags.append("HAS_PURE_FLAG") if p.no_save_ip: flags.append("HAS_NO_SAVE_IP_FLAG") + if p.sync_sp: + flags.append("HAS_SYNC_SP_FLAG") if flags: return " | ".join(flags) else: diff --git a/Tools/cases_generator/opcode_metadata_generator.py b/Tools/cases_generator/opcode_metadata_generator.py index 10567204dcc599..99ab316401e3be 100644 --- a/Tools/cases_generator/opcode_metadata_generator.py +++ b/Tools/cases_generator/opcode_metadata_generator.py @@ -54,7 +54,7 @@ "EXIT", "PURE", "PASSTHROUGH", - "OPARG_AND_1", + "SYNC_SP", "ERROR_NO_POP", "NO_SAVE_IP", ] diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 69fb71e2dd7caa..1bef9489569976 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -61,9 +61,10 @@ def declare_variables(uop: Uop, out: CWriter) -> None: class Tier2Emitter(Emitter): - def __init__(self, out: CWriter, labels: dict[str, Label]): + def __init__(self, out: CWriter, labels: dict[str, Label], exit_cache_depth:int): super().__init__(out, labels) self._replacers["oparg"] = self.oparg + self.exit_cache_depth = exit_cache_depth def goto_error(self, offset: int, storage: Storage) -> str: # To do: Add jump targets for popping values. @@ -113,6 +114,7 @@ def exit_if( # type: ignore[override] next(tkn_iter) # Semi colon self.emit(") {\n") self.emit("UOP_STAT_INC(uopcode, miss);\n") + self.emit(f"SET_CURRENT_CACHED_VALUES({self.exit_cache_depth});\n") self.emit("JUMP_TO_JUMP_TARGET();\n") self.emit("}\n") return not always_true(first_tkn) @@ -193,7 +195,7 @@ def generate_tier2( """ ) out = CWriter(outfile, 2, lines) - emitter = Tier2Emitter(out, analysis.labels) + out.emit("\n") for name, uop in analysis.uops.items(): if uop.properties.tier == 1: @@ -206,7 +208,8 @@ def generate_tier2( f"/* {uop.name} is not a viable micro-op for tier 2 because it {why_not_viable} */\n\n" ) continue - for inputs, outputs in get_uop_cache_depths(uop): + for inputs, outputs, exit_depth in get_uop_cache_depths(uop): + emitter = Tier2Emitter(out, analysis.labels, exit_depth) out.emit(f"case {uop.name}_r{inputs}{outputs}: {{\n") out.emit(f"CHECK_CURRENT_CACHED_VALUES({inputs});\n") declare_variables(uop, out) diff --git a/Tools/cases_generator/uop_id_generator.py b/Tools/cases_generator/uop_id_generator.py index 41f39900fb5b6b..485d431bc1bac5 100644 --- a/Tools/cases_generator/uop_id_generator.py +++ b/Tools/cases_generator/uop_id_generator.py @@ -50,7 +50,7 @@ def generate_uop_ids( for name, uop in sorted(uops): if uop.properties.tier == 1: continue - for inputs, outputs in sorted(get_uop_cache_depths(uop)): + for inputs, outputs, _ in sorted(get_uop_cache_depths(uop)): out.emit(f"#define {name}_r{inputs}{outputs} {next_id}\n") next_id += 1 out.emit(f"#define MAX_UOP_REGS_ID {next_id-1}\n") diff --git a/Tools/cases_generator/uop_metadata_generator.py b/Tools/cases_generator/uop_metadata_generator.py index e2fcfde36ab47c..04d149b866f081 100644 --- a/Tools/cases_generator/uop_metadata_generator.py +++ b/Tools/cases_generator/uop_metadata_generator.py @@ -28,7 +28,7 @@ def uop_cache_info(uop: Uop) -> str | None: return None min_inputs = 4 uops = [ "0" ] * 4 - for inputs, outputs in get_uop_cache_depths(uop): + for inputs, outputs, exit_depth in get_uop_cache_depths(uop): delta = outputs - inputs uops[inputs] = f"{uop.name}_r{inputs}{outputs}" for i in range(4): @@ -37,7 +37,7 @@ def uop_cache_info(uop: Uop) -> str | None: if i < min_inputs: min_inputs = i max_inputs, delta # type: ignore[possibly-undefined] - return f"{{ {min_inputs}, {max_inputs}, {delta}, {{ {', '.join(uops)} }} }}" + return f"{{ {min_inputs}, {max_inputs}, {delta}, {int(exit_depth == outputs)}, {{ {', '.join(uops)} }} }}" def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: @@ -47,8 +47,8 @@ def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: out.emit("extern const char * const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1];\n\n") out.emit("extern int _PyUop_num_popped(int opcode, int oparg);\n\n") out.emit("typedef struct _pyuop_info {\n") - out.emit("int8_t min_input; int8_t max_input;\n") - out.emit("int8_t delta; uint16_t opcodes[4];\n") + out.emit("int8_t min_input; int8_t max_input; int8_t delta;\n") + out.emit("int8_t exit_depth_is_output; uint16_t opcodes[4];\n") out.emit("} _PyUopCachingInfo;\n") out.emit("extern const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1];\n\n") out.emit("extern const uint16_t _PyUop_SpillsAndReloads[4][4];\n") @@ -77,7 +77,7 @@ def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: out.emit("const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = {\n"); for uop in analysis.uops.values(): if uop.is_viable() and uop.properties.tier != 1 and not uop.is_super(): - for inputs, outputs in get_uop_cache_depths(uop): + for inputs, outputs, _ in get_uop_cache_depths(uop): out.emit(f"[{uop.name}_r{inputs}{outputs}] = {uop.name},\n") out.emit("};\n\n") out.emit("const uint16_t _PyUop_SpillsAndReloads[4][4] = {\n") @@ -90,7 +90,7 @@ def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: for uop in sorted(analysis.uops.values(), key=lambda t: t.name): if uop.is_viable() and uop.properties.tier != 1 and not uop.is_super(): out.emit(f'[{uop.name}] = "{uop.name}",\n') - for inputs, outputs in get_uop_cache_depths(uop): + for inputs, outputs, _ in get_uop_cache_depths(uop): out.emit(f'[{uop.name}_r{inputs}{outputs}] = "{uop.name}_r{inputs}{outputs}",\n') out.emit("};\n") out.emit("int _PyUop_num_popped(int opcode, int oparg)\n{\n") From ba2331adb134a8b917d304aaa88e8a43e0fd770e Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 20 Jun 2025 16:04:11 +0100 Subject: [PATCH 14/14] Add news --- .../2025-06-20-16-03-59.gh-issue-135379.eDg89T.rst | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2025-06-20-16-03-59.gh-issue-135379.eDg89T.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-06-20-16-03-59.gh-issue-135379.eDg89T.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-06-20-16-03-59.gh-issue-135379.eDg89T.rst new file mode 100644 index 00000000000000..9c4199ffc0cbc2 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-06-20-16-03-59.gh-issue-135379.eDg89T.rst @@ -0,0 +1,6 @@ +Implement a limited form of register allocation know as "top of stack +caching" in the JIT. It works by keeping 0-3 of the top items in the stack +in registers. The code generator generates multiple versions of thos uops +that do not escape and are relatively small. During JIT compilation, the +copy that produces the least memory traffic is selected, spilling or +reloading values when needed.