Ejemplo n.º 1
0
        def f(d):
            bc = d * rffi.sizeof(rffi.SIGNED)
            va = alloc_raw_storage(bc, zero=True)
            vb = alloc_raw_storage(bc, zero=True)
            vc = alloc_raw_storage(bc, zero=True)
            x = 1
            for i in range(d):
                j = i * rffi.sizeof(rffi.SIGNED)
                raw_storage_setitem(va, j, rffi.cast(rffi.SIGNED, i))
                raw_storage_setitem(vb, j, rffi.cast(rffi.SIGNED, i))
            i = 0
            while i < bc:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(rffi.SIGNED, va, i)
                b = raw_storage_getitem(rffi.SIGNED, vb, i)
                c = a + b
                raw_storage_setitem(vc, i, rffi.cast(rffi.SIGNED, c))
                i += 1 * rffi.sizeof(rffi.SIGNED)
            res = 0
            for i in range(d):
                res += raw_storage_getitem(rffi.SIGNED, vc, i * rffi.sizeof(rffi.SIGNED))

            free_raw_storage(va)
            free_raw_storage(vb)
            free_raw_storage(vc)
            return res
Ejemplo n.º 2
0
 def f(bytecount, va, vb, vc):
     i = 0
     while i < bytecount:
         myjitdriver.jit_merge_point()
         a = raw_storage_getitem(type,va,i)
         b = raw_storage_getitem(type,vb,i)
         c = func(a,b)
         raw_storage_setitem(vc, i, rffi.cast(type,c))
         i += size
Ejemplo n.º 3
0
 def f(bytecount, va, vb, vc):
     i = 0
     while i < bytecount:
         myjitdriver.jit_merge_point()
         a = raw_storage_getitem(type, va, i)
         b = raw_storage_getitem(type, vb, i)
         c = func(a, b)
         raw_storage_setitem(vc, i, rffi.cast(type, c))
         i += size
Ejemplo n.º 4
0
def test_untranslated_storage():
    r = alloc_raw_storage(37)
    raw_storage_setitem(r, 8, 1<<30)
    res = raw_storage_getitem(lltype.Signed, r, 8)
    assert res == 1<<30
    raw_storage_setitem(r, 8, 3.14)
    res = raw_storage_getitem(lltype.Float, r, 8)
    assert res == 3.14
    py.test.raises(AlignmentError, raw_storage_getitem, lltype.Signed, r, 3)
    py.test.raises(AlignmentError, raw_storage_setitem, r, 3, 42.5)
    free_raw_storage(r)
Ejemplo n.º 5
0
def test_untranslated_storage():
    r = alloc_raw_storage(37)
    raw_storage_setitem(r, 8, 1 << 30)
    res = raw_storage_getitem(lltype.Signed, r, 8)
    assert res == 1 << 30
    raw_storage_setitem(r, 8, 3.14)
    res = raw_storage_getitem(lltype.Float, r, 8)
    assert res == 3.14
    py.test.raises(AlignmentError, raw_storage_getitem, lltype.Signed, r, 3)
    py.test.raises(AlignmentError, raw_storage_setitem, r, 3, 42.5)
    free_raw_storage(r)
Ejemplo n.º 6
0
 def f(bytecount, va, vb, vc):
     i = 0
     j = 0
     while i < bytecount:
         myjitdriver.jit_merge_point()
         a = raw_storage_getitem(rffi.INT,va,j)
         b = raw_storage_getitem(rffi.DOUBLE,vb,i)
         c = rffi.cast(rffi.DOUBLE,a)+b
         raw_storage_setitem(vc, i, c)
         j += 4
         i += 8
Ejemplo n.º 7
0
 def f(bytecount, va, vb, vc):
     i = 0
     j = 0
     while j < bytecount:
         myjitdriver.jit_merge_point()
         a = raw_storage_getitem(rffi.DOUBLE,va,j)
         b = raw_storage_getitem(rffi.INT,vb,i)
         c = a+rffi.cast(rffi.DOUBLE,b)
         raw_storage_setitem(vc, j, c)
         i += 4
         j += 8
