rust/compiler/rustc_codegen_cranelift/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
..
abi remove remaining references to Reveal 2024-11-23 13:52:56 +01:00
debuginfo remove remaining references to Reveal 2024-11-23 13:52:56 +01:00
driver Merge commit '1fa693ca4462fc1f790693464cf765ad693616af' into sync_cg_clif-2024-11-09 2024-11-09 13:48:06 +00:00
intrinsics InterpCx store TypingEnv instead of a ParamEnv 2024-11-19 21:36:23 +01:00
optimize Reformat use declarations. 2024-07-29 08:26:52 +10:00
allocator.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
analyze.rs rename AddressOf -> RawBorrow inside the compiler 2024-08-18 19:46:53 +02:00
base.rs remove remaining references to Reveal 2024-11-23 13:52:56 +01:00
cast.rs Merge commit '93a5433f17ab5ed48cc88f1e69b0713b16183373' into sync_cg_clif-2023-10-24 2023-10-24 12:22:23 +00:00
codegen_i128.rs Merge commit '69b3f5a426a5c1c05236a45b36f6679d95fbe01b' into sync_cg_clif-2024-08-09 2024-08-09 17:18:46 +00:00
common.rs remove remaining references to Reveal 2024-11-23 13:52:56 +01:00
compiler_builtins.rs Merge commit '69b3f5a426a5c1c05236a45b36f6679d95fbe01b' into sync_cg_clif-2024-08-09 2024-08-09 17:18:46 +00:00
concurrency_limiter.rs Use a dedicated type instead of a reference for the diagnostic context 2024-06-18 15:42:11 +00:00
config.rs Merge commit '3270432f4b0583104c8b9b6f695bf97d6bbf3ac2' into sync_cg_clif-2024-05-13 2024-05-13 13:26:33 +00:00
constant.rs reduce false positives of tail-expr-drop-order from consumed values 2024-11-20 20:53:11 +08:00
discriminant.rs cg_clif: rustc_abi::Abi => BackendRepr 2024-10-29 15:01:01 -07:00
global_asm.rs remove remaining references to Reveal 2024-11-23 13:52:56 +01:00
inline_asm.rs Rollup merge of #131664 - taiki-e:s390x-asm-vreg-inout, r=Amanieu 2024-11-25 07:01:37 +01:00
lib.rs use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
linkage.rs Sync rustc_codegen_cranelift 'ddd4ce25535cf71203ba3700896131ce55fde795' 2021-04-30 14:49:58 +02:00
main_shim.rs use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
num.rs Remove Rvalue::CheckedBinaryOp 2024-05-17 20:33:02 -07:00
pointer.rs Merge commit '1fa693ca4462fc1f790693464cf765ad693616af' into sync_cg_clif-2024-11-09 2024-11-09 13:48:06 +00:00
pretty_clif.rs Merge commit '1fa693ca4462fc1f790693464cf765ad693616af' into sync_cg_clif-2024-11-09 2024-11-09 13:48:06 +00:00
toolchain.rs Merge commit 'e9d1a0a7b0b28dd422f1a790ccde532acafbf193' into sync_cg_clif-2022-08-24 2022-08-24 18:40:58 +02:00
trap.rs Merge commit '5b1246bb4bed72fd0bb8fa497d8e5ed2c7f3515c' into sync_cg_clif-2024-11-02 2024-11-02 14:53:30 +00:00
unsize.rs use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
unwind_module.rs Merge commit '49cd5dd454d0115cfbe9e39102a8b3ba4616aa40' into sync_cg_clif-2024-06-30 2024-06-30 11:28:14 +00:00
value_and_place.rs use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
vtable.rs cg_clif: rustc_abi::Abi => BackendRepr 2024-10-29 15:01:01 -07:00