@@ -609,12 +609,10 @@ unconstrained fn decompose(val: Field) -> [Field; 16] {
609
609
}
610
610
611
611
// 5 gates?
612
- pub fn get_last_limb_path <let OutputFields : u32 >(last_limb_index : Field ) -> [Field ; OutputFields ] {
612
+ pub fn get_last_limb_path <let OutputFields : u32 >(last_limb_index : Field ) -> [u1 ; OutputFields ] {
613
613
// TODO we offset by 1 explain why (0 byte length produces 0 - 1 which = invalid array index. we just add 1 and increase array length by 1 to compensate)
614
614
let path = LAST_LIMB_PATH [cast_num_to_u32 (last_limb_index + 1 )]; // 2
615
- let a = path .to_le_bits ::<OutputFields >();
616
- let result = a .map (|b | b as Field );
617
- result
615
+ path .to_le_bits ::<OutputFields >()
618
616
}
619
617
620
618
/**
@@ -718,13 +716,13 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
718
716
// 1, 70.5
719
717
let index_of_output_limb : Field = (num_bytes_div_31 as Field - num_bytes_mod_31_is_0 as Field );
720
718
// 5, 75.5
721
- let path_valid_output : [Field ; OutputFields ] = get_last_limb_path (index_of_output_limb );
719
+ let path_valid_output : [u1 ; OutputFields ] = get_last_limb_path (index_of_output_limb );
722
720
723
721
// 2, 77.5
724
722
let tail_shift = BYTE_SHIFT [cast_num_to_u32 (num_unused_bytes_in_start_limb )];
725
723
726
724
// 51, 128.5
727
- let mut result = [0 ; OutputFields ];
725
+ let mut result : [ Field ; OutputFields ] = [0 ; OutputFields ];
728
726
let mut previous = tail ;
729
727
for i in 0 ..(OutputFields - 1 ) {
730
728
// 0
@@ -738,9 +736,9 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
738
736
// 1, 48
739
737
let combined = previous * tail_shift + head ;
740
738
// 1, 49
741
- result [i ] = combined * slice_valid ;
739
+ result [i ] = combined * ( slice_valid as Field ) ;
742
740
// 2, 51
743
- previous = (tail - previous ) * slice_valid + previous ;
741
+ previous = (tail - previous ) * ( slice_valid as Field ) + previous ;
744
742
}
745
743
746
744
// 2, 130.5
@@ -777,13 +775,13 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
777
775
std:: as_witness (last_limb );
778
776
779
777
let mut path : [Field ; OutputFields ] = [0 ; OutputFields ];
780
- path [0 ] = (1 - path_valid_output [0 ]);
778
+ path [0 ] = (1 - path_valid_output [0 ] as Field );
781
779
for i in 1 ..OutputFields {
782
- path [i ] = path_valid_output [i ] * - path_valid_output [i - 1 ] + path_valid_output [i - 1 ];
780
+ path [i ] = path_valid_output [i - 1 ] as Field - path_valid_output [i ] as Field * path_valid_output [i - 1 ] as Field ;
783
781
}
784
782
785
783
for i in 0 ..OutputFields {
786
- result [i ] = (last_limb - result [i ]) * path [i ] + result [i ];
784
+ result [i ] = (last_limb - result [i ]) * path [i ]+ result [i ];
787
785
}
788
786
result
789
787
}
0 commit comments