@@ -655,62 +655,6 @@ fn codegen_regular_intrinsic_call<'tcx>(
655655 let res = fx. bcx . ins ( ) . rotr ( x, y) ;
656656 ret. write_cvalue ( fx, CValue :: by_val ( res, layout) ) ;
657657 }
658- sym:: funnel_shl => {
659- intrinsic_args ! ( fx, args => ( x, y, z) ; intrinsic) ;
660- let layout = x. layout ( ) ;
661-
662- let width_bits = layout. size . bits ( ) as i64 ;
663-
664- let lhs_bits = x. load_scalar ( fx) ;
665- let rhs_bits = y. load_scalar ( fx) ;
666- let raw_shift_bits = z. load_scalar ( fx) ;
667-
668- let ty = fx. bcx . func . dfg . value_type ( lhs_bits) ;
669- let zero = fx. bcx . ins ( ) . iconst ( ty, 0 ) ;
670-
671- let shift_bits = fx. bcx . ins ( ) . band_imm ( raw_shift_bits, width_bits - 1 ) ;
672- let inv_shift_bits = fx. bcx . ins ( ) . irsub_imm ( shift_bits, width_bits) ;
673- let is_zero = fx. bcx . ins ( ) . icmp_imm ( IntCC :: Equal , shift_bits, 0 ) ;
674-
675- // lhs_bits << shift_bits
676- let shl = fx. bcx . ins ( ) . ishl ( lhs_bits, shift_bits) ;
677-
678- // rhs_bits.unbounded_shr(inv_shift_bits)
679- // we don't need a modulo here because `ushr` implicitly does it
680- let shr = fx. bcx . ins ( ) . ushr ( rhs_bits, inv_shift_bits) ;
681- let shr = fx. bcx . ins ( ) . select ( is_zero, zero, shr) ;
682-
683- let res = fx. bcx . ins ( ) . bor ( shr, shl) ;
684- ret. write_cvalue ( fx, CValue :: by_val ( res, layout) ) ;
685- }
686- sym:: funnel_shr => {
687- intrinsic_args ! ( fx, args => ( x, y, z) ; intrinsic) ;
688- let layout = x. layout ( ) ;
689-
690- let width_bits = layout. size . bits ( ) as i64 ;
691-
692- let lhs_bits = x. load_scalar ( fx) ;
693- let rhs_bits = y. load_scalar ( fx) ;
694- let raw_shift_bits = z. load_scalar ( fx) ;
695-
696- let ty = fx. bcx . func . dfg . value_type ( lhs_bits) ;
697- let zero = fx. bcx . ins ( ) . iconst ( ty, 0 ) ;
698-
699- let shift_bits = fx. bcx . ins ( ) . band_imm ( raw_shift_bits, width_bits - 1 ) ;
700- let inv_shift_bits = fx. bcx . ins ( ) . irsub_imm ( shift_bits, width_bits) ;
701- let is_zero = fx. bcx . ins ( ) . icmp_imm ( IntCC :: Equal , shift_bits, 0 ) ;
702-
703- // rhs_bits >> shift_bits
704- let shr = fx. bcx . ins ( ) . ushr ( rhs_bits, shift_bits) ;
705-
706- // lhs_bits.unbounded_shl(inv_shift_bits)
707- // we don't need a modulo here because `ishl` implicitly does it
708- let shl = fx. bcx . ins ( ) . ishl ( lhs_bits, inv_shift_bits) ;
709- let shl = fx. bcx . ins ( ) . select ( is_zero, zero, shl) ;
710-
711- let res = fx. bcx . ins ( ) . bor ( shr, shl) ;
712- ret. write_cvalue ( fx, CValue :: by_val ( res, layout) ) ;
713- }
714658
715659 // The only difference between offset and arith_offset is regarding UB. Because Cranelift
716660 // doesn't have UB both are codegen'ed the same way
0 commit comments