Commit 3dfd53b4 authored by Guido van Rossum's avatar Guido van Rossum

Add "if (x != NULL) continue;" (or similar for err==0) before the

break to most cases, as suggested by Tim Peters.  This gives another
8-10% speedup.
parent 04f2b453
...@@ -649,14 +649,14 @@ eval_code2(co, globals, locals, ...@@ -649,14 +649,14 @@ eval_code2(co, globals, locals,
case POP_TOP: case POP_TOP:
v = POP(); v = POP();
DECREF(v); DECREF(v);
break; continue;
case ROT_TWO: case ROT_TWO:
v = POP(); v = POP();
w = POP(); w = POP();
PUSH(v); PUSH(v);
PUSH(w); PUSH(w);
break; continue;
case ROT_THREE: case ROT_THREE:
v = POP(); v = POP();
...@@ -665,19 +665,20 @@ eval_code2(co, globals, locals, ...@@ -665,19 +665,20 @@ eval_code2(co, globals, locals,
PUSH(v); PUSH(v);
PUSH(x); PUSH(x);
PUSH(w); PUSH(w);
break; continue;
case DUP_TOP: case DUP_TOP:
v = TOP(); v = TOP();
INCREF(v); INCREF(v);
PUSH(v); PUSH(v);
break; continue;
case UNARY_POSITIVE: case UNARY_POSITIVE:
v = POP(); v = POP();
x = pos(v); x = pos(v);
DECREF(v); DECREF(v);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case UNARY_NEGATIVE: case UNARY_NEGATIVE:
...@@ -685,6 +686,7 @@ eval_code2(co, globals, locals, ...@@ -685,6 +686,7 @@ eval_code2(co, globals, locals,
x = neg(v); x = neg(v);
DECREF(v); DECREF(v);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case UNARY_NOT: case UNARY_NOT:
...@@ -692,6 +694,7 @@ eval_code2(co, globals, locals, ...@@ -692,6 +694,7 @@ eval_code2(co, globals, locals,
x = not(v); x = not(v);
DECREF(v); DECREF(v);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case UNARY_CONVERT: case UNARY_CONVERT:
...@@ -699,6 +702,7 @@ eval_code2(co, globals, locals, ...@@ -699,6 +702,7 @@ eval_code2(co, globals, locals,
x = reprobject(v); x = reprobject(v);
DECREF(v); DECREF(v);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case UNARY_INVERT: case UNARY_INVERT:
...@@ -706,6 +710,7 @@ eval_code2(co, globals, locals, ...@@ -706,6 +710,7 @@ eval_code2(co, globals, locals,
x = invert(v); x = invert(v);
DECREF(v); DECREF(v);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_POWER: case BINARY_POWER:
...@@ -715,6 +720,7 @@ eval_code2(co, globals, locals, ...@@ -715,6 +720,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_MULTIPLY: case BINARY_MULTIPLY:
...@@ -724,6 +730,7 @@ eval_code2(co, globals, locals, ...@@ -724,6 +730,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_DIVIDE: case BINARY_DIVIDE:
...@@ -733,6 +740,7 @@ eval_code2(co, globals, locals, ...@@ -733,6 +740,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_MODULO: case BINARY_MODULO:
...@@ -742,6 +750,7 @@ eval_code2(co, globals, locals, ...@@ -742,6 +750,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_ADD: case BINARY_ADD:
...@@ -751,6 +760,7 @@ eval_code2(co, globals, locals, ...@@ -751,6 +760,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_SUBTRACT: case BINARY_SUBTRACT:
...@@ -760,6 +770,7 @@ eval_code2(co, globals, locals, ...@@ -760,6 +770,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_SUBSCR: case BINARY_SUBSCR:
...@@ -769,6 +780,7 @@ eval_code2(co, globals, locals, ...@@ -769,6 +780,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_LSHIFT: case BINARY_LSHIFT:
...@@ -778,6 +790,7 @@ eval_code2(co, globals, locals, ...@@ -778,6 +790,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_RSHIFT: case BINARY_RSHIFT:
...@@ -787,6 +800,7 @@ eval_code2(co, globals, locals, ...@@ -787,6 +800,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_AND: case BINARY_AND:
...@@ -796,6 +810,7 @@ eval_code2(co, globals, locals, ...@@ -796,6 +810,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_XOR: case BINARY_XOR:
...@@ -805,6 +820,7 @@ eval_code2(co, globals, locals, ...@@ -805,6 +820,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case BINARY_OR: case BINARY_OR:
...@@ -814,6 +830,7 @@ eval_code2(co, globals, locals, ...@@ -814,6 +830,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case SLICE+0: case SLICE+0:
...@@ -834,6 +851,7 @@ eval_code2(co, globals, locals, ...@@ -834,6 +851,7 @@ eval_code2(co, globals, locals,
XDECREF(v); XDECREF(v);
XDECREF(w); XDECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case STORE_SLICE+0: case STORE_SLICE+0:
...@@ -855,6 +873,7 @@ eval_code2(co, globals, locals, ...@@ -855,6 +873,7 @@ eval_code2(co, globals, locals,
DECREF(u); DECREF(u);
XDECREF(v); XDECREF(v);
XDECREF(w); XDECREF(w);
if (err == 0) continue;
break; break;
case DELETE_SLICE+0: case DELETE_SLICE+0:
...@@ -875,6 +894,7 @@ eval_code2(co, globals, locals, ...@@ -875,6 +894,7 @@ eval_code2(co, globals, locals,
DECREF(u); DECREF(u);
XDECREF(v); XDECREF(v);
XDECREF(w); XDECREF(w);
if (err == 0) continue;
break; break;
case STORE_SUBSCR: case STORE_SUBSCR:
...@@ -886,6 +906,7 @@ eval_code2(co, globals, locals, ...@@ -886,6 +906,7 @@ eval_code2(co, globals, locals,
DECREF(u); DECREF(u);
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
if (err == 0) continue;
break; break;
case DELETE_SUBSCR: case DELETE_SUBSCR:
...@@ -895,6 +916,7 @@ eval_code2(co, globals, locals, ...@@ -895,6 +916,7 @@ eval_code2(co, globals, locals,
err = assign_subscript(v, w, (object *)NULL); err = assign_subscript(v, w, (object *)NULL);
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
if (err == 0) continue;
break; break;
case PRINT_EXPR: case PRINT_EXPR:
...@@ -929,6 +951,7 @@ eval_code2(co, globals, locals, ...@@ -929,6 +951,7 @@ eval_code2(co, globals, locals,
softspace(w, 0); softspace(w, 0);
} }
DECREF(v); DECREF(v);
if (err == 0) continue;
break; break;
case PRINT_NEWLINE: case PRINT_NEWLINE:
...@@ -1294,6 +1317,7 @@ eval_code2(co, globals, locals, ...@@ -1294,6 +1317,7 @@ eval_code2(co, globals, locals,
#endif #endif
INCREF(x); INCREF(x);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case STORE_FAST: case STORE_FAST:
...@@ -1307,7 +1331,7 @@ eval_code2(co, globals, locals, ...@@ -1307,7 +1331,7 @@ eval_code2(co, globals, locals,
} }
#endif #endif
SETLOCAL(oparg, v); SETLOCAL(oparg, v);
break; continue;
case DELETE_FAST: case DELETE_FAST:
#ifdef SUPPORT_OBSOLETE_ACCESS #ifdef SUPPORT_OBSOLETE_ACCESS
...@@ -1325,7 +1349,7 @@ eval_code2(co, globals, locals, ...@@ -1325,7 +1349,7 @@ eval_code2(co, globals, locals,
} }
#endif #endif
SETLOCAL(oparg, NULL); SETLOCAL(oparg, NULL);
break; continue;
case BUILD_TUPLE: case BUILD_TUPLE:
x = newtupleobject(oparg); x = newtupleobject(oparg);
...@@ -1335,6 +1359,7 @@ eval_code2(co, globals, locals, ...@@ -1335,6 +1359,7 @@ eval_code2(co, globals, locals,
SETTUPLEITEM(x, oparg, w); SETTUPLEITEM(x, oparg, w);
} }
PUSH(x); PUSH(x);
continue;
} }
break; break;
...@@ -1348,12 +1373,14 @@ eval_code2(co, globals, locals, ...@@ -1348,12 +1373,14 @@ eval_code2(co, globals, locals,
break; break;
} }
PUSH(x); PUSH(x);
continue;
} }
break; break;
case BUILD_MAP: case BUILD_MAP:
x = newdictobject(); x = newdictobject();
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case LOAD_ATTR: case LOAD_ATTR:
...@@ -1362,6 +1389,7 @@ eval_code2(co, globals, locals, ...@@ -1362,6 +1389,7 @@ eval_code2(co, globals, locals,
x = getattro(v, w); x = getattro(v, w);
DECREF(v); DECREF(v);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case COMPARE_OP: case COMPARE_OP:
...@@ -1371,6 +1399,7 @@ eval_code2(co, globals, locals, ...@@ -1371,6 +1399,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case IMPORT_NAME: case IMPORT_NAME:
...@@ -1405,6 +1434,7 @@ eval_code2(co, globals, locals, ...@@ -1405,6 +1434,7 @@ eval_code2(co, globals, locals,
x = call_object(x, w); x = call_object(x, w);
DECREF(w); DECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
case IMPORT_FROM: case IMPORT_FROM:
...@@ -1417,6 +1447,7 @@ eval_code2(co, globals, locals, ...@@ -1417,6 +1447,7 @@ eval_code2(co, globals, locals,
} }
err = import_from(x, v, w); err = import_from(x, v, w);
locals_2_fast(f, 0); locals_2_fast(f, 0);
if (err == 0) continue;
break; break;
#ifdef SUPPORT_OBSOLETE_ACCESS #ifdef SUPPORT_OBSOLETE_ACCESS
...@@ -1433,7 +1464,7 @@ eval_code2(co, globals, locals, ...@@ -1433,7 +1464,7 @@ eval_code2(co, globals, locals,
case JUMP_FORWARD: case JUMP_FORWARD:
JUMPBY(oparg); JUMPBY(oparg);
break; continue;
case JUMP_IF_FALSE: case JUMP_IF_FALSE:
err = testbool(TOP()); err = testbool(TOP());
...@@ -1441,7 +1472,9 @@ eval_code2(co, globals, locals, ...@@ -1441,7 +1472,9 @@ eval_code2(co, globals, locals,
err = 0; err = 0;
else if (err == 0) else if (err == 0)
JUMPBY(oparg); JUMPBY(oparg);
break; else
break;
continue;
case JUMP_IF_TRUE: case JUMP_IF_TRUE:
err = testbool(TOP()); err = testbool(TOP());
...@@ -1449,11 +1482,15 @@ eval_code2(co, globals, locals, ...@@ -1449,11 +1482,15 @@ eval_code2(co, globals, locals,
err = 0; err = 0;
JUMPBY(oparg); JUMPBY(oparg);
} }
break; else if (err == 0)
;
else
break;
continue;
case JUMP_ABSOLUTE: case JUMP_ABSOLUTE:
JUMPTO(oparg); JUMPTO(oparg);
break; continue;
case FOR_LOOP: case FOR_LOOP:
/* for v in s: ... /* for v in s: ...
...@@ -1470,6 +1507,7 @@ eval_code2(co, globals, locals, ...@@ -1470,6 +1507,7 @@ eval_code2(co, globals, locals,
PUSH(x); PUSH(x);
DECREF(w); DECREF(w);
PUSH(u); PUSH(u);
if (x != NULL) continue;
} }
else { else {
DECREF(v); DECREF(v);
...@@ -1478,8 +1516,10 @@ eval_code2(co, globals, locals, ...@@ -1478,8 +1516,10 @@ eval_code2(co, globals, locals,
but also an error: */ but also an error: */
if (err_occurred()) if (err_occurred())
why = WHY_EXCEPTION; why = WHY_EXCEPTION;
else else {
JUMPBY(oparg); JUMPBY(oparg);
continue;
}
} }
break; break;
...@@ -1488,7 +1528,7 @@ eval_code2(co, globals, locals, ...@@ -1488,7 +1528,7 @@ eval_code2(co, globals, locals,
case SETUP_FINALLY: case SETUP_FINALLY:
setup_block(f, opcode, INSTR_OFFSET() + oparg, setup_block(f, opcode, INSTR_OFFSET() + oparg,
STACK_LEVEL()); STACK_LEVEL());
break; continue;
case SET_LINENO: case SET_LINENO:
#ifdef LLTRACE #ifdef LLTRACE
...@@ -1496,12 +1536,12 @@ eval_code2(co, globals, locals, ...@@ -1496,12 +1536,12 @@ eval_code2(co, globals, locals,
printf("--- %s:%d \n", filename, oparg); printf("--- %s:%d \n", filename, oparg);
#endif #endif
f->f_lineno = oparg; f->f_lineno = oparg;
if (f->f_trace != NULL) { if (f->f_trace == NULL)
/* Trace each line of code reached */ continue;
f->f_lasti = INSTR_OFFSET(); /* Trace each line of code reached */
err = call_trace(&f->f_trace, &f->f_trace, f->f_lasti = INSTR_OFFSET();
f, "line", None); err = call_trace(&f->f_trace, &f->f_trace,
} f, "line", None);
break; break;
case CALL_FUNCTION: case CALL_FUNCTION:
...@@ -1619,6 +1659,7 @@ eval_code2(co, globals, locals, ...@@ -1619,6 +1659,7 @@ eval_code2(co, globals, locals,
DECREF(w); DECREF(w);
} }
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
} }
...@@ -1656,6 +1697,7 @@ eval_code2(co, globals, locals, ...@@ -1656,6 +1697,7 @@ eval_code2(co, globals, locals,
DECREF(v); DECREF(v);
XDECREF(w); XDECREF(w);
PUSH(x); PUSH(x);
if (x != NULL) continue;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment