[pypy-svn] r49983 - in pypy/dist/pypy/translator/llvm: . test
arigo at codespeak.net
arigo at codespeak.net
Fri Dec 21 14:56:03 CET 2007
Author: arigo
Date: Fri Dec 21 14:55:57 2007
New Revision: 49983
Modified:
pypy/dist/pypy/translator/llvm/opwriter.py
pypy/dist/pypy/translator/llvm/test/test_lladdresses.py
Log:
Support for cast_int_to_adr and back.
Modified: pypy/dist/pypy/translator/llvm/opwriter.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/opwriter.py (original)
+++ pypy/dist/pypy/translator/llvm/opwriter.py Fri Dec 21 14:55:57 2007
@@ -133,8 +133,10 @@
self.shiftop(opr)
elif op.opname.startswith('cast_') or op.opname.startswith('truncate_'):
- if op.opname == "cast_ptr_to_int":
+ if op.opname in ("cast_ptr_to_int", "cast_adr_to_int"):
self.cast_ptr_to_int(opr)
+ elif op.opname in ("cast_int_to_ptr", "cast_int_to_adr"):
+ self.cast_int_to_ptr(opr)
else:
self.cast_primitive(opr)
else:
@@ -265,7 +267,11 @@
def cast_ptr_to_int(self, opr):
self.codewriter.cast(opr.retref, opr.argtypes[0],
opr.argrefs[0], opr.rettype, 'ptrtoint')
-
+
+ def cast_int_to_ptr(self, opr):
+ self.codewriter.cast(opr.retref, opr.argtypes[0],
+ opr.argrefs[0], opr.rettype, 'inttoptr')
+
def int_is_true(self, opr):
self.codewriter.binaryop("icmp ne", opr.retref, opr.argtypes[0],
opr.argrefs[0], "0")
Modified: pypy/dist/pypy/translator/llvm/test/test_lladdresses.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/test_lladdresses.py (original)
+++ pypy/dist/pypy/translator/llvm/test/test_lladdresses.py Fri Dec 21 14:55:57 2007
@@ -154,5 +154,17 @@
return s1.x + s1.y
fn = compile_function(f, [])
- assert f() == 579
+ assert fn() == 579
+def test_cast_to_int():
+ S1 = lltype.GcStruct("S1", ("x", lltype.Signed), ("y", lltype.Signed))
+ s1 = lltype.malloc(S1, zero=True)
+ def f():
+ a1 = llmemory.cast_ptr_to_adr(s1)
+ i1 = llmemory.cast_adr_to_int(a1)
+ a2 = llmemory.cast_int_to_adr(i1)
+ s2 = llmemory.cast_adr_to_ptr(a2, lltype.Ptr(S1))
+ return int(s1 == s2)
+
+ fn = compile_function(f, [])
+ assert fn() == 1
More information about the Pypy-commit
mailing list