Make sure to test everything with scalar as well to catch any weird edge cases. Not all opcodes are covered here, just the arithmetic ones. FP64 packing is also ignored.
The GLSLstd450 spec is very lax about input signs, so we need to do the bitcasting dance to implement it correctly.