@@ -36,10 +36,17 @@ pub(crate) fn get_lut_poly<F: RichField + Extendable<D>, const D: usize>(
3636 let b = deltas[ LookupChallenges :: ChallengeB as usize ] ;
3737 let mut coeffs = Vec :: with_capacity ( common_data. luts [ lut_index] . len ( ) ) ;
3838 let n = common_data. luts [ lut_index] . len ( ) ;
39+ let nb_padded_elts = LookupTableGate :: num_slots ( & common_data. config )
40+ - n % LookupTableGate :: num_slots ( & common_data. config ) ;
41+ let ( padding_inp, padding_out) = common_data. luts [ lut_index] [ 0 ] ;
3942 for ( input, output) in common_data. luts [ lut_index] . iter ( ) {
4043 coeffs. push ( F :: from_canonical_u16 ( * input) + b * F :: from_canonical_u16 ( * output) ) ;
4144 }
42- coeffs. append ( & mut vec ! [ F :: ZERO ; degree - n] ) ;
45+ // Padding with the first element of the LUT.
46+ for _ in 0 ..nb_padded_elts {
47+ coeffs. push ( F :: from_canonical_u16 ( padding_inp) + b * F :: from_canonical_u16 ( padding_out) ) ;
48+ }
49+ coeffs. append ( & mut vec ! [ F :: ZERO ; degree - ( n + nb_padded_elts) ] ) ;
4350 coeffs. reverse ( ) ;
4451 PolynomialCoeffs :: new ( coeffs)
4552}
@@ -756,14 +763,24 @@ pub(crate) fn get_lut_poly_circuit<F: RichField + Extendable<D>, const D: usize>
756763 let b = deltas[ LookupChallenges :: ChallengeB as usize ] ;
757764 let delta = deltas[ LookupChallenges :: ChallengeDelta as usize ] ;
758765 let n = common_data. luts [ lut_index] . len ( ) ;
766+ let nb_padded_elts = LookupTableGate :: num_slots ( & common_data. config )
767+ - n % LookupTableGate :: num_slots ( & common_data. config ) ;
768+ let ( padding_inp, padding_out) = common_data. luts [ lut_index] [ 0 ] ;
759769 let mut coeffs: Vec < Target > = common_data. luts [ lut_index]
760770 . iter ( )
761771 . map ( |( input, output) | {
762772 let temp = builder. mul_const ( F :: from_canonical_u16 ( * output) , b) ;
763773 builder. add_const ( temp, F :: from_canonical_u16 ( * input) )
764774 } )
765775 . collect ( ) ;
766- for _ in n..degree {
776+
777+ // Padding with the first element of the LUT.
778+ for _ in 0 ..nb_padded_elts {
779+ let temp = builder. mul_const ( F :: from_canonical_u16 ( padding_out) , b) ;
780+ let temp = builder. add_const ( temp, F :: from_canonical_u16 ( padding_inp) ) ;
781+ coeffs. push ( temp) ;
782+ }
783+ for _ in ( n + nb_padded_elts) ..degree {
767784 coeffs. push ( builder. zero ( ) ) ;
768785 }
769786 coeffs. reverse ( ) ;
0 commit comments