diff --git a/Python/ceval.c b/Python/ceval.c index 3306fb9..b684570 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -873,9 +873,36 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) #else #define TARGET(op) op +#ifdef __e2k__ +#ifdef LLTRACE +#define NO_LLTRACE !lltrace && +#else +#define NO_LLTRACE 1 +#endif + +#define FAST_DISPATCH() \ + { \ + if (NO_LLTRACE && !_Py_TracingPossible(ceval) && !PyDTrace_LINE_ENABLED()) { \ + f->f_lasti = INSTR_OFFSET(); \ + NEXTOPARG(); \ + goto switch_loop; \ + } \ + goto fast_next_opcode; \ + } + +#define DISPATCH() \ + { \ + if (!_Py_atomic_load_relaxed(eval_breaker)) { \ + FAST_DISPATCH(); \ + } \ + continue; \ + } + +#else #define FAST_DISPATCH() goto fast_next_opcode #define DISPATCH() continue #endif +#endif /* Tuple access macros */ @@ -1320,6 +1347,9 @@ main_loop: } #endif +#ifdef __e2k__ +switch_loop: +#endif switch (opcode) { /* BEWARE! @@ -3691,6 +3721,26 @@ main_loop: _unknown_opcode: #endif default: +#ifdef __e2k__ + Py_UNREACHABLE(); + /* $ awk '/unknown_opcode/{print "X(" NR-2 ")"}' opcode_targets.h */ +#define X(i) case i: + X(0) X(7) X(8) X(13) X(14) X(18) X(21) X(30) X(31) X(32) X(33) X(34) + X(35) X(36) X(37) X(38) X(39) X(40) X(41) X(42) X(43) X(44) X(45) X(46) + X(47) X(48) X(49) X(58) X(74) X(80) X(99) X(117) X(118) X(119) X(120) + X(121) X(123) X(127) X(128) X(129) X(134) X(139) X(140) X(159) X(164) + X(165) X(166) X(167) X(168) X(169) X(170) X(171) X(172) X(173) X(174) + X(175) X(176) X(177) X(178) X(179) X(180) X(181) X(182) X(183) X(184) + X(185) X(186) X(187) X(188) X(189) X(190) X(191) X(192) X(193) X(194) + X(195) X(196) X(197) X(198) X(199) X(200) X(201) X(202) X(203) X(204) + X(205) X(206) X(207) X(208) X(209) X(210) X(211) X(212) X(213) X(214) + X(215) X(216) X(217) X(218) X(219) X(220) X(221) X(222) X(223) X(224) + X(225) X(226) X(227) X(228) X(229) X(230) X(231) X(232) X(233) X(234) + X(235) X(236) X(237) X(238) X(239) X(240) X(241) X(242) X(243) X(244) + X(245) X(246) X(247) X(248) X(249) X(250) X(251) X(252) X(253) X(254) + X(255) +#undef X +#endif fprintf(stderr, "XXX lineno: %d, opcode: %d\n", PyFrame_GetLineNumber(f),