[Python-checkins] r84501 - in python/branches/py3k: Doc/library/dis.rst Include/opcode.h Lib/opcode.py Misc/ACKS Misc/NEWS Python/ceval.c Python/compile.c Python/import.c Python/opcode_targets.h

antoine.pitrou python-checkins at python.org
Sat Sep 4 20:43:53 CEST 2010


Author: antoine.pitrou
Date: Sat Sep  4 20:43:52 2010
New Revision: 84501

Log:
Issue #9225: Remove the ROT_FOUR and DUP_TOPX opcode, the latter replaced
by the new (and simpler) DUP_TOP_TWO.  Performance isn't changed, but
our bytecode is a bit simplified.  Patch by Demur Rumed.



Modified:
   python/branches/py3k/Doc/library/dis.rst
   python/branches/py3k/Include/opcode.h
   python/branches/py3k/Lib/opcode.py
   python/branches/py3k/Misc/ACKS
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Python/ceval.c
   python/branches/py3k/Python/compile.c
   python/branches/py3k/Python/import.c
   python/branches/py3k/Python/opcode_targets.h

Modified: python/branches/py3k/Doc/library/dis.rst
==============================================================================
--- python/branches/py3k/Doc/library/dis.rst	(original)
+++ python/branches/py3k/Doc/library/dis.rst	Sat Sep  4 20:43:52 2010
@@ -184,15 +184,15 @@
    three.
 
 
-.. opcode:: ROT_FOUR
+.. opcode:: DUP_TOP
 
-   Lifts second, third and forth stack item one position up, moves top down to
-   position four.
+   Duplicates the reference on top of the stack.
 
 
-.. opcode:: DUP_TOP
+.. opcode:: DUP_TOP_TWO
 
-   Duplicates the reference on top of the stack.
+   Duplicates the two references on top of the stack, leaving them in the
+   same order.
 
 
 **Unary operations**
@@ -531,12 +531,6 @@
    are put onto the stack right-to-left.
 
 
-.. opcode:: DUP_TOPX (count)
-
-   Duplicate *count* items, keeping them in the same order. Due to implementation
-   limits, *count* should be between 1 and 5 inclusive.
-
-
 .. opcode:: STORE_ATTR (namei)
 
    Implements ``TOS.name = TOS1``, where *namei* is the index of name in

Modified: python/branches/py3k/Include/opcode.h
==============================================================================
--- python/branches/py3k/Include/opcode.h	(original)
+++ python/branches/py3k/Include/opcode.h	Sat Sep  4 20:43:52 2010
@@ -12,7 +12,7 @@
 #define ROT_TWO		2
 #define ROT_THREE	3
 #define DUP_TOP		4
-#define ROT_FOUR	5
+#define DUP_TOP_TWO     5
 #define NOP		9
 
 #define UNARY_POSITIVE	10
@@ -83,7 +83,7 @@
 #define DELETE_ATTR	96	/* "" */
 #define STORE_GLOBAL	97	/* "" */
 #define DELETE_GLOBAL	98	/* "" */
-#define DUP_TOPX	99	/* number of items to duplicate */
+
 #define LOAD_CONST	100	/* Index in const list */
 #define LOAD_NAME	101	/* Index in name list */
 #define BUILD_TUPLE	102	/* Number of tuple items */

Modified: python/branches/py3k/Lib/opcode.py
==============================================================================
--- python/branches/py3k/Lib/opcode.py	(original)
+++ python/branches/py3k/Lib/opcode.py	Sat Sep  4 20:43:52 2010
@@ -48,7 +48,7 @@
 def_op('ROT_TWO', 2)
 def_op('ROT_THREE', 3)
 def_op('DUP_TOP', 4)
-def_op('ROT_FOUR', 5)
+def_op('DUP_TOP_TWO', 5)
 
 def_op('NOP', 9)
 def_op('UNARY_POSITIVE', 10)
@@ -116,7 +116,6 @@
 name_op('DELETE_ATTR', 96)      # ""
 name_op('STORE_GLOBAL', 97)     # ""
 name_op('DELETE_GLOBAL', 98)    # ""
-def_op('DUP_TOPX', 99)          # number of items to duplicate
 def_op('LOAD_CONST', 100)       # Index in const list
 hasconst.append(100)
 name_op('LOAD_NAME', 101)       # Index in name list

Modified: python/branches/py3k/Misc/ACKS
==============================================================================
--- python/branches/py3k/Misc/ACKS	(original)
+++ python/branches/py3k/Misc/ACKS	Sat Sep  4 20:43:52 2010
@@ -700,6 +700,7 @@
 Clinton Roy
 Paul Rubin
 Sam Ruby
+Demur Rumed
 Audun S. Runde
 Rauli Ruohonen
 Jeff Rush

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Sat Sep  4 20:43:52 2010
@@ -12,6 +12,10 @@
 Core and Builtins
 -----------------
 
+- Issue #9225: Remove the ROT_FOUR and DUP_TOPX opcode, the latter replaced
+  by the new (and simpler) DUP_TOP_TWO.  Performance isn't changed, but
+  our bytecode is a bit simplified.  Patch by Demur Rumed.
+
 - Issue #9766: Rename poorly named variables exposed by _warnings to prevent
   confusion with the proper variables names from 'warnings' itself.
 

