@@ -2535,45 +2535,40 @@ LONG_FLOAT_ACTION(compactlong_float_multiply, *)
25352535LONG_FLOAT_ACTION (compactlong_float_true_div , /)
25362536#undef LONG_FLOAT_ACTION
25372537
2538- static _PyBinaryOpSpecializationDescr compactlongs_specs [NB_OPARG_LAST + 1 ] = {
2539- [NB_OR ] = {compactlongs_guard , compactlongs_or },
2540- [NB_AND ] = {compactlongs_guard , compactlongs_and },
2541- [NB_XOR ] = {compactlongs_guard , compactlongs_xor },
2542- [NB_INPLACE_OR ] = {compactlongs_guard , compactlongs_or },
2543- [NB_INPLACE_AND ] = {compactlongs_guard , compactlongs_and },
2544- [NB_INPLACE_XOR ] = {compactlongs_guard , compactlongs_xor },
2545- };
2546-
2547- static _PyBinaryOpSpecializationDescr float_compactlong_specs [NB_OPARG_LAST + 1 ] = {
2548- [NB_ADD ] = {float_compactlong_guard , float_compactlong_add },
2549- [NB_SUBTRACT ] = {float_compactlong_guard , float_compactlong_subtract },
2550- [NB_TRUE_DIVIDE ] = {nonzero_float_compactlong_guard , float_compactlong_true_div },
2551- [NB_MULTIPLY ] = {float_compactlong_guard , float_compactlong_multiply },
2552- };
2553-
2554- static _PyBinaryOpSpecializationDescr compactlong_float_specs [NB_OPARG_LAST + 1 ] = {
2555- [NB_ADD ] = {compactlong_float_guard , compactlong_float_add },
2556- [NB_SUBTRACT ] = {compactlong_float_guard , compactlong_float_subtract },
2557- [NB_TRUE_DIVIDE ] = {nonzero_compactlong_float_guard , compactlong_float_true_div },
2558- [NB_MULTIPLY ] = {compactlong_float_guard , compactlong_float_multiply },
2538+ static _PyBinaryOpSpecializationDescr binaryop_extend_descrs [ ] = {
2539+ /* long-long arithmetic */
2540+ {NB_OR , compactlongs_guard , compactlongs_or },
2541+ {NB_AND , compactlongs_guard , compactlongs_and },
2542+ {NB_XOR , compactlongs_guard , compactlongs_xor },
2543+ {NB_INPLACE_OR , compactlongs_guard , compactlongs_or },
2544+ {NB_INPLACE_AND , compactlongs_guard , compactlongs_and },
2545+ {NB_INPLACE_XOR , compactlongs_guard , compactlongs_xor },
2546+
2547+ /* float-long arithemetic */
2548+ {NB_ADD , float_compactlong_guard , float_compactlong_add },
2549+ {NB_SUBTRACT , float_compactlong_guard , float_compactlong_subtract },
2550+ {NB_TRUE_DIVIDE , nonzero_float_compactlong_guard , float_compactlong_true_div },
2551+ {NB_MULTIPLY , float_compactlong_guard , float_compactlong_multiply },
2552+
2553+ /* float-float arithmetic */
2554+ {NB_ADD , compactlong_float_guard , compactlong_float_add },
2555+ {NB_SUBTRACT , compactlong_float_guard , compactlong_float_subtract },
2556+ {NB_TRUE_DIVIDE , nonzero_compactlong_float_guard , compactlong_float_true_div },
2557+ {NB_MULTIPLY , compactlong_float_guard , compactlong_float_multiply },
25592558};
25602559
25612560static int
25622561binary_op_extended_specialization (PyObject * lhs , PyObject * rhs , int oparg ,
25632562 _PyBinaryOpSpecializationDescr * * descr )
25642563{
2565- #define LOOKUP_SPEC (TABLE , OPARG ) \
2566- if ((TABLE)[(OPARG)].action) { \
2567- if ((TABLE)[(OPARG)].guard(lhs, rhs)) { \
2568- *descr = &((TABLE)[OPARG]); \
2569- return 1; \
2570- } \
2564+ size_t n = sizeof (binaryop_extend_descrs )/sizeof (_PyBinaryOpSpecializationDescr );
2565+ for (size_t i = 0 ; i < n ; i ++ ) {
2566+ _PyBinaryOpSpecializationDescr * d = & binaryop_extend_descrs [i ];
2567+ if (d -> oparg == oparg && d -> guard (lhs , rhs )) {
2568+ * descr = d ;
2569+ return 1 ;
2570+ }
25712571 }
2572-
2573- LOOKUP_SPEC (compactlong_float_specs , oparg );
2574- LOOKUP_SPEC (float_compactlong_specs , oparg );
2575- LOOKUP_SPEC (compactlongs_specs , oparg );
2576- #undef LOOKUP_SPEC
25772572 return 0 ;
25782573}
25792574
0 commit comments