Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 --no-fail-fast "$@"
88 changes: 44 additions & 44 deletions crates/core_arch/src/aarch64/sve/generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42211,30 +42211,17 @@ pub fn svtmad_f64<const IMM3: i32>(op1: svfloat64_t, op2: svfloat64_t) -> svfloa
unsafe { _svtmad_f64(op1, op2, IMM3) }
}
#[doc = "Interleave even elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn1_b8)"]
#[inline]
#[target_feature(enable = "sve")]
#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
#[cfg_attr(test, assert_instr(trn1))]
pub fn svtrn1_b8(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.nxv16i1")]
fn _svtrn1_b8(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn1_b8(op1, op2) }
}
#[doc = "Interleave even elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn1_b16)"]
#[inline]
#[target_feature(enable = "sve")]
#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
#[cfg_attr(test, assert_instr(trn1))]
pub fn svtrn1_b16(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.nxv8i1")]
fn _svtrn1_b16(op1: svbool8_t, op2: svbool8_t) -> svbool8_t;
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.b16")]
fn _svtrn1_b16(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn1_b16(op1.sve_into(), op2.sve_into()).sve_into() }
unsafe { _svtrn1_b16(op1.sve_into(), op2.sve_into()) }
}
#[doc = "Interleave even elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn1_b32)"]
Expand All @@ -42244,10 +42231,10 @@ pub fn svtrn1_b16(op1: svbool_t, op2: svbool_t) -> svbool_t {
#[cfg_attr(test, assert_instr(trn1))]
pub fn svtrn1_b32(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.nxv4i1")]
fn _svtrn1_b32(op1: svbool4_t, op2: svbool4_t) -> svbool4_t;
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.b32")]
fn _svtrn1_b32(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn1_b32(op1.sve_into(), op2.sve_into()).sve_into() }
unsafe { _svtrn1_b32(op1.sve_into(), op2.sve_into()) }
}
#[doc = "Interleave even elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn1_b64)"]
Expand All @@ -42257,10 +42244,10 @@ pub fn svtrn1_b32(op1: svbool_t, op2: svbool_t) -> svbool_t {
#[cfg_attr(test, assert_instr(trn1))]
pub fn svtrn1_b64(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.nxv2i1")]
fn _svtrn1_b64(op1: svbool2_t, op2: svbool2_t) -> svbool2_t;
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.b64")]
fn _svtrn1_b64(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn1_b64(op1.sve_into(), op2.sve_into()).sve_into() }
unsafe { _svtrn1_b64(op1.sve_into(), op2.sve_into()) }
}
#[doc = "Interleave even elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn1[_f32])"]
Expand Down Expand Up @@ -42376,6 +42363,19 @@ pub fn svtrn1_u32(op1: svuint32_t, op2: svuint32_t) -> svuint32_t {
pub fn svtrn1_u64(op1: svuint64_t, op2: svuint64_t) -> svuint64_t {
unsafe { svtrn1_s64(op1.as_signed(), op2.as_signed()).as_unsigned() }
}
#[doc = "Interleave even elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn1[_b8])"]
#[inline]
#[target_feature(enable = "sve")]
#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
#[cfg_attr(test, assert_instr(trn1))]
pub fn svtrn1_b8(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn1.nxv16i1")]
fn _svtrn1_b8(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn1_b8(op1, op2) }
}
#[doc = "Interleave even quadwords from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn1q[_f32])"]
#[inline]
Expand Down Expand Up @@ -42491,30 +42491,17 @@ pub fn svtrn1q_u64(op1: svuint64_t, op2: svuint64_t) -> svuint64_t {
unsafe { svtrn1q_s64(op1.as_signed(), op2.as_signed()).as_unsigned() }
}
#[doc = "Interleave odd elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn2_b8)"]
#[inline]
#[target_feature(enable = "sve")]
#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
#[cfg_attr(test, assert_instr(trn2))]
pub fn svtrn2_b8(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.nxv16i1")]
fn _svtrn2_b8(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn2_b8(op1, op2) }
}
#[doc = "Interleave odd elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn2_b16)"]
#[inline]
#[target_feature(enable = "sve")]
#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
#[cfg_attr(test, assert_instr(trn2))]
pub fn svtrn2_b16(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.nxv8i1")]
fn _svtrn2_b16(op1: svbool8_t, op2: svbool8_t) -> svbool8_t;
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.b16")]
fn _svtrn2_b16(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn2_b16(op1.sve_into(), op2.sve_into()).sve_into() }
unsafe { _svtrn2_b16(op1.sve_into(), op2.sve_into()) }
}
#[doc = "Interleave odd elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn2_b32)"]
Expand All @@ -42524,10 +42511,10 @@ pub fn svtrn2_b16(op1: svbool_t, op2: svbool_t) -> svbool_t {
#[cfg_attr(test, assert_instr(trn2))]
pub fn svtrn2_b32(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.nxv4i1")]
fn _svtrn2_b32(op1: svbool4_t, op2: svbool4_t) -> svbool4_t;
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.b32")]
fn _svtrn2_b32(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn2_b32(op1.sve_into(), op2.sve_into()).sve_into() }
unsafe { _svtrn2_b32(op1.sve_into(), op2.sve_into()) }
}
#[doc = "Interleave odd elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn2_b64)"]
Expand All @@ -42537,10 +42524,10 @@ pub fn svtrn2_b32(op1: svbool_t, op2: svbool_t) -> svbool_t {
#[cfg_attr(test, assert_instr(trn2))]
pub fn svtrn2_b64(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.nxv2i1")]
fn _svtrn2_b64(op1: svbool2_t, op2: svbool2_t) -> svbool2_t;
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.b64")]
fn _svtrn2_b64(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn2_b64(op1.sve_into(), op2.sve_into()).sve_into() }
unsafe { _svtrn2_b64(op1.sve_into(), op2.sve_into()) }
}
#[doc = "Interleave odd elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn2[_f32])"]
Expand Down Expand Up @@ -42656,6 +42643,19 @@ pub fn svtrn2_u32(op1: svuint32_t, op2: svuint32_t) -> svuint32_t {
pub fn svtrn2_u64(op1: svuint64_t, op2: svuint64_t) -> svuint64_t {
unsafe { svtrn2_s64(op1.as_signed(), op2.as_signed()).as_unsigned() }
}
#[doc = "Interleave odd elements from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn2[_b8])"]
#[inline]
#[target_feature(enable = "sve")]
#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
#[cfg_attr(test, assert_instr(trn2))]
pub fn svtrn2_b8(op1: svbool_t, op2: svbool_t) -> svbool_t {
unsafe extern "unadjusted" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.trn2.nxv16i1")]
fn _svtrn2_b8(op1: svbool_t, op2: svbool_t) -> svbool_t;
}
unsafe { _svtrn2_b8(op1, op2) }
}
#[doc = "Interleave odd quadwords from two inputs"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/svtrn2q[_f32])"]
#[inline]
Expand Down
22 changes: 10 additions & 12 deletions crates/intrinsic-test/src/arm/json_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,22 +58,14 @@ struct JsonIntrinsic {
_instructions: Option<Vec<Vec<String>>>,
}

pub fn get_neon_intrinsics(
filename: &Path,
) -> Result<Vec<Intrinsic<Arm>>, 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)
}
Expand Down Expand Up @@ -121,8 +113,14 @@ fn json_to_intrinsic(
}
});

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

// The JSON doesn't list immediates as const
let IntrinsicType {
Expand Down
Loading
Loading