Ejemplo n.º 8
0
 def f(bytecount, va, vb, vc):
     i = 0
     j = 0
     while i < bytecount:
         myjitdriver.jit_merge_point()
         a = raw_storage_getitem(rffi.INT, va, j)
         b = raw_storage_getitem(rffi.DOUBLE, vb, i)
         c = rffi.cast(rffi.DOUBLE, a) + b
         raw_storage_setitem(vc, i, c)
         j += 4
         i += 8
Ejemplo n.º 9
0
 def f(bytecount, va, vb, vc):
     i = 0
     j = 0
     while j < bytecount:
         myjitdriver.jit_merge_point()
         a = raw_storage_getitem(rffi.DOUBLE, va, j)
         b = raw_storage_getitem(rffi.INT, vb, i)
         c = a + rffi.cast(rffi.DOUBLE, b)
         raw_storage_setitem(vc, j, c)
         i += 4
         j += 8
Ejemplo n.º 10
0
    def _vector_simple_int(self, func, type, la):
        oldfunc = func
        func = always_inline(func)

        size = rffi.sizeof(type)
        myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True)

        def f(bytecount, va, vb, vc):
            i = 0
            while i < bytecount:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(type, va, i)
                b = raw_storage_getitem(type, vb, i)
                c = func(a, b)
                raw_storage_setitem(vc, i, rffi.cast(type, c))
                i += size

        l = len(la)
        lb = list(reversed(la))[:]

        rawstorage = RawStorage()
        va = rawstorage.new(la, type)
        vb = rawstorage.new(lb, type)
        vc = rawstorage.new(None, type, size=l)
        self.meta_interp(f, [l * size, va, vb, vc], vec=True)

        for i in range(l):
            c = raw_storage_getitem(type, vc, i * size)
            assert rffi.cast(type, oldfunc(la[i], lb[i])) == c

        rawstorage.clear()
Ejemplo n.º 11
0
    def test_float_int32_casts(self):
        myjitdriver = JitDriver(greens = [], reds = 'auto', vectorize=True)
        def f(bytecount, va, vb, vc):
            i = 0
            j = 0
            while j < bytecount:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(rffi.DOUBLE,va,j)
                b = raw_storage_getitem(rffi.INT,vb,i)
                c = a+rffi.cast(rffi.DOUBLE,b)
                raw_storage_setitem(vc, j, c)
                i += 4
                j += 8

        count = 32
        va = alloc_raw_storage(8*count, zero=True)
        vb = alloc_raw_storage(4*count, zero=True)
        for i,v in enumerate([1.0,2.0,3.0,4.0]*(count/4)):
            raw_storage_setitem(va, i*8, rffi.cast(rffi.DOUBLE,v))
        for i,v in enumerate([-1,-2,-3,-4]*(count/4)):
            raw_storage_setitem(vb, i*4, rffi.cast(rffi.INT,v))
        vc = alloc_raw_storage(8*count, zero=True)
        self.meta_interp(f, [8*count, va, vb, vc], vec=True)

        for i in range(count):
            assert raw_storage_getitem(rffi.DOUBLE,vc,i*8) == 0.0

        free_raw_storage(va)
        free_raw_storage(vb)
        free_raw_storage(vc)
Ejemplo n.º 12
0
    def test_vector_float_unary(self, func, la):
        func = always_inline(func)
        tp = rffi.DOUBLE

        size = rffi.sizeof(tp)
        myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True)

        def f(bytecount, va, vc):
            i = 0
            while i < bytecount:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(tp, va, i)
                c = func(a)
                raw_storage_setitem(vc, i, rffi.cast(tp, c))
                i += size

        l = len(la)
        rawstorage = RawStorage()
        va = rawstorage.new(la, tp)
        vc = rawstorage.new(None, tp, size=l)
        self.meta_interp(f, [l * size, va, vc], vec=True)

        for i in range(l):
            c = raw_storage_getitem(tp, vc, i * size)
            r = func(la[i])
            assert isclose(r, c)

        rawstorage.clear()
