diff --git a/Python/ceval.c b/Python/ceval.c index 91e879e..e6affa2 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1046,9 +1046,36 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, 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(ceval2) && !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 */ @@ -1461,6 +1488,9 @@ main_loop: } #endif +#ifdef __e2k__ +switch_loop: +#endif switch (opcode) { /* BEWARE! @@ -3712,6 +3742,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(53) X(58) X(80) X(81) X(88) X(99) X(119) X(120) X(123) X(127) + X(128) X(129) X(134) X(139) X(140) X(149) X(150) X(151) X(152) X(153) + X(158) X(159) 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),