From 81cf28f6851b5820c982e11326a431d912d52811 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Wed, 17 Jan 2024 15:39:09 +0800 Subject: [PATCH] ... --- src/ceval.cpp | 38 +++++++------------------------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/src/ceval.cpp b/src/ceval.cpp index a4a34d56..feaeeb86 100644 --- a/src/ceval.cpp +++ b/src/ceval.cpp @@ -370,17 +370,6 @@ __NEXT_STEP:; PUSH(_0); } DISPATCH(); /*****************************************/ -#define PREDICT_INT_OP(op) \ - if(is_small_int(TOP()) && is_small_int(SECOND())){ \ - _1 = POPX(); \ - _0 = TOP(); \ - if constexpr(#op[0] == '/' || #op[0] == '%'){ \ - if(_py_sint(_1) == 0) ZeroDivisionError(); \ - } \ - TOP() = VAR(_py_sint(_0) op _py_sint(_1)); \ - DISPATCH(); \ - } - #define BINARY_OP_SPECIAL(func) \ _1 = POPX(); \ _0 = TOP(); \ @@ -415,13 +404,11 @@ __NEXT_STEP:; } DISPATCH(); TARGET(BINARY_ADD){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(+); BINARY_OP_SPECIAL(__add__); BINARY_OP_RSPECIAL("+", __radd__); } DISPATCH() TARGET(BINARY_SUB){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(-); BINARY_OP_SPECIAL(__sub__); BINARY_OP_RSPECIAL("-", __rsub__); } DISPATCH() @@ -432,13 +419,11 @@ __NEXT_STEP:; } DISPATCH() TARGET(BINARY_FLOORDIV){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(/); BINARY_OP_SPECIAL(__floordiv__); if(TOP() == NotImplemented) BinaryOptError("//"); } DISPATCH() TARGET(BINARY_MOD){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(%); BINARY_OP_SPECIAL(__mod__); if(TOP() == NotImplemented) BinaryOptError("%"); } DISPATCH() @@ -474,31 +459,26 @@ __NEXT_STEP:; } DISPATCH() TARGET(BITWISE_LSHIFT){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(<<); BINARY_OP_SPECIAL(__lshift__); if(TOP() == NotImplemented) BinaryOptError("<<"); } DISPATCH() TARGET(BITWISE_RSHIFT){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(>>); BINARY_OP_SPECIAL(__rshift__); if(TOP() == NotImplemented) BinaryOptError(">>"); } DISPATCH() TARGET(BITWISE_AND){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(&); BINARY_OP_SPECIAL(__and__); if(TOP() == NotImplemented) BinaryOptError("&"); } DISPATCH() TARGET(BITWISE_OR){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(|); BINARY_OP_SPECIAL(__or__); if(TOP() == NotImplemented) BinaryOptError("|"); } DISPATCH() TARGET(BITWISE_XOR){ PyObject* _0; PyObject* _1; const PyTypeInfo* _ti; - PREDICT_INT_OP(^); BINARY_OP_SPECIAL(__xor__); if(TOP() == NotImplemented) BinaryOptError("^"); } DISPATCH() @@ -509,7 +489,6 @@ __NEXT_STEP:; } DISPATCH(); #undef BINARY_OP_SPECIAL -#undef PREDICT_INT_OP TARGET(IS_OP){ PyObject* _1 = POPX(); // rhs @@ -536,26 +515,23 @@ __NEXT_STEP:; frame->jump_abs(_CAST(uint16_t, POPX())); DISPATCH(); TARGET(POP_JUMP_IF_FALSE){ - PyObject* _0 = POPX(); - if(_0==False || !py_bool(_0)) frame->jump_abs(byte.arg); + if(!py_bool(TOP())) frame->jump_abs(byte.arg); + POP(); } DISPATCH(); TARGET(POP_JUMP_IF_TRUE){ - PyObject* _0 = POPX(); - if(_0==True || py_bool(_0)) frame->jump_abs(byte.arg); + if(py_bool(TOP())) frame->jump_abs(byte.arg); + POP(); } DISPATCH(); TARGET(JUMP_IF_TRUE_OR_POP){ - PyObject* _0 = TOP(); - if(_0==True || py_bool(_0)) frame->jump_abs(byte.arg); + if(py_bool(TOP())) frame->jump_abs(byte.arg); else POP(); } DISPATCH(); TARGET(JUMP_IF_FALSE_OR_POP){ - PyObject* _0 = TOP(); - if(_0==False || !py_bool(_0)) frame->jump_abs(byte.arg); + if(!py_bool(TOP())) frame->jump_abs(byte.arg); else POP(); } DISPATCH(); TARGET(SHORTCUT_IF_FALSE_OR_POP){ - PyObject* _0 = TOP(); - if(_0==False || !py_bool(_0)){ // [b, False] + if(!py_bool(TOP())){ // [b, False] STACK_SHRINK(2); // [] PUSH(vm->False); // [False] frame->jump_abs(byte.arg);