Multiply two 16-bit fractional values and truncate into a 16-bit fractional result. Saturates only for the case of 0x8000 x 0x8000. When an accumulator is the destination, zeroes out the LSP portion.
OMR's SA bit was set to 1 at least three cycles before this code, that is, saturation on data ALU results enabled.
Word16 mult(Word16 sinp1, Word16 sinp2)
short s1 = 0x2000;/* 0.25 */ short s2 = 0x2000;/* 0.25 */ short result; result = mult(s1,s2); // Expected value of result: 0.625 = 0x0800