diff --git a/nac3artiq/src/codegen.rs b/nac3artiq/src/codegen.rs index 83fa247c..07b3733a 100644 --- a/nac3artiq/src/codegen.rs +++ b/nac3artiq/src/codegen.rs @@ -32,7 +32,6 @@ use crate::{symbol_resolver::InnerResolver, timeline::TimeFns}; use inkwell::types::BasicType; use itertools::Itertools; use nac3core::codegen::classes::{ArrayLikeIndexer, ArrayLikeValue, ArraySliceValue, NDArrayType}; -use nac3core::codegen::llvm_intrinsics; use std::{ collections::{hash_map::DefaultHasher, HashMap}, hash::{Hash, Hasher}, @@ -431,7 +430,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 +578,52 @@ 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(28, 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 [ + /* LSB <-> MSB */ + /* buffer[0] */ 0u8, 0u8, 0u8, 0u8, + /* buffer[4] */ 2u8, 0u8, 0u8, 0u8, + /* buffer[8] */ 0u8, 0u8, 0u8, 0u8, + /* buffer[12] */ 128u8, 0u8, 0u8, 0u8, + /* buffer[16] */ 0u8, 0u8, 0u8, 0u8, + /* buffer[20] */ 0u8, 0u8, 0u8, 0u8, + /* buffer[24] */ 0u8, 0u8, 0u8, 0u8, + // /* buffer[28] - data[2] */ 128u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + // /* buffer[36] - data[3] */ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, + ].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 {