def load_direct(self, byteoffset): """ Generic load from the given *byteoffset*. load_aligned() is preferred if possible. """ ptr = cgutils.pointer_add(self.builder, self.dataptr, byteoffset) return self.context.unpack_value(self.builder, self.fe_type, ptr)
def access_member(member_offset): # Access member by byte offset offset = c.context.get_constant(types.uintp, member_offset) llvoidptr = ir.IntType(8).as_pointer() ptr = cgutils.pointer_add(c.builder, val, offset) casted = c.builder.bitcast(ptr, llvoidptr.as_pointer()) return c.builder.load(casted)
def get_env_body(self, builder, envptr): """ From the given *envptr* (a pointer to a _dynfunc.Environment object), get a EnvBody allowing structured access to environment fields. """ body_ptr = cgutils.pointer_add( builder, envptr, _dynfunc._impl_info['offsetof_env_body']) return EnvBody(self, builder, ref=body_ptr, cast_ref=True)
def get_generator_state(self, builder, genptr, return_type): """ From the given *genptr* (a pointer to a _dynfunc.Generator object), get a pointer to its state area. """ return cgutils.pointer_add( builder, genptr, _dynfunc._impl_info['offsetof_generator_state'], return_type=return_type)
def load(self, context, builder, data, ind): arytyp = types.Array(dtype=self.dtype, ndim=self.ndim, layout="A") arycls = context.make_array(arytyp) array = arycls(context, builder) offseted_data = cgutils.pointer_add(builder, data, builder.mul(self.core_step, ind)) shape, strides = self._shape_and_strides(context, builder) itemsize = context.get_abi_sizeof(context.get_data_type(self.dtype)) context.populate_array(array, data=builder.bitcast(offseted_data, array.data.type), shape=shape, strides=strides, itemsize=context.get_constant( types.intp, itemsize), meminfo=None) return array._getvalue()
def store_direct(self, value, byteoffset): ptr = cgutils.pointer_add(self.builder, self.dataptr, byteoffset) self.context.pack_value(self.builder, self.fe_type, value, ptr)
def set_member(member_offset, value): # Access member by byte offset offset = c.context.get_constant(types.uintp, member_offset) ptr = cgutils.pointer_add(c.builder, box, offset) casted = c.builder.bitcast(ptr, llvoidptr.as_pointer()) c.builder.store(value, casted)