From 579b758a42a0bf39b178e01bd3655e8dbf85f9b9 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Wed, 11 Jun 2025 09:39:21 +0100 Subject: [PATCH 01/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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. From cbee8d2ebab382262ac075fcfa258a92fa811b46 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Mon, 23 Jun 2025 10:11:56 +0100 Subject: [PATCH 15/19] Fix uop execution stats --- Include/internal/pycore_stats.h | 2 +- Python/specialize.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Include/internal/pycore_stats.h b/Include/internal/pycore_stats.h index ab649574f33dbf..51ceea87ba3a15 100644 --- a/Include/internal/pycore_stats.h +++ b/Include/internal/pycore_stats.h @@ -28,7 +28,7 @@ extern "C" { #define GC_STAT_ADD(gen, name, n) do { if (_Py_stats) _Py_stats->gc_stats[(gen)].name += (n); } while (0) #define OPT_STAT_INC(name) do { if (_Py_stats) _Py_stats->optimization_stats.name++; } while (0) #define OPT_STAT_ADD(name, n) do { if (_Py_stats) _Py_stats->optimization_stats.name += (n); } while (0) -#define UOP_STAT_INC(opname, name) do { if (_Py_stats) { assert(opname < 512); _Py_stats->optimization_stats.opcode[opname].name++; } } while (0) +#define UOP_STAT_INC(opname, name) do { if (_Py_stats) { _Py_stats->optimization_stats.opcode[opname].name++; } } while (0) #define UOP_PAIR_INC(uopcode, lastuop) \ do { \ if (lastuop && _Py_stats) { \ diff --git a/Python/specialize.c b/Python/specialize.c index c70fe1e7961cbc..e6c4aef07842af 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -14,7 +14,7 @@ #include "pycore_object.h" #include "pycore_opcode_metadata.h" // _PyOpcode_Caches #include "pycore_uop_metadata.h" // _PyOpcode_uop_name -#include "pycore_uop_ids.h" // MAX_UOP_ID +#include "pycore_uop_ids.h" // MAX_UOP_REGS_ID #include "pycore_opcode_utils.h" // RESUME_AT_FUNC_START #include "pycore_pylifecycle.h" // _PyOS_URandomNonblock() #include "pycore_runtime.h" // _Py_ID() @@ -34,7 +34,7 @@ static PyStats _Py_stats_struct = { .gc_stats = _py_gc_stats }; PyStats *_Py_stats = NULL; #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" +#error "Not enough space allocated for pystats. Increase PYSTATS_MAX_UOP_ID to at least MAX_UOP_REGS_ID" #endif #define ADD_STAT_TO_DICT(res, field) \ @@ -277,7 +277,7 @@ print_optimization_stats(FILE *out, OptimizationStats *stats) stats->optimizer_failure_reason_no_memory); fprintf(out, "Optimizer remove globals builtins changed: %" PRIu64 "\n", stats->remove_globals_builtins_changed); fprintf(out, "Optimizer remove globals incorrect keys: %" PRIu64 "\n", stats->remove_globals_incorrect_keys); - for (int i = 0; i <= MAX_UOP_ID; i++) { + for (int i = 0; i <= MAX_UOP_REGS_ID; i++) { if (stats->opcode[i].execution_count) { fprintf(out, "uops[%s].execution_count : %" PRIu64 "\n", _PyUOpName(i), stats->opcode[i].execution_count); } @@ -296,15 +296,15 @@ print_optimization_stats(FILE *out, OptimizationStats *stats) } } - for (int i = 1; i <= MAX_UOP_ID; i++){ - for (int j = 1; j <= MAX_UOP_ID; j++) { + for (int i = 1; i <= MAX_UOP_REGS_ID; i++){ + for (int j = 1; j <= MAX_UOP_REGS_ID; j++) { if (stats->opcode[i].pair_count[j]) { fprintf(out, "uop[%s].pair_count[%s] : %" PRIu64 "\n", _PyOpcode_uop_name[i], _PyOpcode_uop_name[j], stats->opcode[i].pair_count[j]); } } } - for (int i = 0; i < MAX_UOP_ID; i++) { + for (int i = 0; i < MAX_UOP_REGS_ID; i++) { if (stats->error_in_opcode[i]) { fprintf( out, From 40988a04ae7fef4a6811edf667d7c051abb2a9ab Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Mon, 23 Jun 2025 17:01:11 +0100 Subject: [PATCH 16/19] Address review comments --- ...-06-13-13-32-16.gh-issue-135379.pAxZgy.rst | 3 --- ...-06-20-16-03-59.gh-issue-135379.eDg89T.rst | 4 ++-- Python/optimizer.c | 14 +++++++---- Tools/cases_generator/analyzer.py | 24 ++++++++----------- .../cases_generator/uop_metadata_generator.py | 16 +++++++------ 5 files changed, 31 insertions(+), 30 deletions(-) delete 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 deleted file mode 100644 index e987abfb50d7cd..00000000000000 --- a/Misc/NEWS.d/next/Core_and_Builtins/2025-06-13-13-32-16.gh-issue-135379.pAxZgy.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 index 9c4199ffc0cbc2..7060b9b004cc25 100644 --- 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 @@ -1,6 +1,6 @@ -Implement a limited form of register allocation know as "top of stack +Implement a limited form of register allocation known 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 +in registers. The code generator generates multiple versions of those 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. diff --git a/Python/optimizer.c b/Python/optimizer.c index 9c9d85a48d3459..88b8941d33795b 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -1005,10 +1005,15 @@ count_exits(_PyUOpInstruction *buffer, int length) return exit_count; } +#define MAX_CACHED_REGISTER 3 + +/* The number of cached registers at any exit (`EXIT_IF` or `DEOPT_IF`) + * This is the number of cached at entries at start, unless the uop is + * marked as `exit_depth_is_output` in which case it is the number of + * cached entries at the end */ static int -get_exit_depth(_PyUOpInstruction *inst) +get_cached_entries_for_side_exit(_PyUOpInstruction *inst) { - // TO DO -- Add another generated table for this? int base_opcode = _PyUop_Uncached[inst->opcode]; assert(base_opcode != 0); @@ -1016,7 +1021,8 @@ get_exit_depth(_PyUOpInstruction *inst) return 0; } int input = -1; - for (int i = 0; i < 4; i++) { + /* Find number of cached entries at input. */ + for (int i = 0; i <= MAX_CACHED_REGISTER; i++) { if (_PyUop_Caching[base_opcode].opcodes[i] == inst->opcode) { input = i; break; @@ -1076,7 +1082,7 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length) if (_PyUop_Flags[base_opcode] & (HAS_EXIT_FLAG | HAS_DEOPT_FLAG)) { uint16_t base_exit_op = (_PyUop_Flags[base_opcode] & HAS_EXIT_FLAG) ? _EXIT_TRACE : _DEOPT; - int exit_depth = get_exit_depth(inst); + int exit_depth = get_cached_entries_for_side_exit(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]) { diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 1e06cc4be7d42c..8e27c924b45334 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -7,6 +7,8 @@ from parser import Stmt, SimpleStmt, BlockStmt, IfStmt, WhileStmt +MAX_CACHED_REGISTER = 3 + @dataclass class EscapingCall: stmt: SimpleStmt @@ -1221,13 +1223,13 @@ def is_large(uop: Uop) -> bool: 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): + for inputs in range(MAX_CACHED_REGISTER+1): + for outputs in range(MAX_CACHED_REGISTER+1): if inputs != outputs: yield inputs, outputs, inputs return if uop.name == "_EXIT_TRACE": - for i in range(4): + for i in range(MAX_CACHED_REGISTER+1): yield i, 0, i return if uop.name in ("_START_EXECUTOR", "_JUMP_TO_TOP", "_DEOPT", "_ERROR_POP_N"): @@ -1256,24 +1258,18 @@ def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, 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 ideal_inputs > MAX_CACHED_REGISTER: + ideal_inputs = MAX_CACHED_REGISTER + if ideal_outputs > MAX_CACHED_REGISTER: + ideal_outputs = MAX_CACHED_REGISTER if non_decref_escape: 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 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: + if ideal_inputs == MAX_CACHED_REGISTER or ideal_outputs == MAX_CACHED_REGISTER: return inputs, outputs = ideal_inputs, ideal_outputs if inputs < outputs: diff --git a/Tools/cases_generator/uop_metadata_generator.py b/Tools/cases_generator/uop_metadata_generator.py index 04d149b866f081..2bbc4df4edaf1c 100644 --- a/Tools/cases_generator/uop_metadata_generator.py +++ b/Tools/cases_generator/uop_metadata_generator.py @@ -10,6 +10,7 @@ analyze_files, get_uop_cache_depths, Uop, + MAX_CACHED_REGISTER, ) from generators_common import ( DEFAULT_INPUT, @@ -24,14 +25,15 @@ DEFAULT_OUTPUT = ROOT / "Include/internal/pycore_uop_metadata.h" def uop_cache_info(uop: Uop) -> str | None: + table_size = MAX_CACHED_REGISTER + 1 if uop.name == "_SPILL_OR_RELOAD": return None min_inputs = 4 - uops = [ "0" ] * 4 + uops = [ "0" ] * table_size 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): + for i in range(table_size): if uops[i] != "0": max_inputs = i if i < min_inputs: @@ -48,10 +50,10 @@ def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: 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; int8_t delta;\n") - out.emit("int8_t exit_depth_is_output; uint16_t opcodes[4];\n") + out.emit(f"int8_t exit_depth_is_output; uint16_t opcodes[{MAX_CACHED_REGISTER+1}];\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(f"extern const uint16_t _PyUop_SpillsAndReloads[{MAX_CACHED_REGISTER+1}][{MAX_CACHED_REGISTER+1}];\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") @@ -80,9 +82,9 @@ def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None: 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): + out.emit(f"const uint16_t _PyUop_SpillsAndReloads[{MAX_CACHED_REGISTER+1}][{MAX_CACHED_REGISTER+1}] = {{\n") + for i in range(MAX_CACHED_REGISTER+1): + for j in range(MAX_CACHED_REGISTER+1): if i != j: out.emit(f"[{i}][{j}] = _SPILL_OR_RELOAD_r{i}{j},\n") out.emit("};\n\n") From 76030e9d0c52e8c0d3f90c2612f0cb687cb5f445 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 26 Jun 2025 13:51:17 +0100 Subject: [PATCH 17/19] Address code review --- Tools/cases_generator/analyzer.py | 4 ++-- Tools/cases_generator/tier2_generator.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 8e27c924b45334..2388ac249d344d 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1276,9 +1276,9 @@ def get_uop_cache_depths(uop: Uop) -> Iterator[tuple[int, int, int]]: inputs, outputs = 0, outputs-inputs else: inputs, outputs = inputs-outputs, 0 - while inputs <= 3 and outputs <= 3: + while inputs <= MAX_CACHED_REGISTER and outputs <= MAX_CACHED_REGISTER: if inputs != ideal_inputs: - yield inputs, outputs, inputs + yield inputs, outputs, inputs inputs += 1 outputs += 1 diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 1bef9489569976..ea00d38c645aa0 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -61,7 +61,7 @@ def declare_variables(uop: Uop, out: CWriter) -> None: class Tier2Emitter(Emitter): - def __init__(self, out: CWriter, labels: dict[str, Label], exit_cache_depth:int): + 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 @@ -141,7 +141,7 @@ def oparg( return True -def write_uop(uop: Uop, emitter: Emitter, stack: Stack, cached_items:int=0) -> Stack: +def write_uop(uop: Uop, emitter: Emitter, stack: Stack, cached_items: int = 0) -> Stack: locals: dict[str, Local] = {} try: emitter.out.start_line() From 51d4342765d73349ed0cb3f6a35501a4f3a51611 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 26 Jun 2025 16:19:48 +0100 Subject: [PATCH 18/19] Remove blank line --- Tools/cases_generator/analyzer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index e86d51cd059c06..ff80fde64b1698 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1303,7 +1303,6 @@ def dump_analysis(analysis: Analysis) -> None: p.dump(" ") - if __name__ == "__main__": import sys From 9438c19934d9959317d851ff9bba943b6c303689 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Mon, 21 Jul 2025 10:26:04 +0100 Subject: [PATCH 19/19] Zero out unused registers to reduce register pressure --- Include/internal/pycore_stackref.h | 7 + Python/executor_cases.c.h | 439 +++++++++++++++++++++++ Tools/cases_generator/tier2_generator.py | 10 + 3 files changed, 456 insertions(+) diff --git a/Include/internal/pycore_stackref.h b/Include/internal/pycore_stackref.h index 10e7199269eb40..635b1627871a72 100644 --- a/Include/internal/pycore_stackref.h +++ b/Include/internal/pycore_stackref.h @@ -70,6 +70,9 @@ static const _PyStackRef PyStackRef_ERROR = { .index = 2 }; #define PyStackRef_False ((_PyStackRef){ .index = 6 }) #define PyStackRef_True ((_PyStackRef){ .index = 8 }) +#define PyStackRef_ZERO_BITS PyStackRef_NULL + + #define INITIAL_STACKREF_INDEX 10 static inline int @@ -264,6 +267,10 @@ PyStackRef_IsNullOrInt(_PyStackRef ref); static const _PyStackRef PyStackRef_ERROR = { .bits = Py_TAG_INVALID }; +/* For use in the JIT to clear an unused value. + * PyStackRef_ZERO_BITS has no meaning and should not be used other than by the JIT. */ +static const _PyStackRef PyStackRef_ZERO_BITS = { .bits = 0 }; + /* Wrap a pointer in a stack ref. * The resulting stack reference is not safe and should only be used * in the interpreter to pass values from one uop to another. diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 82f0f59b3b8b6f..9382cf8ea85336 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -57,6 +57,9 @@ JUMP_TO_ERROR(); } } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -77,6 +80,9 @@ } } } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -272,6 +278,8 @@ } value = PyStackRef_DUP(value_s); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -1338,6 +1346,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1354,6 +1365,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1370,6 +1384,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1386,6 +1403,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1402,6 +1422,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1418,6 +1441,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1434,6 +1460,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1450,6 +1479,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1465,6 +1497,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1477,6 +1512,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1656,6 +1694,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(nos); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1701,6 +1742,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(value); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1717,6 +1761,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iter); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -1740,6 +1787,8 @@ _tos_cache0 = val; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -1763,6 +1812,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -1847,6 +1898,8 @@ } res = err ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -1943,6 +1996,8 @@ res = PyStackRef_True; } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2173,6 +2228,8 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2410,6 +2467,8 @@ res = PyStackRef_True; } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2425,6 +2484,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_True; _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2448,6 +2509,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2756,6 +2819,8 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2784,6 +2849,8 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2812,6 +2879,8 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); PyStackRef_CLOSE_SPECIALIZED(left, _PyLong_ExactDealloc); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -2975,6 +3044,8 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3002,6 +3073,8 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3029,6 +3102,8 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3056,6 +3131,8 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3083,6 +3160,8 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3110,6 +3189,8 @@ JUMP_TO_ERROR(); } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3137,6 +3218,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3187,6 +3270,9 @@ assert(next_instr->op.code == STORE_FAST); SKIP_OVER(1); #endif + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -3211,6 +3297,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -3243,6 +3332,8 @@ assert(WITHIN_STACK_BOUNDS()); res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3284,6 +3375,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3331,6 +3424,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -3390,6 +3486,8 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3427,6 +3525,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3481,6 +3581,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectBorrow(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3670,6 +3772,8 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3848,6 +3952,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -3970,6 +4076,9 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4003,6 +4112,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4067,6 +4179,9 @@ PyStackRef_CLOSE(list_st); Py_DECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4096,6 +4211,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4124,6 +4242,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4149,6 +4270,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4183,6 +4306,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4207,6 +4332,8 @@ res = temp; LLTRACE_RESUME_FRAME(); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4264,6 +4391,8 @@ } iter = PyStackRef_FromPyObjectSteal(iter_o); _tos_cache0 = iter; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4282,6 +4411,8 @@ } awaitable = PyStackRef_FromPyObjectSteal(awaitable_o); _tos_cache0 = awaitable; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4306,6 +4437,8 @@ } iter = PyStackRef_FromPyObjectSteal(iter_o); _tos_cache0 = iter; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4353,6 +4486,7 @@ gen_frame = PyStackRef_Wrap(pushed_frame); _tos_cache1 = gen_frame; _tos_cache0 = receiver; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); break; } @@ -4392,6 +4526,8 @@ value = PyStackRef_MakeHeapSafe(temp); LLTRACE_RESUME_FRAME(); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4408,6 +4544,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4472,6 +4611,8 @@ } bc = PyStackRef_FromPyObjectSteal(bc_o); _tos_cache0 = bc; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4516,6 +4657,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4546,6 +4690,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4570,6 +4717,9 @@ } stack_pointer += oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4607,6 +4757,7 @@ _tos_cache0 = val1; stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); break; } @@ -4639,6 +4790,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4683,6 +4837,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(seq); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4707,6 +4864,9 @@ } stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8); assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4737,6 +4897,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4759,6 +4922,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4781,6 +4947,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4804,6 +4973,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -4822,6 +4994,8 @@ } locals = PyStackRef_FromPyObjectNew(l); _tos_cache0 = locals; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4842,6 +5016,8 @@ } v = PyStackRef_FromPyObjectSteal(v_o); _tos_cache0 = v; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -4861,6 +5037,9 @@ } stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5033,6 +5212,8 @@ #endif STAT_INC(LOAD_GLOBAL, hit); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5074,6 +5255,8 @@ #endif STAT_INC(LOAD_GLOBAL, hit); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5097,6 +5280,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5115,6 +5301,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_XCLOSE(tmp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5134,6 +5323,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(oldobj); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5175,6 +5367,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectSteal(value_o); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5198,6 +5392,8 @@ JUMP_TO_ERROR(); } _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5213,6 +5409,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5230,6 +5429,9 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5273,6 +5475,8 @@ } str = PyStackRef_FromPyObjectSteal(str_o); _tos_cache0 = str; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5326,6 +5530,8 @@ } interpolation = PyStackRef_FromPyObjectSteal(interpolation_o); _tos_cache0 = interpolation; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5358,6 +5564,8 @@ } template = PyStackRef_FromPyObjectSteal(template_o); _tos_cache0 = template; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5398,6 +5606,8 @@ _tos_cache0 = list; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5442,6 +5652,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(iterable_st); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5466,6 +5679,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5521,6 +5737,8 @@ _tos_cache0 = set; stack_pointer += -oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5569,6 +5787,8 @@ } map = PyStackRef_FromPyObjectStealMortal(map_o); _tos_cache0 = map; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5614,6 +5834,9 @@ Py_DECREF(ann_dict); stack_pointer = _PyFrame_GetStackPointer(frame); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5654,6 +5877,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5690,6 +5916,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(update); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5720,6 +5949,9 @@ } stack_pointer += -2; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -5773,6 +6005,8 @@ } attr_st = PyStackRef_FromPyObjectSteal(attr); _tos_cache0 = attr_st; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -5842,6 +6076,7 @@ attr = PyStackRef_FromPyObjectSteal(attr_o); _tos_cache1 = self_or_null; _tos_cache0 = attr; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); break; } @@ -5898,6 +6133,9 @@ stack_pointer[-1] = attr; stack_pointer += (oparg&1); assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -6221,6 +6459,8 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6290,6 +6530,8 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6394,6 +6636,8 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6442,6 +6686,8 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6564,6 +6810,8 @@ _tos_cache0 = attr; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6617,6 +6865,8 @@ pushed_frame->localsplus[0] = owner; new_frame = PyStackRef_Wrap(pushed_frame); _tos_cache0 = new_frame; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6740,6 +6990,9 @@ PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -6816,6 +7069,9 @@ PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -6848,6 +7104,9 @@ PyStackRef_CLOSE(owner); Py_XDECREF(old_value); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -6895,6 +7154,8 @@ res = PyStackRef_FromPyObjectSteal(res_o); } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6919,6 +7180,8 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6947,6 +7210,8 @@ PyStackRef_CLOSE_SPECIALIZED(right, _PyLong_ExactDealloc); res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -6973,6 +7238,8 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7001,6 +7268,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7034,6 +7303,8 @@ } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7149,6 +7420,8 @@ } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7184,6 +7457,8 @@ } b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7251,6 +7526,7 @@ match = PyStackRef_FromPyObjectSteal(match_o); _tos_cache1 = match; _tos_cache0 = rest; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); break; } @@ -7282,6 +7558,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); b = res ? PyStackRef_True : PyStackRef_False; _tos_cache0 = b; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7316,6 +7594,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7336,6 +7616,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7367,6 +7649,8 @@ stack_pointer += -1; } _tos_cache0 = b; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7390,6 +7674,8 @@ } len = PyStackRef_FromPyObjectSteal(len_o); _tos_cache0 = len; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7437,6 +7723,8 @@ attrs = PyStackRef_None; } _tos_cache0 = attrs; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7542,6 +7830,8 @@ } values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o); _tos_cache0 = values_or_none; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7584,6 +7874,7 @@ _tos_cache0 = iter; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(2); break; } @@ -7628,6 +7919,8 @@ _tos_cache0 = iter; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7659,6 +7952,8 @@ next = item; _tos_cache0 = next; stack_pointer[-1] = null_or_index; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -7893,6 +8188,8 @@ null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index); _tos_cache0 = next; stack_pointer[-1] = null_or_index; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -8380,6 +8677,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_ERROR(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -8419,6 +8719,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -8820,6 +9122,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); _tos_cache0 = attr; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -8841,6 +9145,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); attr = PyStackRef_FromPyObjectNew(descr); _tos_cache0 = attr; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9019,6 +9325,9 @@ } stack_pointer[-2 - oparg] = callable; stack_pointer[-1 - oparg] = self_or_null; + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -9060,6 +9369,8 @@ } new_frame = PyStackRef_Wrap(temp); _tos_cache0 = new_frame; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9211,6 +9522,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -9310,6 +9624,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9353,6 +9669,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -9553,6 +9872,8 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9580,6 +9901,8 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9607,6 +9930,8 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9634,6 +9959,8 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9661,6 +9988,8 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9687,6 +10016,8 @@ _tos_cache0 = new_frame; stack_pointer += -2 - oparg; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9706,6 +10037,9 @@ LOAD_SP(); LOAD_IP(0); LLTRACE_RESUME_FRAME(); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -9931,6 +10265,8 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -9989,6 +10325,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10047,6 +10385,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10103,6 +10443,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(temp); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -10141,6 +10484,8 @@ tstate->py_recursion_remaining--; init_frame = PyStackRef_Wrap(temp); _tos_cache0 = init_frame; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10160,6 +10505,9 @@ } stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -10244,6 +10592,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10306,6 +10656,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10394,6 +10746,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10482,6 +10836,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10549,6 +10905,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10619,6 +10977,8 @@ res = retval ? PyStackRef_True : PyStackRef_False; assert((!PyStackRef_IsNull(res)) ^ (_PyErr_Occurred(tstate) != NULL)); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10706,6 +11066,9 @@ assert(next_instr->op.code == POP_TOP); SKIP_OVER(1); #endif + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -10790,6 +11153,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10892,6 +11257,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -10963,6 +11330,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11063,6 +11432,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11091,6 +11462,9 @@ } stack_pointer[-3 - oparg] = callable; stack_pointer[-2 - oparg] = self_or_null; + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -11140,6 +11514,8 @@ } new_frame = PyStackRef_Wrap(temp); _tos_cache0 = new_frame; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11223,6 +11599,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable_s); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -11336,6 +11715,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11370,6 +11751,9 @@ stack_pointer = _PyFrame_GetStackPointer(frame); } stack_pointer[-2] = callargs; + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -11399,6 +11783,8 @@ func_obj, ((PyCodeObject *)codeobj)->co_version); func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj); _tos_cache0 = func; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11423,6 +11809,8 @@ assert(*ptr == NULL); *ptr = attr; _tos_cache0 = func_out; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11456,6 +11844,8 @@ res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen); LLTRACE_RESUME_FRAME(); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11486,6 +11876,8 @@ } slice = PyStackRef_FromPyObjectStealMortal(slice_o); _tos_cache0 = slice; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11513,6 +11905,8 @@ } result = PyStackRef_FromPyObjectSteal(result_o); _tos_cache0 = result; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11543,6 +11937,8 @@ stack_pointer += -1; } _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11573,6 +11969,8 @@ } res = PyStackRef_FromPyObjectSteal(res_o); _tos_cache0 = res; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11696,6 +12094,8 @@ _tos_cache0 = res; stack_pointer += -1; assert(WITHIN_STACK_BOUNDS()); + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -11867,6 +12267,9 @@ JUMP_TO_JUMP_TARGET(); } } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -11885,6 +12288,9 @@ SET_CURRENT_CACHED_VALUES(0); JUMP_TO_JUMP_TARGET(); } + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12162,6 +12568,9 @@ exit->executor = executor; } GOTO_TIER_TWO(exit->executor); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12235,6 +12644,9 @@ stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12314,6 +12726,9 @@ stack_pointer += 2; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12399,6 +12814,9 @@ stack_pointer += 3; assert(WITHIN_STACK_BOUNDS()); GOTO_TIER_TWO(exit->executor); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12519,6 +12937,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectNew(ptr); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -12571,6 +12991,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12599,6 +13022,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12634,6 +13060,9 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyStackRef_CLOSE(callable); stack_pointer = _PyFrame_GetStackPointer(frame); + _tos_cache0 = PyStackRef_ZERO_BITS; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(0); break; } @@ -12650,6 +13079,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -12677,6 +13108,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -12697,6 +13130,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -12729,6 +13164,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } @@ -12768,6 +13205,8 @@ stack_pointer = _PyFrame_GetStackPointer(frame); value = PyStackRef_FromPyObjectBorrow(ptr); _tos_cache0 = value; + _tos_cache1 = PyStackRef_ZERO_BITS; + _tos_cache2 = PyStackRef_ZERO_BITS; SET_CURRENT_CACHED_VALUES(1); break; } diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py index 16b3434a581db4..ad1ac42e585359 100644 --- a/Tools/cases_generator/tier2_generator.py +++ b/Tools/cases_generator/tier2_generator.py @@ -15,6 +15,8 @@ StackItem, analysis_error, get_uop_cache_depths, + is_large, + MAX_CACHED_REGISTER, ) from generators_common import ( DEFAULT_INPUT, @@ -208,6 +210,7 @@ def generate_tier2( f"/* {uop.name} is not a viable micro-op for tier 2 because it {why_not_viable} */\n\n" ) continue + zero_regs = is_large(uop) or uop.properties.escapes 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") @@ -218,6 +221,13 @@ def generate_tier2( stack._print(out) stack = write_uop(uop, emitter, stack, outputs) out.start_line() + if zero_regs: + # TO DO -- For compilers that support it, + # replace this with a "clobber" to tell + # the compiler that these values are unused + # without having to emit any code. + for i in range(outputs, MAX_CACHED_REGISTER): + out.emit(f"_tos_cache{i} = PyStackRef_ZERO_BITS;\n") out.emit(f"SET_CURRENT_CACHED_VALUES({outputs});\n") if not uop.properties.always_exits: out.emit("break;\n") pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy