Skip to content

Commit 916b1da

Browse files
committed
on s390x, use PassMode::Direct for vector types
1 parent bcd0683 commit 916b1da

File tree

1 file changed

+11
-3
lines changed
  • compiler/rustc_target/src/callconv

1 file changed

+11
-3
lines changed

Diff for: compiler/rustc_target/src/callconv/s390x.rs

+11-3
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,17 @@ where
3838
}
3939

4040
let size = arg.layout.size;
41-
if size.bits() <= 128 && arg.layout.is_single_vector_element(cx, size) {
42-
arg.cast_to(Reg { kind: RegKind::Vector, size });
43-
return;
41+
if size.bits() <= 128 {
42+
if let BackendRepr::Vector { .. } = arg.layout.backend_repr {
43+
// pass non-wrapped vector types using `PassMode::Direct`
44+
return;
45+
}
46+
47+
if arg.layout.is_single_vector_element(cx, size) {
48+
// pass non-transparant wrappers around a vector as `PassMode::Cast`
49+
arg.cast_to(Reg { kind: RegKind::Vector, size });
50+
return;
51+
}
4452
}
4553
if !arg.layout.is_aggregate() && size.bits() <= 64 {
4654
arg.extend_integer_width_to(64);

0 commit comments

Comments
 (0)