@@ -210,7 +210,7 @@ impl<'tcx> GotocCtx<'tcx> {
210
210
// Intrinsics which encode a SIMD arithmetic operation with overflow check.
211
211
// We expand the overflow check because CBMC overflow operations don't accept array as
212
212
// argument.
213
- macro_rules! codegen_simd_with_overflow_check {
213
+ macro_rules! _codegen_simd_with_overflow_check {
214
214
( $op: ident, $overflow: ident) => { {
215
215
let a = fargs. remove( 0 ) ;
216
216
let b = fargs. remove( 0 ) ;
@@ -352,8 +352,13 @@ impl<'tcx> GotocCtx<'tcx> {
352
352
}
353
353
354
354
if let Some ( stripped) = intrinsic. strip_prefix ( "simd_shuffle" ) {
355
- let n: u64 = stripped. parse ( ) . unwrap ( ) ;
356
- return self . codegen_intrinsic_simd_shuffle ( fargs, p, cbmc_ret_ty, n) ;
355
+ let _n: u64 = stripped. parse ( ) . unwrap ( ) ;
356
+ return unstable_codegen ! ( self . codegen_intrinsic_simd_shuffle(
357
+ fargs,
358
+ p,
359
+ cbmc_ret_ty,
360
+ n
361
+ ) ) ;
357
362
}
358
363
359
364
match intrinsic {
@@ -543,36 +548,40 @@ impl<'tcx> GotocCtx<'tcx> {
543
548
"saturating_sub" => codegen_intrinsic_binop_with_mm ! ( saturating_sub) ,
544
549
"sinf32" => codegen_simple_intrinsic ! ( Sinf ) ,
545
550
"sinf64" => codegen_simple_intrinsic ! ( Sin ) ,
546
- "simd_add" => codegen_simd_with_overflow_check ! ( plus, add_overflow_p) ,
547
- "simd_and" => codegen_intrinsic_binop ! ( bitand) ,
548
- "simd_div" => codegen_intrinsic_binop ! ( div) ,
549
- "simd_eq" => codegen_intrinsic_binop ! ( eq) ,
551
+ "simd_add" => {
552
+ unstable_codegen ! ( codegen_simd_with_overflow_check!( plus, add_overflow_p) )
553
+ }
554
+ "simd_and" => unstable_codegen ! ( codegen_intrinsic_binop!( bitand) ) ,
555
+ "simd_div" => unstable_codegen ! ( codegen_intrinsic_binop!( div) ) ,
556
+ "simd_eq" => unstable_codegen ! ( codegen_intrinsic_binop!( eq) ) ,
550
557
"simd_extract" => {
551
- let vec = fargs. remove ( 0 ) ;
552
- let index = fargs. remove ( 0 ) ;
553
- self . codegen_expr_to_place ( p, vec. index_array ( index) )
558
+ let _vec = fargs. remove ( 0 ) ;
559
+ let _index = fargs. remove ( 0 ) ;
560
+ unstable_codegen ! ( self . codegen_expr_to_place( p, vec. index_array( index) ) )
561
+ }
562
+ "simd_ge" => unstable_codegen ! ( codegen_intrinsic_binop!( ge) ) ,
563
+ "simd_gt" => unstable_codegen ! ( codegen_intrinsic_binop!( gt) ) ,
564
+ "simd_insert" => {
565
+ unstable_codegen ! ( self . codegen_intrinsic_simd_insert( fargs, p, cbmc_ret_ty, loc) )
554
566
}
555
- "simd_ge" => codegen_intrinsic_binop ! ( ge) ,
556
- "simd_gt" => codegen_intrinsic_binop ! ( gt) ,
557
- "simd_insert" => self . codegen_intrinsic_simd_insert ( fargs, p, cbmc_ret_ty, loc) ,
558
- "simd_le" => codegen_intrinsic_binop ! ( le) ,
559
- "simd_lt" => codegen_intrinsic_binop ! ( lt) ,
560
- "simd_mul" => codegen_simd_with_overflow_check ! ( mul, mul_overflow_p) ,
561
- "simd_ne" => codegen_intrinsic_binop ! ( neq) ,
562
- "simd_or" => codegen_intrinsic_binop ! ( bitor) ,
563
- "simd_rem" => codegen_intrinsic_binop ! ( rem) ,
564
- "simd_shl" => codegen_intrinsic_binop ! ( shl) ,
567
+ "simd_le" => unstable_codegen ! ( codegen_intrinsic_binop!( le) ) ,
568
+ "simd_lt" => unstable_codegen ! ( codegen_intrinsic_binop!( lt) ) ,
569
+ "simd_mul" => unstable_codegen ! ( codegen_simd_with_overflow_check!( mul, mul_overflow_p) ) ,
570
+ "simd_ne" => unstable_codegen ! ( codegen_intrinsic_binop!( neq) ) ,
571
+ "simd_or" => unstable_codegen ! ( codegen_intrinsic_binop!( bitor) ) ,
572
+ "simd_rem" => unstable_codegen ! ( codegen_intrinsic_binop!( rem) ) ,
573
+ "simd_shl" => unstable_codegen ! ( codegen_intrinsic_binop!( shl) ) ,
565
574
"simd_shr" => {
566
575
if fargs[ 0 ] . typ ( ) . base_type ( ) . unwrap ( ) . is_signed ( self . symbol_table . machine_model ( ) )
567
576
{
568
- codegen_intrinsic_binop ! ( ashr)
577
+ unstable_codegen ! ( codegen_intrinsic_binop!( ashr) )
569
578
} else {
570
- codegen_intrinsic_binop ! ( lshr)
579
+ unstable_codegen ! ( codegen_intrinsic_binop!( lshr) )
571
580
}
572
581
}
573
582
// "simd_shuffle#" => handled in an `if` preceding this match
574
- "simd_sub" => codegen_simd_with_overflow_check ! ( sub, sub_overflow_p) ,
575
- "simd_xor" => codegen_intrinsic_binop ! ( bitxor) ,
583
+ "simd_sub" => unstable_codegen ! ( codegen_simd_with_overflow_check!( sub, sub_overflow_p) ) ,
584
+ "simd_xor" => unstable_codegen ! ( codegen_intrinsic_binop!( bitxor) ) ,
576
585
"size_of" => codegen_intrinsic_const ! ( ) ,
577
586
"size_of_val" => codegen_size_align ! ( size) ,
578
587
"sqrtf32" => unstable_codegen ! ( codegen_simple_intrinsic!( Sqrtf ) ) ,
@@ -1105,7 +1114,7 @@ impl<'tcx> GotocCtx<'tcx> {
1105
1114
///
1106
1115
/// CBMC does not currently seem to implement intrinsics like insert e.g.:
1107
1116
/// `**** WARNING: no body for function __builtin_ia32_vec_set_v4si`
1108
- pub fn codegen_intrinsic_simd_insert (
1117
+ pub fn _codegen_intrinsic_simd_insert (
1109
1118
& mut self ,
1110
1119
mut fargs : Vec < Expr > ,
1111
1120
p : & Place < ' tcx > ,
@@ -1138,7 +1147,7 @@ impl<'tcx> GotocCtx<'tcx> {
1138
1147
/// We can't use shuffle_vector_exprt because it's not understood by the CBMC backend,
1139
1148
/// it's immediately lowered by the C frontend.
1140
1149
/// Issue: https://github.com/diffblue/cbmc/issues/6297
1141
- pub fn codegen_intrinsic_simd_shuffle (
1150
+ pub fn _codegen_intrinsic_simd_shuffle (
1142
1151
& mut self ,
1143
1152
mut fargs : Vec < Expr > ,
1144
1153
p : & Place < ' tcx > ,
0 commit comments