rust/tests
Matthias Krüger 3f86eddf83
Rollup merge of - taiki-e:s390x-asm-vreg-inout, r=Amanieu
Support input/output in vector registers of s390x inline assembly (under asm_experimental_reg feature)

This extends currently clobber-only vector registers (`vreg`) support to allow passing `#[repr(simd)]` types, floats (f32/f64/f128), and integers (i32/i64/i128) as input/output.

This is unstable and gated under new `#![feature(asm_experimental_reg)]` (tracking issue: https://github.com/rust-lang/rust/issues/133416). If the feature is not enabled, only clober is supported as before.

| Architecture | Register class | Target feature | Allowed types |
| ------------ | -------------- | -------------- | -------------- |
| s390x | `vreg` | `vector` | `i32`, `f32`, `i64`, `f64`, `i128`, `f128`, `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |

This matches the list of types that are supported by the vector registers in LLVM:
https://github.com/llvm/llvm-project/blob/llvmorg-19.1.0/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td#L301-L313

In addition to `core::simd` types and floats listed above, custom `#[repr(simd)]` types of the same size and type are also allowed. All allowed types other than i32/f32/i64/f64/i128, and relevant target features are currently unstable.

Currently there is no SIMD type for s390x in `core::arch`, but this is tracked in https://github.com/rust-lang/rust/issues/130869.

cc https://github.com/rust-lang/rust/issues/130869 about vector facility support in s390x
cc https://github.com/rust-lang/rust/issues/125398 & https://github.com/rust-lang/rust/issues/116909 about f128 support in asm

`@rustbot` label +O-SystemZ +A-inline-assembly
2024-11-25 07:01:37 +01:00
..
assembly Make s390x non-clobber-only vector register support unstable 2024-11-24 21:42:22 +09:00
auxiliary Support input/output in vector registers of s390x inline assembly 2024-11-22 04:18:14 +09:00
codegen Make asm_goto_with_outputs a separate feature gate 2024-11-24 15:24:01 +00:00
codegen-units
coverage coverage: Restrict empty-span expansion to only cover { and } 2024-11-08 20:43:08 +11:00
coverage-run-rustdoc coverage: Restrict empty-span expansion to only cover { and } 2024-11-08 20:43:08 +11:00
crashes Rollup merge of - compiler-errors:baily, r=lcnr 2024-11-22 21:07:38 -05:00
debuginfo Mark numeric-types.rs as 64-bit only for now 2024-11-17 04:16:59 +08:00
incremental fixup some test directives 2024-11-17 22:15:54 +00:00
mir-opt remove remaining references to Reveal 2024-11-23 13:52:56 +01:00
pretty
run-make Stabilize the 2024 edition 2024-11-22 11:12:15 -08:00
rustdoc Add regression test for jump to def links on items with generics 2024-11-18 18:11:50 +01:00
rustdoc-gui rustdoc-search: simplify rules for generics and type params 2024-10-30 12:27:48 -07:00
rustdoc-js rustdoc-search: add standalone trailing :: test 2024-11-17 08:07:16 -07:00
rustdoc-js-std rustdoc search: allow queries to end in an empty path segment 2024-11-15 16:32:40 -06:00
rustdoc-json Rename Receiver -> LegacyReceiver 2024-10-22 12:55:16 +00:00
rustdoc-ui only store valid proc marco item for doc link 2024-11-23 13:41:27 +08:00
ui Rollup merge of - taiki-e:s390x-asm-vreg-inout, r=Amanieu 2024-11-25 07:01:37 +01:00
ui-fulldeps Likely unlikely fix 2024-11-17 21:49:10 +01:00
COMPILER_TESTS.md