mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-10 14:57:14 +00:00
3f86eddf83
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 |
||
---|---|---|
.. | ||
aarch64 | ||
powerpc | ||
riscv | ||
s390x | ||
sparc | ||
x86_64 | ||
arm-low-dreg.rs | ||
bad-template.aarch64.stderr | ||
bad-template.rs | ||
bad-template.x86_64.stderr | ||
binary_asm_labels_allowed.rs | ||
binary_asm_labels.rs | ||
binary_asm_labels.stderr | ||
const-error.rs | ||
const-refs-to-static.rs | ||
const-refs-to-static.stderr | ||
empty_global_asm.rs | ||
fail-const-eval-issue-121099.rs | ||
fail-const-eval-issue-121099.stderr | ||
generic-const.rs | ||
ice-bad-err-span-in-template-129503.rs | ||
ice-bad-err-span-in-template-129503.stderr | ||
inline-syntax.arm.stderr | ||
inline-syntax.rs | ||
inline-syntax.x86_64.stderr | ||
invalid-const-operand.rs | ||
invalid-const-operand.stderr | ||
invalid-sym-operand.rs | ||
invalid-sym-operand.stderr | ||
issue-72570.rs | ||
issue-72570.stderr | ||
issue-85247.rs | ||
issue-85247.rwpi.stderr | ||
issue-87802.rs | ||
issue-87802.stderr | ||
issue-89305.rs | ||
issue-89305.stderr | ||
issue-92378.rs | ||
issue-97490.rs | ||
issue-99071.rs | ||
issue-99071.stderr | ||
issue-99122-2.rs | ||
issue-99122.rs | ||
issue-99122.stderr | ||
issue-113788.rs | ||
issue-113788.stderr | ||
may_unwind.rs | ||
naked-asm-outside-naked-fn.rs | ||
naked-asm-outside-naked-fn.stderr | ||
naked-functions-ffi.rs | ||
naked-functions-ffi.stderr | ||
naked-functions-inline.rs | ||
naked-functions-inline.stderr | ||
naked-functions-instruction-set.rs | ||
naked-functions-testattrs.rs | ||
naked-functions-testattrs.stderr | ||
naked-functions-unused.aarch64.stderr | ||
naked-functions-unused.rs | ||
naked-functions-unused.x86_64.stderr | ||
naked-functions.rs | ||
naked-functions.stderr | ||
naked-invalid-attr.rs | ||
naked-invalid-attr.stderr | ||
naked-with-invalid-repr-attr.rs | ||
naked-with-invalid-repr-attr.stderr | ||
named-asm-labels.rs | ||
named-asm-labels.s | ||
named-asm-labels.stderr | ||
non-const.rs | ||
non-const.stderr | ||
noreturn.rs | ||
parse-error.rs | ||
parse-error.stderr | ||
reg-conflict.rs | ||
reg-conflict.stderr | ||
simple_global_asm.rs | ||
type-check-1.rs | ||
type-check-1.stderr | ||
type-check-4.rs | ||
type-check-4.stderr | ||
unpretty-expanded.rs | ||
unpretty-expanded.stdout | ||
unsupported-option.fixed | ||
unsupported-option.rs | ||
unsupported-option.stderr |