diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 28c15cf473..648b1d1b7e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -4,70 +4,69 @@ on:
merge_group:
jobs:
- style:
- name: Check Style
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Install Rust
- run: rustup update nightly --no-self-update && rustup default nightly
- - run: ci/style.sh
-
- docs:
- name: Build Documentation
- needs: [style]
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Install Rust
- run: rustup update nightly --no-self-update && rustup default nightly
- - run: ci/dox.sh
- env:
- CI: 1
-
- verify:
- name: Automatic intrinsic verification
- needs: [style]
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Install Rust
- run: rustup update nightly --no-self-update && rustup default nightly
- - run: cargo test --manifest-path crates/stdarch-verify/Cargo.toml
+ # style:
+ # name: Check Style
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@v6
+ # - name: Install Rust
+ # run: rustup update nightly --no-self-update && rustup default nightly
+ # - run: ci/style.sh
+ #
+ # docs:
+ # name: Build Documentation
+ # needs: [style]
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@v6
+ # - name: Install Rust
+ # run: rustup update nightly --no-self-update && rustup default nightly
+ # - run: ci/dox.sh
+ # env:
+ # CI: 1
+ #
+ # verify:
+ # name: Automatic intrinsic verification
+ # needs: [style]
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@v6
+ # - name: Install Rust
+ # run: rustup update nightly --no-self-update && rustup default nightly
+ # - run: cargo test --manifest-path crates/stdarch-verify/Cargo.toml
test:
- needs: [style]
name: Test
runs-on: ${{ matrix.target.os }}
strategy:
matrix:
profile:
- - dev
+ #- dev
- release
target:
# Dockers that are run through docker on linux
- - tuple: i686-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: x86_64-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: arm-unknown-linux-gnueabihf
- os: ubuntu-latest
- - tuple: armv7-unknown-linux-gnueabihf
- os: ubuntu-latest
- - tuple: aarch64-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: aarch64_be-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: riscv32gc-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: riscv64gc-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: powerpc-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: powerpc64-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: powerpc64le-unknown-linux-gnu
- os: ubuntu-latest
+ # tuple: i686-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: x86_64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: arm-unknown-linux-gnueabihf
+ # os: ubuntu-latest
+ # tuple: armv7-unknown-linux-gnueabihf
+ # os: ubuntu-latest
+ # tuple: aarch64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: aarch64_be-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: riscv32gc-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: riscv64gc-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: powerpc-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: powerpc64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: powerpc64le-unknown-linux-gnu
+ # os: ubuntu-latest
# MIPS targets disabled since they are dropped to tier 3.
# See https://github.com/rust-lang/compiler-team/issues/648
#- tuple: mips-unknown-linux-gnu
@@ -78,103 +77,108 @@ jobs:
# os: ubuntu-latest
#- tuple: mipsel-unknown-linux-musl
# os: ubuntu-latest
- - tuple: s390x-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: i586-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: nvptx64-nvidia-cuda
- os: ubuntu-latest
- - tuple: thumbv6m-none-eabi
- os: ubuntu-latest
- - tuple: thumbv7m-none-eabi
- os: ubuntu-latest
- - tuple: thumbv7em-none-eabi
- os: ubuntu-latest
- - tuple: thumbv7em-none-eabihf
- os: ubuntu-latest
- - tuple: loongarch64-unknown-linux-gnu
- os: ubuntu-latest
- - tuple: wasm32-wasip1
- os: ubuntu-latest
+ # tuple: s390x-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: i586-unknown-linux-gnu
+ # os: ubuntu-latest
+ # tuple: nvptx64-nvidia-cuda
+ # os: ubuntu-latest
+ # tuple: amdgcn-amd-amdhsa
+ # os: ubuntu-latest
+ # tuple: thumbv6m-none-eabi
+ # os: ubuntu-latest
+ # tuple: thumbv7m-none-eabi
+ # os: ubuntu-latest
+ # tuple: thumbv7em-none-eabi
+ # os: ubuntu-latest
+ # tuple: thumbv7em-none-eabihf
+ # os: ubuntu-latest
+ # tuple: loongarch64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # hexagon doesn't build at the moment due to a libc issue.
+ # - tuple: hexagon-unknown-linux-musl
+ # os: ubuntu-latest
+ # tuple: wasm32-wasip1
+ # os: ubuntu-latest
# macOS targets
- - tuple: x86_64-apple-darwin
- os: macos-15-large
- - tuple: x86_64-apple-ios-macabi
- os: macos-15-large
- - tuple: aarch64-apple-darwin
- os: macos-15
- - tuple: aarch64-apple-ios-macabi
- os: macos-15
+ # tuple: x86_64-apple-darwin
+ # os: macos-15-intel
+ # tuple: x86_64-apple-ios-macabi
+ # os: macos-15-intel
+ # tuple: aarch64-apple-darwin
+ # os: macos-15
+ # tuple: aarch64-apple-ios-macabi
+ # os: macos-15
# FIXME: gh-actions build environment doesn't have linker support
# - tuple: i686-apple-darwin
# os: macos-13
# Windows targets
- - tuple: x86_64-pc-windows-msvc
- os: windows-2025
- - tuple: i686-pc-windows-msvc
- os: windows-2025
+ # tuple: x86_64-pc-windows-msvc
+ # os: windows-2025
+ # tuple: i686-pc-windows-msvc
+ # os: windows-2025
- tuple: aarch64-pc-windows-msvc
os: windows-11-arm
- - tuple: arm64ec-pc-windows-msvc
- os: windows-11-arm
- - tuple: x86_64-pc-windows-gnu
- os: windows-2025
+ # tuple: arm64ec-pc-windows-msvc
+ # os: windows-11-arm
+ # tuple: x86_64-pc-windows-gnu
+ # os: windows-2025
# - tuple: i686-pc-windows-gnu
# os: windows-latest
# Add additional variables to the matrix variations generated above using `include`:
- include:
+ #nclude:
# `TEST_EVERYTHING` setups - there should be at least 1 for each architecture
- - target:
- tuple: aarch64-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
- - target:
- tuple: aarch64_be-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
- build_std: true
- - target:
- tuple: armv7-unknown-linux-gnueabihf
- os: ubuntu-latest
- test_everything: true
- - target:
- tuple: loongarch64-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
- - target:
- tuple: powerpc-unknown-linux-gnu
- os: ubuntu-latest
- disable_assert_instr: true
- test_everything: true
- - target:
- tuple: powerpc64-unknown-linux-gnu
- os: ubuntu-latest
- disable_assert_instr: true
- test_everything: true
- - target:
- tuple: powerpc64le-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
- - target:
- tuple: riscv32gc-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
- build_std: true
- - target:
- tuple: riscv64gc-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
- - target:
- tuple: s390x-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
- - target:
- tuple: x86_64-unknown-linux-gnu
- os: ubuntu-latest
- test_everything: true
+ # target:
+ # tuple: aarch64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
+ # target:
+ # tuple: aarch64_be-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
+ # build_std: true
+ # target:
+ # tuple: armv7-unknown-linux-gnueabihf
+ # os: ubuntu-latest
+ # test_everything: true
+ # target:
+ # tuple: loongarch64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
+ # target:
+ # tuple: powerpc-unknown-linux-gnu
+ # os: ubuntu-latest
+ # disable_assert_instr: true
+ # test_everything: true
+ # target:
+ # tuple: powerpc64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # disable_assert_instr: true
+ # test_everything: true
+ # target:
+ # tuple: powerpc64le-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
+ # target:
+ # tuple: riscv32gc-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
+ # build_std: true
+ # target:
+ # tuple: riscv64gc-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
+ # target:
+ # tuple: s390x-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
+ # target:
+ # tuple: x86_64-unknown-linux-gnu
+ # os: ubuntu-latest
+ # test_everything: true
# MIPS targets disabled since they are dropped to tier 3.
# See https://github.com/rust-lang/compiler-team/issues/648
#- target:
@@ -193,17 +197,27 @@ jobs:
# tuple: mipsel-unknown-linux-musl
# os: ubuntu-latest
# norun: true
- - target:
- tuple: aarch64-apple-darwin
- os: macos-15
- norun: true # https://github.com/rust-lang/stdarch/issues/1206
- - target:
- tuple: aarch64-apple-ios-macabi
- os: macos-15
- norun: true # https://github.com/rust-lang/stdarch/issues/1206
+ # target:
+ # tuple: aarch64-apple-darwin
+ # os: macos-15
+ # norun: true # https://github.com/rust-lang/stdarch/issues/1206
+ # target:
+ # tuple: aarch64-apple-ios-macabi
+ # os: macos-15
+ # norun: true # https://github.com/rust-lang/stdarch/issues/1206
+ # target:
+ # tuple: amdgcn-amd-amdhsa
+ # os: ubuntu-latest
+ # norun: true
+ # hexagon doesn't build at the moment due to a libc issue.
+ # - target:
+ # tuple: hexagon-unknown-linux-musl
+ # os: ubuntu-latest
+ # norun: true
+ # build_std: true
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Install Rust
run: |
rustup update nightly --no-self-update
@@ -212,15 +226,20 @@ jobs:
- run: rustup target add ${{ matrix.target.tuple }}
shell: bash
- if: matrix.build_std == ''
+ if: matrix.build_std == '' && matrix.target.tuple != 'amdgcn-amd-amdhsa'
- run: |
rustup component add rust-src
echo "CARGO_UNSTABLE_BUILD_STD=std" >> $GITHUB_ENV
shell: bash
if: matrix.build_std != ''
+ - run: |
+ rustup component add rust-src
+ echo "CARGO_UNSTABLE_BUILD_STD=core,alloc" >> $GITHUB_ENV
+ shell: bash
+ if: matrix.target.tuple == 'amdgcn-amd-amdhsa'
# Configure some env vars based on matrix configuration
- - run: echo "PROFILE=--profile=${{matrix.profile}}" >> $GITHUB_ENV
+ - run: echo "PROFILE=${{matrix.profile}}" >> $GITHUB_ENV
shell: bash
- run: echo "NORUN=1" >> $GITHUB_ENV
shell: bash
@@ -233,7 +252,7 @@ jobs:
if: matrix.disable_assert_instr != ''
- run: echo "NOSTD=1" >> $GITHUB_ENV
shell: bash
- if: startsWith(matrix.target.tuple, 'thumb') || matrix.target.tuple == 'nvptx64-nvidia-cuda'
+ if: startsWith(matrix.target.tuple, 'thumb') || matrix.target.tuple == 'nvptx64-nvidia-cuda' || matrix.target.tuple == 'amdgcn-amd-amdhsa'
# Windows & OSX go straight to `run.sh` ...
- run: ./ci/run.sh
@@ -249,72 +268,94 @@ jobs:
env:
TARGET: ${{ matrix.target.tuple }}
- intrinsic-test:
- needs: [style]
- name: Intrinsic Test
- runs-on: ubuntu-latest
- strategy:
- matrix:
- target:
- - aarch64-unknown-linux-gnu
- - aarch64_be-unknown-linux-gnu
- - armv7-unknown-linux-gnueabihf
- - arm-unknown-linux-gnueabihf
- - x86_64-unknown-linux-gnu
- profile: [dev, release]
- include:
- - target: aarch64_be-unknown-linux-gnu
- build_std: true
-
- steps:
- - uses: actions/checkout@v4
- - name: Install Rust
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- - run: rustup target add ${{ matrix.target }}
- if: ${{ (matrix.build_std || false) == false }}
- - run: |
- rustup component add rust-src
- echo "CARGO_UNSTABLE_BUILD_STD=std" >> $GITHUB_ENV
- if: ${{ matrix.build_std }}
-
- # Configure some env vars based on matrix configuration
- - run: echo "PROFILE=--profile=${{ matrix.profile }}" >> $GITHUB_ENV
- - run: ./ci/intrinsic-test-docker.sh ${{ matrix.target }}
- if: ${{ !startsWith(matrix.target, 'thumb') }}
- env:
- TARGET: ${{ matrix.target }}
+ # intrinsic-test:
+ # needs: [style]
+ # name: Intrinsic Test
+ # runs-on: ubuntu-latest
+ # strategy:
+ # matrix:
+ # target:
+ # - aarch64-unknown-linux-gnu
+ # - aarch64_be-unknown-linux-gnu
+ # - armv7-unknown-linux-gnueabihf
+ # - arm-unknown-linux-gnueabihf
+ # - x86_64-unknown-linux-gnu
+ # profile: [dev, release]
+ # include:
+ # - target: aarch64_be-unknown-linux-gnu
+ # build_std: true
+ #
+ # steps:
+ # - uses: actions/checkout@v6
+ # - name: Install Rust
+ # run: |
+ # rustup update nightly --no-self-update
+ # rustup default nightly
+ # - run: rustup target add ${{ matrix.target }}
+ # if: ${{ (matrix.build_std || false) == false }}
+ # - run: |
+ # rustup component add rust-src
+ # echo "CARGO_UNSTABLE_BUILD_STD=std" >> $GITHUB_ENV
+ # if: ${{ matrix.build_std }}
+ #
+ # # Configure some env vars based on matrix configuration
+ # - run: echo "PROFILE=${{ matrix.profile }}" >> $GITHUB_ENV
+ # - run: ./ci/intrinsic-test-docker.sh ${{ matrix.target }}
+ # if: ${{ !startsWith(matrix.target, 'thumb') }}
+ # env:
+ # TARGET: ${{ matrix.target }}
# Check that the generated files agree with the checked-in versions.
- check-stdarch-gen:
- needs: [style]
- name: Check stdarch-gen-{arm, loongarch} output
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Install Rust
- run: rustup update nightly && rustup default nightly && rustup component add rustfmt
- - name: Check arm spec
- run: |
- cargo run --bin=stdarch-gen-arm --release -- crates/stdarch-gen-arm/spec
- git diff --exit-code
- - name: Check lsx.spec
- run: |
- cargo run --bin=stdarch-gen-loongarch --release -- crates/stdarch-gen-loongarch/lsx.spec
- git diff --exit-code
- - name: Check lasx.spec
- run: |
- cargo run --bin=stdarch-gen-loongarch --release -- crates/stdarch-gen-loongarch/lasx.spec
- git diff --exit-code
+ # check-stdarch-gen:
+ # needs: [style]
+ # name: Check stdarch-gen-{arm, loongarch, hexagon} output
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@v6
+ # - name: Install Rust
+ # run: rustup update nightly && rustup default nightly && rustup component add rustfmt
+ # - name: Check arm spec
+ # run: |
+ # cargo run --bin=stdarch-gen-arm --release -- crates/stdarch-gen-arm/spec
+ # git diff --exit-code
+ # - name: Check lsx.spec
+ # run: |
+ # cargo run --bin=stdarch-gen-loongarch --release -- crates/stdarch-gen-loongarch/lsx.spec
+ # git diff --exit-code
+ # - name: Check lasx.spec
+ # run: |
+ # cargo run --bin=stdarch-gen-loongarch --release -- crates/stdarch-gen-loongarch/lasx.spec
+ # git diff --exit-code
+ # - name: Check hexagon
+ # run: |
+ # cargo run -p stdarch-gen-hexagon --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.
+ #
+ # Below we run some tests where Miri might catch UB, for instance on intrinsics that read from
+ # or write to pointers.
+ # miri:
+ # needs: [style]
+ # name: Run some tests with miri
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@v6
+ # - name: Install Rust
+ # run: rustup update nightly && rustup default nightly && rustup component add miri
+ # - name: Run miri tests
+ # env:
+ # TARGET: "aarch64-unknown-linux-gnu"
+ # RUSTFLAGS: "-Ctarget-cpu=neoverse-v3"
+ # run: |
+ # # read filters and join them with a space.
+ # FILTERS=$(cat aarch64-miri-tests.txt | tr '\n' ' ')
+ # cargo miri test -p core_arch --target aarch64-unknown-linux-gnu -- $FILTERS
conclusion:
needs:
- - docs
- - verify
- test
- - intrinsic-test
- - check-stdarch-gen
runs-on: ubuntu-latest
# We need to ensure this job does *not* get skipped if its dependencies fail,
# because a skipped job is considered a success by GitHub. So we have to
diff --git a/.github/workflows/rustc-pull.yml b/.github/workflows/rustc-pull.yml
index 1379bd06b0..d2feb1add6 100644
--- a/.github/workflows/rustc-pull.yml
+++ b/.github/workflows/rustc-pull.yml
@@ -13,10 +13,11 @@ jobs:
uses: rust-lang/josh-sync/.github/workflows/rustc-pull.yml@main
with:
github-app-id: ${{ vars.APP_CLIENT_ID }}
+ pr-author: "workflows-stdarch[bot]"
# https://rust-lang.zulipchat.com/#narrow/channel/208962-t-libs.2Fstdarch/topic/Subtree.20sync.20automation/with/528461782
zulip-stream-id: 208962
zulip-bot-email: "stdarch-ci-bot@rust-lang.zulipchat.com"
- pr-base-branch: master
+ pr-base-branch: main
branch-name: rustc-pull
secrets:
zulip-api-token: ${{ secrets.ZULIP_API_TOKEN }}
diff --git a/Cargo.lock b/Cargo.lock
index 70f09adf2c..a1c31fa9f0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,18 +4,18 @@ version = 4
[[package]]
name = "aho-corasick"
-version = "1.1.3"
+version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
dependencies = [
"memchr",
]
[[package]]
name = "anstream"
-version = "0.6.20"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
+checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
dependencies = [
"anstyle",
"anstyle-parse",
@@ -28,44 +28,44 @@ dependencies = [
[[package]]
name = "anstyle"
-version = "1.0.11"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
+checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
[[package]]
name = "anstyle-parse"
-version = "0.2.7"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
+checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
-version = "1.1.4"
+version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
+checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
- "windows-sys 0.60.2",
+ "windows-sys",
]
[[package]]
name = "anstyle-wincon"
-version = "3.0.10"
+version = "3.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
+checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
- "windows-sys 0.60.2",
+ "windows-sys",
]
[[package]]
name = "anyhow"
-version = "1.0.99"
+version = "1.0.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
+checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]]
name = "assert-instr-macro"
@@ -84,15 +84,15 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "bitflags"
-version = "2.9.4"
+version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
+checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
[[package]]
name = "cc"
-version = "1.2.36"
+version = "1.2.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54"
+checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -100,15 +100,15 @@ dependencies = [
[[package]]
name = "cfg-if"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "clap"
-version = "4.5.47"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931"
+checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
dependencies = [
"clap_builder",
"clap_derive",
@@ -116,9 +116,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.5.47"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6"
+checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
dependencies = [
"anstream",
"anstyle",
@@ -128,9 +128,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.5.47"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c"
+checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
dependencies = [
"heck",
"proc-macro2",
@@ -140,15 +140,15 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.7.5"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675"
+checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]]
name = "colorchoice"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
+checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
[[package]]
name = "core_arch"
@@ -185,9 +185,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "darling"
-version = "0.20.11"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
+checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
dependencies = [
"darling_core",
"darling_macro",
@@ -195,11 +195,10 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.11"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
+checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
dependencies = [
- "fnv",
"ident_case",
"proc-macro2",
"quote",
@@ -209,9 +208,9 @@ dependencies = [
[[package]]
name = "darling_macro"
-version = "0.20.11"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
+checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
dependencies = [
"darling_core",
"quote",
@@ -231,10 +230,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
-name = "env_logger"
-version = "0.8.4"
+name = "env_filter"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef"
dependencies = [
"log",
"regex",
@@ -253,6 +252,16 @@ dependencies = [
"termcolor",
]
+[[package]]
+name = "env_logger"
+version = "0.11.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a"
+dependencies = [
+ "env_filter",
+ "log",
+]
+
[[package]]
name = "equivalent"
version = "1.0.2"
@@ -261,27 +270,41 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "find-msvc-tools"
-version = "0.1.1"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d"
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
-name = "fnv"
-version = "1.0.7"
+name = "foldhash"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "getrandom"
-version = "0.2.16"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
+[[package]]
+name = "getrandom"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi",
+ "rand_core 0.10.0",
+ "wasip2",
+ "wasip3",
+]
+
[[package]]
name = "hashbrown"
version = "0.12.3"
@@ -293,6 +316,15 @@ name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+dependencies = [
+ "foldhash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
[[package]]
name = "heck"
@@ -308,9 +340,15 @@ checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
[[package]]
name = "humantime"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"
+checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424"
+
+[[package]]
+name = "id-arena"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
[[package]]
name = "ident_case"
@@ -330,12 +368,14 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.11.0"
+version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9"
+checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff"
dependencies = [
"equivalent",
- "hashbrown 0.15.5",
+ "hashbrown 0.16.1",
+ "serde",
+ "serde_core",
]
[[package]]
@@ -357,20 +397,20 @@ dependencies = [
[[package]]
name = "is-terminal"
-version = "0.4.16"
+version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
+checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
dependencies = [
"hermit-abi",
"libc",
- "windows-sys 0.59.0",
+ "windows-sys",
]
[[package]]
name = "is_terminal_polyfill"
-version = "1.70.1"
+version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
+checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "itertools"
@@ -383,15 +423,21 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.15"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+
+[[package]]
+name = "leb128fmt"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "libc"
-version = "0.2.175"
+version = "0.2.184"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
+checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
[[package]]
name = "linked-hash-map"
@@ -401,21 +447,21 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "log"
-version = "0.4.28"
+version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
+checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "memchr"
-version = "2.7.6"
+version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
+checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "once_cell_polyfill"
-version = "1.70.1"
+version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
+checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "ppv-lite86"
@@ -436,11 +482,21 @@ dependencies = [
"log",
]
+[[package]]
+name = "prettyplease"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
[[package]]
name = "proc-macro2"
-version = "1.0.101"
+version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
+checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [
"unicode-ident",
]
@@ -467,24 +523,30 @@ dependencies = [
[[package]]
name = "quickcheck"
-version = "1.0.3"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+checksum = "95c589f335db0f6aaa168a7cd27b1fc6920f5e1470c804f814d9cd6e62a0f70b"
dependencies = [
- "env_logger 0.8.4",
+ "env_logger 0.11.10",
"log",
- "rand",
+ "rand 0.10.0",
]
[[package]]
name = "quote"
-version = "1.0.40"
+version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [
"proc-macro2",
]
+[[package]]
+name = "r-efi"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+
[[package]]
name = "rand"
version = "0.8.5"
@@ -493,7 +555,17 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
- "rand_core",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8"
+dependencies = [
+ "getrandom 0.4.2",
+ "rand_core 0.10.0",
]
[[package]]
@@ -503,7 +575,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
- "rand_core",
+ "rand_core 0.6.4",
]
[[package]]
@@ -512,9 +584,15 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
- "getrandom",
+ "getrandom 0.2.17",
]
+[[package]]
+name = "rand_core"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba"
+
[[package]]
name = "rayon"
version = "1.11.0"
@@ -537,9 +615,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.11.2"
+version = "1.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912"
+checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
dependencies = [
"aho-corasick",
"memchr",
@@ -549,9 +627,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.4.10"
+version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6"
+checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
dependencies = [
"aho-corasick",
"memchr",
@@ -560,21 +638,21 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.8.6"
+version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
+checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
[[package]]
name = "rustc-demangle"
-version = "0.1.26"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
+checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d"
[[package]]
name = "ryu"
-version = "1.0.20"
+version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
[[package]]
name = "same-file"
@@ -587,36 +665,46 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.26"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
+checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
[[package]]
name = "serde"
-version = "1.0.219"
+version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [
+ "serde_core",
"serde_derive",
]
[[package]]
name = "serde-xml-rs"
-version = "0.8.1"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53630160a98edebde0123eb4dfd0fce6adff091b2305db3154a9e920206eb510"
+checksum = "cc2215ce3e6a77550b80a1c37251b7d294febaf42e36e21b7b411e0bf54d540d"
dependencies = [
"log",
"serde",
"thiserror",
- "xml-rs",
+ "xml",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+dependencies = [
+ "serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.219"
+version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
@@ -625,32 +713,32 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.143"
+version = "1.0.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
+checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
dependencies = [
"itoa",
"memchr",
- "ryu",
"serde",
+ "serde_core",
+ "zmij",
]
[[package]]
name = "serde_with"
-version = "3.14.0"
+version = "3.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
+checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f"
dependencies = [
- "serde",
- "serde_derive",
+ "serde_core",
"serde_with_macros",
]
[[package]]
name = "serde_with_macros"
-version = "3.14.0"
+version = "3.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
+checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65"
dependencies = [
"darling",
"proc-macro2",
@@ -699,11 +787,25 @@ dependencies = [
"walkdir",
]
+[[package]]
+name = "stdarch-gen-hexagon"
+version = "0.1.0"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "stdarch-gen-hexagon-scalar"
+version = "0.1.0"
+dependencies = [
+ "regex",
+]
+
[[package]]
name = "stdarch-gen-loongarch"
version = "0.1.0"
dependencies = [
- "rand",
+ "rand 0.8.5",
]
[[package]]
@@ -736,7 +838,7 @@ version = "0.0.0"
dependencies = [
"core_arch",
"quickcheck",
- "rand",
+ "rand 0.8.5",
]
[[package]]
@@ -747,9 +849,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
-version = "2.0.106"
+version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
+checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [
"proc-macro2",
"quote",
@@ -773,18 +875,18 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.69"
+version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.69"
+version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [
"proc-macro2",
"quote",
@@ -793,9 +895,15 @@ dependencies = [
[[package]]
name = "unicode-ident"
-version = "1.0.18"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "utf8parse"
@@ -820,194 +928,196 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
-name = "wasmparser"
-version = "0.235.0"
+name = "wasip2"
+version = "1.0.2+wasi-0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917"
+checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
dependencies = [
- "bitflags",
- "indexmap 2.11.0",
- "semver",
+ "wit-bindgen",
]
[[package]]
-name = "wasmprinter"
-version = "0.235.0"
+name = "wasip3"
+version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75aa8e9076de6b9544e6dab4badada518cca0bf4966d35b131bbd057aed8fa0a"
+checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
- "anyhow",
- "termcolor",
- "wasmparser",
+ "wit-bindgen",
]
[[package]]
-name = "winapi-util"
-version = "0.1.10"
+name = "wasm-encoder"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22"
+checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
dependencies = [
- "windows-sys 0.60.2",
+ "leb128fmt",
+ "wasmparser 0.244.0",
]
[[package]]
-name = "windows-link"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
-
-[[package]]
-name = "windows-sys"
-version = "0.59.0"
+name = "wasm-metadata"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
dependencies = [
- "windows-targets 0.52.6",
+ "anyhow",
+ "indexmap 2.13.1",
+ "wasm-encoder",
+ "wasmparser 0.244.0",
]
[[package]]
-name = "windows-sys"
-version = "0.60.2"
+name = "wasmparser"
+version = "0.235.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917"
dependencies = [
- "windows-targets 0.53.3",
+ "bitflags",
+ "indexmap 2.13.1",
+ "semver",
]
[[package]]
-name = "windows-targets"
-version = "0.52.6"
+name = "wasmparser"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
- "windows_aarch64_gnullvm 0.52.6",
- "windows_aarch64_msvc 0.52.6",
- "windows_i686_gnu 0.52.6",
- "windows_i686_gnullvm 0.52.6",
- "windows_i686_msvc 0.52.6",
- "windows_x86_64_gnu 0.52.6",
- "windows_x86_64_gnullvm 0.52.6",
- "windows_x86_64_msvc 0.52.6",
+ "bitflags",
+ "hashbrown 0.15.5",
+ "indexmap 2.13.1",
+ "semver",
]
[[package]]
-name = "windows-targets"
-version = "0.53.3"
+name = "wasmprinter"
+version = "0.235.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
+checksum = "75aa8e9076de6b9544e6dab4badada518cca0bf4966d35b131bbd057aed8fa0a"
dependencies = [
- "windows-link",
- "windows_aarch64_gnullvm 0.53.0",
- "windows_aarch64_msvc 0.53.0",
- "windows_i686_gnu 0.53.0",
- "windows_i686_gnullvm 0.53.0",
- "windows_i686_msvc 0.53.0",
- "windows_x86_64_gnu 0.53.0",
- "windows_x86_64_gnullvm 0.53.0",
- "windows_x86_64_msvc 0.53.0",
+ "anyhow",
+ "termcolor",
+ "wasmparser 0.235.0",
]
[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.53.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.53.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.53.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
-
-[[package]]
-name = "windows_i686_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
-
-[[package]]
-name = "windows_i686_gnullvm"
-version = "0.53.0"
+name = "winapi-util"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys",
+]
[[package]]
-name = "windows_i686_msvc"
-version = "0.52.6"
+name = "windows-link"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
-name = "windows_i686_msvc"
-version = "0.53.0"
+name = "windows-sys"
+version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
+]
[[package]]
-name = "windows_x86_64_gnu"
-version = "0.52.6"
+name = "wit-bindgen"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
+dependencies = [
+ "wit-bindgen-rust-macro",
+]
[[package]]
-name = "windows_x86_64_gnu"
-version = "0.53.0"
+name = "wit-bindgen-core"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
+checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
+dependencies = [
+ "anyhow",
+ "heck",
+ "wit-parser",
+]
[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.52.6"
+name = "wit-bindgen-rust"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
+dependencies = [
+ "anyhow",
+ "heck",
+ "indexmap 2.13.1",
+ "prettyplease",
+ "syn",
+ "wasm-metadata",
+ "wit-bindgen-core",
+ "wit-component",
+]
[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.53.0"
+name = "wit-bindgen-rust-macro"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
+checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
+dependencies = [
+ "anyhow",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wit-bindgen-core",
+ "wit-bindgen-rust",
+]
[[package]]
-name = "windows_x86_64_msvc"
-version = "0.52.6"
+name = "wit-component"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
+dependencies = [
+ "anyhow",
+ "bitflags",
+ "indexmap 2.13.1",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "wasm-encoder",
+ "wasm-metadata",
+ "wasmparser 0.244.0",
+ "wit-parser",
+]
[[package]]
-name = "windows_x86_64_msvc"
-version = "0.53.0"
+name = "wit-parser"
+version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "indexmap 2.13.1",
+ "log",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "unicode-xid",
+ "wasmparser 0.244.0",
+]
[[package]]
-name = "xml-rs"
-version = "0.8.27"
+name = "xml"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7"
+checksum = "b8aa498d22c9bbaf482329839bc5620c46be275a19a812e9a22a2b07529a642a"
[[package]]
name = "yaml-rust"
@@ -1020,20 +1130,26 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.8.27"
+version = "0.8.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
+checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.27"
+version = "0.8.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
+checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
+
+[[package]]
+name = "zmij"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
diff --git a/Cargo.toml b/Cargo.toml
index 5979096439..e3963a6987 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,5 +1,5 @@
[workspace]
-resolver = "1"
+resolver = "3"
members = [
"crates/*",
"examples",
diff --git a/aarch64-miri-tests.txt b/aarch64-miri-tests.txt
new file mode 100644
index 0000000000..2c0dbb8297
--- /dev/null
+++ b/aarch64-miri-tests.txt
@@ -0,0 +1,4 @@
+test_vld3
+test_vld4
+neon::load_tests
+neon::store_tests
diff --git a/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
index 70c0650975..8435dd3ded 100644
--- a/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
@@ -10,10 +10,15 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
qemu-user \
make \
file \
- clang \
- lld
+ 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 mkdir llvm
+RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm
+
+ENV PATH="/llvm/bin:$PATH"
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" \
- OBJDUMP=aarch64-linux-gnu-objdump \
- STDARCH_TEST_SKIP_FEATURE=tme
+ OBJDUMP=aarch64-linux-gnu-objdump
diff --git a/ci/docker/aarch64_be-unknown-linux-gnu/Dockerfile b/ci/docker/aarch64_be-unknown-linux-gnu/Dockerfile
index 56ddbd990b..0e8efc64bb 100644
--- a/ci/docker/aarch64_be-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/aarch64_be-unknown-linux-gnu/Dockerfile
@@ -9,10 +9,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
qemu-user \
make \
file \
- clang \
curl \
xz-utils \
- lld
+ wget
ENV TOOLCHAIN="arm-gnu-toolchain-14.3.rel1-x86_64-aarch64_be-none-linux-gnu"
@@ -21,10 +20,15 @@ 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 mkdir llvm
+RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm
+
+ENV PATH="/llvm/bin:$PATH"
+
ENV AARCH64_BE_TOOLCHAIN="/toolchains/${TOOLCHAIN}"
ENV AARCH64_BE_LIBC="${AARCH64_BE_TOOLCHAIN}/aarch64_be-none-linux-gnu/libc"
ENV CARGO_TARGET_AARCH64_BE_UNKNOWN_LINUX_GNU_LINKER="${AARCH64_BE_TOOLCHAIN}/bin/aarch64_be-none-linux-gnu-gcc"
ENV CARGO_TARGET_AARCH64_BE_UNKNOWN_LINUX_GNU_RUNNER="qemu-aarch64_be -cpu max -L ${AARCH64_BE_LIBC}"
ENV OBJDUMP="${AARCH64_BE_TOOLCHAIN}/bin/aarch64_be-none-linux-gnu-objdump"
-ENV STDARCH_TEST_SKIP_FEATURE=tme
diff --git a/ci/docker/amdgcn-amd-amdhsa/Dockerfile b/ci/docker/amdgcn-amd-amdhsa/Dockerfile
new file mode 100644
index 0000000000..65cf281b14
--- /dev/null
+++ b/ci/docker/amdgcn-amd-amdhsa/Dockerfile
@@ -0,0 +1,5 @@
+FROM ubuntu:25.10
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ gcc \
+ libc6-dev \
+ ca-certificates
diff --git a/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
index 602249c0ec..c0a4ed3e70 100644
--- a/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
+++ b/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
@@ -10,8 +10,14 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
qemu-user \
make \
file \
- clang \
- lld
+ 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 mkdir llvm
+RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm
+
+ENV PATH="/llvm/bin:$PATH"
+
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc \
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER="qemu-arm -cpu max -L /usr/arm-linux-gnueabihf" \
OBJDUMP=arm-linux-gnueabihf-objdump
diff --git a/ci/docker/hexagon-unknown-linux-musl/Dockerfile b/ci/docker/hexagon-unknown-linux-musl/Dockerfile
new file mode 100644
index 0000000000..f6c0efd946
--- /dev/null
+++ b/ci/docker/hexagon-unknown-linux-musl/Dockerfile
@@ -0,0 +1,46 @@
+FROM ubuntu:25.10
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ gcc \
+ libc6-dev \
+ ca-certificates \
+ curl \
+ zstd \
+ file \
+ make \
+ libc++1 \
+ libglib2.0-0t64 \
+ libunwind-20 \
+ liburing2 \
+ llvm
+
+# The Hexagon toolchain requires libc++ and libunwind at runtime - create symlinks from versioned files
+RUN cd /usr/lib/x86_64-linux-gnu && \
+ for f in libc++.so.1.0.*; do ln -sf "$f" libc++.so.1; done && \
+ for f in libc++abi.so.1.0.*; do ln -sf "$f" libc++abi.so.1; done && \
+ for f in libunwind.so.1.0.*; do ln -sf "$f" libunwind.so.1; done
+
+# Download and install the Hexagon cross toolchain from
+# https://github.com/quic/toolchain_for_hexagon/releases/tag/v21.1.8
+# Includes clang cross-compiler, musl sysroot, and qemu-hexagon.
+#
+# The tarball contains directories with restrictive (0700) permissions.
+# In rootless Podman, chmod fails on tar-extracted files within the same
+# layer due to overlayfs limitations in user namespaces. Splitting into
+# two RUN steps lets chmod work via overlayfs copy-up from the lower layer.
+RUN curl -L -o /tmp/hexagon-toolchain.tar.zst \
+ https://artifacts.codelinaro.org/artifactory/codelinaro-toolchain-for-hexagon/21.1.8/clang+llvm-21.1.8-cross-hexagon-unknown-linux-musl.tar.zst && \
+ mkdir -p /opt/hexagon-toolchain && \
+ cd /opt/hexagon-toolchain && \
+ (unzstd -c /tmp/hexagon-toolchain.tar.zst | tar -xf - --strip-components=2 --no-same-permissions || true) && \
+ rm /tmp/hexagon-toolchain.tar.zst
+RUN find /opt/hexagon-toolchain -type d -exec chmod a+rx {} + 2>/dev/null; \
+ find /opt/hexagon-toolchain -type f -exec chmod a+r {} + 2>/dev/null; \
+ find /opt/hexagon-toolchain -type f -perm /111 -exec chmod a+rx {} + 2>/dev/null; \
+ /opt/hexagon-toolchain/bin/hexagon-unknown-linux-musl-clang --version
+
+ENV PATH="/opt/hexagon-toolchain/bin:${PATH}" \
+ CARGO_TARGET_HEXAGON_UNKNOWN_LINUX_MUSL_LINKER=hexagon-unknown-linux-musl-clang \
+ CARGO_TARGET_HEXAGON_UNKNOWN_LINUX_MUSL_RUNNER="qemu-hexagon -L /opt/hexagon-toolchain/target/hexagon-unknown-linux-musl" \
+ CARGO_UNSTABLE_BUILD_STD_FEATURES=llvm-libunwind \
+ OBJDUMP=llvm-objdump
diff --git a/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
index a8b352881e..8bcd640945 100644
--- a/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
+++ b/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:25.10
+FROM ubuntu:25.04 # gcc-mips64-linux-gnuabi64 not available in 25.10
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
index 147a3df614..9aa0ce0578 100644
--- a/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
+++ b/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:25.10
+FROM ubuntu:25.04 # gcc-mips64el-linux-gnuabi64 not available in 25.10
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/wasm32-wasip1/Dockerfile b/ci/docker/wasm32-wasip1/Dockerfile
index 0527c0df17..cb4a9b2948 100644
--- a/ci/docker/wasm32-wasip1/Dockerfile
+++ b/ci/docker/wasm32-wasip1/Dockerfile
@@ -11,5 +11,3 @@ ENV VERSION=v38.0.3
RUN curl -L https://github.com/bytecodealliance/wasmtime/releases/download/${VERSION}/wasmtime-${VERSION}-x86_64-linux.tar.xz | tar xJf -
ENV PATH=$PATH:/wasmtime-${VERSION}-x86_64-linux
-
-ENV CARGO_TARGET_WASM32_WASIP1_RUNNER="wasmtime -Wexceptions --dir /checkout/target/wasm32-wasip1/release/deps::."
diff --git a/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
index 2743896375..ca6192a38d 100644
--- a/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
@@ -12,9 +12,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
lld
-RUN wget http://ci-mirrors.rust-lang.org/stdarch/sde-external-9.58.0-2025-06-16-lin.tar.xz -O sde.tar.xz
+RUN wget http://ci-mirrors.rust-lang.org/sde-external-10.8.0-2026-03-15-lin.tar.xz -O sde.tar.xz
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 mkdir llvm
+RUN tar -xvf llvm.tar.xz --strip-components=1 -C llvm
+
+ENV PATH="/llvm/bin:$PATH"
+
ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER="/intel-sde/sde64 \
-cpuid-in /checkout/ci/docker/x86_64-unknown-linux-gnu/cpuid.def \
-rtm-mode full -tsx --"
diff --git a/ci/docker/x86_64-unknown-linux-gnu/cpuid.def b/ci/docker/x86_64-unknown-linux-gnu/cpuid.def
index 342f7d83a6..3bd657873e 100644
--- a/ci/docker/x86_64-unknown-linux-gnu/cpuid.def
+++ b/ci/docker/x86_64-unknown-linux-gnu/cpuid.def
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2025 Intel Corporation.
+# Copyright (C) 2017-2026 Intel Corporation.
#
# This software and the related documents are Intel copyrighted materials, and your
# use of them is governed by the express license under which they were provided to
@@ -12,7 +12,7 @@
# CPUID_VERSION = 1.0
# Input => Output
# EAX ECX => EAX EBX ECX EDX
-00000000 ******** => 00000024 756e6547 6c65746e 49656e69
+00000000 ******** => 00000029 756e6547 6c65746e 49656e69
00000001 ******** => 00400f10 00100800 7ffaf3ff bfebfbff
00000002 ******** => 76035a01 00f0b6ff 00000000 00c10000
00000003 ******** => 00000000 00000000 00000000 00000000
@@ -23,8 +23,9 @@
00000004 00000004 => 00000000 00000000 00000000 00000000
00000005 ******** => 00000040 00000040 00000003 00042120 #MONITOR/MWAIT
00000006 ******** => 00000077 00000002 00000001 00000000 #Thermal and Power
-00000007 00000000 => 00000001 f3bfbfbf bac05ffe 03d54130 #Extended Features
+00000007 00000000 => 00000002 f3bfbfbf bac05ffe 03d54130 #Extended Features
00000007 00000001 => 98ee00bf 00000002 00000020 1d29cd3e
+00000007 00000002 => 00000000 00000000 00000000 00000010
00000008 ******** => 00000000 00000000 00000000 00000000
00000009 ******** => 00000000 00000000 00000000 00000000 #Direct Cache
0000000a ******** => 07300403 00000000 00000000 00000603
@@ -48,6 +49,7 @@
0000001e 00000001 => 000001ff 00000000 00000000 00000000
00000024 00000000 => 00000001 00070002 00000000 00000000 #AVX10
00000024 00000001 => 00000000 00000000 00000004 00000000
+00000029 ******** => 00000000 00000001 00000000 00000000
80000000 ******** => 80000008 00000000 00000000 00000000
80000001 ******** => 00000000 00000000 00000121 2c100000
80000002 ******** => 00000000 00000000 00000000 00000000
diff --git a/ci/dox.sh b/ci/dox.sh
index 94d76d4304..9803f7e371 100755
--- a/ci/dox.sh
+++ b/ci/dox.sh
@@ -15,6 +15,15 @@ dox() {
cargo clean --target "${1}"
+ if [ "${1}" == "amdgcn-amd-amdhsa" ]; then
+ if [ "$CI" != "" ]; then
+ rustup component add rust-src
+ fi
+ export CARGO_UNSTABLE_BUILD_STD=core
+ # amdgpu needs a target-cpu, any is fine
+ export RUSTFLAGS="${RUSTFLAGS} -Ctarget-cpu=gfx900"
+ fi
+
cargo build --verbose --target "${1}" --manifest-path crates/core_arch/Cargo.toml
cargo doc --verbose --target "${1}" --manifest-path crates/core_arch/Cargo.toml
}
@@ -33,6 +42,7 @@ if [ -z "$1" ]; then
#dox mips64-unknown-linux-gnuabi64
dox wasm32-unknown-unknown
dox nvptx64-nvidia-cuda
+ dox amdgcn-amd-amdhsa
else
dox "${1}"
fi
diff --git a/ci/intrinsic-test-docker.sh b/ci/intrinsic-test-docker.sh
index 038fc4678e..beeff42c76 100755
--- a/ci/intrinsic-test-docker.sh
+++ b/ci/intrinsic-test-docker.sh
@@ -30,12 +30,14 @@ run() {
--env CARGO_HOME=/cargo \
--env CARGO_TARGET_DIR=/checkout/target \
--env TARGET="${1}" \
+ --env PROFILE \
--env "${HOST_LINKER}"="cc" \
--env STDARCH_DISABLE_ASSERT_INSTR \
--env NOSTD \
--env NORUN \
--env RUSTFLAGS \
--env CARGO_UNSTABLE_BUILD_STD \
+ --env TEST_SAMPLE_INTRINSICS_PERCENTAGE \
--volume "${HOME}/.cargo":/cargo \
--volume "$(rustc --print sysroot)":/rust:ro \
--volume "$(pwd)":/checkout:ro \
diff --git a/ci/intrinsic-test.sh b/ci/intrinsic-test.sh
index e14a824b2a..89104e2672 100755
--- a/ci/intrinsic-test.sh
+++ b/ci/intrinsic-test.sh
@@ -6,7 +6,7 @@ set -ex
export RUSTFLAGS="${RUSTFLAGS} -D warnings -Z merge-functions=disabled -Z verify-llvm-ir"
export HOST_RUSTFLAGS="${RUSTFLAGS}"
-export PROFILE="${PROFILE:="--profile=release"}"
+export PROFILE="${PROFILE:="release"}"
case ${TARGET} in
# On 32-bit use a static relocation model which avoids some extra
@@ -51,13 +51,15 @@ case ${TARGET} in
TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_aarch64.txt
TEST_CXX_COMPILER="clang++"
TEST_RUNNER="${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER}"
+ : "${TEST_SAMPLE_INTRINSICS_PERCENTAGE:=100}"
;;
aarch64_be-unknown-linux-gnu*)
TEST_CPPFLAGS="-fuse-ld=lld"
- TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_aarch64.txt
+ TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_aarch64_be.txt
TEST_CXX_COMPILER="clang++"
TEST_RUNNER="${CARGO_TARGET_AARCH64_BE_UNKNOWN_LINUX_GNU_RUNNER}"
+ : "${TEST_SAMPLE_INTRINSICS_PERCENTAGE:=100}"
;;
armv7-unknown-linux-gnueabihf*)
@@ -65,6 +67,7 @@ case ${TARGET} in
TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_arm.txt
TEST_CXX_COMPILER="clang++"
TEST_RUNNER="${CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER}"
+ : "${TEST_SAMPLE_INTRINSICS_PERCENTAGE:=100}"
;;
x86_64-unknown-linux-gnu*)
@@ -72,7 +75,7 @@ case ${TARGET} in
TEST_CXX_COMPILER="clang++"
TEST_RUNNER="${CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER}"
TEST_SKIP_INTRINSICS=crates/intrinsic-test/missing_x86.txt
- TEST_SAMPLE_INTRINSICS_PERCENTAGE=5
+ : "${TEST_SAMPLE_INTRINSICS_PERCENTAGE:=20}"
;;
*)
;;
@@ -83,24 +86,28 @@ esac
case "${TARGET}" in
aarch64-unknown-linux-gnu*|armv7-unknown-linux-gnueabihf*)
CPPFLAGS="${TEST_CPPFLAGS}" RUSTFLAGS="${HOST_RUSTFLAGS}" RUST_LOG=warn \
- cargo run "${INTRINSIC_TEST}" "${PROFILE}" \
+ cargo run "${INTRINSIC_TEST}" --release \
--bin intrinsic-test -- intrinsics_data/arm_intrinsics.json \
--runner "${TEST_RUNNER}" \
--cppcompiler "${TEST_CXX_COMPILER}" \
--skip "${TEST_SKIP_INTRINSICS}" \
- --target "${TARGET}"
+ --target "${TARGET}" \
+ --profile "${PROFILE}" \
+ --sample-percentage "${TEST_SAMPLE_INTRINSICS_PERCENTAGE}"
;;
aarch64_be-unknown-linux-gnu*)
CPPFLAGS="${TEST_CPPFLAGS}" RUSTFLAGS="${HOST_RUSTFLAGS}" RUST_LOG=warn \
- cargo run "${INTRINSIC_TEST}" "${PROFILE}" \
+ cargo run "${INTRINSIC_TEST}" --release \
--bin intrinsic-test -- intrinsics_data/arm_intrinsics.json \
--runner "${TEST_RUNNER}" \
--cppcompiler "${TEST_CXX_COMPILER}" \
--skip "${TEST_SKIP_INTRINSICS}" \
--target "${TARGET}" \
+ --profile "${PROFILE}" \
--linker "${CARGO_TARGET_AARCH64_BE_UNKNOWN_LINUX_GNU_LINKER}" \
- --cxx-toolchain-dir "${AARCH64_BE_TOOLCHAIN}"
+ --cxx-toolchain-dir "${AARCH64_BE_TOOLCHAIN}" \
+ --sample-percentage "${TEST_SAMPLE_INTRINSICS_PERCENTAGE}"
;;
x86_64-unknown-linux-gnu*)
@@ -110,12 +117,13 @@ case "${TARGET}" in
env -u CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER \
CPPFLAGS="${TEST_CPPFLAGS}" RUSTFLAGS="${HOST_RUSTFLAGS}" \
RUST_LOG=warn RUST_BACKTRACE=1 \
- cargo run "${INTRINSIC_TEST}" "${PROFILE}" \
+ cargo run "${INTRINSIC_TEST}" --release \
--bin intrinsic-test -- intrinsics_data/x86-intel.xml \
--runner "${TEST_RUNNER}" \
--skip "${TEST_SKIP_INTRINSICS}" \
--cppcompiler "${TEST_CXX_COMPILER}" \
--target "${TARGET}" \
+ --profile "${PROFILE}" \
--sample-percentage "${TEST_SAMPLE_INTRINSICS_PERCENTAGE}"
;;
*)
diff --git a/ci/run-docker.sh b/ci/run-docker.sh
index d7aa50a8c9..28dfd5a24a 100755
--- a/ci/run-docker.sh
+++ b/ci/run-docker.sh
@@ -37,6 +37,7 @@ run() {
--env NORUN \
--env RUSTFLAGS \
--env CARGO_UNSTABLE_BUILD_STD \
+ --env PROFILE \
--volume "${HOME}/.cargo":/cargo \
--volume "$(rustc --print sysroot)":/rust:ro \
--volume "$(pwd)":/checkout:ro \
diff --git a/ci/run.sh b/ci/run.sh
index 2bb77bae25..7939fa06c3 100755
--- a/ci/run.sh
+++ b/ci/run.sh
@@ -12,7 +12,7 @@ set -ex
export RUSTFLAGS="${RUSTFLAGS} -D warnings -Z merge-functions=disabled -Z verify-llvm-ir"
export HOST_RUSTFLAGS="${RUSTFLAGS}"
-export PROFILE="${PROFILE:="--profile=release"}"
+export PROFILE="${PROFILE:="release"}"
case ${TARGET} in
# On Windows the linker performs identical COMDAT folding (ICF) by default
@@ -40,13 +40,19 @@ case ${TARGET} in
export RUSTFLAGS="${RUSTFLAGS} -C llvm-args=-fast-isel=false"
;;
armv7-*eabihf | thumbv7-*eabihf)
- export RUSTFLAGS="${RUSTFLAGS} -Ctarget-feature=+neon"
+ export RUSTFLAGS="${RUSTFLAGS} -Ctarget-feature=+neon,+fp16"
+ ;;
+ amdgcn-*)
+ export RUSTFLAGS="${RUSTFLAGS} -Ctarget-cpu=gfx1200"
;;
# Some of our test dependencies use the deprecated `gcc` crates which
# doesn't detect RISC-V compilers automatically, so do it manually here.
riscv*)
export RUSTFLAGS="${RUSTFLAGS} -Ctarget-feature=+zk,+zks,+zbb,+zbc"
;;
+ hexagon*)
+ export RUSTFLAGS="${RUSTFLAGS} -Ctarget-feature=+hvxv60,+hvx-length128b"
+ ;;
esac
echo "RUSTFLAGS=${RUSTFLAGS}"
@@ -63,7 +69,7 @@ cargo_test() {
if [ "$NORUN" = "1" ]; then
export subcmd="build"
fi
- cmd="$cmd ${subcmd} --target=$TARGET $1"
+ cmd="$cmd ${subcmd} core_arch::aarch64::sve::ld_st_tests --target=$TARGET --profile=$PROFILE $1"
cmd="$cmd -- $2"
case ${TARGET} in
@@ -71,6 +77,12 @@ cargo_test() {
# harness isn't trying to capture output, otherwise we won't get any useful
# output.
wasm32*)
+ if [ "$PROFILE" = "release" ]; then
+ dir="release"
+ else
+ dir="debug"
+ fi
+ export CARGO_TARGET_WASM32_WASIP1_RUNNER="wasmtime -Wexceptions --dir /checkout/target/wasm32-wasip1/$dir/deps::."
cmd="$cmd --nocapture"
;;
esac
@@ -80,54 +92,47 @@ cargo_test() {
CORE_ARCH="--manifest-path=crates/core_arch/Cargo.toml"
STDARCH_EXAMPLES="--manifest-path=examples/Cargo.toml"
-cargo_test "${CORE_ARCH} ${PROFILE}"
+for i in {1..20}; do
+ cargo_test "${CORE_ARCH}"
+done
if [ "$NOSTD" != "1" ]; then
- cargo_test "${STDARCH_EXAMPLES} ${PROFILE}"
+ cargo_test "${STDARCH_EXAMPLES}"
fi
# Test targets compiled with extra features.
case ${TARGET} in
- x86_64-unknown-linux-gnu)
- export STDARCH_DISABLE_ASSERT_INSTR=1
-
- export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+avx"
- cargo_test "${PROFILE}"
-
- export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+avx512f"
- cargo_test "${PROFILE}"
- ;;
x86_64* | i686*)
export STDARCH_DISABLE_ASSERT_INSTR=1
export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+avx"
- cargo_test "${PROFILE}"
+ cargo_test
;;
# FIXME: don't build anymore
#mips-*gnu* | mipsel-*gnu*)
# export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+msa,+fp64,+mips32r5"
- # cargo_test "${PROFILE}"
+ # cargo_test
# ;;
mips64*)
export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+msa"
- cargo_test "${PROFILE}"
+ cargo_test
;;
s390x*)
export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+vector-enhancements-1"
- cargo_test "${PROFILE}"
+ cargo_test
;;
powerpc64*)
export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+altivec"
- cargo_test "${PROFILE}"
+ cargo_test
export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+vsx"
- cargo_test "${PROFILE}"
+ cargo_test
;;
powerpc*)
# qemu has a bug in PPC32 which leads to a crash when compiled with `vsx`
export RUSTFLAGS="${RUSTFLAGS} -C target-feature=+altivec"
- cargo_test "${PROFILE}"
+ cargo_test
;;
*)
;;
@@ -138,7 +143,7 @@ if [ "$NORUN" != "1" ] && [ "$NOSTD" != 1 ]; then
# Test examples
(
cd examples
- cargo test --target "$TARGET" "${PROFILE}"
- echo test | cargo run --target "$TARGET" "${PROFILE}" hex
+ cargo test --target "${TARGET}" --profile "${PROFILE}"
+ echo test | cargo run --target "${TARGET}" --profile "${PROFILE}" hex
)
fi
diff --git a/crates/assert-instr-macro/src/lib.rs b/crates/assert-instr-macro/src/lib.rs
index 13c3c3851b..839aae67cb 100644
--- a/crates/assert-instr-macro/src/lib.rs
+++ b/crates/assert-instr-macro/src/lib.rs
@@ -14,6 +14,7 @@ extern crate quote;
use proc_macro2::TokenStream;
use quote::ToTokens;
+use syn::spanned::Spanned;
#[proc_macro_attribute]
pub fn assert_instr(
@@ -67,21 +68,21 @@ pub fn assert_instr(
);
let mut inputs = Vec::new();
let mut input_vals = Vec::new();
- let mut const_vals = Vec::new();
+ let mut param_vals = Vec::new();
let ret = &func.sig.output;
for arg in func.sig.inputs.iter() {
let capture = match *arg {
- syn::FnArg::Typed(ref c) => c,
+ syn::FnArg::Typed(ref c) => c.to_owned(),
ref v => panic!(
"arguments must not have patterns: `{:?}`",
v.clone().into_token_stream()
),
};
- let ident = match *capture.pat {
- syn::Pat::Ident(ref i) => &i.ident,
+ let ident = match capture.pat.as_ref() {
+ syn::Pat::Ident(i) => &i.ident.to_owned(),
_ => panic!("must have bare arguments"),
};
- if let Some((_, tokens)) = invoc.args.iter().find(|a| *ident == a.0) {
+ if let Some(&(_, ref tokens)) = invoc.args.iter().find(|a| *ident == a.0) {
input_vals.push(quote! { #tokens });
} else {
inputs.push(capture);
@@ -89,18 +90,48 @@ pub fn assert_instr(
}
}
for arg in func.sig.generics.params.iter() {
- let c = match *arg {
- syn::GenericParam::Const(ref c) => c,
+ match *arg {
+ syn::GenericParam::Const(ref c) => {
+ if let Some((_, tokens)) = invoc.args.iter().find(|a| c.ident == a.0) {
+ param_vals.push(quote! { #tokens });
+ } else {
+ panic!("const generics must have a value for tests");
+ }
+ }
+ syn::GenericParam::Type(ref t) => {
+ if let Some((_, tokens)) = invoc.args.iter().find(|a| t.ident == a.0)
+ && let syn::Expr::Path(syn::ExprPath { qself, path, .. }) = tokens
+ {
+ param_vals.push(syn::Token).to_token_stream());
+
+ let generic_ty_value = syn::TypePath {
+ qself: qself.clone(),
+ path: path.clone(),
+ };
+
+ // Replace any function arguments that use generic parameters with the
+ // instantiation provided in the macro invocation.
+ inputs.iter_mut().for_each(|arg| {
+ update_type_path(arg.ty.as_mut(), |type_path: &mut syn::TypePath| {
+ if let Some(syn::PathSegment {
+ ident: last_ident, ..
+ }) = type_path.path.segments.last_mut()
+ {
+ if *last_ident == t.ident {
+ *type_path = generic_ty_value.to_owned()
+ }
+ }
+ })
+ });
+ } else {
+ panic!("type generics must have a type for tests");
+ }
+ }
ref v => panic!(
- "only const generics are allowed: `{:?}`",
+ "only type and const generics are allowed: `{:?}`",
v.clone().into_token_stream()
),
};
- if let Some((_, tokens)) = invoc.args.iter().find(|a| c.ident == a.0) {
- const_vals.push(quote! { #tokens });
- } else {
- panic!("const generics must have a value for tests");
- }
}
let attrs = func
@@ -138,7 +169,7 @@ pub fn assert_instr(
#[unsafe(no_mangle)]
#[inline(never)]
pub unsafe extern #abi fn #shim_name(#(#inputs),*) #ret {
- #name::<#(#const_vals),*>(#(#input_vals),*)
+ #name::<#(#param_vals),*>(#(#input_vals),*)
}
};
@@ -222,3 +253,23 @@ where
}
}
}
+
+/// Calls `update` on type paths so that type generics can be replaced with the instantiation from
+/// the attribute.
+fn update_type_path
- - * [ ] [`_mm512_2intersect_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_2intersect_epi32) - * [ ] [`_mm512_2intersect_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_2intersect_epi64) -
- - * [ ] [`_mm256_2intersect_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_2intersect_epi32) - * [ ] [`_mm256_2intersect_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_2intersect_epi64) - * [ ] [`_mm_2intersect_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_2intersect_epi32) - * [ ] [`_mm_2intersect_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_2intersect_epi64) -
* [ ] [`_clrssbsy`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_clrssbsy)
diff --git a/crates/core_arch/rustfmt.toml b/crates/core_arch/rustfmt.toml
index 4ae742ba8d..e69de29bb2 100644
--- a/crates/core_arch/rustfmt.toml
+++ b/crates/core_arch/rustfmt.toml
@@ -1,3 +0,0 @@
-ignore = [
- "src/simd.rs",
-]
diff --git a/crates/core_arch/src/aarch64/mod.rs b/crates/core_arch/src/aarch64/mod.rs
index f4b9b1c302..0292be2e0d 100644
--- a/crates/core_arch/src/aarch64/mod.rs
+++ b/crates/core_arch/src/aarch64/mod.rs
@@ -17,13 +17,27 @@ mod mte;
#[unstable(feature = "stdarch_aarch64_mte", issue = "129010")]
pub use self::mte::*;
+mod rand;
+#[unstable(feature = "stdarch_aarch64_rand", issue = "153514")]
+pub use self::rand::*;
+
mod neon;
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub use self::neon::*;
-mod tme;
-#[unstable(feature = "stdarch_aarch64_tme", issue = "117216")]
-pub use self::tme::*;
+// The rest of `core_arch::aarch64` is available on `arm64ec` but SVE is not supported on `arm64ec`.
+#[cfg(any(target_arch = "aarch64", doc))]
+mod sve;
+#[cfg(any(target_arch = "aarch64", doc))]
+#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
+pub use self::sve::*;
+
+// The rest of `core_arch::aarch64` is available on `arm64ec` but SVE is not supported on `arm64ec`.
+#[cfg(any(target_arch = "aarch64", doc))]
+mod sve2;
+#[cfg(any(target_arch = "aarch64", doc))]
+#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]
+pub use self::sve2::*;
mod prefetch;
#[unstable(feature = "stdarch_aarch64_prefetch", issue = "117217")]
diff --git a/crates/core_arch/src/aarch64/mte.rs b/crates/core_arch/src/aarch64/mte.rs
index c400f774bc..a5031a45c1 100644
--- a/crates/core_arch/src/aarch64/mte.rs
+++ b/crates/core_arch/src/aarch64/mte.rs
@@ -3,35 +3,17 @@
//! [ACLE documentation](https://arm-software.github.io/acle/main/acle.html#markdown-toc-mte-intrinsics)
unsafe extern "unadjusted" {
- #[cfg_attr(
- any(target_arch = "aarch64", target_arch = "arm64ec"),
- link_name = "llvm.aarch64.irg"
- )]
+ #[link_name = "llvm.aarch64.irg"]
fn irg_(ptr: *const (), exclude: i64) -> *const ();
- #[cfg_attr(
- any(target_arch = "aarch64", target_arch = "arm64ec"),
- link_name = "llvm.aarch64.gmi"
- )]
+ #[link_name = "llvm.aarch64.gmi"]
fn gmi_(ptr: *const (), exclude: i64) -> i64;
- #[cfg_attr(
- any(target_arch = "aarch64", target_arch = "arm64ec"),
- link_name = "llvm.aarch64.ldg"
- )]
+ #[link_name = "llvm.aarch64.ldg"]
fn ldg_(ptr: *const (), tag_ptr: *const ()) -> *const ();
- #[cfg_attr(
- any(target_arch = "aarch64", target_arch = "arm64ec"),
- link_name = "llvm.aarch64.stg"
- )]
+ #[link_name = "llvm.aarch64.stg"]
fn stg_(tagged_ptr: *const (), addr_to_tag: *const ());
- #[cfg_attr(
- any(target_arch = "aarch64", target_arch = "arm64ec"),
- link_name = "llvm.aarch64.addg"
- )]
+ #[link_name = "llvm.aarch64.addg"]
fn addg_(ptr: *const (), value: i64) -> *const ();
- #[cfg_attr(
- any(target_arch = "aarch64", target_arch = "arm64ec"),
- link_name = "llvm.aarch64.subp"
- )]
+ #[link_name = "llvm.aarch64.subp"]
fn subp_(ptr_a: *const (), ptr_b: *const ()) -> i64;
}
@@ -127,42 +109,46 @@ mod test {
use super::*;
use stdarch_test::assert_instr;
- #[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(irg))] // FIXME: MSVC `dumpbin` doesn't support MTE
+ // Instruction tests are separate because the functions use generics.
+ //
+ // FIXME: As of 2026 MSVC `dumpbin` doesn't support MTE.
+
+ #[cfg_attr(not(target_env = "msvc"), assert_instr(irg))]
#[allow(dead_code)]
#[target_feature(enable = "mte")]
unsafe fn test_arm_mte_create_random_tag(src: *const (), mask: u64) -> *const () {
__arm_mte_create_random_tag(src, mask)
}
- #[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(addg))]
+ #[cfg_attr(not(target_env = "msvc"), assert_instr(addg))]
#[allow(dead_code)]
#[target_feature(enable = "mte")]
unsafe fn test_arm_mte_increment_tag(src: *const ()) -> *const () {
__arm_mte_increment_tag::<1, _>(src)
}
- #[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(gmi))]
+ #[cfg_attr(not(target_env = "msvc"), assert_instr(gmi))]
#[allow(dead_code)]
#[target_feature(enable = "mte")]
unsafe fn test_arm_mte_exclude_tag(src: *const (), excluded: u64) -> u64 {
__arm_mte_exclude_tag(src, excluded)
}
- #[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stg))]
+ #[cfg_attr(not(target_env = "msvc"), assert_instr(stg))]
#[allow(dead_code)]
#[target_feature(enable = "mte")]
unsafe fn test_arm_mte_set_tag(src: *const ()) {
__arm_mte_set_tag(src)
}
- #[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldg))]
+ #[cfg_attr(not(target_env = "msvc"), assert_instr(ldg))]
#[allow(dead_code)]
#[target_feature(enable = "mte")]
unsafe fn test_arm_mte_get_tag(src: *const ()) -> *const () {
__arm_mte_get_tag(src)
}
- #[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(subp))]
+ #[cfg_attr(not(target_env = "msvc"), assert_instr(subp))]
#[allow(dead_code)]
#[target_feature(enable = "mte")]
unsafe fn test_arm_mte_ptrdiff(a: *const (), b: *const ()) -> i64 {
diff --git a/crates/core_arch/src/aarch64/neon/generated.rs b/crates/core_arch/src/aarch64/neon/generated.rs
index 09cf381804..3241583cf0 100644
--- a/crates/core_arch/src/aarch64/neon/generated.rs
+++ b/crates/core_arch/src/aarch64/neon/generated.rs
@@ -49,7 +49,7 @@ pub fn __crc32d(crc: u32, data: u64) -> u32 {
#[inline]
#[target_feature(enable = "jsconv")]
#[cfg_attr(test, assert_instr(fjcvtzs))]
-#[unstable(feature = "stdarch_aarch64_jscvt", issue = "147555")]
+#[stable(feature = "stdarch_aarch64_jscvt", since = "1.95.0")]
pub fn __jcvt(a: f64) -> i32 {
unsafe extern "unadjusted" {
#[cfg_attr(
@@ -65,12 +65,15 @@ pub fn __jcvt(a: f64) -> i32 {
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(sabal2))]
+#[cfg_attr(
+ all(test, not(target_env = "msvc"), target_endian = "little"),
+ assert_instr(sabal2)
+)]
pub fn vabal_high_s8(a: int16x8_t, b: int8x16_t, c: int8x16_t) -> int16x8_t {
+ let d = vget_high_s8(b);
+ let e = vget_high_s8(c);
+ let f = vabd_s8(d, e);
unsafe {
- let d: int8x8_t = simd_shuffle!(b, b, [8, 9, 10, 11, 12, 13, 14, 15]);
- let e: int8x8_t = simd_shuffle!(c, c, [8, 9, 10, 11, 12, 13, 14, 15]);
- let f: int8x8_t = vabd_s8(d, e);
let f: uint8x8_t = simd_cast(f);
simd_add(a, simd_cast(f))
}
@@ -80,12 +83,15 @@ pub fn vabal_high_s8(a: int16x8_t, b: int8x16_t, c: int8x16_t) -> int16x8_t {
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(sabal2))]
+#[cfg_attr(
+ all(test, not(target_env = "msvc"), target_endian = "little"),
+ assert_instr(sabal2)
+)]
pub fn vabal_high_s16(a: int32x4_t, b: int16x8_t, c: int16x8_t) -> int32x4_t {
+ let d = vget_high_s16(b);
+ let e = vget_high_s16(c);
+ let f = vabd_s16(d, e);
unsafe {
- let d: int16x4_t = simd_shuffle!(b, b, [4, 5, 6, 7]);
- let e: int16x4_t = simd_shuffle!(c, c, [4, 5, 6, 7]);
- let f: int16x4_t = vabd_s16(d, e);
let f: uint16x4_t = simd_cast(f);
simd_add(a, simd_cast(f))
}
@@ -95,12 +101,15 @@ pub fn vabal_high_s16(a: int32x4_t, b: int16x8_t, c: int16x8_t) -> int32x4_t {
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(sabal2))]
+#[cfg_attr(
+ all(test, not(target_env = "msvc"), target_endian = "little"),
+ assert_instr(sabal2)
+)]
pub fn vabal_high_s32(a: int64x2_t, b: int32x4_t, c: int32x4_t) -> int64x2_t {
+ let d = vget_high_s32(b);
+ let e = vget_high_s32(c);
+ let f = vabd_s32(d, e);
unsafe {
- let d: int32x2_t = simd_shuffle!(b, b, [2, 3]);
- let e: int32x2_t = simd_shuffle!(c, c, [2, 3]);
- let f: int32x2_t = vabd_s32(d, e);
let f: uint32x2_t = simd_cast(f);
simd_add(a, simd_cast(f))
}
@@ -110,42 +119,45 @@ pub fn vabal_high_s32(a: int64x2_t, b: int32x4_t, c: int32x4_t) -> int64x2_t {
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(uabal2))]
+#[cfg_attr(
+ all(test, not(target_env = "msvc"), target_endian = "little"),
+ assert_instr(uabal2)
+)]
pub fn vabal_high_u8(a: uint16x8_t, b: uint8x16_t, c: uint8x16_t) -> uint16x8_t {
- unsafe {
- let d: uint8x8_t = simd_shuffle!(b, b, [8, 9, 10, 11, 12, 13, 14, 15]);
- let e: uint8x8_t = simd_shuffle!(c, c, [8, 9, 10, 11, 12, 13, 14, 15]);
- let f: uint8x8_t = vabd_u8(d, e);
- simd_add(a, simd_cast(f))
- }
+ let d = vget_high_u8(b);
+ let e = vget_high_u8(c);
+ let f = vabd_u8(d, e);
+ unsafe { simd_add(a, simd_cast(f)) }
}
#[doc = "Unsigned Absolute difference and Accumulate Long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabal_high_u16)"]
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(uabal2))]
+#[cfg_attr(
+ all(test, not(target_env = "msvc"), target_endian = "little"),
+ assert_instr(uabal2)
+)]
pub fn vabal_high_u16(a: uint32x4_t, b: uint16x8_t, c: uint16x8_t) -> uint32x4_t {
- unsafe {
- let d: uint16x4_t = simd_shuffle!(b, b, [4, 5, 6, 7]);
- let e: uint16x4_t = simd_shuffle!(c, c, [4, 5, 6, 7]);
- let f: uint16x4_t = vabd_u16(d, e);
- simd_add(a, simd_cast(f))
- }
+ let d = vget_high_u16(b);
+ let e = vget_high_u16(c);
+ let f = vabd_u16(d, e);
+ unsafe { simd_add(a, simd_cast(f)) }
}
#[doc = "Unsigned Absolute difference and Accumulate Long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabal_high_u32)"]
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(uabal2))]
+#[cfg_attr(
+ all(test, not(target_env = "msvc"), target_endian = "little"),
+ assert_instr(uabal2)
+)]
pub fn vabal_high_u32(a: uint64x2_t, b: uint32x4_t, c: uint32x4_t) -> uint64x2_t {
- unsafe {
- let d: uint32x2_t = simd_shuffle!(b, b, [2, 3]);
- let e: uint32x2_t = simd_shuffle!(c, c, [2, 3]);
- let f: uint32x2_t = vabd_u32(d, e);
- simd_add(a, simd_cast(f))
- }
+ let d = vget_high_u32(b);
+ let e = vget_high_u32(c);
+ let f = vabd_u32(d, e);
+ unsafe { simd_add(a, simd_cast(f)) }
}
#[doc = "Absolute difference between the arguments of Floating"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabd_f64)"]
@@ -186,7 +198,7 @@ pub fn vabdq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fabd))]
pub fn vabdd_f64(a: f64, b: f64) -> f64 {
- unsafe { simd_extract!(vabd_f64(vdup_n_f64(a), vdup_n_f64(b)), 0) }
+ vget_lane_f64::<0>(vabd_f64(vdup_n_f64(a), vdup_n_f64(b)))
}
#[doc = "Floating-point absolute difference"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabds_f32)"]
@@ -195,7 +207,7 @@ pub fn vabdd_f64(a: f64, b: f64) -> f64 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fabd))]
pub fn vabds_f32(a: f32, b: f32) -> f32 {
- unsafe { simd_extract!(vabd_f32(vdup_n_f32(a), vdup_n_f32(b)), 0) }
+ vget_lane_f32::<0>(vabd_f32(vdup_n_f32(a), vdup_n_f32(b)))
}
#[doc = "Floating-point absolute difference"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdh_f16)"]
@@ -205,47 +217,47 @@ pub fn vabds_f32(a: f32, b: f32) -> f32 {
#[cfg(not(target_arch = "arm64ec"))]
#[cfg_attr(test, assert_instr(fabd))]
pub fn vabdh_f16(a: f16, b: f16) -> f16 {
- unsafe { simd_extract!(vabd_f16(vdup_n_f16(a), vdup_n_f16(b)), 0) }
+ vget_lane_f16::<0>(vabd_f16(vdup_n_f16(a), vdup_n_f16(b)))
}
#[doc = "Signed Absolute difference Long"]
-#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_s16)"]
+#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_s8)"]
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(test, assert_instr(sabdl2))]
-pub fn vabdl_high_s16(a: int16x8_t, b: int16x8_t) -> int32x4_t {
+#[cfg_attr(all(test, target_endian = "little"), assert_instr(sabdl2))]
+pub fn vabdl_high_s8(a: int8x16_t, b: int8x16_t) -> int16x8_t {
+ let c = vget_high_s8(a);
+ let d = vget_high_s8(b);
unsafe {
- let c: int16x4_t = simd_shuffle!(a, a, [4, 5, 6, 7]);
- let d: int16x4_t = simd_shuffle!(b, b, [4, 5, 6, 7]);
- let e: uint16x4_t = simd_cast(vabd_s16(c, d));
+ let e: uint8x8_t = simd_cast(vabd_s8(c, d));
simd_cast(e)
}
}
#[doc = "Signed Absolute difference Long"]
-#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_s32)"]
+#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_s16)"]
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(test, assert_instr(sabdl2))]
-pub fn vabdl_high_s32(a: int32x4_t, b: int32x4_t) -> int64x2_t {
+#[cfg_attr(all(test, target_endian = "little"), assert_instr(sabdl2))]
+pub fn vabdl_high_s16(a: int16x8_t, b: int16x8_t) -> int32x4_t {
+ let c = vget_high_s16(a);
+ let d = vget_high_s16(b);
unsafe {
- let c: int32x2_t = simd_shuffle!(a, a, [2, 3]);
- let d: int32x2_t = simd_shuffle!(b, b, [2, 3]);
- let e: uint32x2_t = simd_cast(vabd_s32(c, d));
+ let e: uint16x4_t = simd_cast(vabd_s16(c, d));
simd_cast(e)
}
}
#[doc = "Signed Absolute difference Long"]
-#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_s8)"]
+#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_s32)"]
#[inline]
#[target_feature(enable = "neon")]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
-#[cfg_attr(test, assert_instr(sabdl2))]
-pub fn vabdl_high_s8(a: int8x16_t, b: int8x16_t) -> int16x8_t {
+#[cfg_attr(all(test, target_endian = "little"), assert_instr(sabdl2))]
+pub fn vabdl_high_s32(a: int32x4_t, b: int32x4_t) -> int64x2_t {
+ let c = vget_high_s32(a);
+ let d = vget_high_s32(b);
unsafe {
- let c: int8x8_t = simd_shuffle!(a, a, [8, 9, 10, 11, 12, 13, 14, 15]);
- let d: int8x8_t = simd_shuffle!(b, b, [8, 9, 10, 11, 12, 13, 14, 15]);
- let e: uint8x8_t = simd_cast(vabd_s8(c, d));
+ let e: uint32x2_t = simd_cast(vabd_s32(c, d));
simd_cast(e)
}
}
@@ -253,40 +265,34 @@ pub fn vabdl_high_s8(a: int8x16_t, b: int8x16_t) -> int16x8_t {
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_u8)"]
#[inline]
#[target_feature(enable = "neon")]
-#[cfg_attr(test, assert_instr(uabdl2))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
+#[cfg_attr(all(test, target_endian = "little"), assert_instr(uabdl2))]
pub fn vabdl_high_u8(a: uint8x16_t, b: uint8x16_t) -> uint16x8_t {
- unsafe {
- let c: uint8x8_t = simd_shuffle!(a, a, [8, 9, 10, 11, 12, 13, 14, 15]);
- let d: uint8x8_t = simd_shuffle!(b, b, [8, 9, 10, 11, 12, 13, 14, 15]);
- simd_cast(vabd_u8(c, d))
- }
+ let c = vget_high_u8(a);
+ let d = vget_high_u8(b);
+ unsafe { simd_cast(vabd_u8(c, d)) }
}
#[doc = "Unsigned Absolute difference Long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_u16)"]
#[inline]
#[target_feature(enable = "neon")]
-#[cfg_attr(test, assert_instr(uabdl2))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
+#[cfg_attr(all(test, target_endian = "little"), assert_instr(uabdl2))]
pub fn vabdl_high_u16(a: uint16x8_t, b: uint16x8_t) -> uint32x4_t {
- unsafe {
- let c: uint16x4_t = simd_shuffle!(a, a, [4, 5, 6, 7]);
- let d: uint16x4_t = simd_shuffle!(b, b, [4, 5, 6, 7]);
- simd_cast(vabd_u16(c, d))
- }
+ let c = vget_high_u16(a);
+ let d = vget_high_u16(b);
+ unsafe { simd_cast(vabd_u16(c, d)) }
}
#[doc = "Unsigned Absolute difference Long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabdl_high_u32)"]
#[inline]
#[target_feature(enable = "neon")]
-#[cfg_attr(test, assert_instr(uabdl2))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
+#[cfg_attr(all(test, target_endian = "little"), assert_instr(uabdl2))]
pub fn vabdl_high_u32(a: uint32x4_t, b: uint32x4_t) -> uint64x2_t {
- unsafe {
- let c: uint32x2_t = simd_shuffle!(a, a, [2, 3]);
- let d: uint32x2_t = simd_shuffle!(b, b, [2, 3]);
- simd_cast(vabd_u32(c, d))
- }
+ let c = vget_high_u32(a);
+ let d = vget_high_u32(b);
+ unsafe { simd_cast(vabd_u32(c, d)) }
}
#[doc = "Floating-point absolute value"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabs_f64)"]
@@ -613,7 +619,7 @@ pub fn vaddvq_f64(a: float64x2_t) -> f64 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addp))]
pub fn vaddv_s32(a: int32x2_t) -> i32 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddv_s8)"]
@@ -622,7 +628,7 @@ pub fn vaddv_s32(a: int32x2_t) -> i32 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddv_s8(a: int8x8_t) -> i8 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_s8)"]
@@ -631,7 +637,7 @@ pub fn vaddv_s8(a: int8x8_t) -> i8 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddvq_s8(a: int8x16_t) -> i8 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddv_s16)"]
@@ -640,7 +646,7 @@ pub fn vaddvq_s8(a: int8x16_t) -> i8 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddv_s16(a: int16x4_t) -> i16 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_s16)"]
@@ -649,7 +655,7 @@ pub fn vaddv_s16(a: int16x4_t) -> i16 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddvq_s16(a: int16x8_t) -> i16 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_s32)"]
@@ -658,7 +664,7 @@ pub fn vaddvq_s16(a: int16x8_t) -> i16 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddvq_s32(a: int32x4_t) -> i32 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddv_u32)"]
@@ -667,7 +673,7 @@ pub fn vaddvq_s32(a: int32x4_t) -> i32 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addp))]
pub fn vaddv_u32(a: uint32x2_t) -> u32 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddv_u8)"]
@@ -676,7 +682,7 @@ pub fn vaddv_u32(a: uint32x2_t) -> u32 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddv_u8(a: uint8x8_t) -> u8 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_u8)"]
@@ -685,7 +691,7 @@ pub fn vaddv_u8(a: uint8x8_t) -> u8 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddvq_u8(a: uint8x16_t) -> u8 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddv_u16)"]
@@ -694,7 +700,7 @@ pub fn vaddvq_u8(a: uint8x16_t) -> u8 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddv_u16(a: uint16x4_t) -> u16 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_u16)"]
@@ -703,7 +709,7 @@ pub fn vaddv_u16(a: uint16x4_t) -> u16 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddvq_u16(a: uint16x8_t) -> u16 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_u32)"]
@@ -712,7 +718,7 @@ pub fn vaddvq_u16(a: uint16x8_t) -> u16 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addv))]
pub fn vaddvq_u32(a: uint32x4_t) -> u32 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_s64)"]
@@ -721,7 +727,7 @@ pub fn vaddvq_u32(a: uint32x4_t) -> u32 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addp))]
pub fn vaddvq_s64(a: int64x2_t) -> i64 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
}
#[doc = "Add across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddvq_u64)"]
@@ -730,13 +736,45 @@ pub fn vaddvq_s64(a: int64x2_t) -> i64 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(addp))]
pub fn vaddvq_u64(a: uint64x2_t) -> u64 {
- unsafe { simd_reduce_add_unordered(a) }
+ unsafe { simd_reduce_add_ordered(a, 0) }
+}
+#[doc = "Multi-vector floating-point absolute maximum"]
+#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vamax_f16)"]
+#[inline]
+#[target_feature(enable = "neon,faminmax")]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famax))]
+#[unstable(feature = "faminmax", issue = "137933")]
+pub fn vamax_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t {
+ unsafe extern "unadjusted" {
+ #[cfg_attr(
+ any(target_arch = "aarch64", target_arch = "arm64ec"),
+ link_name = "llvm.aarch64.neon.famax.v4f16"
+ )]
+ fn _vamax_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t;
+ }
+ unsafe { _vamax_f16(a, b) }
+}
+#[doc = "Multi-vector floating-point absolute maximum"]
+#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vamaxq_f16)"]
+#[inline]
+#[target_feature(enable = "neon,faminmax")]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famax))]
+#[unstable(feature = "faminmax", issue = "137933")]
+pub fn vamaxq_f16(a: float16x8_t, b: float16x8_t) -> float16x8_t {
+ unsafe extern "unadjusted" {
+ #[cfg_attr(
+ any(target_arch = "aarch64", target_arch = "arm64ec"),
+ link_name = "llvm.aarch64.neon.famax.v8f16"
+ )]
+ fn _vamaxq_f16(a: float16x8_t, b: float16x8_t) -> float16x8_t;
+ }
+ unsafe { _vamaxq_f16(a, b) }
}
#[doc = "Multi-vector floating-point absolute maximum"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vamax_f32)"]
#[inline]
#[target_feature(enable = "neon,faminmax")]
-#[cfg_attr(test, assert_instr(nop))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famax))]
#[unstable(feature = "faminmax", issue = "137933")]
pub fn vamax_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t {
unsafe extern "unadjusted" {
@@ -752,7 +790,7 @@ pub fn vamax_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t {
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vamaxq_f32)"]
#[inline]
#[target_feature(enable = "neon,faminmax")]
-#[cfg_attr(test, assert_instr(nop))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famax))]
#[unstable(feature = "faminmax", issue = "137933")]
pub fn vamaxq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t {
unsafe extern "unadjusted" {
@@ -768,7 +806,7 @@ pub fn vamaxq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t {
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vamaxq_f64)"]
#[inline]
#[target_feature(enable = "neon,faminmax")]
-#[cfg_attr(test, assert_instr(nop))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famax))]
#[unstable(feature = "faminmax", issue = "137933")]
pub fn vamaxq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
unsafe extern "unadjusted" {
@@ -781,10 +819,42 @@ pub fn vamaxq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
unsafe { _vamaxq_f64(a, b) }
}
#[doc = "Multi-vector floating-point absolute minimum"]
+#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vamin_f16)"]
+#[inline]
+#[target_feature(enable = "neon,faminmax")]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famin))]
+#[unstable(feature = "faminmax", issue = "137933")]
+pub fn vamin_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t {
+ unsafe extern "unadjusted" {
+ #[cfg_attr(
+ any(target_arch = "aarch64", target_arch = "arm64ec"),
+ link_name = "llvm.aarch64.neon.famin.v4f16"
+ )]
+ fn _vamin_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t;
+ }
+ unsafe { _vamin_f16(a, b) }
+}
+#[doc = "Multi-vector floating-point absolute minimum"]
+#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaminq_f16)"]
+#[inline]
+#[target_feature(enable = "neon,faminmax")]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famin))]
+#[unstable(feature = "faminmax", issue = "137933")]
+pub fn vaminq_f16(a: float16x8_t, b: float16x8_t) -> float16x8_t {
+ unsafe extern "unadjusted" {
+ #[cfg_attr(
+ any(target_arch = "aarch64", target_arch = "arm64ec"),
+ link_name = "llvm.aarch64.neon.famin.v8f16"
+ )]
+ fn _vaminq_f16(a: float16x8_t, b: float16x8_t) -> float16x8_t;
+ }
+ unsafe { _vaminq_f16(a, b) }
+}
+#[doc = "Multi-vector floating-point absolute minimum"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vamin_f32)"]
#[inline]
#[target_feature(enable = "neon,faminmax")]
-#[cfg_attr(test, assert_instr(nop))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famin))]
#[unstable(feature = "faminmax", issue = "137933")]
pub fn vamin_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t {
unsafe extern "unadjusted" {
@@ -800,7 +870,7 @@ pub fn vamin_f32(a: float32x2_t, b: float32x2_t) -> float32x2_t {
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaminq_f32)"]
#[inline]
#[target_feature(enable = "neon,faminmax")]
-#[cfg_attr(test, assert_instr(nop))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famin))]
#[unstable(feature = "faminmax", issue = "137933")]
pub fn vaminq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t {
unsafe extern "unadjusted" {
@@ -816,7 +886,7 @@ pub fn vaminq_f32(a: float32x4_t, b: float32x4_t) -> float32x4_t {
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaminq_f64)"]
#[inline]
#[target_feature(enable = "neon,faminmax")]
-#[cfg_attr(test, assert_instr(nop))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(famin))]
#[unstable(feature = "faminmax", issue = "137933")]
pub fn vaminq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
unsafe extern "unadjusted" {
@@ -961,7 +1031,7 @@ pub fn vbcaxq_u64(a: uint64x2_t, b: uint64x2_t, c: uint64x2_t) -> uint64x2_t {
#[inline]
#[target_feature(enable = "neon,fp16")]
#[cfg_attr(not(target_arch = "arm"), target_feature(enable = "fcma"))]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[unstable(feature = "stdarch_neon_fcma", issue = "117222")]
#[cfg(not(target_arch = "arm64ec"))]
#[cfg_attr(test, assert_instr(fcadd))]
pub fn vcadd_rot270_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t {
@@ -979,7 +1049,7 @@ pub fn vcadd_rot270_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t {
#[inline]
#[target_feature(enable = "neon,fp16")]
#[cfg_attr(not(target_arch = "arm"), target_feature(enable = "fcma"))]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[unstable(feature = "stdarch_neon_fcma", issue = "117222")]
#[cfg(not(target_arch = "arm64ec"))]
#[cfg_attr(test, assert_instr(fcadd))]
pub fn vcaddq_rot270_f16(a: float16x8_t, b: float16x8_t) -> float16x8_t {
@@ -1045,7 +1115,7 @@ pub fn vcaddq_rot270_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
#[inline]
#[target_feature(enable = "neon,fp16")]
#[cfg_attr(not(target_arch = "arm"), target_feature(enable = "fcma"))]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[unstable(feature = "stdarch_neon_fcma", issue = "117222")]
#[cfg(not(target_arch = "arm64ec"))]
#[cfg_attr(test, assert_instr(fcadd))]
pub fn vcadd_rot90_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t {
@@ -1063,7 +1133,7 @@ pub fn vcadd_rot90_f16(a: float16x4_t, b: float16x4_t) -> float16x4_t {
#[inline]
#[target_feature(enable = "neon,fp16")]
#[cfg_attr(not(target_arch = "arm"), target_feature(enable = "fcma"))]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[unstable(feature = "stdarch_neon_fcma", issue = "117222")]
#[cfg(not(target_arch = "arm64ec"))]
#[cfg_attr(test, assert_instr(fcadd))]
pub fn vcaddq_rot90_f16(a: float16x8_t, b: float16x8_t) -> float16x8_t {
@@ -1457,7 +1527,7 @@ pub fn vceqq_p64(a: poly64x2_t, b: poly64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vceqd_f64(a: f64, b: f64) -> u64 {
- unsafe { simd_extract!(vceq_f64(vdup_n_f64(a), vdup_n_f64(b)), 0) }
+ vget_lane_u64::<0>(vceq_f64(vdup_n_f64(a), vdup_n_f64(b)))
}
#[doc = "Floating-point compare equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vceqs_f32)"]
@@ -1466,7 +1536,7 @@ pub fn vceqd_f64(a: f64, b: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vceqs_f32(a: f32, b: f32) -> u32 {
- unsafe { simd_extract!(vceq_f32(vdup_n_f32(a), vdup_n_f32(b)), 0) }
+ vget_lane_u32::<0>(vceq_f32(vdup_n_f32(a), vdup_n_f32(b)))
}
#[doc = "Compare bitwise equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vceqd_s64)"]
@@ -1494,14 +1564,14 @@ pub fn vceqd_u64(a: u64, b: u64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vceqh_f16(a: f16, b: f16) -> u16 {
- unsafe { simd_extract!(vceq_f16(vdup_n_f16(a), vdup_n_f16(b)), 0) }
+ vget_lane_u16::<0>(vceq_f16(vdup_n_f16(a), vdup_n_f16(b)))
}
#[doc = "Floating-point compare bitwise equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vceqz_f16)"]
#[inline]
#[cfg_attr(test, assert_instr(fcmeq))]
#[target_feature(enable = "neon,fp16")]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[stable(feature = "stdarch_neon_fp16", since = "1.94.0")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vceqz_f16(a: float16x4_t) -> uint16x4_t {
let b: f16x4 = f16x4::new(0.0, 0.0, 0.0, 0.0);
@@ -1512,7 +1582,7 @@ pub fn vceqz_f16(a: float16x4_t) -> uint16x4_t {
#[inline]
#[cfg_attr(test, assert_instr(fcmeq))]
#[target_feature(enable = "neon,fp16")]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[stable(feature = "stdarch_neon_fp16", since = "1.94.0")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vceqzq_f16(a: float16x8_t) -> uint16x8_t {
let b: f16x8 = f16x8::new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
@@ -1784,7 +1854,7 @@ pub fn vceqzd_u64(a: u64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vceqzh_f16(a: f16) -> u16 {
- unsafe { simd_extract!(vceqz_f16(vdup_n_f16(a)), 0) }
+ vget_lane_u16::<0>(vceqz_f16(vdup_n_f16(a)))
}
#[doc = "Floating-point compare bitwise equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vceqzs_f32)"]
@@ -1793,7 +1863,7 @@ pub fn vceqzh_f16(a: f16) -> u16 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vceqzs_f32(a: f32) -> u32 {
- unsafe { simd_extract!(vceqz_f32(vdup_n_f32(a)), 0) }
+ vget_lane_u32::<0>(vceqz_f32(vdup_n_f32(a)))
}
#[doc = "Floating-point compare bitwise equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vceqzd_f64)"]
@@ -1802,7 +1872,7 @@ pub fn vceqzs_f32(a: f32) -> u32 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vceqzd_f64(a: f64) -> u64 {
- unsafe { simd_extract!(vceqz_f64(vdup_n_f64(a)), 0) }
+ vget_lane_u64::<0>(vceqz_f64(vdup_n_f64(a)))
}
#[doc = "Floating-point compare greater than or equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcge_f64)"]
@@ -1865,7 +1935,7 @@ pub fn vcgeq_u64(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcged_f64(a: f64, b: f64) -> u64 {
- unsafe { simd_extract!(vcge_f64(vdup_n_f64(a), vdup_n_f64(b)), 0) }
+ vget_lane_u64::<0>(vcge_f64(vdup_n_f64(a), vdup_n_f64(b)))
}
#[doc = "Floating-point compare greater than or equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcges_f32)"]
@@ -1874,7 +1944,7 @@ pub fn vcged_f64(a: f64, b: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcges_f32(a: f32, b: f32) -> u32 {
- unsafe { simd_extract!(vcge_f32(vdup_n_f32(a), vdup_n_f32(b)), 0) }
+ vget_lane_u32::<0>(vcge_f32(vdup_n_f32(a), vdup_n_f32(b)))
}
#[doc = "Compare greater than or equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcged_s64)"]
@@ -1902,7 +1972,7 @@ pub fn vcged_u64(a: u64, b: u64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vcgeh_f16(a: f16, b: f16) -> u16 {
- unsafe { simd_extract!(vcge_f16(vdup_n_f16(a), vdup_n_f16(b)), 0) }
+ vget_lane_u16::<0>(vcge_f16(vdup_n_f16(a), vdup_n_f16(b)))
}
#[doc = "Floating-point compare greater than or equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgez_f32)"]
@@ -2031,7 +2101,7 @@ pub fn vcgezq_s64(a: int64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcgezd_f64(a: f64) -> u64 {
- unsafe { simd_extract!(vcgez_f64(vdup_n_f64(a)), 0) }
+ vget_lane_u64::<0>(vcgez_f64(vdup_n_f64(a)))
}
#[doc = "Floating-point compare greater than or equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgezs_f32)"]
@@ -2040,7 +2110,7 @@ pub fn vcgezd_f64(a: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcgezs_f32(a: f32) -> u32 {
- unsafe { simd_extract!(vcgez_f32(vdup_n_f32(a)), 0) }
+ vget_lane_u32::<0>(vcgez_f32(vdup_n_f32(a)))
}
#[doc = "Compare signed greater than or equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgezd_s64)"]
@@ -2059,7 +2129,7 @@ pub fn vcgezd_s64(a: i64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vcgezh_f16(a: f16) -> u16 {
- unsafe { simd_extract!(vcgez_f16(vdup_n_f16(a)), 0) }
+ vget_lane_u16::<0>(vcgez_f16(vdup_n_f16(a)))
}
#[doc = "Floating-point compare greater than"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgt_f64)"]
@@ -2122,7 +2192,7 @@ pub fn vcgtq_u64(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcgtd_f64(a: f64, b: f64) -> u64 {
- unsafe { simd_extract!(vcgt_f64(vdup_n_f64(a), vdup_n_f64(b)), 0) }
+ vget_lane_u64::<0>(vcgt_f64(vdup_n_f64(a), vdup_n_f64(b)))
}
#[doc = "Floating-point compare greater than"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgts_f32)"]
@@ -2131,7 +2201,7 @@ pub fn vcgtd_f64(a: f64, b: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcgts_f32(a: f32, b: f32) -> u32 {
- unsafe { simd_extract!(vcgt_f32(vdup_n_f32(a), vdup_n_f32(b)), 0) }
+ vget_lane_u32::<0>(vcgt_f32(vdup_n_f32(a), vdup_n_f32(b)))
}
#[doc = "Compare greater than"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgtd_s64)"]
@@ -2159,7 +2229,7 @@ pub fn vcgtd_u64(a: u64, b: u64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vcgth_f16(a: f16, b: f16) -> u16 {
- unsafe { simd_extract!(vcgt_f16(vdup_n_f16(a), vdup_n_f16(b)), 0) }
+ vget_lane_u16::<0>(vcgt_f16(vdup_n_f16(a), vdup_n_f16(b)))
}
#[doc = "Floating-point compare greater than zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgtz_f32)"]
@@ -2288,7 +2358,7 @@ pub fn vcgtzq_s64(a: int64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcgtzd_f64(a: f64) -> u64 {
- unsafe { simd_extract!(vcgtz_f64(vdup_n_f64(a)), 0) }
+ vget_lane_u64::<0>(vcgtz_f64(vdup_n_f64(a)))
}
#[doc = "Floating-point compare greater than zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgtzs_f32)"]
@@ -2297,7 +2367,7 @@ pub fn vcgtzd_f64(a: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcgtzs_f32(a: f32) -> u32 {
- unsafe { simd_extract!(vcgtz_f32(vdup_n_f32(a)), 0) }
+ vget_lane_u32::<0>(vcgtz_f32(vdup_n_f32(a)))
}
#[doc = "Compare signed greater than zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcgtzd_s64)"]
@@ -2316,7 +2386,7 @@ pub fn vcgtzd_s64(a: i64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vcgtzh_f16(a: f16) -> u16 {
- unsafe { simd_extract!(vcgtz_f16(vdup_n_f16(a)), 0) }
+ vget_lane_u16::<0>(vcgtz_f16(vdup_n_f16(a)))
}
#[doc = "Floating-point compare less than or equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcle_f64)"]
@@ -2379,7 +2449,7 @@ pub fn vcleq_u64(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcled_f64(a: f64, b: f64) -> u64 {
- unsafe { simd_extract!(vcle_f64(vdup_n_f64(a), vdup_n_f64(b)), 0) }
+ vget_lane_u64::<0>(vcle_f64(vdup_n_f64(a), vdup_n_f64(b)))
}
#[doc = "Floating-point compare less than or equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcles_f32)"]
@@ -2388,7 +2458,7 @@ pub fn vcled_f64(a: f64, b: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcles_f32(a: f32, b: f32) -> u32 {
- unsafe { simd_extract!(vcle_f32(vdup_n_f32(a), vdup_n_f32(b)), 0) }
+ vget_lane_u32::<0>(vcle_f32(vdup_n_f32(a), vdup_n_f32(b)))
}
#[doc = "Compare less than or equal"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcled_u64)"]
@@ -2416,7 +2486,7 @@ pub fn vcled_s64(a: i64, b: i64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vcleh_f16(a: f16, b: f16) -> u16 {
- unsafe { simd_extract!(vcle_f16(vdup_n_f16(a), vdup_n_f16(b)), 0) }
+ vget_lane_u16::<0>(vcle_f16(vdup_n_f16(a), vdup_n_f16(b)))
}
#[doc = "Floating-point compare less than or equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vclez_f32)"]
@@ -2545,7 +2615,7 @@ pub fn vclezq_s64(a: int64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vclezd_f64(a: f64) -> u64 {
- unsafe { simd_extract!(vclez_f64(vdup_n_f64(a)), 0) }
+ vget_lane_u64::<0>(vclez_f64(vdup_n_f64(a)))
}
#[doc = "Floating-point compare less than or equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vclezs_f32)"]
@@ -2554,7 +2624,7 @@ pub fn vclezd_f64(a: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vclezs_f32(a: f32) -> u32 {
- unsafe { simd_extract!(vclez_f32(vdup_n_f32(a)), 0) }
+ vget_lane_u32::<0>(vclez_f32(vdup_n_f32(a)))
}
#[doc = "Compare less than or equal to zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vclezd_s64)"]
@@ -2573,7 +2643,7 @@ pub fn vclezd_s64(a: i64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vclezh_f16(a: f16) -> u16 {
- unsafe { simd_extract!(vclez_f16(vdup_n_f16(a)), 0) }
+ vget_lane_u16::<0>(vclez_f16(vdup_n_f16(a)))
}
#[doc = "Floating-point compare less than"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vclt_f64)"]
@@ -2655,7 +2725,7 @@ pub fn vcltd_s64(a: i64, b: i64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vclth_f16(a: f16, b: f16) -> u16 {
- unsafe { simd_extract!(vclt_f16(vdup_n_f16(a), vdup_n_f16(b)), 0) }
+ vget_lane_u16::<0>(vclt_f16(vdup_n_f16(a), vdup_n_f16(b)))
}
#[doc = "Floating-point compare less than"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vclts_f32)"]
@@ -2664,7 +2734,7 @@ pub fn vclth_f16(a: f16, b: f16) -> u16 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vclts_f32(a: f32, b: f32) -> u32 {
- unsafe { simd_extract!(vclt_f32(vdup_n_f32(a), vdup_n_f32(b)), 0) }
+ vget_lane_u32::<0>(vclt_f32(vdup_n_f32(a), vdup_n_f32(b)))
}
#[doc = "Floating-point compare less than"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcltd_f64)"]
@@ -2673,7 +2743,7 @@ pub fn vclts_f32(a: f32, b: f32) -> u32 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcltd_f64(a: f64, b: f64) -> u64 {
- unsafe { simd_extract!(vclt_f64(vdup_n_f64(a), vdup_n_f64(b)), 0) }
+ vget_lane_u64::<0>(vclt_f64(vdup_n_f64(a), vdup_n_f64(b)))
}
#[doc = "Floating-point compare less than zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcltz_f32)"]
@@ -2802,7 +2872,7 @@ pub fn vcltzq_s64(a: int64x2_t) -> uint64x2_t {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcltzd_f64(a: f64) -> u64 {
- unsafe { simd_extract!(vcltz_f64(vdup_n_f64(a)), 0) }
+ vget_lane_u64::<0>(vcltz_f64(vdup_n_f64(a)))
}
#[doc = "Floating-point compare less than zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcltzs_f32)"]
@@ -2811,7 +2881,7 @@ pub fn vcltzd_f64(a: f64) -> u64 {
#[cfg_attr(test, assert_instr(fcmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vcltzs_f32(a: f32) -> u32 {
- unsafe { simd_extract!(vcltz_f32(vdup_n_f32(a)), 0) }
+ vget_lane_u32::<0>(vcltz_f32(vdup_n_f32(a)))
}
#[doc = "Compare less than zero"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcltzd_s64)"]
@@ -2830,14 +2900,14 @@ pub fn vcltzd_s64(a: i64) -> u64 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vcltzh_f16(a: f16) -> u16 {
- unsafe { simd_extract!(vcltz_f16(vdup_n_f16(a)), 0) }
+ vget_lane_u16::<0>(vcltz_f16(vdup_n_f16(a)))
}
#[doc = "Floating-point complex multiply accumulate"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vcmla_f16)"]
#[inline]
#[target_feature(enable = "neon,fcma")]
#[target_feature(enable = "neon,fp16")]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[unstable(feature = "stdarch_neon_fcma", issue = "117222")]
#[cfg(not(target_arch = "arm64ec"))]
#[cfg_attr(test, assert_instr(fcmla))]
pub fn vcmla_f16(a: float16x4_t, b: float16x4_t, c: float16x4_t) -> float16x4_t {
@@ -2855,7 +2925,7 @@ pub fn vcmla_f16(a: float16x4_t, b: float16x4_t, c: float16x4_t) -> float16x4_t
#[inline]
#[target_feature(enable = "neon,fcma")]
#[target_feature(enable = "neon,fp16")]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[unstable(feature = "stdarch_neon_fcma", issue = "117222")]
#[cfg(not(target_arch = "arm64ec"))]
#[cfg_attr(test, assert_instr(fcmla))]
pub fn vcmlaq_f16(a: float16x8_t, b: float16x8_t, c: float16x8_t) -> float16x8_t {
@@ -2923,7 +2993,7 @@ pub fn vcmlaq_f64(a: float64x2_t, b: float64x2_t, c: float64x2_t) -> float64x2_t
#[cfg_attr(test, assert_instr(fcmla, LANE = 0))]
#[rustc_legacy_const_generics(3)]
#[target_feature(enable = "neon,fp16")]
-#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
+#[unstable(feature = "stdarch_neon_fcma", issue = "117222")]
#[cfg(not(target_arch = "arm64ec"))]
pub fn vcmla_lane_f16