Review conditions in tcx_encoder_memory_update_ivas_fx(), tcx_encoder_memory_update_fx()
# Bug description
The memory update conditions in tcx_encoder_memory_update() differ between float and BASOP:
Float:
```
if ( !st->tcxonly || ( L_frame_glob == L_FRAME16k ) )
{
/* Update excitation */
if ( L_frame_glob < L_EXC_MEM )
{
mvr2r( LPDmem->old_exc + ( L_frame_glob ), LPDmem->old_exc, L_EXC_MEM - L_frame_glob );
residu( A, M, synth, LPDmem->old_exc + L_EXC_MEM - ( L_frame_glob ), L_frame_glob );
}
else
{
residu( A, M, synth + (L_frame_glob) -L_EXC_MEM, LPDmem->old_exc, L_EXC_MEM );
}
}
```
BASOP, tcx_encoder_memory_update_fx()
```
IF( st->tcxonly == 0 || LE_16( L_frame_glob, L_FRAME16k ) )
{
/* Update excitation */
IF( LT_16( L_frame_glob, L_EXC_MEM ) )
{
Copy( LPDmem->old_exc + L_frame_glob, LPDmem->old_exc, sub( L_EXC_MEM, L_frame_glob ) );
Residu3_fx( A, synth, LPDmem->old_exc + sub( L_EXC_MEM, L_frame_glob ), L_frame_glob, 1 );
}
ELSE
{
Residu3_fx( A, synth + sub( L_frame_glob, L_EXC_MEM ), LPDmem->old_exc, L_EXC_MEM, 1 );
}
}
```
BASOP, tcx_encoder_memory_update_ivas_fx()
```
IF( st->tcxonly == 0 || LE_16( L_frame_glob, L_FRAME16k ) )
{
/* Update excitation */
IF( LT_16( L_frame_glob, L_EXC_MEM ) )
{
Word16 shift = norm_arr( LPDmem->old_exc + L_frame_glob, sub( L_EXC_MEM, L_frame_glob ) );
IF( LT_16( shift, sub( Q_new, LPDmem->q_lpd_old_exc ) ) )
{
Copy_Scale_sig( LPDmem->old_exc + L_frame_glob, LPDmem->old_exc, sub( L_EXC_MEM, L_frame_glob ), shift );
LPDmem->q_lpd_old_exc = add( LPDmem->q_lpd_old_exc, shift );
move16();
Residu3_fx( A, synth, LPDmem->old_exc + sub( L_EXC_MEM, L_frame_glob ), L_frame_glob, sub( LPDmem->q_lpd_old_exc, Q_new ) ); // LPDmem->q_lpd_old_exc
}
ELSE
{
Copy_Scale_sig( LPDmem->old_exc + L_frame_glob, LPDmem->old_exc, sub( L_EXC_MEM, L_frame_glob ), sub( Q_new, LPDmem->q_lpd_old_exc ) );
Residu3_fx( A, synth, LPDmem->old_exc + sub( L_EXC_MEM, L_frame_glob ), L_frame_glob, 0 ); // Q_new
LPDmem->q_lpd_old_exc = Q_new;
move16();
}
}
ELSE
{
Residu3_fx( A, synth + sub( L_frame_glob, L_EXC_MEM ), LPDmem->old_exc, L_EXC_MEM, 0 ); // Q_new
LPDmem->q_lpd_old_exc = Q_new;
move16();
}
}
```
While float compares `L_frame_glob == L_FRAME16k`, in BASOP the comparison is `LE_16( L_frame_glob, L_FRAME16k )`. I.e., BASOP also seems to copy/scale for L_frame_glob == 256, whereas float doesn't.
issue