[pypy-svn] r22731 - in pypy/dist/pypy/translator/llvm/externs: . test

rxe at codespeak.net rxe at codespeak.net
Fri Jan 27 14:07:35 CET 2006


Author: rxe
Date: Fri Jan 27 14:07:33 2006
New Revision: 22731

Added:
   pypy/dist/pypy/translator/llvm/externs/
   pypy/dist/pypy/translator/llvm/externs/__init__.py   (contents, props changed)
   pypy/dist/pypy/translator/llvm/externs/ringbuffer.py   (contents, props changed)
   pypy/dist/pypy/translator/llvm/externs/test/
   pypy/dist/pypy/translator/llvm/externs/test/test_ringbuffer.py   (contents, props changed)
Log:
(ericvrp, rxe)

experimental ring malloc code ported to rpython from llvm code.



Added: pypy/dist/pypy/translator/llvm/externs/__init__.py
==============================================================================

Added: pypy/dist/pypy/translator/llvm/externs/ringbuffer.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/llvm/externs/ringbuffer.py	Fri Jan 27 14:07:33 2006
@@ -0,0 +1,22 @@
+from pypy.rpython.memory.lladdress import raw_malloc
+
+class RingBufferData:
+    size          = 8192
+    entry_maxsize = 16
+
+    def __init__(self):
+        self.index = 0
+    def init(self):
+        self.data = raw_malloc(self.size + self.entry_maxsize)
+
+ringbuffer = RingBufferData()
+
+def initialise():
+    ringbuffer.init()
+
+def malloc_exception(nbytes):
+    assert nbytes <= ringbuffer.entry_maxsize
+    addr = ringbuffer.data + ringbuffer.index
+    ringbuffer.index = (ringbuffer.index + nbytes) & (ringbuffer.size - 1)
+    return addr
+

Added: pypy/dist/pypy/translator/llvm/externs/test/test_ringbuffer.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/llvm/externs/test/test_ringbuffer.py	Fri Jan 27 14:07:33 2006
@@ -0,0 +1,14 @@
+import py
+from pypy.translator.llvm.test.runtest import compile_function as compile
+from pypy.translator.llvm.externs import ringbuffer
+
+def test_malloc_something():
+    def f(value):
+        ringbuffer.initialise()
+        buf = ringbuffer.malloc_exception(value)
+        buf.signed[0] = 10
+        return buf.signed[0]
+
+    fc = compile(f, [int])
+    assert fc(16) == f(16)
+    assert fc(10) == f(10)



More information about the Pypy-commit mailing list