[pypy-svn] r60162 - in pypy/branch/oo-jit/pypy: rpython/lltypesystem rpython/ootypesystem translator/cli translator/js translator/jvm

arigo at codespeak.net arigo at codespeak.net
Wed Nov 26 17:49:09 CET 2008


Author: arigo
Date: Wed Nov 26 17:49:07 2008
New Revision: 60162

Modified:
   pypy/branch/oo-jit/pypy/rpython/lltypesystem/lloperation.py
   pypy/branch/oo-jit/pypy/rpython/ootypesystem/ooopimpl.py
   pypy/branch/oo-jit/pypy/rpython/ootypesystem/rclass.py
   pypy/branch/oo-jit/pypy/rpython/ootypesystem/rootype.py
   pypy/branch/oo-jit/pypy/translator/cli/opcodes.py
   pypy/branch/oo-jit/pypy/translator/js/opcodes.py
   pypy/branch/oo-jit/pypy/translator/jvm/cmpopcodes.py
Log:
Add a new operation 'ooisnot', a single-operation implementation
for rtype_ne.


Modified: pypy/branch/oo-jit/pypy/rpython/lltypesystem/lloperation.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/lltypesystem/lloperation.py	(original)
+++ pypy/branch/oo-jit/pypy/rpython/lltypesystem/lloperation.py	Wed Nov 26 17:49:07 2008
@@ -476,6 +476,7 @@
     'oononnull':            LLOp(oo=True, canfold=True),
     'ooisnull':             LLOp(oo=True, canfold=True),
     'oois':                 LLOp(oo=True, canfold=True),
+    'ooisnot':              LLOp(oo=True, canfold=True),
     'instanceof':           LLOp(oo=True, canfold=True),
     'classof':              LLOp(oo=True, canfold=True),
     'subclassof':           LLOp(oo=True, canfold=True),

Modified: pypy/branch/oo-jit/pypy/rpython/ootypesystem/ooopimpl.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/ootypesystem/ooopimpl.py	(original)
+++ pypy/branch/oo-jit/pypy/rpython/ootypesystem/ooopimpl.py	Wed Nov 26 17:49:07 2008
@@ -40,6 +40,9 @@
     else:
         assert False, "oois on something silly"
 
+def op_ooisnot(obj1, obj2):
+    return not op_oois(obj1, obj2)
+
 def op_instanceof(inst, INST):
     return ootype.instanceof(inst, INST)
 

Modified: pypy/branch/oo-jit/pypy/rpython/ootypesystem/rclass.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/ootypesystem/rclass.py	(original)
+++ pypy/branch/oo-jit/pypy/rpython/ootypesystem/rclass.py	Wed Nov 26 17:49:07 2008
@@ -531,9 +531,9 @@
 
     rtype_eq = rtype_is_
 
-    def rtype_ne(rpair, hop):
-        v = rpair.rtype_eq(hop)
-        return hop.genop("bool_not", [v], resulttype=ootype.Bool)
+    def rtype_ne((r_ins1, r_ins2), hop):
+        vlist = hop.inputargs(r_ins1, r_ins2)
+        return hop.genop('ooisnot', vlist, resulttype=ootype.Bool)
 
 
 def ll_inst_hash(ins):

Modified: pypy/branch/oo-jit/pypy/rpython/ootypesystem/rootype.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/ootypesystem/rootype.py	(original)
+++ pypy/branch/oo-jit/pypy/rpython/ootypesystem/rootype.py	Wed Nov 26 17:49:07 2008
@@ -101,9 +101,9 @@
 
     rtype_eq = rtype_is_
 
-    def rtype_ne(rpair, hop):
-        v = rpair.rtype_eq(hop)
-        return hop.genop("bool_not", [v], resulttype=ootype.Bool)
+    def rtype_ne((r_ins1, r_ins2), hop):
+        vlist = hop.inputargs(r_ins1, r_ins2)
+        return hop.genop('ooisnot', vlist, resulttype=ootype.Bool)
 
 
 class __extend__(pairtype(OOObjectRepr, OOObjectRepr)):
@@ -113,9 +113,9 @@
 
     rtype_eq = rtype_is_
 
-    def rtype_ne(rpair, hop):
-        v = rpair.rtype_eq(hop)
-        return hop.genop("bool_not", [v], resulttype=ootype.Bool)
+    def rtype_ne((r_ins1, r_ins2), hop):
+        vlist = hop.inputargs(r_ins1, r_ins2)
+        return hop.genop('ooisnot', vlist, resulttype=ootype.Bool)
 
 class OOBoundMethRepr(Repr):
     def __init__(self, ootype, name):

Modified: pypy/branch/oo-jit/pypy/translator/cli/opcodes.py
==============================================================================
--- pypy/branch/oo-jit/pypy/translator/cli/opcodes.py	(original)
+++ pypy/branch/oo-jit/pypy/translator/cli/opcodes.py	Wed Nov 26 17:49:07 2008
@@ -252,6 +252,7 @@
     'ullong_rshift':            [PushAllArgs, 'conv.i4', 'shr'],
 
     'oois':                     'ceq',
+    'ooisnot':                  _not('ceq'),
 }
 
 opcodes = misc_ops.copy()

Modified: pypy/branch/oo-jit/pypy/translator/js/opcodes.py
==============================================================================
--- pypy/branch/oo-jit/pypy/translator/js/opcodes.py	(original)
+++ pypy/branch/oo-jit/pypy/translator/js/opcodes.py	Wed Nov 26 17:49:07 2008
@@ -138,6 +138,7 @@
     'ooparse_int' : [PushAllArgs,_CastFun("parseInt",2)],
     'ooparse_float' : [PushAllArgs,_CastFun("parseFloat",1)],
     'oois'       : '===',
+    'ooisnot'    : '!==',
     'cast_bool_to_int':         CopyName,
     'cast_bool_to_uint':        CopyName,
     'cast_bool_to_float':       CopyName,

Modified: pypy/branch/oo-jit/pypy/translator/jvm/cmpopcodes.py
==============================================================================
--- pypy/branch/oo-jit/pypy/translator/jvm/cmpopcodes.py	(original)
+++ pypy/branch/oo-jit/pypy/translator/jvm/cmpopcodes.py	Wed Nov 26 17:49:07 2008
@@ -1,6 +1,6 @@
 from pypy.translator.jvm.typesystem import \
      IFLT, IFLE, IFEQ, IFNE, IFGT, IFGE, \
-     IFNULL, IFNONNULL, IF_ACMPEQ, GOTO, ICONST, \
+     IFNULL, IFNONNULL, IF_ACMPEQ, IF_ACMPNE, GOTO, ICONST, \
      DCONST_0, DCMPG, LCONST_0, LCMP, \
      IF_ICMPLT, IF_ICMPLE, IF_ICMPEQ, IF_ICMPNE, IF_ICMPGT, IF_ICMPGE, \
      PYPYUINTCMP, PYPYULONGCMP
@@ -54,6 +54,7 @@
     'oononnull': [IFNONNULL],
     'ooisnull': [IFNULL],
     'oois': [IF_ACMPEQ],
+    'ooisnot': [IF_ACMPNE],
 
     'unichar_eq': [IF_ICMPEQ],
     'unichar_ne': [IF_ICMPNE],



More information about the Pypy-commit mailing list