Skip to content

Commit 1697f36

Browse files
committed
remove trait IntrinsicDefinition
1 parent 2ba0a6e commit 1697f36

File tree

4 files changed

+28
-54
lines changed

4 files changed

+28
-54
lines changed
Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use crate::common::argument::ArgumentList;
2-
use crate::common::intrinsic::{Intrinsic, IntrinsicDefinition};
31
use crate::common::intrinsic_helpers::IntrinsicType;
42
use std::ops::{Deref, DerefMut};
53

@@ -22,17 +20,3 @@ impl DerefMut for ArmIntrinsicType {
2220
&mut self.data
2321
}
2422
}
25-
26-
impl IntrinsicDefinition<ArmIntrinsicType> for Intrinsic<ArmIntrinsicType> {
27-
fn arguments(&self) -> ArgumentList<ArmIntrinsicType> {
28-
self.arguments.clone()
29-
}
30-
31-
fn results(&self) -> ArmIntrinsicType {
32-
self.results.clone()
33-
}
34-
35-
fn name(&self) -> String {
36-
self.name.clone()
37-
}
38-
}

library/stdarch/crates/intrinsic-test/src/common/gen_c.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
use crate::common::intrinsic::Intrinsic;
2+
13
use super::argument::Argument;
24
use super::indentation::Indentation;
3-
use super::intrinsic::IntrinsicDefinition;
45
use super::intrinsic_helpers::IntrinsicTypeDefinition;
56

67
// The number of times each intrinsic will be called.
78
const PASSES: u32 = 20;
89

910
pub fn generate_c_test_loop<T: IntrinsicTypeDefinition + Sized>(
1011
w: &mut impl std::io::Write,
11-
intrinsic: &dyn IntrinsicDefinition<T>,
12+
intrinsic: &Intrinsic<T>,
1213
indentation: Indentation,
1314
additional: &str,
1415
passes: u32,
@@ -21,18 +22,18 @@ pub fn generate_c_test_loop<T: IntrinsicTypeDefinition + Sized>(
2122
{body_indentation}auto __return_value = {intrinsic_call}({args});\n\
2223
{print_result}\n\
2324
{indentation}}}",
24-
loaded_args = intrinsic.arguments().load_values_c(body_indentation),
25-
intrinsic_call = intrinsic.name(),
26-
args = intrinsic.arguments().as_call_param_c(),
25+
loaded_args = intrinsic.arguments.load_values_c(body_indentation),
26+
intrinsic_call = intrinsic.name,
27+
args = intrinsic.arguments.as_call_param_c(),
2728
print_result = intrinsic
28-
.results()
29+
.results
2930
.print_result_c(body_indentation, additional)
3031
)
3132
}
3233

