Hi Kyrill, I tried. Iterators alone cannot do it: the two forms differ by the presence of the <TRUNCEXTEND> node, not by a code or a mode. A define_subst can - it drops the extend and narrows the plus and the shift to VQN, and it excludes the saturating members structurally, since their ss/us_truncate copies do not match the input template - but it takes six substs (one per insn shape, and one per shift code, because TRUNC_SHIFT and TRUNCEXTEND tie the plain-truncate member to lshiftrt), they have to sit at the top of the file so they run before vczle/vczbe, and they come to 131 md lines against the 46 for the three insns, for byte-identical output. I don't think that is cleaner, so I would rather keep the three patterns as posted. If that is fine with you, I'll push the two.
Thanks, Dominic
