rust/compiler/rustc_hir_analysis/src
Matthias Krüger 3f86eddf83
Rollup merge of #131664 - 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
..
check Rollup merge of #131664 - taiki-e:s390x-asm-vreg-inout, r=Amanieu 2024-11-25 07:01:37 +01:00
coherence Make PointerLike opt-in as a trait 2024-11-20 16:36:12 +00:00
collect Rollup merge of #133218 - compiler-errors:const-opaque, r=fee1-dead 2024-11-21 07:56:13 +01:00
errors Clarify implicit captures for RPITIT 2024-10-10 11:46:51 -07:00
hir_ty_lowering we should not be reporting generic error if there is not a segment to deny 2024-11-20 18:57:02 +00:00
impl_wf_check Simplify fulfill_implication 2024-11-22 01:03:17 +00:00
outlives Implement const effect predicate in new solver 2024-10-24 09:46:36 +00:00
variance Add variances to RPITITs 2024-10-10 11:46:48 -07:00
autoderef.rs Swap Vec<PredicateObligation> to type alias 2024-10-12 15:17:08 +01:00
bounds.rs Merge HostPolarity and BoundConstness 2024-10-30 16:23:16 +00:00
check_unused.rs Remove #[macro_use] extern crate tracing from rustc_hir_analysis. 2024-08-30 17:14:59 +10:00
collect.rs Implement the unsafe-fields RFC. 2024-11-21 19:32:07 +01:00
constrained_generic_params.rs Remove #[macro_use] extern crate tracing from rustc_hir_analysis. 2024-08-30 17:14:59 +10:00
delegation.rs Effects cleanup 2024-10-26 10:19:07 +08:00
errors.rs Rollup merge of #131664 - taiki-e:s390x-asm-vreg-inout, r=Amanieu 2024-11-25 07:01:37 +01:00
hir_wf_check.rs TypingMode 🤔 2024-10-29 17:01:24 +01:00
impl_wf_check.rs nightly feature tracking: get rid of the per-feature bool fields 2024-10-23 09:14:41 +01:00
lib.rs Auto merge of #133212 - lcnr:questionable-uwu, r=compiler-errors 2024-11-20 06:22:01 +00:00