ETSI basic operation: meaning of L_sub_c

Started by Al Grant January 2, 2008
I'm looking for an authoritative definition of the ETSI basic
L_sub_c, specifically the sense of the Carry flag on input and output.

I have the AMR codec reference C code, but L_sub_c is commented
as subtracting input carry and then does the opposite (i.e. subtracts
invertse of input carry).  Also I would expect to use two L_sub_c's in
the obvious way to do a 64-bit subtraction, but doing this requires
inverting the carry flag in between!  So the reference implementation
has either carry-in or carry-out inverted from what it should be.

Since the reference AMR codec doesn't use L_sub_c (or L_msuNs),
it wouldn't be sensitive to any faults in the L_sub_c implementation.
Is there some more comprehensive test, or test vectors, for the ops?

While we're here, is it permitted for negate, abs_s etc. to disturb
Overflow, i.e. by implementing negate(x) as sub(0,x)?  The reference
implementation doesn't set Overflow so it seems not to be required,
but is it permitted, as other (fielded) implementations suggest?