[pypy-svn] r52817 - in pypy/branch/jit-hotpath/pypy/jit: rainbow timeshifter
cfbolz at codespeak.net
cfbolz at codespeak.net
Fri Mar 21 18:32:43 CET 2008
Author: cfbolz
Date: Fri Mar 21 18:32:41 2008
New Revision: 52817
Modified:
pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py
Log:
split the ll_gen functions into a raising and a non-raising variant for clarity
Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py Fri Mar 21 18:32:41 2008
@@ -1003,16 +1003,20 @@
self.green_result(result)
elif color == "red":
if opdesc.nb_args == 1:
- impl = rtimeshift.ll_gen1
+ if opdesc.canraise:
+ impl = rtimeshift.ll_gen1_canraise
+ else:
+ impl = rtimeshift.ll_gen1
elif opdesc.nb_args == 2:
- impl = rtimeshift.ll_gen2
+ if opdesc.canraise:
+ impl = rtimeshift.ll_gen2_canraise
+ else:
+ impl = rtimeshift.ll_gen2
else:
XXX
- def implementation(self):
- args = (opdesc, self.jitstate, )
- for i in numargs:
- args += (self.get_redarg(), )
- result = impl(*args)
+ @arguments(*(("red", ) * opdesc.nb_args))
+ def implementation(self, *args):
+ result = impl(opdesc, self.jitstate, *args)
self.red_result(result)
else:
assert 0, "unknown color"
Modified: pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py Fri Mar 21 18:32:41 2008
@@ -83,25 +83,31 @@
opname = opdesc.opname
if opdesc.tryfold and argbox.is_constant():
arg = rvalue.ll_getvalue(argbox, ARG0)
- if not opdesc.canraise:
+ res = opdesc.llop(RESULT, arg)
+ return rvalue.ll_fromvalue(jitstate, res)
+ gv_arg = argbox.getgenvar(jitstate)
+ genvar = jitstate.curbuilder.genop1(opdesc.opname, gv_arg)
+ return opdesc.redboxcls(opdesc.result_kind, genvar)
+
+def ll_gen1_canraise(opdesc, jitstate, argbox):
+ ARG0 = opdesc.ARG0
+ RESULT = opdesc.RESULT
+ opname = opdesc.opname
+ if opdesc.tryfold and argbox.is_constant():
+ arg = rvalue.ll_getvalue(argbox, ARG0)
+ try:
res = opdesc.llop(RESULT, arg)
+ except Exception: # shouldn't raise anything unexpected
+ res = opdesc.whatever_result
+ gv_flag = opdesc.gv_True
else:
- try:
- res = opdesc.llop(RESULT, arg)
- except Exception: # shouldn't raise anything unexpected
- res = opdesc.whatever_result
- gv_flag = opdesc.gv_True
- else:
- gv_flag = opdesc.gv_False
- jitstate.gv_op_raised = gv_flag
+ gv_flag = opdesc.gv_False
+ jitstate.gv_op_raised = gv_flag
return rvalue.ll_fromvalue(jitstate, res)
gv_arg = argbox.getgenvar(jitstate)
- if not opdesc.canraise:
- genvar = jitstate.curbuilder.genop1(opdesc.opname, gv_arg)
- else:
- genvar, gv_raised = jitstate.curbuilder.genraisingop1(opdesc.opname,
- gv_arg)
- jitstate.gv_op_raised = gv_raised # for split_raisingop()
+ genvar, gv_raised = jitstate.curbuilder.genraisingop1(opdesc.opname,
+ gv_arg)
+ jitstate.gv_op_raised = gv_raised # for split_raisingop()
return opdesc.redboxcls(opdesc.result_kind, genvar)
def ll_gen2(opdesc, jitstate, argbox0, argbox1):
@@ -113,26 +119,35 @@
# const propagate
arg0 = rvalue.ll_getvalue(argbox0, ARG0)
arg1 = rvalue.ll_getvalue(argbox1, ARG1)
- if not opdesc.canraise:
+ return rvalue.ll_fromvalue(jitstate, opdesc.llop(RESULT, arg0, arg1))
+ gv_arg0 = argbox0.getgenvar(jitstate)
+ gv_arg1 = argbox1.getgenvar(jitstate)
+ genvar = jitstate.curbuilder.genop2(opdesc.opname, gv_arg0, gv_arg1)
+ return opdesc.redboxcls(opdesc.result_kind, genvar)
+
+def ll_gen2_canraise(opdesc, jitstate, argbox0, argbox1):
+ ARG0 = opdesc.ARG0
+ ARG1 = opdesc.ARG1
+ RESULT = opdesc.RESULT
+ opname = opdesc.opname
+ if opdesc.tryfold and argbox0.is_constant() and argbox1.is_constant():
+ # const propagate
+ arg0 = rvalue.ll_getvalue(argbox0, ARG0)
+ arg1 = rvalue.ll_getvalue(argbox1, ARG1)
+ try:
res = opdesc.llop(RESULT, arg0, arg1)
+ except Exception: # shouldn't raise anything unexpected
+ res = opdesc.whatever_result
+ gv_flag = opdesc.gv_True
else:
- try:
- res = opdesc.llop(RESULT, arg0, arg1)
- except Exception: # shouldn't raise anything unexpected
- res = opdesc.whatever_result
- gv_flag = opdesc.gv_True
- else:
- gv_flag = opdesc.gv_False
- jitstate.gv_op_raised = gv_flag
+ gv_flag = opdesc.gv_False
+ jitstate.gv_op_raised = gv_flag
return rvalue.ll_fromvalue(jitstate, res)
gv_arg0 = argbox0.getgenvar(jitstate)
gv_arg1 = argbox1.getgenvar(jitstate)
- if not opdesc.canraise:
- genvar = jitstate.curbuilder.genop2(opdesc.opname, gv_arg0, gv_arg1)
- else:
- genvar, gv_raised = jitstate.curbuilder.genraisingop2(opdesc.opname,
- gv_arg0, gv_arg1)
- jitstate.gv_op_raised = gv_raised # for split_raisingop()
+ genvar, gv_raised = jitstate.curbuilder.genraisingop2(opdesc.opname,
+ gv_arg0, gv_arg1)
+ jitstate.gv_op_raised = gv_raised # for split_raisingop()
return opdesc.redboxcls(opdesc.result_kind, genvar)
def genmalloc_varsize(jitstate, contdesc, sizebox):
More information about the Pypy-commit
mailing list