@@ -210,7 +210,7 @@ impl<'tcx> GotocCtx<'tcx> {
210210 // Intrinsics which encode a SIMD arithmetic operation with overflow check.
211211 // We expand the overflow check because CBMC overflow operations don't accept array as
212212 // argument.
213- macro_rules! codegen_simd_with_overflow_check {
213+ macro_rules! _codegen_simd_with_overflow_check {
214214 ( $op: ident, $overflow: ident) => { {
215215 let a = fargs. remove( 0 ) ;
216216 let b = fargs. remove( 0 ) ;
@@ -352,8 +352,13 @@ impl<'tcx> GotocCtx<'tcx> {
352352 }
353353
354354 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+ ) ) ;
357362 }
358363
359364 match intrinsic {
@@ -543,36 +548,40 @@ impl<'tcx> GotocCtx<'tcx> {
543548 "saturating_sub" => codegen_intrinsic_binop_with_mm ! ( saturating_sub) ,
544549 "sinf32" => codegen_simple_intrinsic ! ( Sinf ) ,
545550 "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) ) ,
550557 "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) )
554566 }
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) ) ,
565574 "simd_shr" => {
566575 if fargs[ 0 ] . typ ( ) . base_type ( ) . unwrap ( ) . is_signed ( self . symbol_table . machine_model ( ) )
567576 {
568- codegen_intrinsic_binop ! ( ashr)
577+ unstable_codegen ! ( codegen_intrinsic_binop!( ashr) )
569578 } else {
570- codegen_intrinsic_binop ! ( lshr)
579+ unstable_codegen ! ( codegen_intrinsic_binop!( lshr) )
571580 }
572581 }
573582 // "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) ) ,
576585 "size_of" => codegen_intrinsic_const ! ( ) ,
577586 "size_of_val" => codegen_size_align ! ( size) ,
578587 "sqrtf32" => unstable_codegen ! ( codegen_simple_intrinsic!( Sqrtf ) ) ,
@@ -1105,7 +1114,7 @@ impl<'tcx> GotocCtx<'tcx> {
11051114 ///
11061115 /// CBMC does not currently seem to implement intrinsics like insert e.g.:
11071116 /// `**** WARNING: no body for function __builtin_ia32_vec_set_v4si`
1108- pub fn codegen_intrinsic_simd_insert (
1117+ pub fn _codegen_intrinsic_simd_insert (
11091118 & mut self ,
11101119 mut fargs : Vec < Expr > ,
11111120 p : & Place < ' tcx > ,
@@ -1138,7 +1147,7 @@ impl<'tcx> GotocCtx<'tcx> {
11381147 /// We can't use shuffle_vector_exprt because it's not understood by the CBMC backend,
11391148 /// it's immediately lowered by the C frontend.
11401149 /// Issue: https://github.com/diffblue/cbmc/issues/6297
1141- pub fn codegen_intrinsic_simd_shuffle (
1150+ pub fn _codegen_intrinsic_simd_shuffle (
11421151 & mut self ,
11431152 mut fargs : Vec < Expr > ,
11441153 p : & Place < ' tcx > ,
0 commit comments