Merge stdarch-gen-hexagon-scalar into stdarch-gen-hexagon

This commit is contained in:
xonx
2026-06-27 05:53:38 +00:00
parent a8fabf0cf7
commit d08cce85df
8 changed files with 1673 additions and 1751 deletions
+2 -6
View File
@@ -318,7 +318,7 @@ jobs:
# Check that the generated files agree with the checked-in versions.
check-stdarch-gen:
needs: [style]
name: Check stdarch-gen-{arm, loongarch, hexagon, hexagon-scalar} output
name: Check stdarch-gen-{arm, loongarch, hexagon} output
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
@@ -342,11 +342,7 @@ jobs:
run: |
cargo run -p stdarch-gen-hexagon --release
git diff --exit-code
- name: Check hexagon scalar
run: |
cargo run -p stdarch-gen-hexagon-scalar --release
git diff --exit-code
# Run some tests with Miri. Most stdarch functions use platform-specific intrinsics
# that Miri does not support. Also Miri is reltively slow.
#
-7
View File
@@ -849,13 +849,6 @@ dependencies = [
"stdarch-gen-common",
]
[[package]]
name = "stdarch-gen-hexagon-scalar"
version = "0.1.0"
dependencies = [
"regex",
]
[[package]]
name = "stdarch-gen-loongarch"
version = "0.1.0"
@@ -1,3 +1,4 @@
// This code is automatically generated. DO NOT MODIFY.
//! Hexagon scalar intrinsics
//!
//! This module provides intrinsics for scalar (non-HVX) Hexagon DSP operations,
@@ -1,9 +0,0 @@
[package]
name = "stdarch-gen-hexagon-scalar"
version = "0.1.0"
authors = ["The Rust Project Developers"]
license = "MIT OR Apache-2.0"
edition = "2021"
[dependencies]
regex = "1.10"
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -21,6 +21,7 @@ use std::collections::HashMap;
use std::fs::File;
use std::io::Write;
use std::path::Path;
use stdarch_gen_common::GENERATED_MARKER;
/// Extract the instruction mnemonic from the assembly syntax string.
///
@@ -630,6 +631,7 @@ fn generate_scalar_file(intrinsics: &[ScalarIntrinsic], output_path: &Path) -> R
let mut output =
File::create(output_path).map_err(|e| format!("Failed to create output: {}", e))?;
writeln!(output, "{}", GENERATED_MARKER).map_err(|e| e.to_string())?;
writeln!(output, "{}", generate_module_doc()).map_err(|e| e.to_string())?;
writeln!(output, "").map_err(|e| e.to_string())?;
writeln!(output, "{}", generate_extern_block(intrinsics)).map_err(|e| e.to_string())?;
@@ -651,28 +653,12 @@ fn generate_scalar_file(intrinsics: &[ScalarIntrinsic], output_path: &Path) -> R
Ok(())
}
fn main() -> Result<(), String> {
println!("=== Hexagon Scalar Code Generator ===\n");
let crate_dir = std::env::var("CARGO_MANIFEST_DIR")
.map(std::path::PathBuf::from)
.unwrap_or_else(|_| std::env::current_dir().unwrap());
let header_content = read_header(&crate_dir)?;
println!("Read {} bytes", header_content.len());
/// Parse the scalar header in `crate_dir` and write `scalar.rs` into `out_dir`.
pub fn generate(crate_dir: &std::path::Path, out_dir: &std::path::Path) -> Result<(), String> {
let header_content = read_header(crate_dir)?;
let intrinsics = parse_header(&header_content);
println!("Parsed {} scalar intrinsics", intrinsics.len());
let hexagon_dir = std::env::args()
.nth(1)
.map(std::path::PathBuf::from)
.unwrap_or_else(|| crate_dir.join("../core_arch/src/hexagon"));
std::fs::create_dir_all(&hexagon_dir).map_err(|e| e.to_string())?;
let scalar_path = hexagon_dir.join("scalar.rs");
std::fs::create_dir_all(out_dir).map_err(|e| e.to_string())?;
let scalar_path = out_dir.join("scalar.rs");
generate_scalar_file(&intrinsics, &scalar_path)?;
println!("Generated scalar.rs at {}", scalar_path.display());
Ok(())
}