forked from M-Labs/nac3
core: Add support for 32-bit size_t on 64-bit targets
This commit is contained in:
parent
5faeede0e5
commit
693b2a8863
@ -1226,6 +1226,7 @@ pub fn gen_binop_expr_with_values<'ctx, G: CodeGenerator>(
|
|||||||
debug_assert!(ctx.unifier.unioned(elem_ty1, elem_ty2));
|
debug_assert!(ctx.unifier.unioned(elem_ty1, elem_ty2));
|
||||||
|
|
||||||
let llvm_elem_ty = ctx.get_llvm_type(generator, elem_ty1);
|
let llvm_elem_ty = ctx.get_llvm_type(generator, elem_ty1);
|
||||||
|
let sizeof_elem = llvm_elem_ty.size_of().unwrap();
|
||||||
|
|
||||||
let lhs = ListValue::from_ptr_val(left_val.into_pointer_value(), llvm_usize, None);
|
let lhs = ListValue::from_ptr_val(left_val.into_pointer_value(), llvm_usize, None);
|
||||||
let rhs = ListValue::from_ptr_val(right_val.into_pointer_value(), llvm_usize, None);
|
let rhs = ListValue::from_ptr_val(right_val.into_pointer_value(), llvm_usize, None);
|
||||||
@ -1237,14 +1238,25 @@ pub fn gen_binop_expr_with_values<'ctx, G: CodeGenerator>(
|
|||||||
|
|
||||||
let new_list = allocate_list(generator, ctx, Some(llvm_elem_ty), size, None);
|
let new_list = allocate_list(generator, ctx, Some(llvm_elem_ty), size, None);
|
||||||
|
|
||||||
let lhs_len = ctx
|
let lhs_size = ctx
|
||||||
.builder
|
.builder
|
||||||
.build_int_mul(lhs.load_size(ctx, None), llvm_elem_ty.size_of().unwrap(), "")
|
.build_int_z_extend_or_bit_cast(
|
||||||
|
lhs.load_size(ctx, None),
|
||||||
|
sizeof_elem.get_type(),
|
||||||
|
"",
|
||||||
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let rhs_len = ctx
|
let lhs_len = ctx.builder.build_int_mul(lhs_size, sizeof_elem, "").unwrap();
|
||||||
|
|
||||||
|
let rhs_size = ctx
|
||||||
.builder
|
.builder
|
||||||
.build_int_mul(rhs.load_size(ctx, None), llvm_elem_ty.size_of().unwrap(), "")
|
.build_int_z_extend_or_bit_cast(
|
||||||
|
rhs.load_size(ctx, None),
|
||||||
|
sizeof_elem.get_type(),
|
||||||
|
"",
|
||||||
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
let rhs_len = ctx.builder.build_int_mul(rhs_size, sizeof_elem, "").unwrap();
|
||||||
|
|
||||||
let list_ptr = new_list.data().base_ptr(ctx, generator);
|
let list_ptr = new_list.data().base_ptr(ctx, generator);
|
||||||
call_memcpy_generic(
|
call_memcpy_generic(
|
||||||
@ -1309,6 +1321,7 @@ pub fn gen_binop_expr_with_values<'ctx, G: CodeGenerator>(
|
|||||||
let int_val = call_int_smax(ctx, int_val, llvm_usize.const_zero(), None);
|
let int_val = call_int_smax(ctx, int_val, llvm_usize.const_zero(), None);
|
||||||
|
|
||||||
let elem_llvm_ty = ctx.get_llvm_type(generator, elem_ty);
|
let elem_llvm_ty = ctx.get_llvm_type(generator, elem_ty);
|
||||||
|
let sizeof_elem = elem_llvm_ty.size_of().unwrap();
|
||||||
|
|
||||||
let new_list = allocate_list(
|
let new_list = allocate_list(
|
||||||
generator,
|
generator,
|
||||||
@ -1332,15 +1345,18 @@ pub fn gen_binop_expr_with_values<'ctx, G: CodeGenerator>(
|
|||||||
new_list.data().ptr_offset_unchecked(ctx, generator, &offset, None)
|
new_list.data().ptr_offset_unchecked(ctx, generator, &offset, None)
|
||||||
};
|
};
|
||||||
|
|
||||||
let memcpy_sz = ctx
|
let list_size = ctx
|
||||||
.builder
|
.builder
|
||||||
.build_int_mul(
|
.build_int_z_extend_or_bit_cast(
|
||||||
list_val.load_size(ctx, None),
|
list_val.load_size(ctx, None),
|
||||||
elem_llvm_ty.size_of().unwrap(),
|
sizeof_elem.get_type(),
|
||||||
"",
|
"",
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let memcpy_sz =
|
||||||
|
ctx.builder.build_int_mul(list_size, sizeof_elem, "").unwrap();
|
||||||
|
|
||||||
call_memcpy_generic(
|
call_memcpy_generic(
|
||||||
ctx,
|
ctx,
|
||||||
ptr,
|
ptr,
|
||||||
@ -2148,6 +2164,7 @@ fn gen_ndarray_subscript_expr<'ctx, G: CodeGenerator>(
|
|||||||
let llvm_pndarray_t = ctx.get_llvm_type(generator, ndarray_ty).into_pointer_type();
|
let llvm_pndarray_t = ctx.get_llvm_type(generator, ndarray_ty).into_pointer_type();
|
||||||
let llvm_ndarray_t = llvm_pndarray_t.get_element_type().into_struct_type();
|
let llvm_ndarray_t = llvm_pndarray_t.get_element_type().into_struct_type();
|
||||||
let llvm_ndarray_data_t = ctx.get_llvm_type(generator, ty).as_basic_type_enum();
|
let llvm_ndarray_data_t = ctx.get_llvm_type(generator, ty).as_basic_type_enum();
|
||||||
|
let sizeof_elem = llvm_ndarray_data_t.size_of().unwrap();
|
||||||
|
|
||||||
// Check that len is non-zero
|
// Check that len is non-zero
|
||||||
let len = v.load_ndims(ctx);
|
let len = v.load_ndims(ctx);
|
||||||
@ -2358,7 +2375,14 @@ fn gen_ndarray_subscript_expr<'ctx, G: CodeGenerator>(
|
|||||||
let ndarray_num_dims = ndarray.load_ndims(ctx);
|
let ndarray_num_dims = ndarray.load_ndims(ctx);
|
||||||
ndarray.create_dim_sizes(ctx, llvm_usize, ndarray_num_dims);
|
ndarray.create_dim_sizes(ctx, llvm_usize, ndarray_num_dims);
|
||||||
|
|
||||||
let ndarray_num_dims = ndarray.load_ndims(ctx);
|
let ndarray_num_dims = ctx
|
||||||
|
.builder
|
||||||
|
.build_int_z_extend_or_bit_cast(
|
||||||
|
ndarray.load_ndims(ctx),
|
||||||
|
llvm_usize.size_of().get_type(),
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
let v_dims_src_ptr = unsafe {
|
let v_dims_src_ptr = unsafe {
|
||||||
v.dim_sizes().ptr_offset_unchecked(
|
v.dim_sizes().ptr_offset_unchecked(
|
||||||
ctx,
|
ctx,
|
||||||
@ -2384,6 +2408,10 @@ fn gen_ndarray_subscript_expr<'ctx, G: CodeGenerator>(
|
|||||||
&ndarray.dim_sizes().as_slice_value(ctx, generator),
|
&ndarray.dim_sizes().as_slice_value(ctx, generator),
|
||||||
(None, None),
|
(None, None),
|
||||||
);
|
);
|
||||||
|
let ndarray_num_elems = ctx
|
||||||
|
.builder
|
||||||
|
.build_int_z_extend_or_bit_cast(ndarray_num_elems, sizeof_elem.get_type(), "")
|
||||||
|
.unwrap();
|
||||||
ndarray.create_data(ctx, llvm_ndarray_data_t, ndarray_num_elems);
|
ndarray.create_data(ctx, llvm_ndarray_data_t, ndarray_num_elems);
|
||||||
|
|
||||||
let v_data_src_ptr = v.data().ptr_offset(ctx, generator, &index_addr, None);
|
let v_data_src_ptr = v.data().ptr_offset(ctx, generator, &index_addr, None);
|
||||||
|
@ -1086,13 +1086,17 @@ fn ndarray_sliced_copyto_impl<'ctx, G: CodeGenerator + ?Sized>(
|
|||||||
|
|
||||||
// If there are no (remaining) slice expressions, memcpy the entire dimension
|
// If there are no (remaining) slice expressions, memcpy the entire dimension
|
||||||
if slices.is_empty() {
|
if slices.is_empty() {
|
||||||
|
let sizeof_elem = ctx.get_llvm_type(generator, elem_ty).size_of().unwrap();
|
||||||
|
|
||||||
let stride = call_ndarray_calc_size(
|
let stride = call_ndarray_calc_size(
|
||||||
generator,
|
generator,
|
||||||
ctx,
|
ctx,
|
||||||
&src_arr.dim_sizes(),
|
&src_arr.dim_sizes(),
|
||||||
(Some(llvm_usize.const_int(dim, false)), None),
|
(Some(llvm_usize.const_int(dim, false)), None),
|
||||||
);
|
);
|
||||||
let sizeof_elem = ctx.get_llvm_type(generator, elem_ty).size_of().unwrap();
|
let stride =
|
||||||
|
ctx.builder.build_int_z_extend_or_bit_cast(stride, sizeof_elem.get_type(), "").unwrap();
|
||||||
|
|
||||||
let cpy_len = ctx.builder.build_int_mul(stride, sizeof_elem, "").unwrap();
|
let cpy_len = ctx.builder.build_int_mul(stride, sizeof_elem, "").unwrap();
|
||||||
|
|
||||||
call_memcpy_generic(ctx, dst_slice_ptr, src_slice_ptr, cpy_len, llvm_i1.const_zero());
|
call_memcpy_generic(ctx, dst_slice_ptr, src_slice_ptr, cpy_len, llvm_i1.const_zero());
|
||||||
|
Loading…
Reference in New Issue
Block a user