I'd like to get some feedback first on changes for shared vsir part, specifically for additional vector types. It's necessary to get correct output, because showing ".xyxx" is meaningless for this particular case. Source and destination width is specified by a separate field of each instruction.
Another thing, literal constants are using doubles for storage. I don't think it makes sense to introduce VEC4 double type just for this obscure case, and I don't think you can use doubles in expression for fx_2_0. Newer effects are using floats for constants.