Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
426657c
loongarch: Use `intrinsics::simd` for v{ld,st}[x]
heiher May 28, 2026
285d935
intrinsic-test: default to `--no-fail-fast`
davidtwco Jun 22, 2026
1d594c4
intrinsic-test: specializations as iterator
davidtwco May 20, 2026
9ac81d1
intrinsic-test: impl `get_load_function` for SVE
davidtwco Jun 1, 2026
b3ef0a5
Replace cfg_if with cfg_select
hkBst Jun 25, 2026
0fcde25
intrinsic-test: use `arm_sve.h` and target feats
davidtwco Jun 1, 2026
680b275
intrinsic-test: `bool` test values
davidtwco Jun 1, 2026
f733bf8
intrinsic-test: values for enum-typed constraints
davidtwco Jun 1, 2026
e88c874
intrinsic-test: no test values for `svbool_t`
davidtwco Jun 1, 2026
daab032
intrinsic-test: introduce `predicate_function`
davidtwco Jun 1, 2026
13678b0
intrinsic-test: sve comparison and predicates
davidtwco Jun 1, 2026
1393d87
intrinsic-test: test values for `svbool_t`
davidtwco Jun 4, 2026
d9cab00
intrinsic-test: enable non-baseline target features
davidtwco Jun 11, 2026
c10f404
intrinsic-test: SVE float comparison
davidtwco Jun 11, 2026
687d636
intrinsic-test: stop skipping SVE intrinsics
davidtwco Jun 1, 2026
3d2e05b
intrinsic-test: print scalable vectors on test fail
davidtwco Jun 15, 2026
3316f81
core_arch: redefine `svtrn{1,2}`
davidtwco Jun 22, 2026
f326508
Merge pull request #2160 from davidtwco/intrinsic-test-sve
sayantn Jun 28, 2026
ce3cff8
Merge pull request #2174 from hkBst/cfg-select
folkertdev Jun 28, 2026
d5b0137
Merge pull request #2146 from heiher/vld-st-x
folkertdev Jun 29, 2026
d08cce8
Merge stdarch-gen-hexagon-scalar into stdarch-gen-hexagon
xonx4l Jun 27, 2026
93c9813
Merge pull request #2175 from xonx4l/merge-hexagon-generators
folkertdev Jun 29, 2026
a9832de
loongarch: Use `intrinsics::simd` for vrotr[i]
heiher Jun 2, 2026
8da5bdb
Merge pull request #2150 from heiher/vrotr-i
folkertdev Jun 30, 2026
24dcc9f
loongarch: Use `intrinsics::simd` for vfrecip
heiher Jun 2, 2026
2d10d1f
Merge pull request #2151 from heiher/vfrecip
folkertdev Jun 30, 2026
b6d1f13
loongarch: Use `intrinsics::simd` for vfrsqrt
heiher Jun 2, 2026
2482d47
Merge pull request #2152 from heiher/vfrsqrt
folkertdev Jun 30, 2026
6f6aac0
loongarch: Use `intrinsics::simd` for vfrintr{p,m,z}
heiher Jun 2, 2026
f959792
Merge pull request #2153 from heiher/vfrintr-p-m-z
folkertdev Jun 30, 2026
392facd
loongarch: Use `intrinsics::simd` for vmuh
heiher Jun 11, 2026
4f762a3
Merge pull request #2158 from heiher/vmuh
folkertdev Jul 1, 2026
99c8cf8
Add align requirement in _mm_stream_si32 and _mm_stream_si64
yilin0518 Jul 7, 2026
dd26311
disable `icx` CI run
folkertdev Jul 8, 2026
62fda0a
Merge pull request #2185 from folkertdev/disable-icx
davidtwco Jul 8, 2026
6236baf
Merge pull request #2183 from yilin0518/main
folkertdev Jul 8, 2026
66ebb4f
ci: use `llvm-22.1.4-x86_64.tar.gz` mirrored in `ci-mirrors`
jieyouxu Jul 8, 2026
f7a6c99
cleanup: upstream dropped AMX-TF32
krasimirgg Jul 8, 2026
8fa04ef
Merge pull request #2186 from jieyouxu/jieyouxu/mirror/stdarch
folkertdev Jul 8, 2026
465e429
Merge pull request #2184 from krasimirgg/jul26-drop-amx-tf32
folkertdev Jul 8, 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
21 changes: 9 additions & 12 deletions library/stdarch/.github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -285,12 +285,13 @@ jobs:
include:
- target: aarch64_be-unknown-linux-gnu
build_std: true
- target: x86_64-unknown-linux-gnu
cc: icx
profile: dev
- target: x86_64-unknown-linux-gnu
cc: icx
profile: release
# getting the icx compiler hits network failures.
# - target: x86_64-unknown-linux-gnu
# cc: icx
# profile: dev
# - target: x86_64-unknown-linux-gnu
# cc: icx
# profile: release
exclude:
- target: armv7-unknown-linux-gnueabihf
cc: gcc
Expand Down Expand Up @@ -318,7 +319,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
Expand All @@ -342,11 +343,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.
#
Expand Down
8 changes: 0 additions & 8 deletions library/stdarch/Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -869,7 +862,6 @@ version = "0.1.0"
dependencies = [
"assert-instr-macro",
"cc",
"cfg-if",
"rustc-demangle",
"simd-test-macro",
"wasmprinter",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
xz-utils \
wget

RUN wget https://mirrors.edge.kernel.org/pub/tools/llvm/files/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN wget https://ci-mirrors.rust-lang.org/llvm/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN mkdir llvm
RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm

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
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ RUN curl -L "https://developer.arm.com/-/media/Files/downloads/gnu/14.3.rel1/bin
RUN tar -xvf "${TOOLCHAIN}.tar.xz"
RUN mkdir /toolchains && mv "./${TOOLCHAIN}" /toolchains

RUN wget https://mirrors.edge.kernel.org/pub/tools/llvm/files/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN wget https://ci-mirrors.rust-lang.org/llvm/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN mkdir llvm
RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
file \
wget

RUN wget https://mirrors.edge.kernel.org/pub/tools/llvm/files/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN wget https://ci-mirrors.rust-lang.org/llvm/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN mkdir llvm
RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ RUN wget http://ci-mirrors.rust-lang.org/sde-external-10.8.0-2026-03-15-lin.tar.
RUN mkdir intel-sde
RUN tar -xJf sde.tar.xz --strip-components=1 -C intel-sde

RUN wget https://mirrors.edge.kernel.org/pub/tools/llvm/files/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN wget https://ci-mirrors.rust-lang.org/llvm/llvm-22.1.4-x86_64.tar.gz -O llvm.tar.xz
RUN mkdir llvm
RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm

Expand Down
8 changes: 6 additions & 2 deletions library/stdarch/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 library/stdarch/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
1 change: 1 addition & 0 deletions library/stdarch/crates/core_arch/src/hexagon/scalar.rs
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
Loading
Loading