From 54e277cdd58d6ceed114d5fca92405ec6f68d213 Mon Sep 17 00:00:00 2001 From: Madhav Madhusoodanan Date: Sun, 25 May 2025 21:17:31 +0530 Subject: [PATCH] fix: moved f16 formatting code to common module --- .../crates/intrinsic-test/src/arm/intrinsic.rs | 11 +---------- .../crates/intrinsic-test/src/common/intrinsic.rs | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs b/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs index 0c3a832bac81..e3b0fbbce933 100644 --- a/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs +++ b/library/stdarch/crates/intrinsic-test/src/arm/intrinsic.rs @@ -127,16 +127,7 @@ impl IntrinsicDefinition for Intrinsic { constraints }; - // the `intrinsic-test` crate compares the output of C and Rust intrinsics. Currently, It uses - // a string representation of the output value to compare. In C, f16 values are currently printed - // as hexadecimal integers. Since https://github.com/rust-lang/rust/pull/127013, rust does print - // them as decimal floating point values. To keep the intrinsics tests working, for now, format - // vectors containing f16 values like C prints them. - let return_value = match self.results.kind() { - TypeKind::Float if self.results.inner_size() == 16 => "debug_f16(__return_value)", - _ => "format_args!(\"{__return_value:.150?}\")", - }; - + let return_value = self.format_f16_return_value(); let indentation2 = indentation.nested(); let indentation3 = indentation2.nested(); diff --git a/library/stdarch/crates/intrinsic-test/src/common/intrinsic.rs b/library/stdarch/crates/intrinsic-test/src/common/intrinsic.rs index fcc2d4941b38..9a2bf74a63d3 100644 --- a/library/stdarch/crates/intrinsic-test/src/common/intrinsic.rs +++ b/library/stdarch/crates/intrinsic-test/src/common/intrinsic.rs @@ -6,6 +6,7 @@ use itertools::Itertools; use super::argument::Argument; use super::gen_c::generate_c_program; use super::gen_rust::generate_rust_program; +use super::intrinsic_helpers::TypeKind; // The number of times each intrinsic will be called. const PASSES: u32 = 20; @@ -41,6 +42,20 @@ where /// there is an int i in scope which is the current pass number. fn print_result_c(&self, _indentation: Indentation, _additional: &str) -> String; + fn format_f16_return_value(&self) -> String { + // the `intrinsic-test` crate compares the output of C and Rust intrinsics. Currently, It uses + // a string representation of the output value to compare. In C, f16 values are currently printed + // as hexadecimal integers. Since https://github.com/rust-lang/rust/pull/127013, rust does print + // them as decimal floating point values. To keep the intrinsics tests working, for now, format + // vectors containing f16 values like C prints them. + let return_value = match self.results().kind() { + TypeKind::Float if self.results().inner_size() == 16 => "debug_f16(__return_value)", + _ => "format_args!(\"{__return_value:.150?}\")", + }; + + String::from(return_value) + } + fn generate_loop_c( &self, indentation: Indentation,