@@ -685,7 +685,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
685685 . unwrap ( ) ;
686686 for i in 0 ..dest_len {
687687 let mask =
688- mask & ( 1 << simd_bitmask_index ( i, bitmask_len , this. data_layout ( ) . endian ) ) ;
688+ mask & ( 1 << simd_bitmask_index ( i, dest_len , this. data_layout ( ) . endian ) ) ;
689689 let yes = this. read_immediate ( & this. mplace_index ( & yes, i) ?. into ( ) ) ?;
690690 let no = this. read_immediate ( & this. mplace_index ( & no, i) ?. into ( ) ) ?;
691691 let dest = this. mplace_index ( & dest, i) ?;
@@ -695,8 +695,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
695695 }
696696 for i in dest_len..bitmask_len {
697697 // If the mask is "padded", ensure that padding is all-zero.
698- let mask =
699- mask & ( 1 << simd_bitmask_index ( i, bitmask_len, this. data_layout ( ) . endian ) ) ;
698+ let mask = mask & ( 1 << i) ;
700699 if mask != 0 {
701700 throw_ub_format ! (
702701 "a SIMD bitmask less than 8 bits long must be filled with 0s for the remaining bits"
@@ -841,7 +840,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
841840 for i in 0 ..op_len {
842841 let op = this. read_immediate ( & this. mplace_index ( & op, i) ?. into ( ) ) ?;
843842 if simd_element_to_bool ( op) ? {
844- res |= 1 << simd_bitmask_index ( i, bitmask_len , this. data_layout ( ) . endian ) ;
843+ res |= 1 << simd_bitmask_index ( i, op_len , this. data_layout ( ) . endian ) ;
845844 }
846845 }
847846 this. write_int ( res, dest) ?;
@@ -1382,10 +1381,10 @@ fn simd_element_to_bool<'tcx>(elem: ImmTy<'tcx, Tag>) -> InterpResult<'tcx, bool
13821381 } )
13831382}
13841383
1385- fn simd_bitmask_index ( idx : u64 , bitmask_len : u64 , endianess : Endian ) -> u64 {
1386- assert ! ( idx < bitmask_len ) ;
1384+ fn simd_bitmask_index ( idx : u64 , vec_len : u64 , endianess : Endian ) -> u64 {
1385+ assert ! ( idx < vec_len ) ;
13871386 match endianess {
13881387 Endian :: Little => idx,
1389- Endian :: Big => bitmask_len - 1 - idx, // reverse order of bits
1388+ Endian :: Big => vec_len - 1 - idx, // reverse order of bits
13901389 }
13911390}
0 commit comments