@@ -685,7 +685,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
685
685
. unwrap ( ) ;
686
686
for i in 0 ..dest_len {
687
687
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 ) ) ;
689
689
let yes = this. read_immediate ( & this. mplace_index ( & yes, i) ?. into ( ) ) ?;
690
690
let no = this. read_immediate ( & this. mplace_index ( & no, i) ?. into ( ) ) ?;
691
691
let dest = this. mplace_index ( & dest, i) ?;
@@ -695,8 +695,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
695
695
}
696
696
for i in dest_len..bitmask_len {
697
697
// 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) ;
700
699
if mask != 0 {
701
700
throw_ub_format ! (
702
701
"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
841
840
for i in 0 ..op_len {
842
841
let op = this. read_immediate ( & this. mplace_index ( & op, i) ?. into ( ) ) ?;
843
842
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 ) ;
845
844
}
846
845
}
847
846
this. write_int ( res, dest) ?;
@@ -1382,10 +1381,10 @@ fn simd_element_to_bool<'tcx>(elem: ImmTy<'tcx, Tag>) -> InterpResult<'tcx, bool
1382
1381
} )
1383
1382
}
1384
1383
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 ) ;
1387
1386
match endianess {
1388
1387
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
1390
1389
}
1391
1390
}
0 commit comments