Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
79b30d6
thread, grid, and block dim/idx can only return non-negative values
ZuseZ4 Dec 9, 2025
69c7a7e
Use a generic type to implement SIMD types in `core_arch::simd`
eduardosm Jan 1, 2026
dab5532
x86: avoid using `transmute` in some tests
eduardosm Jan 1, 2026
68701ff
arm_shared: avoid using `transmute` and `unsafe fn` in tests
eduardosm Jan 1, 2026
f9e6d4b
Merge pull request #1987 from eduardosm/generic-simd-type-avoid-unsaf…
sayantn Jan 5, 2026
d0204a3
remove `impl Neg` on s390x/powerpc vector types
folkertdev Jan 11, 2026
78952f6
Mark the neon intrinsics as inline(always).
JamieCunliffe Dec 9, 2025
5bf9ca7
stabilize `__jscvt`
folkertdev Jan 13, 2026
aaf31e7
Merge pull request #1973 from ZuseZ4/u32-threadidx
sayantn Jan 17, 2026
0d802f5
Merge pull request #1992 from folkertdev/remove-impl-neg
sayantn Jan 17, 2026
d251a38
Merge pull request #1974 from JamieCunliffe/inline-always-neon
sayantn Jan 20, 2026
bf7c1c2
test `vmulh_lane_f16` in intrinsic test
folkertdev Jan 21, 2026
b1ef655
use `simd_extract_dyn` for `extract`
folkertdev Jan 21, 2026
5829f21
Merge pull request #1997 from folkertdev/use-extract-dyn
sayantn Jan 22, 2026
cf08a11
s390x: add `nnp-assist` intrinsics
folkertdev Jan 17, 2026
84fc953
Merge pull request #1996 from folkertdev/s390x-nnp-assist
folkertdev Jan 22, 2026
5ec32b5
Merge pull request #1998 from folkertdev/test-vmulh_lane_f16
Amanieu Jan 22, 2026
464b309
Merge pull request #1993 from folkertdev/stabilize-jscvt
folkertdev Jan 24, 2026
a4f92e5
Prepare for merging from rust-lang/rust
invalid-email-address Jan 26, 2026
7168e5d
Merge ref '873d4682c7d2' from rust-lang/rust
invalid-email-address Jan 26, 2026
246399c
use `simd_splat`
folkertdev Jan 26, 2026
a45071b
Merge pull request #2002 from rust-lang/rustc-pull
folkertdev Jan 26, 2026
0ef4c3a
use `simd_splat` for the `set1` functions
folkertdev Jan 26, 2026
f648ba2
Merge pull request #2003 from folkertdev/use-simd-splat
folkertdev Jan 26, 2026
fdad66a
enable `target_feature_inline_always` in `core` and `std`
folkertdev Jan 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions library/core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@
#![feature(staged_api)]
#![feature(stmt_expr_attributes)]
#![feature(strict_provenance_lints)]
#![feature(target_feature_inline_always)]
#![feature(trait_alias)]
#![feature(transparent_unions)]
#![feature(try_blocks)]
Expand Down
1 change: 1 addition & 0 deletions library/std/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@
#![feature(staged_api)]
#![feature(stmt_expr_attributes)]
#![feature(strict_provenance_lints)]
#![feature(target_feature_inline_always)]
#![feature(thread_local)]
#![feature(try_blocks)]
#![feature(try_trait_v2)]
Expand Down
2 changes: 1 addition & 1 deletion library/stdarch/ci/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ 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"
Expand Down
3 changes: 0 additions & 3 deletions library/stdarch/crates/core_arch/rustfmt.toml
Original file line number Diff line number Diff line change
@@ -1,3 +0,0 @@
ignore = [
"src/simd.rs",
]
3,894 changes: 1,947 additions & 1,947 deletions library/stdarch/crates/core_arch/src/aarch64/neon/generated.rs

Large diffs are not rendered by default.

6,530 changes: 3,265 additions & 3,265 deletions library/stdarch/crates/core_arch/src/arm_shared/neon/generated.rs

Large diffs are not rendered by default.

97 changes: 49 additions & 48 deletions library/stdarch/crates/core_arch/src/arm_shared/neon/load_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,194 +13,195 @@ use crate::core_arch::aarch64::*;
use crate::core_arch::simd::*;
use std::mem;
use stdarch_test::simd_test;

