about summary refs log tree commit diff
path: root/library/stdarch/crates/intrinsic-test/src
diff options
context:
space:
mode:
authorMadhav Madhusoodanan <f20200049@pilani.bits-pilani.ac.in>2025-04-19 23:41:25 +0530
committerAmanieu d'Antras <amanieu@gmail.com>2025-05-27 23:27:38 +0000
commita416e3ea11d5c1e0518aa5635c1f2474d9942c38 (patch)
tree1366ea42bd7b8e06023252ef39f6b39f01ccd0d7 /library/stdarch/crates/intrinsic-test/src
parent8d0141ee198560f4409e9274341a3277a0897336 (diff)
downloadrust-a416e3ea11d5c1e0518aa5635c1f2474d9942c38.tar.gz
rust-a416e3ea11d5c1e0518aa5635c1f2474d9942c38.zip
code cleanup
Diffstat (limited to 'library/stdarch/crates/intrinsic-test/src')
-rw-r--r--library/stdarch/crates/intrinsic-test/src/arm/functions.rs38
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/compile_c.rs8
2 files changed, 23 insertions, 23 deletions
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/functions.rs b/library/stdarch/crates/intrinsic-test/src/arm/functions.rs
index 6f39e4a6587..f471c4b33d4 100644
--- a/library/stdarch/crates/intrinsic-test/src/arm/functions.rs
+++ b/library/stdarch/crates/intrinsic-test/src/arm/functions.rs
@@ -11,7 +11,6 @@ use crate::common::intrinsic_types::IntrinsicTypeDefinition;
 use crate::common::write_file;
 use itertools::Itertools;
 use rayon::prelude::*;
-use std::collections::BTreeMap;
 
 // The number of times each intrinsic will be called.
 const PASSES: u32 = 20;
@@ -162,11 +161,11 @@ fn generate_rust_program_arm(
 
 fn compile_c_arm(
     intrinsics_name_list: &Vec<String>,
-    _filename_mapping: BTreeMap<&String, String>,
     compiler: &str,
     target: &str,
     cxx_toolchain_dir: Option<&str>,
 ) -> bool {
+    // -ffp-contract=off emulates Rust's approach of not fusing separate mul-add operations
     let mut command = CompilationCommandBuilder::new()
         .add_arch_flags(vec!["armv8.6-a", "crypto", "crc", "dotprod", "fp16"])
         .set_compiler(compiler)
@@ -180,8 +179,17 @@ fn compile_c_arm(
         command = command.add_arch_flags(vec!["faminmax", "lut", "sha3"]);
     }
 
-    command = if target == "aarch64_be-unknown-linux-gnu" {
-        command
+    /*
+     * clang++ cannot link an aarch64_be object file, so we invoke
+     * aarch64_be-unknown-linux-gnu's C++ linker. This ensures that we
+     * are testing the intrinsics against LLVM.
+     *
+     * Note: setting `--sysroot=<...>` which is the obvious thing to do
+     * does not work as it gets caught up with `#include_next <stdlib.h>`
+     * not existing...
+     */
+    if target == "aarch64_be-unknown-linux-gnu" {
+        command = command
             .set_linker(
                 cxx_toolchain_dir.unwrap_or("").to_string() + "/bin/aarch64_be-none-linux-gnu-g++",
             )
@@ -192,14 +200,12 @@ fn compile_c_arm(
                 "/aarch64_be-none-linux-gnu/include/c++/14.2.1/aarch64_be-none-linux-gnu",
                 "/aarch64_be-none-linux-gnu/include/c++/14.2.1/backward",
                 "/aarch64_be-none-linux-gnu/libc/usr/include",
-            ])
-    } else {
-        if compiler.contains("clang") {
-            command.add_extra_flag(format!("-target {target}").as_str())
-        } else {
-            command.add_extra_flag("-flax-vector-conversions")
-        }
-    };
+            ]);
+    }
+
+    if !compiler.contains("clang") {
+        command = command.add_extra_flag("-flax-vector-conversions");
+    }
 
     let compiler_commands = intrinsics_name_list
         .iter()
@@ -237,13 +243,7 @@ pub fn build_c(
 
     match compiler {
         None => true,
-        Some(compiler) => compile_c_arm(
-            &intrinsics_name_list,
-            filename_mapping,
-            compiler,
-            target,
-            cxx_toolchain_dir,
-        ),
+        Some(compiler) => compile_c_arm(&intrinsics_name_list, compiler, target, cxx_toolchain_dir),
     }
 }
 
diff --git a/library/stdarch/crates/intrinsic-test/src/common/compile_c.rs b/library/stdarch/crates/intrinsic-test/src/common/compile_c.rs
index f018e02fb2f..b38e8b1499a 100644
--- a/library/stdarch/crates/intrinsic-test/src/common/compile_c.rs
+++ b/library/stdarch/crates/intrinsic-test/src/common/compile_c.rs
@@ -116,11 +116,11 @@ impl CompilationCommandBuilder {
 
         command = command + " " + self.extra_flags.join(" ").as_str();
 
-        if let (Some(linker), Some(cxx_toolchain_dir)) = (&self.linker, &self.cxx_toolchain_dir) {
-            if let Some(target) = &self.target {
-                command = command + " --target=" + target;
-            }
+        if let Some(target) = &self.target {
+            command = command + " --target=" + target;
+        }
 
+        if let (Some(linker), Some(cxx_toolchain_dir)) = (&self.linker, &self.cxx_toolchain_dir) {
             let include_args = self
                 .include_paths
                 .iter()