Ejemplo n.º 13
0
    def test_float_int32_casts(self):
        myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True)

        def f(bytecount, va, vb, vc):
            i = 0
            j = 0
            while j < bytecount:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(rffi.DOUBLE, va, j)
                b = raw_storage_getitem(rffi.INT, vb, i)
                c = a + rffi.cast(rffi.DOUBLE, b)
                raw_storage_setitem(vc, j, c)
                i += 4
                j += 8

        count = 32
        va = alloc_raw_storage(8 * count, zero=True)
        vb = alloc_raw_storage(4 * count, zero=True)
        for i, v in enumerate([1.0, 2.0, 3.0, 4.0] * (count / 4)):
            raw_storage_setitem(va, i * 8, rffi.cast(rffi.DOUBLE, v))
        for i, v in enumerate([-1, -2, -3, -4] * (count / 4)):
            raw_storage_setitem(vb, i * 4, rffi.cast(rffi.INT, v))
        vc = alloc_raw_storage(8 * count, zero=True)
        self.meta_interp(f, [8 * count, va, vb, vc], vec=True)

        for i in range(count):
            assert raw_storage_getitem(rffi.DOUBLE, vc, i * 8) == 0.0

        free_raw_storage(va)
        free_raw_storage(vb)
        free_raw_storage(vc)
Ejemplo n.º 14
0
    def _vector_float_unary(self, func, type, data):
        func = always_inline(func)

        size = rffi.sizeof(type)
        myjitdriver = JitDriver(greens = [], reds = 'auto', vectorize=True)
        def f(bytecount, va, vc):
            i = 0
            while i < bytecount:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(type,va,i)
                c = func(a)
                raw_storage_setitem(vc, i, rffi.cast(type,c))
                i += size

        la = data.draw(st.lists(st.floats(), min_size=10, max_size=150))
        l = len(la)

        rawstorage = RawStorage()
        va = rawstorage.new(la, type)
        vc = rawstorage.new(None, type, size=l)
        self.meta_interp(f, [l*size, va, vc], vec=True)

        for i in range(l):
            c = raw_storage_getitem(type,vc,i*size)
            r = func(la[i])
            assert isclose(r, c)

        rawstorage.clear()
Ejemplo n.º 15
0
    def _vector_simple_int(self, func, type, la):
        oldfunc = func
        func = always_inline(func)

        size = rffi.sizeof(type)
        myjitdriver = JitDriver(greens = [], reds = 'auto', vectorize=True)
        def f(bytecount, va, vb, vc):
            i = 0
            while i < bytecount:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(type,va,i)
                b = raw_storage_getitem(type,vb,i)
                c = func(a,b)
                raw_storage_setitem(vc, i, rffi.cast(type,c))
                i += size

        l = len(la)
        lb = list(reversed(la))[:]

        rawstorage = RawStorage()
        va = rawstorage.new(la, type)
        vb = rawstorage.new(lb, type)
        vc = rawstorage.new(None, type, size=l)
        self.meta_interp(f, [l*size, va, vb, vc], vec=True)

        for i in range(l):
            c = raw_storage_getitem(type,vc,i*size)
            assert rffi.cast(type, oldfunc(la[i], lb[i])) == c

        rawstorage.clear()
Ejemplo n.º 16
0
    def _vector_simple_float(self, func, type, data):
        func = always_inline(func)

        size = rffi.sizeof(rffi.DOUBLE)
        myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True)

        def f(bytecount, va, vb, vc):
            i = 0
            while i < bytecount:
                myjitdriver.jit_merge_point()
                a = raw_storage_getitem(type, va, i)
                b = raw_storage_getitem(type, vb, i)
                c = func(a, b)
                raw_storage_setitem(vc, i, rffi.cast(type, c))
                i += size

        la = data.draw(st.lists(st.floats(), min_size=10, max_size=150))
        l = len(la)
        lb = data.draw(st.lists(st.floats(), min_size=l, max_size=l))

        rawstorage = RawStorage()
        va = rawstorage.new(la, type)
        vb = rawstorage.new(lb, type)
        vc = rawstorage.new(None, type, size=l)
        self.meta_interp(f, [l * size, va, vb, vc], vec=True)

        for i in range(l):
            c = raw_storage_getitem(type, vc, i * size)
            r = rffi.cast(type, func(la[i], lb[i]))
            assert isclose(r, c)

        rawstorage.clear()
