[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