Corner case in ieee.numeric_std"/"[signed,integer]
For L="10000" (i.e. most negative number) and R=16, I would expect the mathematically correct answer to be -16 / 16 = -1, represented as "11111".
However, in ieee.numeric_std"/"[signed,integer] we have:
if (R_LENGTH > L'length) then
QUOT := (others => '0');
return RESIZE(QUOT, L'length);
end if;
But R_LENGTH works out to 6 bits, as "010000" is the smallest SIGNED that can represent +16. Therefore, we return "00000" which is not mathematically correct.
This corner case is similar to the (informative, not normative) position taken in G.3.3.1 of the LRM that "10000" / 1 does not signal an overflow.
Is this behavior a bug, or ought it to be added to G.3.3.1?
I discovered this while comparing results from the reference implementation to my own accelerated implementation, which returns "11111". Ought I to match the reference implementation, bugs and all?