Skip to content
Permalink
master
Go to file
 
 
Cannot retrieve contributors at this time
49 lines (40 sloc) 1.68 KB
"""
This file provides internal compiler utilities that support certain special
operations with bytes and workarounds for limitations enforced in userland.
"""
from numba.core.extending import intrinsic
from llvmlite import ir
from numba.core import types, cgutils
@intrinsic
def grab_byte(typingctx, data, offset):
# returns a byte at a given offset in data
def impl(context, builder, signature, args):
data, idx = args
ptr = builder.bitcast(data, ir.IntType(8).as_pointer())
ch = builder.load(builder.gep(ptr, [idx]))
return ch
sig = types.uint8(types.voidptr, types.intp)
return sig, impl
@intrinsic
def grab_uint64_t(typingctx, data, offset):
# returns a uint64_t at a given offset in data
def impl(context, builder, signature, args):
data, idx = args
ptr = builder.bitcast(data, ir.IntType(64).as_pointer())
ch = builder.load(builder.gep(ptr, [idx]))
return ch
sig = types.uint64(types.voidptr, types.intp)
return sig, impl
@intrinsic
def memcpy_region(typingctx, dst, dst_offset, src, src_offset, nbytes, align):
'''Copy nbytes from *(src + src_offset) to *(dst + dst_offset)'''
def codegen(context, builder, signature, args):
[dst_val, dst_offset_val, src_val, src_offset_val, nbytes_val,
align_val] = args
src_ptr = builder.gep(src_val, [src_offset_val])
dst_ptr = builder.gep(dst_val, [dst_offset_val])
cgutils.raw_memcpy(builder, dst_ptr, src_ptr, nbytes_val, align_val)
return context.get_dummy_value()
sig = types.void(types.voidptr, types.intp, types.voidptr, types.intp,
types.intp, types.intp)
return sig, codegen
You can’t perform that action at this time.