Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d92c7bc
intrinsic-test: remove `concatln!`
davidtwco May 20, 2026
ebc55a5
intrinsic-test: specializations as iterator
davidtwco May 20, 2026
1a30096
intrinsic-test: shorten various type names
davidtwco Jun 2, 2026
9eff4c3
intrinsic-test: impl `get_load_function` for SVE
davidtwco Jun 1, 2026
8fbad40
intrinsic-test: skip unimplemented SVE intrinsics
davidtwco Jun 1, 2026
d1f9034
intrinsic-test: use `arm_sve.h` and target feats
davidtwco Jun 1, 2026
0b306d2
intrinsic-test: `bool` test values
davidtwco Jun 1, 2026
804fc5b
intrinsic-test: values for enum-typed constraints
davidtwco Jun 1, 2026
2bbcf36
intrinsic-test: simplify type printing
davidtwco Jun 1, 2026
67ca0f3
intrinsic-test: no test values for `svbool_t`
davidtwco Jun 1, 2026
25cc9d0
intrinsic-test: introduce `get_comparison_function`
davidtwco Jun 1, 2026
1a74b0c
intrinsic-test: intrisic generic over arch not type
davidtwco Jun 2, 2026
743d859
intrinsic-test: introduce `get_predicate_function`
davidtwco Jun 1, 2026
a9cc145
intrinsic-test: sve comparison and predicates
davidtwco Jun 1, 2026
a3dec95
intrinsic-test: rename `get_*_function` fns
davidtwco Jun 4, 2026
5069118
intrinsic-test: arg generic over arch not type
davidtwco Jun 9, 2026
8320188
intrinsic-test: test values for `svbool_t`
davidtwco Jun 4, 2026
37bdd31
intrinsic-test: remove unnecessary newlines
davidtwco Jun 9, 2026
2279a65
intrinsic-test: stop skipping SVE intrinsics
davidtwco Jun 1, 2026
938efb5
intrinsic-test: simplify architecture constants
davidtwco Jun 11, 2026
cf96749
intrinsic-test: enable non-baseline target features
davidtwco Jun 11, 2026
33ff51e
intrinsic-test: skip SVE intrinsics on big endian
davidtwco Jun 11, 2026
476e894
intrinsic-test: SVE float comparison
davidtwco Jun 11, 2026
6616547
intrinsic-test: do not test `svundef*`
davidtwco Jun 15, 2026
7ce3b63
intrinsic-test: skip `sveorv*` (llvm-project#203921)
davidtwco Jun 15, 2026
fac05d4
intrinsic-test: skip `svld*_gather_*`
davidtwco Jun 15, 2026
ea73af3
intrinsic-test: no SVE testing under GCC
davidtwco Jun 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ci/docker/aarch64-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@ ENV CLANG_PATH="/llvm/bin/clang"
ENV GCC_PATH=aarch64-linux-gnu-gcc

ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="qemu-aarch64 -cpu max -L /usr/aarch64-linux-gnu" \
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="qemu-aarch64 -cpu max,sve512=on -L /usr/aarch64-linux-gnu" \
OBJDUMP=aarch64-linux-gnu-objdump
8 changes: 6 additions & 2 deletions ci/intrinsic-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,25 @@ case ${TARGET} in
aarch64_be*)
export CFLAGS="-I${AARCH64_BE_TOOLCHAIN}/aarch64_be-none-linux-gnu/libc/usr/include --sysroot={AARCH64_BE_TOOLCHAIN}/aarch64_be-none-linux-gnu/libc -Wno-nonportable-vector-initialization"
ARCH=aarch64_be
RUNTIME_RUSTFLAGS=
;;

aarch64*)
export CFLAGS="-I/usr/aarch64-linux-gnu/include/"
ARCH=aarch64
RUNTIME_RUSTFLAGS=-Ctarget-feature=+sve,+sve2
;;

armv7*)
export CFLAGS="-I/usr/arm-linux-gnueabihf/include/"
ARCH=arm
RUNTIME_RUSTFLAGS=
;;

