[pypy-svn] r31641 - in pypy/dist/pypy: annotation jit/codegen/i386 jit/timeshifter/test rpython rpython/lltypesystem translator/c/src

arigo at codespeak.net arigo at codespeak.net
Fri Aug 25 15:28:29 CEST 2006


Author: arigo
Date: Fri Aug 25 15:28:23 2006
New Revision: 31641

Modified:
   pypy/dist/pypy/annotation/builtin.py
   pypy/dist/pypy/jit/codegen/i386/ri386genop.py
   pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py
   pypy/dist/pypy/rpython/lltypesystem/llmemory.py
   pypy/dist/pypy/rpython/lltypesystem/lloperation.py
   pypy/dist/pypy/rpython/lltypesystem/opimpl.py
   pypy/dist/pypy/rpython/rbuiltin.py
   pypy/dist/pypy/translator/c/src/address.h
Log:
(pedronis, arigo)

Link the timeshifter and the ri398genop tests together.
The first test passes!


Modified: pypy/dist/pypy/annotation/builtin.py
==============================================================================
--- pypy/dist/pypy/annotation/builtin.py	(original)
+++ pypy/dist/pypy/annotation/builtin.py	Fri Aug 25 15:28:23 2006
@@ -315,6 +315,9 @@
 def llmemory_cast_adr_to_int(s):
     return SomeInteger() # xxx
 
+def llmemory_cast_int_to_adr(s):
+    return SomeAddress()
+
 def rstack_yield_current_frame_to_caller():
     return SomeExternalObject(pypy.rpython.rstack.frame_stack_top)
     

Modified: pypy/dist/pypy/jit/codegen/i386/ri386genop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/ri386genop.py	(original)
+++ pypy/dist/pypy/jit/codegen/i386/ri386genop.py	Fri Aug 25 15:28:23 2006
@@ -1,4 +1,4 @@
-from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.jit.codegen.i386.codebuf import MachineCodeBlock
 from pypy.jit.codegen.i386.ri386 import *
 from pypy.jit.codegen.model import AbstractRGenOp, CodeGenBlock, CodeGenLink
@@ -32,6 +32,31 @@
         self.kind = kind
 
 
+##class Const(GenConst):
+
+##    def revealconst(self, TYPE):
+##        if isinstance(self, IntConst):
+##            self.revealconst_int(TYPE)
+##        elif isinstance(self, PtrConst):
+##            self.revealconst_ptr(TYPE)
+        
+##        if isinstance(TYPE, lltype.Ptr):
+##            if isinstance(self, PtrConst):
+##                return self.revealconst_ptr(TYPE)
+##            el
+##                return self.revealconst_ptr(TYPE)
+##        elif TYPE is lltype.Float:
+##            assert isinstance(self, DoubleConst)
+##            return self.revealconst_double()
+##        else:
+##            assert isinstance(TYPE, lltype.Primitive)
+##            assert TYPE is not lltype.Void, "cannot make red boxes of voids"
+##            assert isinstance(self, IntConst)
+##            return self.revealconst_primitive(TYPE)
+##        return self.value
+##    revealconst._annspecialcase_ = 'specialize:arg(1)'
+
+
 class IntConst(GenConst):
 
     def __init__(self, value):
@@ -41,7 +66,12 @@
         return imm(self.value)
 
     def revealconst(self, T):
-        return lltype.cast_int_to_ptr(T, self.value)
+        if isinstance(T, lltype.Ptr):
+            return lltype.cast_int_to_ptr(T, self.value)
+        elif T is llmemory.Address:
+            return llmemory.cast_int_to_adr(self.value)
+        else:
+            return lltype.cast_primitive(T, self.value)
     revealconst._annspecialcase_ = 'specialize:arg(1)'
 
 

Modified: pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py	Fri Aug 25 15:28:23 2006
@@ -132,8 +132,7 @@
         FUNCTYPE = lltype.FuncType(residual_argtypes, RESTYPE)
         gv_functype = RGenOp.constTYPE(FUNCTYPE)
 
-        def ll_runner():
-            rgenop = RGenOp.get_rgenop_for_testing()
+        def ll_runner(rgenop):
             builder = rtimeshift.make_builder(rgenop)
             timeshifted_entrypoint_args = ()
             for color, llvalue in argdescription:
@@ -157,12 +156,24 @@
                                                    gv_functype)
             return gv_generated
 
