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

Reply via email to