Modified: python/branches/py3k/Python/ceval.c
==============================================================================
--- python/branches/py3k/Python/ceval.c	(original)
+++ python/branches/py3k/Python/ceval.c	Sat Sep  4 20:43:52 2010
@@ -1420,50 +1420,21 @@
             SET_THIRD(v);
             FAST_DISPATCH();
 
-        TARGET(ROT_FOUR)
-            u = TOP();
-            v = SECOND();
-            w = THIRD();
-            x = FOURTH();
-            SET_TOP(v);
-            SET_SECOND(w);
-            SET_THIRD(x);
-            SET_FOURTH(u);
-            FAST_DISPATCH();
-
         TARGET(DUP_TOP)
             v = TOP();
             Py_INCREF(v);
             PUSH(v);
             FAST_DISPATCH();
 
-        TARGET(DUP_TOPX)
-            if (oparg == 2) {
-                x = TOP();
-                Py_INCREF(x);
-                w = SECOND();
-                Py_INCREF(w);
-                STACKADJ(2);
-                SET_TOP(x);
-                SET_SECOND(w);
-                FAST_DISPATCH();
-            } else if (oparg == 3) {
-                x = TOP();
-                Py_INCREF(x);
-                w = SECOND();
-                Py_INCREF(w);
-                v = THIRD();
-                Py_INCREF(v);
-                STACKADJ(3);
-                SET_TOP(x);
-                SET_SECOND(w);
-                SET_THIRD(v);
-                FAST_DISPATCH();
-            }
-            Py_FatalError("invalid argument to DUP_TOPX"
-                          " (bytecode corruption?)");
-            /* Never returns, so don't bother to set why. */
-            break;
+        TARGET(DUP_TOP_TWO)
+            x = TOP();
+            Py_INCREF(x);
+            w = SECOND();
+            Py_INCREF(w);
+            STACKADJ(2);
+            SET_TOP(x);
+            SET_SECOND(w);
+            FAST_DISPATCH();
 
         TARGET(UNARY_POSITIVE)
             v = TOP();

Modified: python/branches/py3k/Python/compile.c
==============================================================================
--- python/branches/py3k/Python/compile.c	(original)
+++ python/branches/py3k/Python/compile.c	Sat Sep  4 20:43:52 2010
@@ -680,8 +680,8 @@
             return 0;
         case DUP_TOP:
             return 1;
-        case ROT_FOUR:
-            return 0;
+        case DUP_TOP_TWO:
+            return 2;
 
         case UNARY_POSITIVE:
         case UNARY_NEGATIVE:
@@ -782,8 +782,6 @@
             return -1;
         case DELETE_GLOBAL:
             return 0;
-        case DUP_TOPX:
-            return oparg;
         case LOAD_CONST:
             return 1;
         case LOAD_NAME:
@@ -3404,7 +3402,7 @@
             return 0;
     }
     if (ctx == AugLoad) {
-        ADDOP_I(c, DUP_TOPX, 2);
+        ADDOP(c, DUP_TOP_TWO);
     }
     else if (ctx == AugStore) {
         ADDOP(c, ROT_THREE);

Modified: python/branches/py3k/Python/import.c
==============================================================================
--- python/branches/py3k/Python/import.c	(original)
+++ python/branches/py3k/Python/import.c	Sat Sep  4 20:43:52 2010
@@ -101,12 +101,14 @@
                introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
        Python 3.2a0: 3160 (add SETUP_WITH)
                      tag: cpython-32
+       Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)
+                     tag: cpython-32
 */
 
 /* If you change MAGIC, you must change TAG and you must insert the old value
    into _PyMagicNumberTags below.
 */
-#define MAGIC (3160 | ((long)'\r'<<16) | ((long)'\n'<<24))
+#define MAGIC (3170 | ((long)'\r'<<16) | ((long)'\n'<<24))
 #define TAG "cpython-32"
 #define CACHEDIR "__pycache__"
 /* Current magic word and string tag as globals. */

Modified: python/branches/py3k/Python/opcode_targets.h
==============================================================================
--- python/branches/py3k/Python/opcode_targets.h	(original)
+++ python/branches/py3k/Python/opcode_targets.h	Sat Sep  4 20:43:52 2010
@@ -4,7 +4,7 @@
     &&TARGET_ROT_TWO,
     &&TARGET_ROT_THREE,
     &&TARGET_DUP_TOP,
-    &&TARGET_ROT_FOUR,
+    &&TARGET_DUP_TOP_TWO,
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
@@ -98,7 +98,7 @@
     &&TARGET_DELETE_ATTR,
     &&TARGET_STORE_GLOBAL,
     &&TARGET_DELETE_GLOBAL,
-    &&TARGET_DUP_TOPX,
+    &&_unknown_opcode,
     &&TARGET_LOAD_CONST,
     &&TARGET_LOAD_NAME,
     &&TARGET_BUILD_TUPLE,


More information about the Python-checkins mailing list