x86_64*)
export CFLAGS="-I/usr/include/x86_64-linux-gnu/"
ARCH=x86
RUNTIME_RUSTFLAGS=
;;
*)
;;
Expand All @@ -86,5 +90,5 @@ case "${TARGET}" in
;;
esac

cargo test --manifest-path=rust_programs/Cargo.toml --target "${TARGET}" --profile "${PROFILE}" \
--tests "$@"
RUSTFLAGS="${RUNTIME_RUSTFLAGS}" cargo test --manifest-path=rust_programs/Cargo.toml \
--target "${TARGET}" --profile "${PROFILE}" --tests "$@"
25 changes: 0 additions & 25 deletions crates/intrinsic-test/src/arm/config.rs

This file was deleted.

6 changes: 3 additions & 3 deletions crates/intrinsic-test/src/arm/intrinsic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ use crate::common::intrinsic_helpers::IntrinsicType;
use std::ops::{Deref, DerefMut};

#[derive(Debug, Clone, PartialEq)]
pub struct ArmIntrinsicType(pub IntrinsicType);
pub struct ArmType(pub IntrinsicType);

impl Deref for ArmIntrinsicType {
impl Deref for ArmType {
type Target = IntrinsicType;

fn deref(&self) -> &Self::Target {
&self.0
}
}

impl DerefMut for ArmIntrinsicType {
impl DerefMut for ArmType {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
Expand Down
28 changes: 12 additions & 16 deletions crates/intrinsic-test/src/arm/json_parser.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use super::intrinsic::ArmIntrinsicType;
use super::intrinsic::ArmType;
use crate::arm::Arm;
use crate::arm::types::parse_intrinsic_type;
use crate::common::argument::{Argument, ArgumentList};
use crate::common::constraint::Constraint;
Expand Down Expand Up @@ -57,32 +58,24 @@ struct JsonIntrinsic {
_instructions: Option<Vec<Vec<String>>>,
}

pub fn get_neon_intrinsics(
filename: &Path,
) -> Result<Vec<Intrinsic<ArmIntrinsicType>>, Box<dyn std::error::Error>> {
pub fn get_intrinsics(filename: &Path) -> Result<Vec<Intrinsic<Arm>>, Box<dyn std::error::Error>> {
let file = std::fs::File::open(filename)?;
let reader = std::io::BufReader::new(file);
let json: Vec<JsonIntrinsic> = serde_json::from_reader(reader).expect("Couldn't parse JSON");

let parsed = json
.into_iter()
.filter_map(|intr| {
if intr.simd_isa == "Neon" {
Some(json_to_intrinsic(intr).expect("Couldn't parse JSON"))
} else {
None
}
})
.map(|intr| json_to_intrinsic(intr).expect("Couldn't parse JSON"))
.collect();
Ok(parsed)
}

fn json_to_intrinsic(
mut intr: JsonIntrinsic,
) -> Result<Intrinsic<ArmIntrinsicType>, Box<dyn std::error::Error>> {
) -> Result<Intrinsic<Arm>, Box<dyn std::error::Error>> {
let name = intr.name.replace(['[', ']'], "");

let result_ty = ArmIntrinsicType(parse_intrinsic_type(&intr.return_type.value)?);
let result_ty = ArmType(parse_intrinsic_type(&intr.return_type.value)?);

let args = intr
.arguments
Expand Down Expand Up @@ -120,11 +113,13 @@ fn json_to_intrinsic(
}
});

let mut arg = Argument::<ArmIntrinsicType>::new(
let is_predicate = arg_name == "pg";
let mut arg = Argument::<Arm>::new(
i,
String::from(arg_name),
ArmIntrinsicType(arg_ty),
ArmType(arg_ty),
constraint,
is_predicate,
);

// The JSON doesn't list immediates as const
Expand All @@ -138,13 +133,14 @@ fn json_to_intrinsic(
})
.collect();

let arguments = ArgumentList::<ArmIntrinsicType> { args };
let arguments = ArgumentList::<Arm> { args };

Ok(Intrinsic {
name,
arguments,
results: result_ty,
arch_tags: intr.architectures,
extension: intr.simd_isa,
})
}

Expand Down
Loading
Loading