-
Notifications
You must be signed in to change notification settings - Fork 280
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
s390x_is_feature_detected!
: detect more features
#1720
s390x_is_feature_detected!
: detect more features
#1720
Conversation
s390x_is_feature_dectected!
: detect more featuress390x_is_feature_detected!
: detect more features
The I'd agree that in general, it may be preferable to use While at this point in time, most kernels in actual use will support and enable the vector facility if present, it would still be safer to check the
At some point we're likely to drop support from GCC for very old architectures. In any case, having Rust enforce some minimum architecture level even with the GCC backend would certainly be fine. |
67a8bdd
to
aa32463
Compare
Then it's better to just use If it ever does become relevant, #1699 has some example code that uses |
aa32463
to
08ed897
Compare
08ed897
to
9575466
Compare
Update stdarch Updates stdarch - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - S390x float rounding: rust-lang/stdarch#1712 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - add vec_add for s390x: rust-lang/stdarch#1703 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - Fix typo and prettify comment: rust-lang/stdarch#1697 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - New ARM intrinsic generator: rust-lang/stdarch#1693 - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 try-job: aarch64-apple try-job: aarch64-gnu try-job: aarch64-gnu-debug try-job: dist-powerpc-linux try-job: i686-gnu-1 try-job: i686-gnu-2
Update stdarch Updates stdarch - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - S390x float rounding: rust-lang/stdarch#1712 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - add vec_add for s390x: rust-lang/stdarch#1703 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - Fix typo and prettify comment: rust-lang/stdarch#1697 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - New ARM intrinsic generator: rust-lang/stdarch#1693 - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 try-job: aarch64-apple try-job: aarch64-gnu try-job: aarch64-gnu-debug try-job: dist-powerpc-linux try-job: i686-gnu-1 try-job: i686-gnu-2
Update stdarch Updates stdarch - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - S390x float rounding: rust-lang/stdarch#1712 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - add vec_add for s390x: rust-lang/stdarch#1703 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - Fix typo and prettify comment: rust-lang/stdarch#1697 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - New ARM intrinsic generator: rust-lang/stdarch#1693 - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 try-job: aarch64-apple try-job: aarch64-gnu try-job: aarch64-gnu-debug try-job: dist-powerpc-linux try-job: i686-gnu-1 try-job: i686-gnu-2
Update stdarch Updates stdarch - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - S390x float rounding: rust-lang/stdarch#1712 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - add vec_add for s390x: rust-lang/stdarch#1703 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - Fix typo and prettify comment: rust-lang/stdarch#1697 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - New ARM intrinsic generator: rust-lang/stdarch#1693 - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 try: dist-s390x-linux try: dist-aarch64-msvc try: dist-powerpc-linux try: dist-powerpc64-linux try: dist-powerpc64le-linux try: x86_64-msvc-ext3 try: x86_64-msvc-ext2 try: x86_64-msvc-1 try: x86_64-msvc-2 try: i686-msvc-1
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 try-job: dist-s390x-linux try-job: dist-aarch64-msvc try-job: dist-powerpc-linux try-job: dist-powerpc64-linux try-job: dist-powerpc64le-linux try-job: x86_64-msvc-ext3 try-job: x86_64-msvc-ext2 try-job: x86_64-msvc-1 try-job: x86_64-msvc-2 try-job: i686-msvc-1
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728
tracking issue: rust-lang/rust#130869
follow-up to #1699
with rust-lang/rust#135630 merged, we can now also check for these facilities at runtime.
I am now using the
stfle
instruction to get the facilities. From what I can tellAT_HWCAP
does not include a bit for thevector-packed-decimal
facility. Also thestfle
version is just shorter, and I like that the factility bit index is now actually used.@uweigand previously said that using the
stfle
instruction is safe because LLVM only supports CPUs with this instruction. This is also the official specification of the targetIn theory that might change if e.g. the GCC backend wants to support something older (gcc appears to still support z900). We can deal with that if it ever becomes relevant.
Testing
I could not find a qemu CPU that works with rust programs and also does not support
vx
. I did test the logic using thevxrs_ext2
field, and a custom CPU:I verified that toggling the
vxeh2
flag is observed by the implementation.