[pypy-svn] pypy jit-longlong: neg, invert.

arigo commits-noreply at bitbucket.org
Fri Jan 7 11:48:12 CET 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: jit-longlong
Changeset: r40444:0fa24110fdae
Date: 2011-01-07 11:08 +0100
http://bitbucket.org/pypy/pypy/changeset/0fa24110fdae/

Log:	neg, invert.

diff --git a/pypy/jit/codewriter/test/test_longlong.py b/pypy/jit/codewriter/test/test_longlong.py
--- a/pypy/jit/codewriter/test/test_longlong.py
+++ b/pypy/jit/codewriter/test/test_longlong.py
@@ -60,14 +60,17 @@
         self.do_check('ullong_is_true', EffectInfo.OS_LLONG_IS_TRUE,
                       [lltype.SignedLongLong], lltype.Bool)
 
-##    def test_unary_op(self):
-##        tr = Transformer(FakeCPU(), FakeBuiltinCallControl())
-##        for opname, oopspecindex in [
-##                ('llong_neg',     EffectInfo.OS_LLONG_NEG),
-##                ('llong_invert',  EffectInfo.OS_LLONG_INVERT),
-                
-##                ('ullong_is_true', EffectInfo.OS_LLONG_IS_TRUE),
-##                ('ullong_neg', EffectInfo.OS_LLONG_NEG),
+    def test_unary_op(self):
+        for opname, oopspecindex in [
+                ('llong_neg',      EffectInfo.OS_LLONG_NEG),
+                ('llong_invert',   EffectInfo.OS_LLONG_INVERT),
+                ('ullong_invert',  EffectInfo.OS_LLONG_INVERT),
+                ]:
+            if opname.startswith('u'):
+                T = lltype.UnsignedLongLong
+            else:
+                T = lltype.SignedLongLong
+            self.do_check(opname, oopspecindex, [T], T)
 
 ##                ('llong_lt', EffectInfo.OS_LLONG_LT),
 ##                ('llong_le', EffectInfo.OS_LLONG_LE),
@@ -181,3 +184,13 @@
         assert list(oplist[1].args[3]) == []
         assert list(oplist[1].args[4]) == [v_x, v_y]
         assert oplist[1].result == v_z
+
+    def test_prebuilt_constant_64(self):
+        py.test.skip("in-progress")
+        c_x = const(r_longlong(3000000000))
+        v_y = varoftype(lltype.SignedLongLong)
+        v_z = varoftype(lltype.SignedLongLong)
+        op = SpaceOperation('llong_add', [c_x, v_y], v_z)
+        tr = Transformer(FakeCPU(), FakeBuiltinCallControl())
+        oplist = tr.rewrite_operation(op)
+        xxx

diff --git a/pypy/jit/codewriter/support.py b/pypy/jit/codewriter/support.py
--- a/pypy/jit/codewriter/support.py
+++ b/pypy/jit/codewriter/support.py
@@ -231,6 +231,16 @@
     x = float2longlong(xf)
     return bool(x)
 
+def _ll_1_llong_neg(x):
+    x = float2longlong(xf)
+    y = -x
+    return longlong2float(y)
+
+def _ll_1_llong_invert(x):
+    x = float2longlong(xf)
+    y = ~x
+    return longlong2float(y)
+
 def _ll_2_llong_add(xf, yf):
     x = float2longlong(xf)
     y = float2longlong(yf)
@@ -238,8 +248,8 @@
     return longlong2float(z)
 
 def _ll_1_llong_from_int(x):
-    xf = r_longlong(x)
-    return longlong2float(xf)
+    y = r_longlong(x)
+    return longlong2float(y)
 
 
 # libffi support

diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -792,9 +792,9 @@
             if (isinstance(args[i], Constant) and
                     self._is_longlong(args[i].concretetype)):
                 v_x = varoftype(args[i].concretetype)
-                value = args[i].value
-                assert -2147483648 <= value <= 2147483647     # XXX!
-                c_x = Constant(int(value), lltype.Signed)
+                value = int(args[i].value)
+                assert type(value) is int     # XXX!
+                c_x = Constant(value, lltype.Signed)
                 op0 = SpaceOperation('llong_from_int', [c_x], v_x)
                 op1 = self.prepare_builtin_call(op0, "llong_from_int", [c_x])
                 op2 = self._handle_oopspec_call(op1, [c_x],
@@ -805,6 +805,8 @@
         return args
 
     for _op in ['is_true',
+                'neg',
+                'invert',
                 'add',
                 ]:
         exec py.code.Source('''


More information about the Pypy-commit mailing list