#[simd_test(enable = "neon")]
unsafe fn test_vld1_s8() {
fn test_vld1_s8() {
let a: [i8; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let e = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
let r: i8x8 = transmute(vld1_s8(a[1..].as_ptr()));
let r = unsafe { i8x8::from(vld1_s8(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_s8() {
fn test_vld1q_s8() {
let a: [i8; 17] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
let e = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r: i8x16 = transmute(vld1q_s8(a[1..].as_ptr()));
let r = unsafe { i8x16::from(vld1q_s8(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_s16() {
fn test_vld1_s16() {
let a: [i16; 5] = [0, 1, 2, 3, 4];
let e = i16x4::new(1, 2, 3, 4);
let r: i16x4 = transmute(vld1_s16(a[1..].as_ptr()));
let r = unsafe { i16x4::from(vld1_s16(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_s16() {
fn test_vld1q_s16() {
let a: [i16; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let e = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
let r: i16x8 = transmute(vld1q_s16(a[1..].as_ptr()));
let r = unsafe { i16x8::from(vld1q_s16(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_s32() {
fn test_vld1_s32() {
let a: [i32; 3] = [0, 1, 2];
let e = i32x2::new(1, 2);
let r: i32x2 = transmute(vld1_s32(a[1..].as_ptr()));
let r = unsafe { i32x2::from(vld1_s32(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_s32() {
fn test_vld1q_s32() {
let a: [i32; 5] = [0, 1, 2, 3, 4];
let e = i32x4::new(1, 2, 3, 4);
let r: i32x4 = transmute(vld1q_s32(a[1..].as_ptr()));
let r = unsafe { i32x4::from(vld1q_s32(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_s64() {
fn test_vld1_s64() {
let a: [i64; 2] = [0, 1];
let e = i64x1::new(1);
let r: i64x1 = transmute(vld1_s64(a[1..].as_ptr()));
let r = unsafe { i64x1::from(vld1_s64(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_s64() {
fn test_vld1q_s64() {
let a: [i64; 3] = [0, 1, 2];
let e = i64x2::new(1, 2);
let r: i64x2 = transmute(vld1q_s64(a[1..].as_ptr()));
let r = unsafe { i64x2::from(vld1q_s64(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_u8() {
fn test_vld1_u8() {
let a: [u8; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
let r: u8x8 = transmute(vld1_u8(a[1..].as_ptr()));
let r = unsafe { u8x8::from(vld1_u8(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_u8() {
fn test_vld1q_u8() {
let a: [u8; 17] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
let e = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r: u8x16 = transmute(vld1q_u8(a[1..].as_ptr()));
let r = unsafe { u8x16::from(vld1q_u8(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_u16() {
fn test_vld1_u16() {
let a: [u16; 5] = [0, 1, 2, 3, 4];
let e = u16x4::new(1, 2, 3, 4);
let r: u16x4 = transmute(vld1_u16(a[1..].as_ptr()));
let r = unsafe { u16x4::from(vld1_u16(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_u16() {
fn test_vld1q_u16() {
let a: [u16; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let e = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
let r: u16x8 = transmute(vld1q_u16(a[1..].as_ptr()));
let r = unsafe { u16x8::from(vld1q_u16(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_u32() {
fn test_vld1_u32() {
let a: [u32; 3] = [0, 1, 2];
let e = u32x2::new(1, 2);
let r: u32x2 = transmute(vld1_u32(a[1..].as_ptr()));
let r = unsafe { u32x2::from(vld1_u32(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_u32() {
fn test_vld1q_u32() {
let a: [u32; 5] = [0, 1, 2, 3, 4];
let e = u32x4::new(1, 2, 3, 4);
let r: u32x4 = transmute(vld1q_u32(a[1..].as_ptr()));
let r = unsafe { u32x4::from(vld1q_u32(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_u64() {
fn test_vld1_u64() {
let a: [u64; 2] = [0, 1];
let e = u64x1::new(1);
let r: u64x1 = transmute(vld1_u64(a[1..].as_ptr()));
let r = unsafe { u64x1::from(vld1_u64(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_u64() {
fn test_vld1q_u64() {
let a: [u64; 3] = [0, 1, 2];
let e = u64x2::new(1, 2);
let r: u64x2 = transmute(vld1q_u64(a[1..].as_ptr()));
let r = unsafe { u64x2::from(vld1q_u64(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_p8() {
fn test_vld1_p8() {
let a: [p8; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
let r: u8x8 = transmute(vld1_p8(a[1..].as_ptr()));
let r = unsafe { u8x8::from(vld1_p8(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_p8() {
fn test_vld1q_p8() {
let a: [p8; 17] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
let e = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r: u8x16 = transmute(vld1q_p8(a[1..].as_ptr()));
let r = unsafe { u8x16::from(vld1q_p8(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_p16() {
fn test_vld1_p16() {
let a: [p16; 5] = [0, 1, 2, 3, 4];
let e = u16x4::new(1, 2, 3, 4);
let r: u16x4 = transmute(vld1_p16(a[1..].as_ptr()));
let r = unsafe { u16x4::from(vld1_p16(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_p16() {
fn test_vld1q_p16() {
let a: [p16; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let e = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
let r: u16x8 = transmute(vld1q_p16(a[1..].as_ptr()));
let r = unsafe { u16x8::from(vld1q_p16(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon,aes")]
unsafe fn test_vld1_p64() {
fn test_vld1_p64() {
let a: [p64; 2] = [0, 1];
let e = u64x1::new(1);
let r: u64x1 = transmute(vld1_p64(a[1..].as_ptr()));
let r = unsafe { u64x1::from(vld1_p64(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon,aes")]
unsafe fn test_vld1q_p64() {
fn test_vld1q_p64() {
let a: [p64; 3] = [0, 1, 2];
let e = u64x2::new(1, 2);
let r: u64x2 = transmute(vld1q_p64(a[1..].as_ptr()));
let r = unsafe { u64x2::from(vld1q_p64(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1_f32() {
fn test_vld1_f32() {
let a: [f32; 3] = [0., 1., 2.];
let e = f32x2::new(1., 2.);
let r: f32x2 = transmute(vld1_f32(a[1..].as_ptr()));
let r = unsafe { f32x2::from(vld1_f32(a[1..].as_ptr())) };
assert_eq!(r, e)
}

#[simd_test(enable = "neon")]
unsafe fn test_vld1q_f32() {
fn test_vld1q_f32() {
let a: [f32; 5] = [0., 1., 2., 3., 4.];
let e = f32x4::new(1., 2., 3., 4.);
let r: f32x4 = transmute(vld1q_f32(a[1..].as_ptr()));
let r = unsafe { f32x4::from(vld1q_f32(a[1..].as_ptr())) };
assert_eq!(r, e)
}
Loading
Loading