]> granicus.if.org Git - python/commitdiff
A 2% speed improvement with gcc on low-endian machines. My guess is that this
authorArmin Rigo <arigo@tunes.org>
Sat, 20 Mar 2004 20:03:17 +0000 (20:03 +0000)
committerArmin Rigo <arigo@tunes.org>
Sat, 20 Mar 2004 20:03:17 +0000 (20:03 +0000)
new pattern for NEXTARG() is detected and optimized as a single (*short)
loading.

Python/ceval.c

index d3a0053f61563b170b81ab981d66766641b6943e..51df60a780daf251c722e48edfe7e0784288fb67 100644 (file)
@@ -627,7 +627,8 @@ eval_frame(PyFrameObject *f)
 
 #define INSTR_OFFSET() (next_instr - first_instr)
 #define NEXTOP()       (*next_instr++)
-#define NEXTARG()      (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
+#define OPARG()                (next_instr[0] + (next_instr[1]<<8))
+#define OPARG_SIZE     2
 #define JUMPTO(x)      (next_instr = first_instr + (x))
 #define JUMPBY(x)      (next_instr += (x))
 
@@ -658,8 +659,7 @@ eval_frame(PyFrameObject *f)
 #endif
 
 #define PREDICTED(op)          PRED_##op: next_instr++
-#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = (next_instr[2]<<8) + \
-                               next_instr[1]; next_instr += 3
+#define PREDICTED_WITH_ARG(op) PRED_##op: next_instr++; oparg = OPARG(); next_instr += OPARG_SIZE
 
 /* Stack manipulation macros */
 
@@ -862,8 +862,11 @@ eval_frame(PyFrameObject *f)
                /* Extract opcode and argument */
 
                opcode = NEXTOP();
-               if (HAS_ARG(opcode))
-                       oparg = NEXTARG();
+               if (HAS_ARG(opcode)) {
+                       oparg = OPARG();
+                       next_instr += OPARG_SIZE;
+               }
+
          dispatch_opcode:
 #ifdef DYNAMIC_EXECUTION_PROFILE
 #ifdef DXPAIRS
@@ -2249,7 +2252,8 @@ eval_frame(PyFrameObject *f)
 
                case EXTENDED_ARG:
                        opcode = NEXTOP();
-                       oparg = oparg<<16 | NEXTARG();
+                       oparg = oparg<<16 | OPARG();
+                       next_instr += OPARG_SIZE;
                        goto dispatch_opcode;
 
                default: