@@ -793,46 +793,23 @@ dummy_func(
793793 // assignment (+=) on ob_fval, which generates problematic JIT
794794 // stencils on i686-pc-windows-msvc.
795795 tier2 op (_BINARY_OP_ADD_FLOAT_INPLACE , (left , right -- res , l , r )) {
796- PyObject * left_o = PyStackRef_AsPyObjectBorrow (left );
797- PyObject * right_o = PyStackRef_AsPyObjectBorrow (right );
798- assert (PyFloat_CheckExact (left_o ));
799- assert (PyFloat_CheckExact (right_o ));
800- assert (_PyObject_IsUniquelyReferenced (left_o ));
801- STAT_INC (BINARY_OP , hit );
802- double dres = ((PyFloatObject * )left_o )-> ob_fval + ((PyFloatObject * )right_o )-> ob_fval ;
803- ((PyFloatObject * )left_o )-> ob_fval = dres ;
804- // Transfer ownership of left to res.
805- // Original left is now dead.
796+ FLOAT_INPLACE_OP (left , right , left , + );
806797 res = left ;
807798 l = PyStackRef_NULL ;
808799 r = right ;
809800 INPUTS_DEAD ();
810801 }
811802
812803 tier2 op (_BINARY_OP_SUBTRACT_FLOAT_INPLACE , (left , right -- res , l , r )) {
813- PyObject * left_o = PyStackRef_AsPyObjectBorrow (left );
814- PyObject * right_o = PyStackRef_AsPyObjectBorrow (right );
815- assert (PyFloat_CheckExact (left_o ));
816- assert (PyFloat_CheckExact (right_o ));
817- assert (_PyObject_IsUniquelyReferenced (left_o ));
818- STAT_INC (BINARY_OP , hit );
819- double dres = ((PyFloatObject * )left_o )-> ob_fval - ((PyFloatObject * )right_o )-> ob_fval ;
820- ((PyFloatObject * )left_o )-> ob_fval = dres ;
804+ FLOAT_INPLACE_OP (left , right , left , - );
821805 res = left ;
822806 l = PyStackRef_NULL ;
823807 r = right ;
824808 INPUTS_DEAD ();
825809 }
826810
827811 tier2 op (_BINARY_OP_MULTIPLY_FLOAT_INPLACE , (left , right -- res , l , r )) {
828- PyObject * left_o = PyStackRef_AsPyObjectBorrow (left );
829- PyObject * right_o = PyStackRef_AsPyObjectBorrow (right );
830- assert (PyFloat_CheckExact (left_o ));
831- assert (PyFloat_CheckExact (right_o ));
832- assert (_PyObject_IsUniquelyReferenced (left_o ));
833- STAT_INC (BINARY_OP , hit );
834- double dres = ((PyFloatObject * )left_o )-> ob_fval * ((PyFloatObject * )right_o )-> ob_fval ;
835- ((PyFloatObject * )left_o )-> ob_fval = dres ;
812+ FLOAT_INPLACE_OP (left , right , left , * );
836813 res = left ;
837814 l = PyStackRef_NULL ;
838815 r = right ;
@@ -841,44 +818,23 @@ dummy_func(
841818
842819 // Inplace RIGHT variants: mutate the uniquely-referenced right operand.
843820 tier2 op (_BINARY_OP_ADD_FLOAT_INPLACE_RIGHT , (left , right -- res , l , r )) {
844- PyObject * left_o = PyStackRef_AsPyObjectBorrow (left );
845- PyObject * right_o = PyStackRef_AsPyObjectBorrow (right );
846- assert (PyFloat_CheckExact (left_o ));
847- assert (PyFloat_CheckExact (right_o ));
848- assert (_PyObject_IsUniquelyReferenced (right_o ));
849- STAT_INC (BINARY_OP , hit );
850- double dres = ((PyFloatObject * )left_o )-> ob_fval + ((PyFloatObject * )right_o )-> ob_fval ;
851- ((PyFloatObject * )right_o )-> ob_fval = dres ;
821+ FLOAT_INPLACE_OP (left , right , right , + );
852822 res = right ;
853823 l = left ;
854824 r = PyStackRef_NULL ;
855825 INPUTS_DEAD ();
856826 }
857827
858828 tier2 op (_BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT , (left , right -- res , l , r )) {
859- PyObject * left_o = PyStackRef_AsPyObjectBorrow (left );
860- PyObject * right_o = PyStackRef_AsPyObjectBorrow (right );
861- assert (PyFloat_CheckExact (left_o ));
862- assert (PyFloat_CheckExact (right_o ));
863- assert (_PyObject_IsUniquelyReferenced (right_o ));
864- STAT_INC (BINARY_OP , hit );
865- double dres = ((PyFloatObject * )left_o )-> ob_fval * ((PyFloatObject * )right_o )-> ob_fval ;
866- ((PyFloatObject * )right_o )-> ob_fval = dres ;
829+ FLOAT_INPLACE_OP (left , right , right , * );
867830 res = right ;
868831 l = left ;
869832 r = PyStackRef_NULL ;
870833 INPUTS_DEAD ();
871834 }
872835
873836 tier2 op (_BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT , (left , right -- res , l , r )) {
874- PyObject * left_o = PyStackRef_AsPyObjectBorrow (left );
875- PyObject * right_o = PyStackRef_AsPyObjectBorrow (right );
876- assert (PyFloat_CheckExact (left_o ));
877- assert (PyFloat_CheckExact (right_o ));
878- assert (_PyObject_IsUniquelyReferenced (right_o ));
879- STAT_INC (BINARY_OP , hit );
880- double dres = ((PyFloatObject * )left_o )-> ob_fval - ((PyFloatObject * )right_o )-> ob_fval ;
881- ((PyFloatObject * )right_o )-> ob_fval = dres ;
837+ FLOAT_INPLACE_OP (left , right , right , - );
882838 res = right ;
883839 l = left ;
884840 r = PyStackRef_NULL ;
0 commit comments