[pypy-svn] r38662 - pypy/dist/pypy/objspace/std

mwh at codespeak.net mwh at codespeak.net
Tue Feb 13 10:38:17 CET 2007


Author: mwh
Date: Tue Feb 13 10:38:17 2007
New Revision: 38662

Modified:
   pypy/dist/pypy/objspace/std/objspace.py
Log:
add a specialized version of BINARY_ADD for smallint builds.
helps pystone a few %, no effect on other benchmarks.


Modified: pypy/dist/pypy/objspace/std/objspace.py
==============================================================================
--- pypy/dist/pypy/objspace/std/objspace.py	(original)
+++ pypy/dist/pypy/objspace/std/objspace.py	Tue Feb 13 10:38:17 2007
@@ -58,19 +58,34 @@
 
         class StdObjSpaceFrame(pyframe.PyFrame):
             if self.config.objspace.std.optimized_int_add:
-                def BINARY_ADD(f, oparg, *ignored):
-                    from pypy.objspace.std.intobject import \
-                         W_IntObject, add__Int_Int
-                    w_2 = f.popvalue()
-                    w_1 = f.popvalue()
-                    if type(w_1) is W_IntObject and type(w_2) is W_IntObject:
-                        try:
-                            w_result = add__Int_Int(f.space, w_1, w_2)
-                        except FailedToImplement:
+                if self.config.objspace.std.withsmallint:
+                    def BINARY_ADD(f, oparg, *ignored):
+                        from pypy.objspace.std.smallintobject import \
+                             W_SmallIntObject, add__SmallInt_SmallInt
+                        w_2 = f.popvalue()
+                        w_1 = f.popvalue()
+                        if type(w_1) is W_SmallIntObject and type(w_2) is W_SmallIntObject:
+                            try:
+                                w_result = add__SmallInt_SmallInt(f.space, w_1, w_2)
+                            except FailedToImplement:
+                                w_result = f.space.add(w_1, w_2)
+                        else:
                             w_result = f.space.add(w_1, w_2)
-                    else:
-                        w_result = f.space.add(w_1, w_2)
-                    f.pushvalue(w_result)
+                        f.pushvalue(w_result)
+                else:
+                    def BINARY_ADD(f, oparg, *ignored):
+                        from pypy.objspace.std.intobject import \
+                             W_IntObject, add__Int_Int
+                        w_2 = f.popvalue()
+                        w_1 = f.popvalue()
+                        if type(w_1) is W_IntObject and type(w_2) is W_IntObject:
+                            try:
+                                w_result = add__Int_Int(f.space, w_1, w_2)
+                            except FailedToImplement:
+                                w_result = f.space.add(w_1, w_2)
+                        else:
+                            w_result = f.space.add(w_1, w_2)
+                        f.pushvalue(w_result)
 
             def CALL_LIKELY_BUILTIN(f, oparg, *ignored):
                 from pypy.module.__builtin__ import OPTIMIZED_BUILTINS, Module



More information about the Pypy-commit mailing list