@@ -452,13 +452,17 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
452
452
let ( no, no_len) = this. operand_to_simd ( no) ?;
453
453
let ( dest, dest_len) = this. mplace_to_simd ( dest) ?;
454
454
let bitmask_len = dest_len. next_multiple_of ( 8 ) ;
455
+ if bitmask_len > 64 {
456
+ throw_unsup_format ! (
457
+ "simd_bitmask: masks larger than 64 elements are currently not supported"
458
+ ) ;
459
+ }
455
460
456
461
// The mask must be an integer or an array.
457
462
assert ! (
458
463
mask. layout. ty. is_integral( )
459
464
|| matches!( mask. layout. ty. kind( ) , ty:: Array ( elemty, _) if elemty == & this. tcx. types. u8 )
460
465
) ;
461
- assert ! ( bitmask_len <= 64 ) ;
462
466
assert_eq ! ( bitmask_len, mask. layout. size. bits( ) ) ;
463
467
assert_eq ! ( dest_len, yes_len) ;
464
468
assert_eq ! ( dest_len, no_len) ;
@@ -498,13 +502,17 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
498
502
let [ op] = check_arg_count ( args) ?;
499
503
let ( op, op_len) = this. operand_to_simd ( op) ?;
500
504
let bitmask_len = op_len. next_multiple_of ( 8 ) ;
505
+ if bitmask_len > 64 {
506
+ throw_unsup_format ! (
507
+ "simd_bitmask: masks larger than 64 elements are currently not supported"
508
+ ) ;
509
+ }
501
510
502
511
// Returns either an unsigned integer or array of `u8`.
503
512
assert ! (
504
513
dest. layout. ty. is_integral( )
505
514
|| matches!( dest. layout. ty. kind( ) , ty:: Array ( elemty, _) if elemty == & this. tcx. types. u8 )
506
515
) ;
507
- assert ! ( bitmask_len <= 64 ) ;
508
516
assert_eq ! ( bitmask_len, dest. layout. size. bits( ) ) ;
509
517
let op_len = u32:: try_from ( op_len) . unwrap ( ) ;
510
518
0 commit comments