Author: Alex Gaynor <[email protected]>
Branch: jit-codewriter-force-cast-refactor
Changeset: r46834:7a27b8efd0d5
Date: 2011-08-27 18:47 -0400
http://bitbucket.org/pypy/pypy/changeset/7a27b8efd0d5/

Log:    First pass at handling conversions from longlong to some other int.

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
@@ -805,6 +805,25 @@
             assert False
 
     def _int_to_int_cast(self, v_arg, v_result):
+        longlong_arg = longlong.is_longlong(v_arg)
+        longlong_res = longlong.is_longlong(v_result)
+
+        if longlong_arg and longlong_res:
+            return
+        elif longlong_arg:
+            v = varoftype(lltype.Signed)
+            op1 = self.rewrite_operation(
+                SpaceOperation('truncate_longlong_to_int', [v_arg], v)
+            )
+            op2 = SpaceOperation('force_cast', [v], v_result)
+            oplist = self.rewrite_operation(op2)
+            if not oplist:
+                op1.result = v
+                oplist = []
+            return [op1] + oplist
+        elif longlong_res:
+            assert False
+
         size1, unsigned1 = rffi.size_and_sign(v_arg.concretetype)
         size2, unsigned2 = rffi.size_and_sign(v_result.concretetype)
         assert size1 <= rffi.sizeof(lltype.Signed)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to