3334
pub fn generate_c_constraint_blocks<'a, T: IntrinsicTypeDefinition + 'a>(
3435
w: &mut impl std::io::Write,
35-
intrinsic: &dyn IntrinsicDefinition<T>,
36+
intrinsic: &Intrinsic<T>,
3637
indentation: Indentation,
3738
constraints: &mut (impl Iterator<Item = &'a Argument<T>> + Clone),
3839
name: String,
@@ -65,14 +66,14 @@ pub fn generate_c_constraint_blocks<'a, T: IntrinsicTypeDefinition + 'a>(
6566
// Compiles C test programs using specified compiler
6667
pub fn create_c_test_function<T: IntrinsicTypeDefinition>(
6768
w: &mut impl std::io::Write,
68-
intrinsic: &dyn IntrinsicDefinition<T>,
69+
intrinsic: &Intrinsic<T>,
6970
) -> std::io::Result<()> {
7071
let indentation = Indentation::default();
7172

72-
writeln!(w, "int run_{}() {{", intrinsic.name())?;
73+
writeln!(w, "int run_{}() {{", intrinsic.name)?;
7374

7475
// Define the arrays of arguments.
75-
let arguments = intrinsic.arguments();
76+
let arguments = &intrinsic.arguments;
7677
arguments.gen_arglists_c(w, indentation.nested(), PASSES)?;
7778

7879
generate_c_constraint_blocks(
@@ -94,7 +95,7 @@ pub fn write_mod_cpp<T: IntrinsicTypeDefinition>(
9495
notice: &str,
9596
architecture: &str,
9697
platform_headers: &[&str],
97-
intrinsics: &[impl IntrinsicDefinition<T>],
98+
intrinsics: &[Intrinsic<T>],
9899
) -> std::io::Result<()> {
99100
write!(w, "{notice}")?;
100101

library/stdarch/crates/intrinsic-test/src/common/gen_rust.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
use itertools::Itertools;
22
use std::process::Command;
33

4+
use crate::common::intrinsic::Intrinsic;
5+
46
use super::indentation::Indentation;
5-
use super::intrinsic::{IntrinsicDefinition, format_f16_return_value};
7+
use super::intrinsic::format_f16_return_value;
68
use super::intrinsic_helpers::IntrinsicTypeDefinition;
79

810
// The number of times each intrinsic will be called.
@@ -100,7 +102,7 @@ pub fn write_lib_rs<T: IntrinsicTypeDefinition>(
100102
notice: &str,
101103
cfg: &str,
102104
definitions: &str,
103-
intrinsics: &[impl IntrinsicDefinition<T>],
105+
intrinsics: &[Intrinsic<T>],
104106
) -> std::io::Result<()> {
105107
write!(w, "{notice}")?;
106108

@@ -189,16 +191,16 @@ pub fn compile_rust_programs(toolchain: Option<&str>, target: &str, linker: Opti
189191

190192
pub fn generate_rust_test_loop<T: IntrinsicTypeDefinition>(
191193
w: &mut impl std::io::Write,
192-
intrinsic: &dyn IntrinsicDefinition<T>,
194+
intrinsic: &Intrinsic<T>,
193195
indentation: Indentation,
194196
specializations: &[Vec<u8>],
195197
passes: u32,
196198
) -> std::io::Result<()> {
197-
let intrinsic_name = intrinsic.name();
199+
let intrinsic_name = &intrinsic.name;
198200

199201
// Each function (and each specialization) has its own type. Erase that type with a cast.
200202
let mut coerce = String::from("unsafe fn(");
201-
for _ in intrinsic.arguments().iter().filter(|a| !a.has_constraint()) {
203+
for _ in intrinsic.arguments.iter().filter(|a| !a.has_constraint()) {
202204
coerce += "_, ";
203205
}
204206
coerce += ") -> _";
@@ -248,8 +250,8 @@ pub fn generate_rust_test_loop<T: IntrinsicTypeDefinition>(
248250
}}\n\
249251
}}\n\
250252
}}",
251-
loaded_args = intrinsic.arguments().load_values_rust(indentation3),
252-
args = intrinsic.arguments().as_call_param_rust(),
253+
loaded_args = intrinsic.arguments.load_values_rust(indentation3),
254+
args = intrinsic.arguments.as_call_param_rust(),
253255
)
254256
}
255257

@@ -277,15 +279,15 @@ fn generate_rust_specializations<'a>(
277279
// Top-level function to create complete test program
278280
pub fn create_rust_test_module<T: IntrinsicTypeDefinition>(
279281
w: &mut impl std::io::Write,
280-
intrinsic: &dyn IntrinsicDefinition<T>,
282+
intrinsic: &Intrinsic<T>,
281283
) -> std::io::Result<()> {
282-
trace!("generating `{}`", intrinsic.name());
284+
trace!("generating `{}`", intrinsic.name);
283285
let indentation = Indentation::default();
284286

285-
writeln!(w, "pub fn run_{}() {{", intrinsic.name())?;
287+
writeln!(w, "pub fn run_{}() {{", intrinsic.name)?;
286288

287289
// Define the arrays of arguments.
288-
let arguments = intrinsic.arguments();
290+
let arguments = &intrinsic.arguments;
289291
arguments.gen_arglists_rust(w, indentation.nested(), PASSES)?;
290292

291293
// Define any const generics as `const` items, then generate the actual test loop.

library/stdarch/crates/intrinsic-test/src/common/intrinsic.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,14 @@ pub struct Intrinsic<T: IntrinsicTypeDefinition> {
1717
pub arch_tags: Vec<String>,
1818
}
1919

20-
pub trait IntrinsicDefinition<T>
21-
where
22-
T: IntrinsicTypeDefinition,
23-
{
24-
fn arguments(&self) -> ArgumentList<T>;
25-
26-
fn results(&self) -> T;
27-
28-
fn name(&self) -> String;
29-
}
30-
31-
pub fn format_f16_return_value<T: IntrinsicTypeDefinition>(
32-
intrinsic: &dyn IntrinsicDefinition<T>,
33-
) -> String {
20+
pub fn format_f16_return_value<T: IntrinsicTypeDefinition>(intrinsic: &Intrinsic<T>) -> String {
3421
// the `intrinsic-test` crate compares the output of C and Rust intrinsics. Currently, It uses
3522
// a string representation of the output value to compare. In C, f16 values are currently printed
3623
// as hexadecimal integers. Since https://github.com/rust-lang/rust/pull/127013, rust does print
3724
// them as decimal floating point values. To keep the intrinsics tests working, for now, format
3825
// vectors containing f16 values like C prints them.
39-
let return_value = match intrinsic.results().kind() {
40-
TypeKind::Float if intrinsic.results().inner_size() == 16 => "debug_f16(__return_value)",
26+
let return_value = match intrinsic.results.kind() {
27+
TypeKind::Float if intrinsic.results.inner_size() == 16 => "debug_f16(__return_value)",
4128
_ => "format_args!(\"{__return_value:.150?}\")",
4229
};
4330

0 commit comments

Comments
 (0)