From cff9a882a9112298382b7e2e06de54018b4a181e Mon Sep 17 00:00:00 2001 From: sayantn Date: Thu, 30 Apr 2026 03:49:51 +0530 Subject: [PATCH] some changes in argument loading in intrinsic-test revert the offset loading, instead load in a wrapping fashion --- .../intrinsic-test/src/common/argument.rs | 26 +++++++++++-------- .../crates/intrinsic-test/src/common/gen_c.rs | 7 ----- .../intrinsic-test/src/common/gen_rust.rs | 6 ----- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/library/stdarch/crates/intrinsic-test/src/common/argument.rs b/library/stdarch/crates/intrinsic-test/src/common/argument.rs index 413d5314d318..8ae9869db062 100644 --- a/library/stdarch/crates/intrinsic-test/src/common/argument.rs +++ b/library/stdarch/crates/intrinsic-test/src/common/argument.rs @@ -1,5 +1,6 @@ use super::cli::Language; use super::constraint::Constraint; +use super::gen_rust::PASSES; use super::indentation::Indentation; use super::intrinsic_helpers::IntrinsicTypeDefinition; @@ -178,7 +179,7 @@ pub fn load_values_c(&self, indentation: Indentation) -> String { .enumerate() .map(|(idx, arg)| { format!( - "{indentation}{ty} {name} = cast<{ty}>({load}(&{name}_vals[i+{idx}]));\n", + "{indentation}{ty} {name} = cast<{ty}>({load}(&{name}_vals[(i+{idx}) % {PASSES}]));\n", ty = arg.to_c_type(), name = arg.generate_name(), load = if arg.is_simd() { @@ -199,17 +200,20 @@ pub fn load_values_rust(&self, indentation: Indentation) -> String { .filter(|&arg| !arg.has_constraint()) .enumerate() .map(|(idx, arg)| { - let load = if arg.is_simd() { - arg.ty.get_load_function(Language::Rust) + if arg.is_simd() { + format!( + "{indentation}let {name} = {load}({vals_name}.as_ptr().add((i+{idx}) % {PASSES}) as _);\n", + name = arg.generate_name(), + vals_name = arg.rust_vals_array_name(), + load = arg.ty.get_load_function(Language::Rust), + ) } else { - "*".to_string() - }; - let typecast = if load.len() > 2 { "as _" } else { "" }; - format!( - "{indentation}let {name} = {load}({vals_name}.as_ptr().offset(i+{idx}){typecast});\n", - name = arg.generate_name(), - vals_name = arg.rust_vals_array_name(), - ) + format!( + "{indentation}let {name} = {vals_name}[(i+{idx}) % {PASSES}];\n", + name = arg.generate_name(), + vals_name = arg.rust_vals_array_name(), + ) + } }) .collect() } diff --git a/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs b/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs index 12b5a600d5ae..a95b4c36b7bf 100644 --- a/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs +++ b/library/stdarch/crates/intrinsic-test/src/common/gen_c.rs @@ -25,13 +25,6 @@ pub fn generate_c_test_loop( passes: u32, ) -> std::io::Result<()> { let body_indentation = indentation.nested(); - // Successive arguments are offset increasingly from their value array start - let passes = passes + 1 - - intrinsic - .arguments - .iter() - .filter(|&arg| !arg.has_constraint()) - .count() as u32; writeln!( w, "{indentation}for (int i=0; i<{passes}; i++) {{\n\ diff --git a/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs b/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs index 5a0bc7b4d4b9..82b97701bb14 100644 --- a/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs +++ b/library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs @@ -214,12 +214,6 @@ pub fn generate_rust_test_loop( passes: u32, ) -> std::io::Result<()> { let intrinsic_name = &intrinsic.name; - let passes = passes + 1 - - intrinsic - .arguments - .iter() - .filter(|&arg| !arg.has_constraint()) - .count() as u32; // Each function (and each specialization) has its own type. Erase that type with a cast. let mut coerce = String::from("unsafe fn(");