-        annhelper = htshift.annhelper
-        runner_graph = annhelper.getgraph(ll_runner, [], htshift.s_ConstOrVar)
+        self.rtyper = rtyper
+        self.htshift = htshift
+        self.FUNCTYPE = FUNCTYPE
+        return self.timeshift_test(ll_runner, residual_args)
+
+    def timeshift_test(self, ll_runner, residual_args):
+        RGenOp = self.RGenOp
+        def ll_main():
+            rgenop = RGenOp.get_rgenop_for_testing()
+            return ll_runner(rgenop)
+
+        annhelper = self.htshift.annhelper
+        runner_graph = annhelper.getgraph(ll_main, [],
+                                          self.htshift.s_ConstOrVar)
         annhelper.finish()
 
         # run the runner
-        llinterp = LLInterpreter(rtyper)
+        llinterp = LLInterpreter(self.rtyper)
         ll_gv_generated = llinterp.eval_graph(runner_graph, [])
 
         # now try to run the residual graph generated by the builder

Modified: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/llmemory.py	(original)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py	Fri Aug 25 15:28:23 2006
@@ -485,6 +485,10 @@
 def cast_adr_to_int(adr):
     return adr._cast_to_int()
 
+def cast_int_to_adr(int):
+    raise NotImplementedError("cast_int_to_adr")
+
+
 # ____________________________________________________________
 
 import weakref

Modified: pypy/dist/pypy/rpython/lltypesystem/lloperation.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/lloperation.py	(original)
+++ pypy/dist/pypy/rpython/lltypesystem/lloperation.py	Fri Aug 25 15:28:23 2006
@@ -340,7 +340,7 @@
     'cast_weakadr_to_ptr':  LLOp(canfold=True),
     'cast_weakadr_to_int':  LLOp(canfold=True),
     'cast_adr_to_int':      LLOp(canfold=True),
-    #'cast_int_to_adr':      LLOp(canfold=True),
+    'cast_int_to_adr':      LLOp(canfold=True),   # not implemented in llinterp
 
     # __________ GC operations __________
 

Modified: pypy/dist/pypy/rpython/lltypesystem/opimpl.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/opimpl.py	(original)
+++ pypy/dist/pypy/rpython/lltypesystem/opimpl.py	Fri Aug 25 15:28:23 2006
@@ -279,6 +279,9 @@
     checkadr(adr)
     return llmemory.cast_adr_to_int(adr)
 
+def op_cast_int_to_adr(int):
+    return llmemory.cast_int_to_adr(int)
+
 ##def op_cast_int_to_adr(x):
 ##    assert type(x) is int
 ##    return llmemory.cast_int_to_adr(x)

Modified: pypy/dist/pypy/rpython/rbuiltin.py
==============================================================================
--- pypy/dist/pypy/rpython/rbuiltin.py	(original)
+++ pypy/dist/pypy/rpython/rbuiltin.py	Fri Aug 25 15:28:23 2006
@@ -636,6 +636,13 @@
     return hop.genop('cast_adr_to_int', [adr],
                      resulttype = lltype.Signed)
 
+def rtype_cast_int_to_adr(hop):
+    assert hop.args_s[0].is_constant()
+    v_input, = hop.inputargs(lltype.Signed)
+    hop.exception_cannot_occur()
+    return hop.genop('cast_int_to_adr', [v_input],
+                     resulttype = llmemory.Address)
+
 def rtype_cast_ptr_to_weakadr(hop):
     vlist = hop.inputargs(hop.args_r[0])
     assert isinstance(vlist[0].concretetype, lltype.Ptr)

Modified: pypy/dist/pypy/translator/c/src/address.h
==============================================================================
--- pypy/dist/pypy/translator/c/src/address.h	(original)
+++ pypy/dist/pypy/translator/c/src/address.h	Fri Aug 25 15:28:23 2006
@@ -17,6 +17,7 @@
 #define OP_ADR_GE(x,y,r)	  r = ((x) >= (y))
 
 #define OP_CAST_ADR_TO_INT(x, r)     r = ((long)x)
+#define OP_CAST_INT_TO_ADR(x, r)     r = ((void *)(x))
 #define OP_CAST_WEAKADR_TO_INT(x, r) r = ((long)x)
 
 #ifndef HIDE_POINTER



More information about the Pypy-commit mailing list