Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r60383:348409f40c57
Date: 2013-01-23 20:52 +0200
http://bitbucket.org/pypy/pypy/changeset/348409f40c57/
Log: try not using boehm, when we dno't have to
diff --git a/rpython/jit/backend/llsupport/gc.py
b/rpython/jit/backend/llsupport/gc.py
--- a/rpython/jit/backend/llsupport/gc.py
+++ b/rpython/jit/backend/llsupport/gc.py
@@ -154,6 +154,7 @@
def configure_boehm_once(cls):
""" Configure boehm only once, since we don't cache failures
"""
+ return
if hasattr(cls, 'malloc_fn_ptr'):
return cls.malloc_fn_ptr
from rpython.rtyper.tool import rffi_platform
@@ -193,9 +194,33 @@
def __init__(self, gcdescr, translator, rtyper):
GcLLDescription.__init__(self, gcdescr, translator, rtyper)
# grab a pointer to the Boehm 'malloc' function
- self.malloc_fn_ptr = self.configure_boehm_once()
+ #self.malloc_fn_ptr = self.configure_boehm_once()
self._setup_str()
self._make_functions()
+ self.memory = 0
+ self.reset_mem()
+
+ def reset_mem(self):
+ malloc = rffi.llexternal('malloc', [lltype.Signed], lltype.Signed)
+ free = rffi.llexternal('free', [lltype.Signed], lltype.Void)
+ if self.memory != 0:
+ free(self.memory)
+ self.memory = 0
+ A_LOT = 100*1024*1024
+ self.memory = malloc(A_LOT)
+ self.mem_top = self.memory + A_LOT
+ self.mem_ptr = self.memory
+
+ def malloc_fn_ptr(self, size):
+ # aligned
+ if size & 7:
+ size += 8
+ size &= ~7
+ from rpython.rtyper.lltypesystem.ll2ctypes import _llgcopaque
+ assert self.mem_ptr + size < self.mem_top
+ r = self.mem_ptr
+ self.mem_ptr += size
+ return lltype._ptr(llmemory.GCREF, _llgcopaque(r))
def _make_functions(self):
diff --git a/rpython/jit/backend/test/test_random.py
b/rpython/jit/backend/test/test_random.py
--- a/rpython/jit/backend/test/test_random.py
+++ b/rpython/jit/backend/test/test_random.py
@@ -886,7 +886,12 @@
print ' # passed (%d/%d).' % (num + 1, max)
else:
print ' # passed.'
- output.close()
+ if pytest.config.option.output:
+ output.close()
+ if hasattr(cpu, 'gc_ll_descr'):
+ func = getattr(cpu.gc_ll_descr, 'reset_mem', None)
+ if func:
+ func()
print
def test_random_function(BuilderClass=OperationBuilder):
diff --git a/rpython/jit/backend/x86/test/test_regalloc2.py
b/rpython/jit/backend/x86/test/test_regalloc2.py
--- a/rpython/jit/backend/x86/test/test_regalloc2.py
+++ b/rpython/jit/backend/x86/test/test_regalloc2.py
@@ -1,6 +1,6 @@
from rpython.jit.metainterp.history import ResOperation, BoxInt, ConstInt,\
BasicFailDescr, JitCellToken, BasicFinalDescr, TargetToken, ConstPtr,\
- BoxPtr, BoxFloat
+ BoxPtr, BoxFloat, ConstFloat
from rpython.jit.metainterp.resoperation import rop
from rpython.jit.backend.detect_cpu import getcpuclass
from rpython.jit.backend.x86.arch import WORD
@@ -9,7 +9,7 @@
from rpython.rtyper.llinterp import LLException
from rpython.rtyper.annlowlevel import llhelper
from rpython.jit.codewriter.effectinfo import EffectInfo
-from rpython.jit.codewriter import longlong
+from rpython.jit.codewriter import longlong, heaptracker
CPU = getcpuclass()
@@ -306,14 +306,30 @@
EffectInfo.MOST_GENERAL)
return rffi.cast(lltype.Signed, fptr), calldescr
-def getexception():
+def getexception(cpu, ARGS):
xtp = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
xtp.subclassrange_min = 1
xtp.subclassrange_max = 3
X = lltype.GcStruct('X', ('parent', rclass.OBJECT),
hints={'vtable': xtp._obj})
- xptr = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(X))
- return xptr, xtp
+ xptr = lltype.malloc(X)
+ vtableptr = X._hints['vtable']._as_ptr()
-def test_bug2():
- xxx
+ def f(*args):
+ raise LLException(vtableptr, xptr)
+
+ fptr, funcdescr = getllhelper(cpu, f, ARGS, lltype.Void)
+
+ return heaptracker.adr2int(llmemory.cast_ptr_to_adr(vtableptr)), fptr,
funcdescr
+
+def getvtable(cpu, S=None):
+ cls1 = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
+ cls1.subclassrange_min = 1
+ cls1.subclassrange_max = 3
+ if S is not None:
+ descr = cpu.sizeof(S)
+ if not hasattr(cpu.tracker, '_all_size_descrs_with_vtable'):
+ cpu.tracker._all_size_descrs_with_vtable = []
+ cpu.tracker._all_size_descrs_with_vtable.append(descr)
+ descr._corresponding_vtable = cls1
+ return llmemory.cast_adr_to_int(llmemory.cast_ptr_to_adr(cls1), "symbolic")
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit