diff --git a/nac3artiq/src/codegen.rs b/nac3artiq/src/codegen.rs index 83fa247c..8e9c6ac3 100644 --- a/nac3artiq/src/codegen.rs +++ b/nac3artiq/src/codegen.rs @@ -30,7 +30,7 @@ use pyo3::{ use crate::{symbol_resolver::InnerResolver, timeline::TimeFns}; use inkwell::types::BasicType; -use itertools::Itertools; +use itertools::{repeat_n, Itertools}; use nac3core::codegen::classes::{ArrayLikeIndexer, ArrayLikeValue, ArraySliceValue, NDArrayType}; use nac3core::codegen::llvm_intrinsics; use std::{ @@ -431,7 +431,8 @@ fn gen_rpc_tag( ); buffer.push(b'a'); - buffer.push((ndarray_ndims & 0xFF) as u8); + buffer.push(1u8); + // buffer.push((ndarray_ndims & 0xFF) as u8); gen_rpc_tag(ctx, ndarray_dtype, buffer)?; } _ => return Err(format!("Unsupported type: {:?}", ctx.unifier.stringify(ty))), @@ -578,26 +579,42 @@ fn rpc_codegen_callback_fn<'ctx>( let buffer_size = ctx.builder.build_int_add(dims_buf_sz, data_buf_sz, "").unwrap(); - let buffer = ctx.builder.build_array_alloca(int8, buffer_size, "").unwrap(); + // let buffer = ctx.builder.build_array_alloca(int8, buffer_size, "").unwrap(); + let buffer = ctx.builder.build_array_alloca(int8, size_type.const_int(16, false), "").unwrap(); let buffer = ArraySliceValue::from_ptr_val(buffer, buffer_size, None); - llvm_intrinsics::call_memcpy_generic( - ctx, - buffer.base_ptr(ctx, generator), - llvm_arg.dim_sizes().base_ptr(ctx, generator), - dims_buf_sz, - int1.const_zero(), - ); + for (offset, byte) in [1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, /* dim[0] */ 1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8].into_iter().enumerate() + // repeat_n(129u8, 12).into_iter().enumerate() + { + let pbuffer = unsafe { + buffer.ptr_offset_unchecked( + ctx, + generator, + &size_type.const_int(offset as u64, false), + None, + ) + }; - let pbuffer_data_begin = - unsafe { buffer.ptr_offset_unchecked(ctx, generator, &dims_buf_sz, None) }; - llvm_intrinsics::call_memcpy_generic( - ctx, - pbuffer_data_begin, - llvm_arg.data().base_ptr(ctx, generator), - data_buf_sz, - int1.const_zero(), - ); + ctx.builder.build_store(pbuffer, int8.const_int(byte as u64, false)).unwrap(); + } + + // llvm_intrinsics::call_memcpy_generic( + // ctx, + // buffer.base_ptr(ctx, generator), + // llvm_arg.dim_sizes().base_ptr(ctx, generator), + // dims_buf_sz, + // int1.const_zero(), + // ); + // + // let pbuffer_data_begin = + // unsafe { buffer.ptr_offset_unchecked(ctx, generator, &dims_buf_sz, None) }; + // llvm_intrinsics::call_memcpy_generic( + // ctx, + // pbuffer_data_begin, + // llvm_arg.data().base_ptr(ctx, generator), + // data_buf_sz, + // int1.const_zero(), + // ); buffer.base_ptr(ctx, generator) } else {