@@ -2606,7 +2606,7 @@ mod sealed {
2606
2606
) -> vector_unsigned_int {
2607
2607
static_assert_uimm_bits ! ( D , 2 ) ;
2608
2608
let offset: u32 = simd_extract ( b, D ) ;
2609
- let ptr = c. byte_offset ( offset as isize ) ;
2609
+ let ptr = c. byte_add ( offset as usize ) ;
2610
2610
let value = ptr. read ( ) ;
2611
2611
simd_insert ( a, D , value)
2612
2612
}
@@ -2621,7 +2621,7 @@ mod sealed {
2621
2621
) -> vector_unsigned_long_long {
2622
2622
static_assert_uimm_bits ! ( D , 1 ) ;
2623
2623
let offset: u64 = simd_extract ( b, D ) ;
2624
- let ptr = c. byte_offset ( offset as isize ) ;
2624
+ let ptr = c. byte_add ( offset as usize ) ;
2625
2625
let value = ptr. read ( ) ;
2626
2626
simd_insert ( a, D , value)
2627
2627
}
@@ -2668,6 +2668,70 @@ mod sealed {
2668
2668
vgeg vector_double
2669
2669
}
2670
2670
2671
+ #[ inline]
2672
+ #[ target_feature( enable = "vector" ) ]
2673
+ #[ cfg_attr( test, assert_instr( vscef, D = 3 ) ) ]
2674
+ unsafe fn vscef < const D : u32 > ( a : vector_unsigned_int , b : vector_unsigned_int , c : * mut u32 ) {
2675
+ static_assert_uimm_bits ! ( D , 2 ) ;
2676
+ let value = simd_extract ( a, D ) ;
2677
+ let offset: u32 = simd_extract ( b, D ) ;
2678
+ let ptr = c. byte_add ( offset as usize ) ;
2679
+ ptr. write ( value) ;
2680
+ }
2681
+
2682
+ #[ inline]
2683
+ #[ target_feature( enable = "vector" ) ]
2684
+ #[ cfg_attr( test, assert_instr( vsceg, D = 1 ) ) ]
2685
+ unsafe fn vsceg < const D : u32 > (
2686
+ a : vector_unsigned_long_long ,
2687
+ b : vector_unsigned_long_long ,
2688
+ c : * mut u64 ,
2689
+ ) {
2690
+ static_assert_uimm_bits ! ( D , 1 ) ;
2691
+ let value = simd_extract ( a, D ) ;
2692
+ let offset: u64 = simd_extract ( b, D ) ;
2693
+ let ptr = c. byte_add ( offset as usize ) ;
2694
+ ptr. write ( value) ;
2695
+ }
2696
+
2697
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
2698
+ pub trait VectorScatterElement {
2699
+ type Element ;
2700
+ type Offset ;
2701
+ unsafe fn vec_scatter_element < const D : u32 > ( self , b : Self :: Offset , c : * mut Self :: Element ) ;
2702
+ }
2703
+
2704
+ macro_rules! impl_vec_scatter_element {
2705
+ ( $( $instr: ident $ty: ident) * ) => {
2706
+ $(
2707
+ #[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
2708
+ impl VectorScatterElement for $ty {
2709
+ type Element = l_t_t!( $ty) ;
2710
+ type Offset = t_u!( $ty) ;
2711
+
2712
+ #[ inline]
2713
+ #[ target_feature( enable = "vector" ) ]
2714
+ unsafe fn vec_scatter_element<const D : u32 >( self , b: Self :: Offset , c: * mut Self :: Element ) {
2715
+ $instr:: <D >( transmute( self ) , b, c. cast( ) )
2716
+ }
2717
+ }
2718
+ ) *
2719
+ }
2720
+ }
2721
+
2722
+ impl_vec_scatter_element ! {
2723
+ vscef vector_signed_int
2724
+ vscef vector_bool_int
2725
+ vscef vector_unsigned_int
2726
+
2727
+ vsceg vector_signed_long_long
2728
+ vsceg vector_bool_long_long
2729
+ vsceg vector_unsigned_long_long
2730
+
2731
+ vscef vector_float
2732
+ vsceg vector_double
2733
+ }
2734
+
2671
2735
#[ unstable( feature = "stdarch_s390x" , issue = "135681" ) ]
2672
2736
pub trait VectorSel < Mask > : Sized {
2673
2737
unsafe fn vec_sel ( self , b : Self , c : Mask ) -> Self ;
0 commit comments