Segher: On Thu, 2020-08-20 at 16:50 -0500, Segher Boessenkool wrote: > Hi! > > On Tue, Aug 11, 2020 at 12:23:05PM -0700, Carl Love wrote: > > +;; 128-bit int modes > > +(define_mode_iterator VEC_I128 [V1TI TI]) > > We already have VSX_TI for this (in vsx.md). Rename that to > something > without VSX, and move it to vector.md or such? Maybe name it VEC_TI > or anyTI. > > Do that renaming as a separate patch before this one? It is > logically > separate, and it is boring stuff, so putting it in a separate patch > makes the non-boring stuff stand out more. > > (It would be better if we could just get rid of V1TI, but that isn't > going to happen soon). > > > --- a/gcc/config/rs6000/vsx.md > > +++ b/gcc/config/rs6000/vsx.md > > @@ -367,7 +367,7 @@ > > UNSPEC_INSERTR > > UNSPEC_REPLACE_ELT > > UNSPEC_REPLACE_UN > > - UNSPEC_XXSWAPD_V1TI > > + UNSPEC_XXSWAPD_VEC_I128 > > Why not just UNSPEC_XXSWAPD? And, why an unspec at all?
I am trying to figure out how to specify this without using an unpsec per your last comment. I changed the definition to: ;; Swap upper/lower 64-bit values in V1TI or TI type (define_insn "xxswapd_<mode>" [(set (match_operand:VEC_I128 0 "vsx_register_operand" "=v") (vec_select:VEC_I128 (match_operand:VEC_I128 1 "vsx_register_operand" "v") (parallel [(const_int 0)])))] "TARGET_POWER10" ;; AIX does not support extended mnemonic xxswapd. Use the basic ;; mnemonic xxpermdi instead. "xxpermdi %x0,%x1,%x1,2" [(set_attr "type" "vecperm")]) All of the swap definitions that I can see are based on using vec_select which seems to be the issue here. Not seeing anyway to do this without using unspec. Any thoughts? Carl