[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