then, we compute the following matrix, with the first column output being the full width (32 bit), the second being only 24 bit, the third only 16 bit and finally the top part (comprising the most significant byte of a and b as input) being only 8 bit
| a0 << b0 | a1 << b0 | a2 << b0 | a3 << b0
- | a0 << b1 | a1 << b1 | a2 << b1 | a3 << b1
- | a0 << b2 | a1 << b2 | a2 << b2 | a3 << b2
- | a0 << b3 | a1 << b3 | a2 << b3 | a3 << b3
+ | | a1 << b1 | a2 << b1 | a3 << b1
+ | | | a2 << b2 | a3 << b2
+ | | | | a3 << b3
Where multiply would perform a cascading-add across those partial results,
shift is different in that we *know* (assume) that for each shift-amount