[pypy-commit] pypy op_malloc_gc: translation fixes
arigo
noreply at buildbot.pypy.org
Sun Dec 18 20:43:21 CET 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: op_malloc_gc
Changeset: r50682:2ba13ee957b9
Date: 2011-12-18 20:42 +0100
http://bitbucket.org/pypy/pypy/changeset/2ba13ee957b9/
Log: translation fixes
diff --git a/pypy/jit/backend/llsupport/gc.py b/pypy/jit/backend/llsupport/gc.py
--- a/pypy/jit/backend/llsupport/gc.py
+++ b/pypy/jit/backend/llsupport/gc.py
@@ -1,6 +1,6 @@
import os
from pypy.rlib import rgc
-from pypy.rlib.objectmodel import we_are_translated
+from pypy.rlib.objectmodel import we_are_translated, specialize
from pypy.rlib.debug import fatalerror
from pypy.rlib.rarithmetic import ovfcheck
from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rclass, rstr
@@ -9,8 +9,7 @@
from pypy.rpython.annlowlevel import llhelper
from pypy.translator.tool.cbuild import ExternalCompilationInfo
from pypy.jit.codewriter import heaptracker
-from pypy.jit.metainterp.history import BoxInt, BoxPtr, ConstInt, ConstPtr
-from pypy.jit.metainterp.history import AbstractDescr
+from pypy.jit.metainterp.history import ConstPtr, AbstractDescr
from pypy.jit.metainterp.resoperation import ResOperation, rop
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.backend.llsupport.symbolic import WORD
@@ -45,16 +44,23 @@
memory.
"""
FUNCPTR = lltype.Ptr(lltype.FuncType(ARGS, RESULT))
- ll_func = llhelper(FUNCPTR, func)
- c_ll_func = ConstInt(
- heaptracker.adr2int(llmemory.cast_ptr_to_adr(ll_func)))
descr = get_call_descr(self, ARGS, RESULT)
- setattr(self, '%s' % funcname, func)
- setattr(self, '%s_fn' % funcname, ll_func)
- setattr(self, 'c_%s_fn' % funcname, c_ll_func)
- setattr(self, '%s_descr' % funcname, descr)
+ setattr(self, funcname, func)
+ setattr(self, funcname + '_FUNCPTR', FUNCPTR)
+ setattr(self, funcname + '_descr', descr)
self._generated_functions.append(funcname)
+ @specialize.arg(1)
+ def get_malloc_fn(self, funcname):
+ func = getattr(self, funcname)
+ FUNC = getattr(self, funcname + '_FUNCPTR')
+ return llhelper(FUNC, func)
+
+ @specialize.arg(1)
+ def get_malloc_fn_addr(self, funcname):
+ ll_func = self.get_malloc_fn(funcname)
+ return heaptracker.adr2int(llmemory.cast_ptr_to_adr(ll_func))
+
def _freeze_(self):
return True
def initialize(self):
diff --git a/pypy/jit/backend/llsupport/rewrite.py b/pypy/jit/backend/llsupport/rewrite.py
--- a/pypy/jit/backend/llsupport/rewrite.py
+++ b/pypy/jit/backend/llsupport/rewrite.py
@@ -150,13 +150,14 @@
"""Generate a CALL_MALLOC_GC(malloc_fixedsize_fn, Const(size)).
Note that with the framework GC, this should be called very rarely.
"""
- self._gen_call_malloc_gc([self.gc_ll_descr.c_malloc_fixedsize_fn,
- ConstInt(size)], v_result,
+ addr = self.gc_ll_descr.get_malloc_fn_addr('malloc_fixedsize')
+ self._gen_call_malloc_gc([ConstInt(addr), ConstInt(size)], v_result,
self.gc_ll_descr.malloc_fixedsize_descr)
def gen_boehm_malloc_array(self, arraydescr, v_num_elem, v_result):
"""Generate a CALL_MALLOC_GC(malloc_array_fn, ...) for Boehm."""
- self._gen_call_malloc_gc([self.gc_ll_descr.c_malloc_array_fn,
+ addr = self.gc_ll_descr.get_malloc_fn_addr('malloc_array')
+ self._gen_call_malloc_gc([ConstInt(addr),
ConstInt(arraydescr.basesize),
v_num_elem,
ConstInt(arraydescr.itemsize),
@@ -172,14 +173,17 @@
and arraydescr.lendescr.offset ==
self.gc_ll_descr.standard_array_length_ofs):
# this is a standard-looking array, common case
- args = [self.gc_ll_descr.c_malloc_array_fn,
+ addr = self.gc_ll_descr.get_malloc_fn_addr('malloc_array')
+ args = [ConstInt(addr),
ConstInt(arraydescr.itemsize),
ConstInt(arraydescr.tid),
v_num_elem]
calldescr = self.gc_ll_descr.malloc_array_descr
else:
# rare case, so don't care too much about the number of arguments
- args = [self.gc_ll_descr.c_malloc_array_nonstandard_fn,
+ addr = self.gc_ll_descr.get_malloc_fn_addr(
+ 'malloc_array_nonstandard')
+ args = [ConstInt(addr),
ConstInt(arraydescr.basesize),
ConstInt(arraydescr.itemsize),
ConstInt(arraydescr.lendescr.offset),
@@ -190,14 +194,14 @@
def gen_malloc_str(self, v_num_elem, v_result):
"""Generate a CALL_MALLOC_GC(malloc_str_fn, ...)."""
- self._gen_call_malloc_gc([self.gc_ll_descr.c_malloc_str_fn,
- v_num_elem], v_result,
+ addr = self.gc_ll_descr.get_malloc_fn_addr('malloc_str')
+ self._gen_call_malloc_gc([ConstInt(addr), v_num_elem], v_result,
self.gc_ll_descr.malloc_str_descr)
def gen_malloc_unicode(self, v_num_elem, v_result):
"""Generate a CALL_MALLOC_GC(malloc_unicode_fn, ...)."""
- self._gen_call_malloc_gc([self.gc_ll_descr.c_malloc_unicode_fn,
- v_num_elem], v_result,
+ addr = self.gc_ll_descr.get_malloc_fn_addr('malloc_unicode')
+ self._gen_call_malloc_gc([ConstInt(addr), v_num_elem], v_result,
self.gc_ll_descr.malloc_unicode_descr)
def gen_malloc_nursery(self, size, v_result):
diff --git a/pypy/jit/backend/llsupport/test/test_gc.py b/pypy/jit/backend/llsupport/test/test_gc.py
--- a/pypy/jit/backend/llsupport/test/test_gc.py
+++ b/pypy/jit/backend/llsupport/test/test_gc.py
@@ -6,6 +6,7 @@
from pypy.jit.backend.llsupport.gc import *
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.metainterp.gc import get_description
+from pypy.jit.metainterp.history import BoxPtr, BoxInt, ConstPtr
from pypy.jit.metainterp.resoperation import get_deep_immutable_oplist
from pypy.jit.tool.oparser import parse
from pypy.rpython.lltypesystem.rclass import OBJECT, OBJECT_VTABLE
diff --git a/pypy/jit/backend/llsupport/test/test_rewrite.py b/pypy/jit/backend/llsupport/test/test_rewrite.py
--- a/pypy/jit/backend/llsupport/test/test_rewrite.py
+++ b/pypy/jit/backend/llsupport/test/test_rewrite.py
@@ -64,7 +64,7 @@
namespace.update(locals())
#
for funcname in self.gc_ll_descr._generated_functions:
- namespace[funcname] = getattr(self.gc_ll_descr, '%s_fn' % funcname)
+ namespace[funcname] = self.gc_ll_descr.get_malloc_fn(funcname)
namespace[funcname + '_descr'] = getattr(self.gc_ll_descr,
'%s_descr' % funcname)
#
More information about the pypy-commit
mailing list