about summary refs log tree commit diff
path: root/library/stdarch
diff options
context:
space:
mode:
Diffstat (limited to 'library/stdarch')
-rw-r--r--library/stdarch/crates/core_arch/src/powerpc/altivec.rs24
1 files changed, 17 insertions, 7 deletions
diff --git a/library/stdarch/crates/core_arch/src/powerpc/altivec.rs b/library/stdarch/crates/core_arch/src/powerpc/altivec.rs
index 2a01f4aca26..87bfe6fecb9 100644
--- a/library/stdarch/crates/core_arch/src/powerpc/altivec.rs
+++ b/library/stdarch/crates/core_arch/src/powerpc/altivec.rs
@@ -1481,17 +1481,27 @@ mod sealed {
     impl_vec_splat! { vector_bool_int, vspltw }
 
     macro_rules! splat {
-        ($name:ident, $v:ident, $r:ident [$instr:ident, $doc:literal]) => {
+        ($name:ident, $v:ident, $r:ident [$instr_altivec:ident / $instr_pwr9:ident, $doc:literal]) => {
             #[doc = $doc]
             #[inline]
             #[target_feature(enable = "altivec")]
-            #[cfg_attr(test, assert_instr($instr, IMM5 = 1))]
+            #[cfg_attr(
+                all(test, not(target_feature = "vsx")),
+                assert_instr($instr_altivec, IMM5 = 1)
+            )]
+            #[cfg_attr(
+                all(test, target_feature = "power9-vector"),
+                assert_instr($instr_pwr9, IMM5 = 1)
+            )]
             #[unstable(feature = "stdarch_powerpc", issue = "111145")]
             pub unsafe fn $name<const IMM5: i8>() -> s_t_l!($r) {
                 static_assert_simm_bits!(IMM5, 5);
                 transmute($r::splat(IMM5 as $v))
             }
         };
+        ($name:ident, $v:ident, $r:ident [$instr:ident, $doc:literal]) => {
+            splat! { $name, $v, $r [$instr / $instr, $doc] }
+        };
     }
 
     macro_rules! splats {
@@ -1514,11 +1524,11 @@ mod sealed {
 
     test_impl! { vec_splats_u8 (v: u8) -> vector_unsigned_char [splats_u8, vspltb] }
     test_impl! { vec_splats_u16 (v: u16) -> vector_unsigned_short [splats_u16, vsplth] }
-    test_impl! { vec_splats_u32 (v: u32) -> vector_unsigned_int [splats_u32, vspltw / xxspltw] }
+    test_impl! { vec_splats_u32 (v: u32) -> vector_unsigned_int [splats_u32, vspltw / xxspltw / mtvsrws] }
     test_impl! { vec_splats_i8 (v: i8) -> vector_signed_char [splats_i8, vspltb] }
     test_impl! { vec_splats_i16 (v: i16) -> vector_signed_short [splats_i16, vsplth] }
-    test_impl! { vec_splats_i32 (v: i32) -> vector_signed_int [splats_i32, vspltw / xxspltw] }
-    test_impl! { vec_splats_f32 (v: f32) -> vector_float [splats_f32, vspltw / xxspltw] }
+    test_impl! { vec_splats_i32 (v: i32) -> vector_signed_int [splats_i32, vspltw / xxspltw / mtvsrws] }
+    test_impl! { vec_splats_f32 (v: f32) -> vector_float [splats_f32, vspltw / xxspltw / mtvsrws] }
 
     #[unstable(feature = "stdarch_powerpc", issue = "111145")]
     pub trait VectorSplats {
@@ -3823,8 +3833,8 @@ where
     a.vec_splat::<IMM>()
 }
 
-splat! { vec_splat_u8, u8, u8x16 [vspltisb, "Vector Splat to Unsigned Byte"] }
-splat! { vec_splat_s8, i8, i8x16 [vspltisb, "Vector Splat to Signed Byte"] }
+splat! { vec_splat_u8, u8, u8x16 [vspltisb / xxspltib, "Vector Splat to Unsigned Byte"] }
+splat! { vec_splat_s8, i8, i8x16 [vspltisb / xxspltib, "Vector Splat to Signed Byte"] }
 splat! { vec_splat_u16, u16, u16x8 [vspltish, "Vector Splat to Unsigned Halfword"] }
 splat! { vec_splat_s16, i16, i16x8 [vspltish, "Vector Splat to Signed Halfword"] }
 splat! { vec_splat_u32, u32, u32x4 [vspltisw, "Vector Splat to Unsigned Word"] }