Ejemplo n.º 17
0
 def f(accum, bytecount, v):
     i = 0
     while i < bytecount:
         myjitdriver.jit_merge_point()
         e = raw_storage_getitem(type,v,i)
         accum = func(accum,e)
         i += size
     return accum
Ejemplo n.º 18
0
 def f(accum, bytecount, v):
     i = 0
     while i < bytecount:
         myjitdriver.jit_merge_point()
         e = raw_storage_getitem(tp, v, i)
         accum = func(accum, e)
         i += size
     return accum
Ejemplo n.º 19
0
 def getitem(self, item):
     if count < 2:
         v = raw_storage_getitem(TP, self.values, item * self.stride_size
                             + self.start)
     else:
         v = []
         for i in range(count):
             _v = raw_storage_getitem(TP, self.values, item * self.stride_size
                             + self.start + step * i)
             v.append(_v)
     if comp_type == 'int':
         v = widen(v)
     elif comp_type == 'float':
         v = float(v)
     elif comp_type == 'complex':
         v = [float(v[0]),float(v[1])]
     else:
         raise NotImplementedError('cannot reach')
     return (v)
Ejemplo n.º 20
0
 def getitem(self, item):
     if count < 2:
         v = raw_storage_getitem(TP, self.values, item * self.stride_size
                             + self.start)
     else:
         v = []
         for i in range(count):
             _v = raw_storage_getitem(TP, self.values, item * self.stride_size
                             + self.start + step * i)
             v.append(_v)
     if comp_type == 'int':
         v = widen(v)
     elif comp_type == 'float':
         v = float(v)
     elif comp_type == 'complex':
         v = [float(v[0]),float(v[1])]
     else:
         raise NotImplementedError('cannot reach')
     return (v)
Ejemplo n.º 21
0
 def getitem(self, index):
     return raw_storage_getitem(lltype.Char, self.impl.storage,
              index + self.impl.start)
Ejemplo n.º 22
0
 def getitem(self, item):
     return raw_storage_getitem(lltype.Char, self.impl.storage, item)
Ejemplo n.º 23
0
 def f(i):
     r = alloc_raw_storage(24)
     raw_storage_setitem(r, 8, i)
     res = raw_storage_getitem(lltype.Signed, r, 8)
     free_raw_storage(r)
     return res != i
Ejemplo n.º 24
0
 def getitem(self, item):
     return raw_storage_getitem(lltype.Char, self.impl.storage, item)
Ejemplo n.º 25
0
 def getitem(self, index):
     return raw_storage_getitem(lltype.Char, self.impl.storage,
              index + self.impl.start)
Ejemplo n.º 26
0
 def f(i):
     r = alloc_raw_storage(24)
     raw_storage_setitem(r, 8, i)
     res = raw_storage_getitem(lltype.Signed, r, 8)
     free_raw_storage(r)
     return res != i
Ejemplo n.º 27
0
def test_untranslated_storage():
    r = alloc_raw_storage(15)
    raw_storage_setitem(r, 3, 1<<30)
    res = raw_storage_getitem(lltype.Signed, r, 3)
    free_raw_storage(r)
    assert res == 1<<30
Ejemplo n.º 28
0
 def f():
     p = alloc_raw_storage(15)
     raw_storage_setitem(p, 3, 24)
     res = raw_storage_getitem(lltype.Signed, p, 3)
     free_raw_storage(p)
     return res
Ejemplo n.º 29
0
 def f():
     p = alloc_raw_storage(15, track_allocation=False, zero=True)
     raw_storage_setitem(p, 3, 24)
     res = raw_storage_getitem(lltype.Signed, p, 3)
     free_raw_storage(p, track_allocation=False)
     return res
Ejemplo n.º 30
0
 def f():
     p = alloc_raw_storage(15)
     raw_storage_setitem(p, 5, rffi.cast(rffi.UCHAR, 254))
     res = raw_storage_getitem(rffi.UCHAR, p, 5)
     free_raw_storage(p)
     return rffi.cast(lltype.Signed, res)
Ejemplo n.º 31
0
 def f():
     p = alloc_raw_storage(15)
     raw_storage_setitem(p, 4, 2.4e15)
     res = raw_storage_getitem(lltype.Float, p, 4)
     free_raw_storage(p)
     return res