@@ -2535,45 +2535,40 @@ LONG_FLOAT_ACTION(compactlong_float_multiply, *)
2535
2535
LONG_FLOAT_ACTION (compactlong_float_true_div , /)
2536
2536
#undef LONG_FLOAT_ACTION
2537
2537
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 },
2559
2558
};
2560
2559
2561
2560
static int
2562
2561
binary_op_extended_specialization (PyObject * lhs , PyObject * rhs , int oparg ,
2563
2562
_PyBinaryOpSpecializationDescr * * descr )
2564
2563
{
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
+ }
2571
2571
}
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
2577
2572
return 0 ;
2578
2573
}
2579
2574
0 commit comments