Cast back to int8/16 after compiler does integer promotion.
When multiplying integer values of a width less than an integer c++ actually converts up to an integer implicitly. So we silence the warnings that the result of the multiply could be larger than the original type. If people want to do multiplies on int8/16 they better know what they are doing.