[pypy-commit] pypy optresult: type specialize instances of resop
fijal
noreply at buildbot.pypy.org
Thu Nov 13 14:23:37 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r74499:0ea26299d718
Date: 2014-11-12 08:38 +0200
http://bitbucket.org/pypy/pypy/changeset/0ea26299d718/
Log: type specialize instances of resop
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -1,6 +1,7 @@
-from rpython.rlib.objectmodel import we_are_translated
+from rpython.rlib.objectmodel import we_are_translated, specialize
+ at specialize.argtype(2)
def ResOperation(opnum, args, result, descr=None):
cls = opclasses[opnum]
op = cls(result)
@@ -12,6 +13,12 @@
elif op.is_guard():
assert not descr.final_descr
op.setdescr(descr)
+ if isinstance(result, int):
+ op._resint = result
+ elif isinstance(result, float):
+ op._resfloat = result
+ else:
+ op._resref = result
return op
@@ -24,7 +31,7 @@
opnum = 0
_cls_has_bool_result = False
- _attrs_ = ('result',)
+ _attrs_ = ()
def __init__(self, result):
self.result = result
@@ -231,6 +238,37 @@
newop.setfailargs(self.getfailargs())
return newop
+# ===========
+# type mixins
+# ===========
+
+class IntOp(object):
+ _mixin_ = True
+
+ def getint(self):
+ return self._resint
+
+ def setint(self, intval):
+ self._resint = intval
+
+class FloatOp(object):
+ _mixin_ = True
+
+ def getfloat(self):
+ return self._resfloat
+
+ def setfloat(self, floatval):
+ self._resfloat = floatval
+
+class RefOp(object):
+ _mixin_ = True
+
+ def getref(self):
+ return self._resref
+
+ def setref(self, refval):
+ self._resref = refval
+
# ============
# arity mixins
# ============
@@ -375,164 +413,174 @@
# ____________________________________________________________
+""" All the operations are desribed like this:
+
+NAME/no-of-args-or-*[b][d]/type-of-result-or-none
+
+if b is present it means the operation produces a boolean
+if d is present it means there is a descr
+type of result can be one of r i f, * for anything, + for i or f or nothing
+"""
+
_oplist = [
'_FINAL_FIRST',
- 'JUMP/*d',
- 'FINISH/*d',
+ 'JUMP/*d/',
+ 'FINISH/*d/',
'_FINAL_LAST',
- 'LABEL/*d',
+ 'LABEL/*d/',
'_GUARD_FIRST',
'_GUARD_FOLDABLE_FIRST',
- 'GUARD_TRUE/1d',
- 'GUARD_FALSE/1d',
- 'GUARD_VALUE/2d',
- 'GUARD_CLASS/2d',
- 'GUARD_NONNULL/1d',
- 'GUARD_ISNULL/1d',
- 'GUARD_NONNULL_CLASS/2d',
+ 'GUARD_TRUE/1d/',
+ 'GUARD_FALSE/1d/',
+ 'GUARD_VALUE/2d/',
+ 'GUARD_CLASS/2d/',
+ 'GUARD_NONNULL/1d/',
+ 'GUARD_ISNULL/1d/',
+ 'GUARD_NONNULL_CLASS/2d/',
'_GUARD_FOLDABLE_LAST',
- 'GUARD_NO_EXCEPTION/0d', # may be called with an exception currently set
- 'GUARD_EXCEPTION/1d', # may be called with an exception currently set
- 'GUARD_NO_OVERFLOW/0d',
- 'GUARD_OVERFLOW/0d',
- 'GUARD_NOT_FORCED/0d', # may be called with an exception currently set
- 'GUARD_NOT_FORCED_2/0d', # same as GUARD_NOT_FORCED, but for finish()
- 'GUARD_NOT_INVALIDATED/0d',
- 'GUARD_FUTURE_CONDITION/0d', # is removable, may be patched by an optimization
+ 'GUARD_NO_EXCEPTION/0d/', # may be called with an exception currently set
+ 'GUARD_EXCEPTION/1d/r', # may be called with an exception currently set
+ 'GUARD_NO_OVERFLOW/0d/',
+ 'GUARD_OVERFLOW/0d/',
+ 'GUARD_NOT_FORCED/0d/', # may be called with an exception currently set
+ 'GUARD_NOT_FORCED_2/0d/', # same as GUARD_NOT_FORCED, but for finish()
+ 'GUARD_NOT_INVALIDATED/0d/',
+ 'GUARD_FUTURE_CONDITION/0d/',
+ # is removable, may be patched by an optimization
'_GUARD_LAST', # ----- end of guard operations -----
'_NOSIDEEFFECT_FIRST', # ----- start of no_side_effect operations -----
'_ALWAYS_PURE_FIRST', # ----- start of always_pure operations -----
- 'INT_ADD/2',
- 'INT_SUB/2',
- 'INT_MUL/2',
- 'INT_FLOORDIV/2',
- 'UINT_FLOORDIV/2',
- 'INT_MOD/2',
- 'INT_AND/2',
- 'INT_OR/2',
- 'INT_XOR/2',
- 'INT_RSHIFT/2',
- 'INT_LSHIFT/2',
- 'UINT_RSHIFT/2',
- 'FLOAT_ADD/2',
- 'FLOAT_SUB/2',
- 'FLOAT_MUL/2',
- 'FLOAT_TRUEDIV/2',
- 'FLOAT_NEG/1',
- 'FLOAT_ABS/1',
- 'CAST_FLOAT_TO_INT/1', # don't use for unsigned ints; we would
- 'CAST_INT_TO_FLOAT/1', # need some messy code in the backend
- 'CAST_FLOAT_TO_SINGLEFLOAT/1',
- 'CAST_SINGLEFLOAT_TO_FLOAT/1',
- 'CONVERT_FLOAT_BYTES_TO_LONGLONG/1',
- 'CONVERT_LONGLONG_BYTES_TO_FLOAT/1',
+ 'INT_ADD/2/i',
+ 'INT_SUB/2/i',
+ 'INT_MUL/2/i',
+ 'INT_FLOORDIV/2/i',
+ 'UINT_FLOORDIV/2/i',
+ 'INT_MOD/2/i',
+ 'INT_AND/2/i',
+ 'INT_OR/2/i',
+ 'INT_XOR/2/i',
+ 'INT_RSHIFT/2/i',
+ 'INT_LSHIFT/2/i',
+ 'UINT_RSHIFT/2/i',
+ 'FLOAT_ADD/2/f',
+ 'FLOAT_SUB/2/f',
+ 'FLOAT_MUL/2/f',
+ 'FLOAT_TRUEDIV/2/f',
+ 'FLOAT_NEG/1/f',
+ 'FLOAT_ABS/1/f',
+ 'CAST_FLOAT_TO_INT/1/i', # don't use for unsigned ints; we would
+ 'CAST_INT_TO_FLOAT/1/f', # need some messy code in the backend
+ 'CAST_FLOAT_TO_SINGLEFLOAT/1/f',
+ 'CAST_SINGLEFLOAT_TO_FLOAT/1/f',
+ 'CONVERT_FLOAT_BYTES_TO_LONGLONG/1/i',
+ 'CONVERT_LONGLONG_BYTES_TO_FLOAT/1/f',
#
- 'INT_LT/2b',
- 'INT_LE/2b',
- 'INT_EQ/2b',
- 'INT_NE/2b',
- 'INT_GT/2b',
- 'INT_GE/2b',
- 'UINT_LT/2b',
- 'UINT_LE/2b',
- 'UINT_GT/2b',
- 'UINT_GE/2b',
- 'FLOAT_LT/2b',
- 'FLOAT_LE/2b',
- 'FLOAT_EQ/2b',
- 'FLOAT_NE/2b',
- 'FLOAT_GT/2b',
- 'FLOAT_GE/2b',
+ 'INT_LT/2b/i',
+ 'INT_LE/2b/i',
+ 'INT_EQ/2b/i',
+ 'INT_NE/2b/i',
+ 'INT_GT/2b/i',
+ 'INT_GE/2b/i',
+ 'UINT_LT/2b/i',
+ 'UINT_LE/2b/i',
+ 'UINT_GT/2b/i',
+ 'UINT_GE/2b/i',
+ 'FLOAT_LT/2b/i',
+ 'FLOAT_LE/2b/i',
+ 'FLOAT_EQ/2b/i',
+ 'FLOAT_NE/2b/i',
+ 'FLOAT_GT/2b/i',
+ 'FLOAT_GE/2b/i',
#
- 'INT_IS_ZERO/1b',
- 'INT_IS_TRUE/1b',
- 'INT_NEG/1',
- 'INT_INVERT/1',
- 'INT_FORCE_GE_ZERO/1',
+ 'INT_IS_ZERO/1b/i',
+ 'INT_IS_TRUE/1b/i',
+ 'INT_NEG/1/i',
+ 'INT_INVERT/1/i',
+ 'INT_FORCE_GE_ZERO/1/i',
#
- 'SAME_AS/1', # gets a Const or a Box, turns it into another Box
- 'CAST_PTR_TO_INT/1',
- 'CAST_INT_TO_PTR/1',
+ 'SAME_AS/1/*', # gets a Const or a Box, turns it into another Box
+ 'CAST_PTR_TO_INT/1/i',
+ 'CAST_INT_TO_PTR/1/r',
#
- 'PTR_EQ/2b',
- 'PTR_NE/2b',
- 'INSTANCE_PTR_EQ/2b',
- 'INSTANCE_PTR_NE/2b',
+ 'PTR_EQ/2b/i',
+ 'PTR_NE/2b/i',
+ 'INSTANCE_PTR_EQ/2b/i',
+ 'INSTANCE_PTR_NE/2b/i',
#
- 'ARRAYLEN_GC/1d',
- 'STRLEN/1',
- 'STRGETITEM/2',
- 'GETFIELD_GC_PURE/1d',
- 'GETFIELD_RAW_PURE/1d',
- 'GETARRAYITEM_GC_PURE/2d',
- 'GETARRAYITEM_RAW_PURE/2d',
- 'UNICODELEN/1',
- 'UNICODEGETITEM/2',
+ 'ARRAYLEN_GC/1d/i',
+ 'STRLEN/1/i',
+ 'STRGETITEM/2/i',
+ 'GETFIELD_GC_PURE/1d/*',
+ 'GETFIELD_RAW_PURE/1d/*',
+ 'GETARRAYITEM_GC_PURE/2d/*',
+ 'GETARRAYITEM_RAW_PURE/2d/*',
+ 'UNICODELEN/1/i',
+ 'UNICODEGETITEM/2/i',
#
'_ALWAYS_PURE_LAST', # ----- end of always_pure operations -----
- 'GETARRAYITEM_GC/2d',
- 'GETARRAYITEM_RAW/2d',
- 'GETINTERIORFIELD_GC/2d',
- 'RAW_LOAD/2d',
- 'GETFIELD_GC/1d',
- 'GETFIELD_RAW/1d',
+ 'GETARRAYITEM_GC/2d/*',
+ 'GETARRAYITEM_RAW/2d/+',
+ 'GETINTERIORFIELD_GC/2d/*',
+ 'RAW_LOAD/2d/+',
+ 'GETFIELD_GC/1d/*',
+ 'GETFIELD_RAW/1d/+',
'_MALLOC_FIRST',
- 'NEW/0d', #-> GcStruct, gcptrs inside are zeroed (not the rest)
- 'NEW_WITH_VTABLE/1', #-> GcStruct with vtable, gcptrs inside are zeroed
- 'NEW_ARRAY/1d', #-> GcArray, not zeroed. only for arrays of primitives
- 'NEW_ARRAY_CLEAR/1d', #-> GcArray, fully zeroed
- 'NEWSTR/1', #-> STR, the hash field is zeroed
- 'NEWUNICODE/1', #-> UNICODE, the hash field is zeroed
+ 'NEW/0d/r', #-> GcStruct, gcptrs inside are zeroed (not the rest)
+ 'NEW_WITH_VTABLE/1/r',#-> GcStruct with vtable, gcptrs inside are zeroed
+ 'NEW_ARRAY/1d/r', #-> GcArray, not zeroed. only for arrays of primitives
+ 'NEW_ARRAY_CLEAR/1d/r',#-> GcArray, fully zeroed
+ 'NEWSTR/1/r', #-> STR, the hash field is zeroed
+ 'NEWUNICODE/1/r', #-> UNICODE, the hash field is zeroed
'_MALLOC_LAST',
- 'FORCE_TOKEN/0',
- 'VIRTUAL_REF/2', # removed before it's passed to the backend
- 'MARK_OPAQUE_PTR/1b',
+ 'FORCE_TOKEN/0/i',
+ 'VIRTUAL_REF/2/r', # removed before it's passed to the backend
+ 'MARK_OPAQUE_PTR/1b/',
# this one has no *visible* side effect, since the virtualizable
# must be forced, however we need to execute it anyway
'_NOSIDEEFFECT_LAST', # ----- end of no_side_effect operations -----
- 'INCREMENT_DEBUG_COUNTER/1',
- 'SETARRAYITEM_GC/3d',
- 'SETARRAYITEM_RAW/3d',
- 'SETINTERIORFIELD_GC/3d',
- 'SETINTERIORFIELD_RAW/3d', # right now, only used by tests
- 'RAW_STORE/3d',
- 'SETFIELD_GC/2d',
- 'ZERO_PTR_FIELD/2', # only emitted by the rewrite, clears a pointer field
+ 'INCREMENT_DEBUG_COUNTER/1/',
+ 'SETARRAYITEM_GC/3d/',
+ 'SETARRAYITEM_RAW/3d/',
+ 'SETINTERIORFIELD_GC/3d/',
+ 'SETINTERIORFIELD_RAW/3d/', # right now, only used by tests
+ 'RAW_STORE/3d/',
+ 'SETFIELD_GC/2d/',
+ 'ZERO_PTR_FIELD/2/', # only emitted by the rewrite, clears a pointer field
# at a given constant offset, no descr
- 'ZERO_ARRAY/3d', # only emitted by the rewrite, clears (part of) an array
+ 'ZERO_ARRAY/3d/', # only emitted by the rewrite, clears (part of) an array
# [arraygcptr, firstindex, length], descr=ArrayDescr
- 'SETFIELD_RAW/2d',
- 'STRSETITEM/3',
- 'UNICODESETITEM/3',
- 'COND_CALL_GC_WB/1d', # [objptr] (for the write barrier)
- 'COND_CALL_GC_WB_ARRAY/2d', # [objptr, arrayindex] (write barr. for array)
- 'DEBUG_MERGE_POINT/*', # debugging only
- 'JIT_DEBUG/*', # debugging only
- 'VIRTUAL_REF_FINISH/2', # removed before it's passed to the backend
- 'COPYSTRCONTENT/5', # src, dst, srcstart, dststart, length
- 'COPYUNICODECONTENT/5',
- 'QUASIIMMUT_FIELD/1d', # [objptr], descr=SlowMutateDescr
- 'RECORD_KNOWN_CLASS/2', # [objptr, clsptr]
- 'KEEPALIVE/1',
+ 'SETFIELD_RAW/2d/',
+ 'STRSETITEM/3/',
+ 'UNICODESETITEM/3/',
+ 'COND_CALL_GC_WB/1d/', # [objptr] (for the write barrier)
+ 'COND_CALL_GC_WB_ARRAY/2d/', # [objptr, arrayindex] (write barr. for array)
+ 'DEBUG_MERGE_POINT/*/', # debugging only
+ 'JIT_DEBUG/*/', # debugging only
+ 'VIRTUAL_REF_FINISH/2/', # removed before it's passed to the backend
+ 'COPYSTRCONTENT/5/', # src, dst, srcstart, dststart, length
+ 'COPYUNICODECONTENT/5/',
+ 'QUASIIMMUT_FIELD/1d/', # [objptr], descr=SlowMutateDescr
+ 'RECORD_KNOWN_CLASS/2/', # [objptr, clsptr]
+ 'KEEPALIVE/1/',
'_CANRAISE_FIRST', # ----- start of can_raise operations -----
'_CALL_FIRST',
- 'CALL/*d',
- 'COND_CALL/*d', # a conditional call, with first argument as a condition
- 'CALL_ASSEMBLER/*d', # call already compiled assembler
- 'CALL_MAY_FORCE/*d',
- 'CALL_LOOPINVARIANT/*d',
- 'CALL_RELEASE_GIL/*d', # release the GIL and "close the stack" for asmgcc
- 'CALL_PURE/*d', # removed before it's passed to the backend
- 'CALL_MALLOC_GC/*d', # like CALL, but NULL => propagate MemoryError
- 'CALL_MALLOC_NURSERY/1', # nursery malloc, const number of bytes, zeroed
- 'CALL_MALLOC_NURSERY_VARSIZE/3d',
- 'CALL_MALLOC_NURSERY_VARSIZE_FRAME/1',
+ 'CALL/*d/*',
+ 'COND_CALL/*d/*', # a conditional call, with first argument as a condition
+ 'CALL_ASSEMBLER/*d/*', # call already compiled assembler
+ 'CALL_MAY_FORCE/*d/*',
+ 'CALL_LOOPINVARIANT/*d/*',
+ 'CALL_RELEASE_GIL/*d/*', # release the GIL and "close the stack" for asmgcc
+ 'CALL_PURE/*d/*', # removed before it's passed to the backend
+ 'CALL_MALLOC_GC/*d/r', # like CALL, but NULL => propagate MemoryError
+ 'CALL_MALLOC_NURSERY/1/r', # nursery malloc, const number of bytes, zeroed
+ 'CALL_MALLOC_NURSERY_VARSIZE/3d/r',
+ 'CALL_MALLOC_NURSERY_VARSIZE_FRAME/1/r',
# nursery malloc, non-const number of bytes, zeroed
# note that the number of bytes must be well known to be small enough
# to fulfill allocating in the nursery rules (and no card markings)
@@ -540,9 +588,9 @@
'_CANRAISE_LAST', # ----- end of can_raise operations -----
'_OVF_FIRST', # ----- start of is_ovf operations -----
- 'INT_ADD_OVF/2',
- 'INT_SUB_OVF/2',
- 'INT_MUL_OVF/2',
+ 'INT_ADD_OVF/2/i',
+ 'INT_SUB_OVF/2/i',
+ 'INT_MUL_OVF/2/i',
'_OVF_LAST', # ----- end of is_ovf operations -----
'_LAST', # for the backend to add more internal operations
]
@@ -559,11 +607,10 @@
def setup(debug_print=False):
- for i, name in enumerate(_oplist):
- if debug_print:
- print '%30s = %d' % (name, i)
+ i = 0
+ for name in _oplist:
if '/' in name:
- name, arity = name.split('/')
+ name, arity, result = name.split('/')
withdescr = 'd' in arity
boolresult = 'b' in arity
arity = arity.rstrip('db')
@@ -572,32 +619,40 @@
else:
arity = int(arity)
else:
- arity, withdescr, boolresult = -1, True, False # default
- setattr(rop, name, i)
+ arity, withdescr, boolresult, result = -1, True, False, None # default
+ if result == '*':
+ result = 'rfiN'
+ elif result == '+':
+ result = 'fiN'
+ elif result == '':
+ result = 'N'
if not name.startswith('_'):
- opname[i] = name
- cls = create_class_for_op(name, i, arity, withdescr)
- cls._cls_has_bool_result = boolresult
- else:
- cls = None
- opclasses.append(cls)
- oparity.append(arity)
- opwithdescr.append(withdescr)
- assert len(opclasses) == len(oparity) == len(opwithdescr) == len(_oplist)
+ for r in result:
+ cls_name = name + '_' + r
+ setattr(rop, cls_name, i)
+ opname[i] = cls_name
+ cls = create_class_for_op(cls_name, i, arity, withdescr, r)
+ cls._cls_has_bool_result = boolresult
+ opclasses.append(cls)
+ oparity.append(arity)
+ opwithdescr.append(withdescr)
+ if debug_print:
+ print '%30s = %d' % (cls_name, i)
+ i += 1
-def get_base_class(mixin, base):
+def get_base_class(mixins, base):
try:
- return get_base_class.cache[(mixin, base)]
+ return get_base_class.cache[(base,) + mixins]
except KeyError:
- arity_name = mixin.__name__[:-2] # remove the trailing "Op"
+ arity_name = mixins[0].__name__[:-2] # remove the trailing "Op"
name = arity_name + base.__name__ # something like BinaryPlainResOp
- bases = (mixin, base)
+ bases = mixins + (base,)
cls = type(name, bases, {})
- get_base_class.cache[(mixin, base)] = cls
+ get_base_class.cache[(base,) + mixins] = cls
return cls
get_base_class.cache = {}
-def create_class_for_op(name, opnum, arity, withdescr):
+def create_class_for_op(name, opnum, arity, withdescr, result_type):
arity2mixin = {
0: NullaryOp,
1: UnaryOp,
@@ -613,10 +668,18 @@
baseclass = ResOpWithDescr
else:
baseclass = PlainResOp
- mixin = arity2mixin.get(arity, N_aryOp)
+ mixins = [arity2mixin.get(arity, N_aryOp)]
+ if result_type == 'i':
+ mixins.append(IntOp)
+ elif result_type == 'f':
+ mixins.append(FloatOp)
+ elif result_type == 'r':
+ mixins.append(RefOp)
+ else:
+ assert result_type == 'N'
cls_name = '%s_OP' % name
- bases = (get_base_class(mixin, baseclass),)
+ bases = (get_base_class(tuple(mixins), baseclass),)
dic = {'opnum': opnum}
return type(cls_name, bases, dic)
@@ -624,51 +687,51 @@
del _oplist
opboolinvers = {
- rop.INT_EQ: rop.INT_NE,
- rop.INT_NE: rop.INT_EQ,
- rop.INT_LT: rop.INT_GE,
- rop.INT_GE: rop.INT_LT,
- rop.INT_GT: rop.INT_LE,
- rop.INT_LE: rop.INT_GT,
+ rop.INT_EQ_i: rop.INT_NE_i,
+ rop.INT_NE_i: rop.INT_EQ_i,
+ rop.INT_LT_i: rop.INT_GE_i,
+ rop.INT_GE_i: rop.INT_LT_i,
+ rop.INT_GT_i: rop.INT_LE_i,
+ rop.INT_LE_i: rop.INT_GT_i,
- rop.UINT_LT: rop.UINT_GE,
- rop.UINT_GE: rop.UINT_LT,
- rop.UINT_GT: rop.UINT_LE,
- rop.UINT_LE: rop.UINT_GT,
+ rop.UINT_LT_i: rop.UINT_GE_i,
+ rop.UINT_GE_i: rop.UINT_LT_i,
+ rop.UINT_GT_i: rop.UINT_LE_i,
+ rop.UINT_LE_i: rop.UINT_GT_i,
- rop.FLOAT_EQ: rop.FLOAT_NE,
- rop.FLOAT_NE: rop.FLOAT_EQ,
- rop.FLOAT_LT: rop.FLOAT_GE,
- rop.FLOAT_GE: rop.FLOAT_LT,
- rop.FLOAT_GT: rop.FLOAT_LE,
- rop.FLOAT_LE: rop.FLOAT_GT,
+ rop.FLOAT_EQ_i: rop.FLOAT_NE_i,
+ rop.FLOAT_NE_i: rop.FLOAT_EQ_i,
+ rop.FLOAT_LT_i: rop.FLOAT_GE_i,
+ rop.FLOAT_GE_i: rop.FLOAT_LT_i,
+ rop.FLOAT_GT_i: rop.FLOAT_LE_i,
+ rop.FLOAT_LE_i: rop.FLOAT_GT_i,
- rop.PTR_EQ: rop.PTR_NE,
- rop.PTR_NE: rop.PTR_EQ,
+ rop.PTR_EQ_i: rop.PTR_NE_i,
+ rop.PTR_NE_i: rop.PTR_EQ_i,
}
opboolreflex = {
- rop.INT_EQ: rop.INT_EQ,
- rop.INT_NE: rop.INT_NE,
- rop.INT_LT: rop.INT_GT,
- rop.INT_GE: rop.INT_LE,
- rop.INT_GT: rop.INT_LT,
- rop.INT_LE: rop.INT_GE,
+ rop.INT_EQ_i: rop.INT_EQ_i,
+ rop.INT_NE_i: rop.INT_NE_i,
+ rop.INT_LT_i: rop.INT_GT_i,
+ rop.INT_GE_i: rop.INT_LE_i,
+ rop.INT_GT_i: rop.INT_LT_i,
+ rop.INT_LE_i: rop.INT_GE_i,
- rop.UINT_LT: rop.UINT_GT,
- rop.UINT_GE: rop.UINT_LE,
- rop.UINT_GT: rop.UINT_LT,
- rop.UINT_LE: rop.UINT_GE,
+ rop.UINT_LT_i: rop.UINT_GT_i,
+ rop.UINT_GE_i: rop.UINT_LE_i,
+ rop.UINT_GT_i: rop.UINT_LT_i,
+ rop.UINT_LE_i: rop.UINT_GE_i,
- rop.FLOAT_EQ: rop.FLOAT_EQ,
- rop.FLOAT_NE: rop.FLOAT_NE,
- rop.FLOAT_LT: rop.FLOAT_GT,
- rop.FLOAT_GE: rop.FLOAT_LE,
- rop.FLOAT_GT: rop.FLOAT_LT,
- rop.FLOAT_LE: rop.FLOAT_GE,
+ rop.FLOAT_EQ_i: rop.FLOAT_EQ_i,
+ rop.FLOAT_NE_i: rop.FLOAT_NE_i,
+ rop.FLOAT_LT_i: rop.FLOAT_GT_i,
+ rop.FLOAT_GE_i: rop.FLOAT_LE_i,
+ rop.FLOAT_GT_i: rop.FLOAT_LT_i,
+ rop.FLOAT_LE_i: rop.FLOAT_GE_i,
- rop.PTR_EQ: rop.PTR_EQ,
- rop.PTR_NE: rop.PTR_NE,
+ rop.PTR_EQ_i: rop.PTR_EQ_i,
+ rop.PTR_NE_i: rop.PTR_NE_i,
}
More information about the pypy-commit
mailing list