@@ -381,7 +381,7 @@ impl<'a, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'tcx> {
381381}
382382
383383impl Builder < ' _ , ' _ > {
384- pub fn count_ones ( & self , arg : SpirvValue ) -> SpirvValue {
384+ pub fn count_ones ( & mut self , arg : SpirvValue ) -> SpirvValue {
385385 let ty = arg. ty ;
386386 match self . cx . lookup_type ( ty) {
387387 SpirvType :: Integer ( bits, false ) => {
@@ -426,7 +426,7 @@ impl Builder<'_, '_> {
426426 }
427427 }
428428
429- pub fn bit_reverse ( & self , arg : SpirvValue ) -> SpirvValue {
429+ pub fn bit_reverse ( & mut self , arg : SpirvValue ) -> SpirvValue {
430430 let ty = arg. ty ;
431431 match self . cx . lookup_type ( ty) {
432432 SpirvType :: Integer ( bits, false ) => {
@@ -489,7 +489,7 @@ impl Builder<'_, '_> {
489489 }
490490
491491 pub fn count_leading_trailing_zeros (
492- & self ,
492+ & mut self ,
493493 arg : SpirvValue ,
494494 trailing : bool ,
495495 non_zero : bool ,
@@ -501,9 +501,9 @@ impl Builder<'_, '_> {
501501 let u32 = SpirvType :: Integer ( 32 , false ) . def ( self . span ( ) , self ) ;
502502
503503 let glsl = self . ext_inst . borrow_mut ( ) . import_glsl ( self ) ;
504- let find_xsb = |arg, offset : i32 | {
504+ let find_xsb = |this : & mut Self , arg, offset : i32 | {
505505 if trailing {
506- let lsb = self
506+ let lsb = this
507507 . emit ( )
508508 . ext_inst (
509509 u32,
@@ -516,12 +516,12 @@ impl Builder<'_, '_> {
516516 if offset == 0 {
517517 lsb
518518 } else {
519- let const_offset = self . constant_i32 ( self . span ( ) , offset) . def ( self ) ;
520- self . emit ( ) . i_add ( u32, None , const_offset, lsb) . unwrap ( )
519+ let const_offset = this . constant_i32 ( this . span ( ) , offset) . def ( this ) ;
520+ this . emit ( ) . i_add ( u32, None , const_offset, lsb) . unwrap ( )
521521 }
522522 } else {
523523 // rust is always unsigned, so FindUMsb
524- let msb_bit = self
524+ let msb_bit = this
525525 . emit ( )
526526 . ext_inst (
527527 u32,
@@ -533,21 +533,21 @@ impl Builder<'_, '_> {
533533 . unwrap ( ) ;
534534 // the glsl op returns the Msb bit, not the amount of leading zeros of this u32
535535 // leading zeros = 31 - Msb bit
536- let const_offset = self . constant_i32 ( self . span ( ) , 31 - offset) . def ( self ) ;
537- self . emit ( ) . i_sub ( u32, None , const_offset, msb_bit) . unwrap ( )
536+ let const_offset = this . constant_i32 ( this . span ( ) , 31 - offset) . def ( this ) ;
537+ this . emit ( ) . i_sub ( u32, None , const_offset, msb_bit) . unwrap ( )
538538 }
539539 } ;
540540
541541 let converted = match bits {
542542 8 | 16 => {
543543 let arg = self . emit ( ) . u_convert ( u32, None , arg. def ( self ) ) . unwrap ( ) ;
544544 if trailing {
545- find_xsb ( arg, 0 )
545+ find_xsb ( self , arg, 0 )
546546 } else {
547- find_xsb ( arg, bits as i32 - 32 )
547+ find_xsb ( self , arg, bits as i32 - 32 )
548548 }
549549 }
550- 32 => find_xsb ( arg. def ( self ) , 0 ) ,
550+ 32 => find_xsb ( self , arg. def ( self ) , 0 ) ,
551551 64 => {
552552 let u32_0 = self . constant_int ( u32, 0 ) . def ( self ) ;
553553 let u32_32 = self . constant_u32 ( self . span ( ) , 32 ) . def ( self ) ;
@@ -562,16 +562,16 @@ impl Builder<'_, '_> {
562562
563563 if trailing {
564564 let use_lower = self . emit ( ) . i_equal ( bool, None , lower, u32_0) . unwrap ( ) ;
565- let lower_bits = find_xsb ( lower, 32 ) ;
566- let higher_bits = find_xsb ( higher, 0 ) ;
565+ let lower_bits = find_xsb ( self , lower, 32 ) ;
566+ let higher_bits = find_xsb ( self , higher, 0 ) ;
567567 self . emit ( )
568568 . select ( u32, None , use_lower, higher_bits, lower_bits)
569569 . unwrap ( )
570570 } else {
571571 let use_higher =
572572 self . emit ( ) . i_equal ( bool, None , higher, u32_0) . unwrap ( ) ;
573- let lower_bits = find_xsb ( lower, 0 ) ;
574- let higher_bits = find_xsb ( higher, 32 ) ;
573+ let lower_bits = find_xsb ( self , lower, 0 ) ;
574+ let higher_bits = find_xsb ( self , higher, 32 ) ;
575575 self . emit ( )
576576 . select ( u32, None , use_higher, lower_bits, higher_bits)
577577 . unwrap ( )
0 commit comments