[pypy-svn] r68422 - in pypy/branch/inline-fastpath-malloc/pypy/jit/backend: llsupport x86
fijal at codespeak.net
fijal at codespeak.net
Wed Oct 14 10:59:59 CEST 2009
Author: fijal
Date: Wed Oct 14 10:59:57 2009
New Revision: 68422
Modified:
pypy/branch/inline-fastpath-malloc/pypy/jit/backend/llsupport/gc.py
pypy/branch/inline-fastpath-malloc/pypy/jit/backend/x86/regalloc.py
Log:
* Fix translation
* Add support in llsupport/gc.py
explodes hybrid tests so far though...
Modified: pypy/branch/inline-fastpath-malloc/pypy/jit/backend/llsupport/gc.py
==============================================================================
--- pypy/branch/inline-fastpath-malloc/pypy/jit/backend/llsupport/gc.py (original)
+++ pypy/branch/inline-fastpath-malloc/pypy/jit/backend/llsupport/gc.py Wed Oct 14 10:59:57 2009
@@ -12,6 +12,7 @@
from pypy.jit.backend.llsupport.descr import GcCache, get_field_descr
from pypy.jit.backend.llsupport.descr import GcPtrFieldDescr
from pypy.jit.backend.llsupport.descr import get_call_descr
+from pypy.rlib.rarithmetic import r_ulonglong
# ____________________________________________________________
@@ -343,6 +344,8 @@
lltype.Void)
(self.array_basesize, _, self.array_length_ofs) = \
symbolic.get_array_token(lltype.GcArray(lltype.Signed), True)
+ min_ns = self.GCClass.TRANSLATION_PARAMS['min_nursery_size']
+ self.max_size_of_young_obj = self.GCClass.get_young_fixedsize(min_ns)
# make a malloc function, with three arguments
def malloc_basic(size, tid):
@@ -393,6 +396,26 @@
self.malloc_unicode = malloc_unicode
self.GC_MALLOC_STR_UNICODE = lltype.Ptr(lltype.FuncType(
[lltype.Signed], llmemory.GCREF))
+ def malloc_fixedsize_slowpath(size):
+ gcref = llop1.do_malloc_fixedsize_clear(llmemory.GCREF,
+ 0, size, True, False, False)
+ res = rffi.cast(lltype.Signed, gcref)
+ nurs_free = llop1.gc_adr_of_nursery_free(lltype.Signed)
+ return r_ulonglong(nurs_free) << 32 | r_ulonglong(res)
+ self.malloc_fixedsize_slowpath = malloc_fixedsize_slowpath
+ self.MALLOC_FIXEDSIZE_SLOWPATH = lltype.FuncType([lltype.Signed],
+ lltype.UnsignedLongLong)
+
+ def get_nursery_free_addr(self):
+ return llop.gc_adr_of_nursery_free(lltype.Signed)
+
+ def get_nursery_top_addr(self):
+ return llop.gc_adr_of_nursery_top(lltype.Signed)
+
+ def get_malloc_fixedsize_slowpath_addr(self):
+ fptr = llhelper(lltype.Ptr(self.MALLOC_FIXEDSIZE_SLOWPATH),
+ self.malloc_fixedsize_slowpath)
+ return rffi.cast(lltype.Signed, fptr)
def initialize(self):
self.gcrefs.initialize()
@@ -521,6 +544,15 @@
newops.append(ResOperation(rop.COND_CALL_GC_WB, args, None,
descr=self.calldescr_jit_wb))
+ def can_inline_malloc(self, descr):
+ assert isinstance(descr, BaseSizeDescr)
+ if descr.size < self.max_size_of_young_obj:
+ has_finalizer = bool(descr.tid & (1<<16))
+ if has_finalizer:
+ return False
+ return True
+ return False
+
# ____________________________________________________________
def get_ll_description(gcdescr, translator=None):
Modified: pypy/branch/inline-fastpath-malloc/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/branch/inline-fastpath-malloc/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/branch/inline-fastpath-malloc/pypy/jit/backend/x86/regalloc.py Wed Oct 14 10:59:57 2009
@@ -14,7 +14,7 @@
from pypy.jit.backend.x86.jump import remap_stack_layout
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.backend.llsupport.descr import BaseFieldDescr, BaseArrayDescr
-from pypy.jit.backend.llsupport.descr import BaseCallDescr
+from pypy.jit.backend.llsupport.descr import BaseCallDescr, BaseSizeDescr
from pypy.jit.backend.llsupport.regalloc import StackManager, RegisterManager,\
TempBox
@@ -624,6 +624,7 @@
self.rm.possibly_free_vars(op.args)
def _fastpath_malloc(self, op, descr):
+ assert isinstance(descr, BaseSizeDescr)
gc_ll_descr = self.assembler.cpu.gc_ll_descr
tmp0 = TempBox()
self.rm.force_allocate_reg(op.result, selected_reg=eax)
More information about the Pypy-commit
mailing list