[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