Пример #1
0
        def f(points, result_point, n):
            i = 0
            while i < n:
                myjitdriver.jit_merge_point(i=i, points=points, n=n,
                                            result_point=result_point)
                x = array_getitem(
                    types.slong, rffi.sizeof(lltype.Signed) * 2, points, i, 0
                )
                y = array_getitem(
                    types.slong, rffi.sizeof(lltype.Signed) * 2, points, i, rffi.sizeof(lltype.Signed)
                )

                cur_x = array_getitem(
                    types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, 0
                )
                cur_y = array_getitem(
                    types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, rffi.sizeof(lltype.Signed)
                )

                array_setitem(
                    types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, 0, cur_x + x
                )
                array_setitem(
                    types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, rffi.sizeof(lltype.Signed), cur_y + y
                )
                i += 1
Пример #2
0
 def _write(self, storage, width, i, offset, value):
     #value = byteswap(value) XXX
     if we_are_translated():
         libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T),
                              width, storage, i, offset, value)
     else:
         libffi.array_setitem_T(self.T, width, storage, i, offset, value)
Пример #3
0
        def f(points, result_point, n):
            i = 0
            while i < n:
                myjitdriver.jit_merge_point(i=i,
                                            points=points,
                                            n=n,
                                            result_point=result_point)
                x = array_getitem(types.slong,
                                  rffi.sizeof(lltype.Signed) * 2, points, i, 0)
                y = array_getitem(types.slong,
                                  rffi.sizeof(lltype.Signed) * 2, points, i,
                                  rffi.sizeof(lltype.Signed))

                cur_x = array_getitem(types.slong,
                                      rffi.sizeof(lltype.Signed) * 2,
                                      result_point, 0, 0)
                cur_y = array_getitem(types.slong,
                                      rffi.sizeof(lltype.Signed) * 2,
                                      result_point, 0,
                                      rffi.sizeof(lltype.Signed))

                array_setitem(types.slong,
                              rffi.sizeof(lltype.Signed) * 2, result_point, 0,
                              0, cur_x + x)
                array_setitem(types.slong,
                              rffi.sizeof(lltype.Signed) * 2, result_point, 0,
                              rffi.sizeof(lltype.Signed), cur_y + y)
                i += 1
Пример #4
0
 def _write(self, storage, width, i, offset, value):
     #value = byteswap(value) XXX
     if we_are_translated():
         libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T),
                              width, storage, i, offset, value)
     else:
         libffi.array_setitem_T(self.T, width, storage, i, offset, value)
Пример #5
0
 def test_array_fields(self):
     POINT = lltype.Struct("POINT",
         ("x", lltype.Float),
         ("y", lltype.Float),
     )
     points = lltype.malloc(rffi.CArray(POINT), 2, flavor="raw")
     points[0].x = 1.0
     points[0].y = 2.0
     points[1].x = 3.0
     points[1].y = 4.0
     points = rffi.cast(rffi.CArrayPtr(lltype.Char), points)
     assert array_getitem(types.double, 16, points, 0, 0) == 1.0
     assert array_getitem(types.double, 16, points, 0, 8) == 2.0
     assert array_getitem(types.double, 16, points, 1, 0) == 3.0
     assert array_getitem(types.double, 16, points, 1, 8) == 4.0
     #
     array_setitem(types.double, 16, points, 0, 0, 10.0)
     array_setitem(types.double, 16, points, 0, 8, 20.0)
     array_setitem(types.double, 16, points, 1, 0, 30.0)
     array_setitem(types.double, 16, points, 1, 8, 40.0)
     #
     assert array_getitem(types.double, 16, points, 0, 0) == 10.0
     assert array_getitem(types.double, 16, points, 0, 8) == 20.0
     assert array_getitem(types.double, 16, points, 1, 0) == 30.0
     assert array_getitem(types.double, 16, points, 1, 8) == 40.0
     #
     lltype.free(points, flavor="raw")
Пример #6
0
 def test_array_fields(self):
     POINT = lltype.Struct(
         "POINT",
         ("x", lltype.Float),
         ("y", lltype.Float),
     )
     points = lltype.malloc(rffi.CArray(POINT), 2, flavor="raw")
     points[0].x = 1.0
     points[0].y = 2.0
     points[1].x = 3.0
     points[1].y = 4.0
     points = rffi.cast(rffi.CArrayPtr(lltype.Char), points)
     assert array_getitem(types.double, 16, points, 0, 0) == 1.0
     assert array_getitem(types.double, 16, points, 0, 8) == 2.0
     assert array_getitem(types.double, 16, points, 1, 0) == 3.0
     assert array_getitem(types.double, 16, points, 1, 8) == 4.0
     #
     array_setitem(types.double, 16, points, 0, 0, 10.0)
     array_setitem(types.double, 16, points, 0, 8, 20.0)
     array_setitem(types.double, 16, points, 1, 0, 30.0)
     array_setitem(types.double, 16, points, 1, 8, 40.0)
     #
     assert array_getitem(types.double, 16, points, 0, 0) == 10.0
     assert array_getitem(types.double, 16, points, 0, 8) == 20.0
     assert array_getitem(types.double, 16, points, 1, 0) == 30.0
     assert array_getitem(types.double, 16, points, 1, 8) == 40.0
     #
     lltype.free(points, flavor="raw")
Пример #7
0
 def fill(self, storage, width, box, start, stop, offset):
     value = self.unbox(box)
     for i in xrange(start, stop):
         libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T),
             width, storage, i, offset, value
         )
Пример #8
0
 def store(self, storage, width, i, offset, box):
     value = self.unbox(box)
     libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T),
         width, storage, i, offset, value
     )
Пример #9
0
 def fill(self, storage, width, box, start, stop, offset):
     value = self.unbox(box)
     for i in xrange(start, stop):
         libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T), width,
                              storage, i, offset, value)
Пример #10
0
 def store(self, storage, width, i, offset, box):
     value = self.unbox(box)
     libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T), width,
                          storage, i, offset, value)