i386.md (*movqi_internal): Use if_then_else or cond RTXes to calculate attribute...
authorUros Bizjak <ubizjak@gmail.com>
Thu, 26 May 2016 17:32:55 +0000 (19:32 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 26 May 2016 17:32:55 +0000 (19:32 +0200)
* config/i386/i386.md (*movqi_internal) <attr "isa">: Use
if_then_else or cond RTXes to calculate attribute value.
* config/i386/mmx.md (*vec_extractv2sf_1) <attr "prefix_rep">: Ditto.
<attr "length_immediate>: Ditto.
(*vec_extractv2sf_1) <attr "length_immediate">: Ditto.
* config/i386/sse.md (sse_loadlps) <attr "length_immediate">: Ditto.
(*vec_concatv2sf_sse4_1) <attr "isa">: Ditto.
<attr "type">: Ditto.
<attr "prefix_data16">: Ditto.
<attr "prefix_extra">: Ditto.
<attr "length_immediate">: Ditto.
<attr "prefix">: Ditto.
(vec_set<mode>_0) <attr "isa">: Ditto.
<attr "prefix_extra">: Ditto.
<attr "length_immediate">: Ditto.
<attr "prefix">: Ditto.
(*vec_interleave_highv2df) <attr "prefix_data16">: Ditto.
(*vec_interleave_lowv2df) <attr "prefix_data16">: Ditto.
(sse2_storelpd) <attr "prefix_data16">: Ditto.
(sse2_loadhpd) <attr "prefix_data16">: Ditto.
(sse2_loadlpd) <attr "prefix_data16">: Ditto.
<attr "length_immediate">: Ditto.
<attr "prefix">: Ditto.
(sse2_movsd) <attr "length_immediate">: Ditto.
<attr "prefix">: Ditto.
(vec_concatv2df)  <attr "isa">: Ditto.
<attr "prefix">: Ditto.
(*vec_extractv4si) <attr "prefix_extra">: Ditto.
(*vec_extractv2di_1) <attr "isa">: Ditto.
<attr "type">: Ditto.
<attr "length_immediate">: Ditto.
<attr "prefix_rex">: Ditto.
<attr "prefix_extra">: Ditto.
(*vec_concatv2si_sse4_1) <attr "type">: Ditto.
<attr "prefix_extra">: Ditto.
<attr "length_immediate">: Ditto.
(vec_concatv2di) <attr "isa">: Ditto.
<attr "prefix_extra">: Ditto.
<attr "length_immediate">: Ditto.
<attr "prefix">: Ditto.

From-SVN: r236787

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/config/i386/mmx.md
gcc/config/i386/sse.md

index 52335d18f217e89d4321d4571f4e9a119f2590d1..5a76af4c9e927a90ca2acd39c7367c9b5b007639 100644 (file)
@@ -1,3 +1,46 @@
+2016-05-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (*movqi_internal) <attr "isa">: Use
+       if_then_else or cond RTXes to calculate attribute value.
+       * config/i386/mmx.md (*vec_extractv2sf_1) <attr "prefix_rep">: Ditto.
+       <attr "length_immediate>: Ditto.
+       (*vec_extractv2sf_1) <attr "length_immediate">: Ditto.
+       * config/i386/sse.md (sse_loadlps) <attr "length_immediate">: Ditto.
+       (*vec_concatv2sf_sse4_1) <attr "isa">: Ditto.
+       <attr "type">: Ditto.
+       <attr "prefix_data16">: Ditto.
+       <attr "prefix_extra">: Ditto.
+       <attr "length_immediate">: Ditto.
+       <attr "prefix">: Ditto.
+       (vec_set<mode>_0) <attr "isa">: Ditto.
+       <attr "prefix_extra">: Ditto.
+       <attr "length_immediate">: Ditto.
+       <attr "prefix">: Ditto.
+       (*vec_interleave_highv2df) <attr "prefix_data16">: Ditto.
+       (*vec_interleave_lowv2df) <attr "prefix_data16">: Ditto.
+       (sse2_storelpd) <attr "prefix_data16">: Ditto.
+       (sse2_loadhpd) <attr "prefix_data16">: Ditto.
+       (sse2_loadlpd) <attr "prefix_data16">: Ditto.
+       <attr "length_immediate">: Ditto.
+       <attr "prefix">: Ditto.
+       (sse2_movsd) <attr "length_immediate">: Ditto.
+       <attr "prefix">: Ditto.
+       (vec_concatv2df)  <attr "isa">: Ditto.
+       <attr "prefix">: Ditto.
+       (*vec_extractv4si) <attr "prefix_extra">: Ditto.
+       (*vec_extractv2di_1) <attr "isa">: Ditto.
+       <attr "type">: Ditto.
+       <attr "length_immediate">: Ditto.
+       <attr "prefix_rex">: Ditto.
+       <attr "prefix_extra">: Ditto.
+       (*vec_concatv2si_sse4_1) <attr "type">: Ditto.
+       <attr "prefix_extra">: Ditto.
+       <attr "length_immediate">: Ditto.
+       (vec_concatv2di) <attr "isa">: Ditto.
+       <attr "prefix_extra">: Ditto.
+       <attr "length_immediate">: Ditto.
+       <attr "prefix">: Ditto.
+
 2016-05-26  Martin Liska  <mliska@suse.cz>
 
        * tree-ssa-loop-ivopts.c (comp_cost::infinite_cost_p): New
index d20bbe431fa5da3cd8efc743e3382c8a1b2f7ca1..6a2978ef4ffe61daef019858762dd5d314d3376d 100644 (file)
         return "mov{b}\t{%1, %0|%0, %1}";
     }
 }
-  [(set_attr "isa" "*,*,*,*,*,*,*,*,*,*,avx512dq,avx512dq")
+  [(set (attr "isa")
+     (if_then_else (eq_attr "alternative" "10,11")
+       (const_string "avx512dq")
+       (const_string "*")))
    (set (attr "type")
      (cond [(eq_attr "alternative" "7,8,9,10,11")
              (const_string "mskmov")
index 9a239c2facf717de881c8e595c117b3a71dd2480..65e8b460508d744d116193bf0b402dab345c1830 100644 (file)
    #"
   [(set_attr "isa" "*,sse3,noavx,*,*,*,*")
    (set_attr "type" "mmxcvt,sse,sseshuf1,mmxmov,ssemov,fmov,imov")
-   (set_attr "length_immediate" "*,*,1,*,*,*,*")
-   (set_attr "prefix_rep" "*,1,*,*,*,*,*")
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "2")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix_rep")
+     (if_then_else (eq_attr "alternative" "1")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig,orig")
    (set_attr "mode" "DI,V4SF,V4SF,SF,SF,SF,SF")])
 
    #"
   [(set_attr "isa" "*,sse2,noavx,*,*,*")
    (set_attr "type" "mmxcvt,sseshuf1,sseshuf1,mmxmov,ssemov,imov")
-   (set_attr "length_immediate" "*,1,1,*,*,*")
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "1,2")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig")
    (set_attr "mode" "DI,TI,V4SF,SI,SI,SI")])
 
index 0d3dab6244738fd61c1f5fbd8c967df1bb711b02..b348f2df5447ad849425a19182bcfc5784328c54 100644 (file)
    %vmovlps\t{%2, %0|%q0, %2}"
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
    (set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
-   (set_attr "length_immediate" "1,1,*,*,*")
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "0,1")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "orig,maybe_evex,orig,maybe_evex,maybe_vex")
    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
 
    %vmovss\t{%1, %0|%0, %1}
    punpckldq\t{%2, %0|%0, %2}
    movd\t{%1, %0|%0, %1}"
-  [(set_attr "isa" "noavx,noavx,avx,noavx,noavx,avx,*,*,*")
-   (set_attr "type" "sselog,sselog,sselog,sselog,sselog,sselog,ssemov,mmxcvt,mmxmov")
-   (set_attr "prefix_data16" "*,*,*,1,1,*,*,*,*")
-   (set_attr "prefix_extra" "*,*,*,1,1,1,*,*,*")
-   (set_attr "length_immediate" "*,*,*,1,1,1,*,*,*")
-   (set_attr "prefix" "orig,orig,maybe_evex,orig,orig,maybe_evex,maybe_vex,orig,orig")
+  [(set (attr "isa")
+     (cond [(eq_attr "alternative" "0,1,3,4")
+             (const_string "noavx")
+           (eq_attr "alternative" "2,5")
+             (const_string "avx")
+          ]
+          (const_string "*")))
+   (set (attr "type")
+     (cond [(eq_attr "alternative" "6")
+             (const_string "ssemov")
+           (eq_attr "alternative" "7")
+             (const_string "mmxcvt")
+           (eq_attr "alternative" "8")
+             (const_string "mmxmov")
+          ]
+          (const_string "sselog")))
+   (set (attr "prefix_data16")
+     (if_then_else (eq_attr "alternative" "3,4")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix_extra")
+     (if_then_else (eq_attr "alternative" "3,4,5")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "3,4,5")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix")
+     (cond [(eq_attr "alternative" "2,5")
+             (const_string "maybe_evex")
+           (eq_attr "alternative" "6")
+             (const_string "maybe_vex")
+          ]
+          (const_string "orig")))
    (set_attr "mode" "V4SF,V4SF,V4SF,V4SF,V4SF,V4SF,SF,DI,DI")])
 
 ;; ??? In theory we can match memory for the MMX alternative, but allowing
    #
    #
    #"
-  [(set_attr "isa" "sse4_noavx,sse4_noavx,avx,sse2,sse2,noavx,noavx,avx,sse4_noavx,sse4_noavx,avx,*,*,*")
+  [(set (attr "isa")
+     (cond [(eq_attr "alternative" "0,1,8,9")
+             (const_string "sse4_noavx")
+           (eq_attr "alternative" "2,7,10")
+             (const_string "avx")
+           (eq_attr "alternative" "3,4")
+             (const_string "sse2")
+           (eq_attr "alternative" "5,6")
+             (const_string "noavx")
+          ]
+          (const_string "*")))
    (set (attr "type")
      (cond [(eq_attr "alternative" "0,1,2,8,9,10")
              (const_string "sselog")
              (const_string "fmov")
           ]
           (const_string "ssemov")))
-   (set_attr "prefix_extra" "*,*,*,*,*,*,*,*,1,1,1,*,*,*")
-   (set_attr "length_immediate" "*,*,*,*,*,*,*,*,1,1,1,*,*,*")
-   (set_attr "prefix" "orig,orig,maybe_evex,maybe_vex,maybe_vex,orig,orig,vex,orig,orig,vex,*,*,*")
+   (set (attr "prefix_extra")
+     (if_then_else (eq_attr "alternative" "8,9,10")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "8,9,10")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix")
+     (cond [(eq_attr "alternative" "0,1,5,6,8,9")
+             (const_string "orig")
+           (eq_attr "alternative" "2")
+             (const_string "maybe_evex")
+           (eq_attr "alternative" "3,4")
+             (const_string "maybe_vex")
+           (eq_attr "alternative" "7,10")
+             (const_string "vex")
+          ]
+          (const_string "*")))
    (set_attr "mode" "SF,SF,SF,<ssescalarmode>,SI,SF,SF,SF,TI,TI,TI,*,*,*")])
 
 ;; A subset is vec_setv4sf.
    %vmovhpd\t{%1, %0|%q0, %1}"
   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
    (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
-   (set_attr "prefix_data16" "*,*,*,1,*,1")
+   (set (attr "prefix_data16")
+     (if_then_else (eq_attr "alternative" "3,5")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "orig,maybe_evex,maybe_vex,orig,maybe_evex,maybe_vex")
    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
 
    %vmovlpd\t{%2, %H0|%H0, %2}"
   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
    (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
-   (set_attr "prefix_data16" "*,*,*,1,*,1")
+   (set (attr "prefix_data16")
+     (if_then_else (eq_attr "alternative" "3,5")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "orig,maybe_evex,maybe_vex,orig,maybe_evex,maybe_vex")
    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
 
    #
    #"
   [(set_attr "type" "ssemov,ssemov,ssemov,fmov,imov")
-   (set_attr "prefix_data16" "1,*,*,*,*")
+   (set (attr "prefix_data16")
+     (if_then_else (eq_attr "alternative" "0")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "maybe_vex")
    (set_attr "mode" "V1DF,DF,DF,DF,DF")])
 
    #"
   [(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
    (set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
-   (set_attr "prefix_data16" "1,*,*,*,*,*,*")
+   (set (attr "prefix_data16")
+     (if_then_else (eq_attr "alternative" "0")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "orig,maybe_evex,orig,maybe_evex,*,*,*")
    (set_attr "mode" "V1DF,V1DF,V2DF,V2DF,DF,DF,DF")])
 
              (const_string "imov")
           ]
           (const_string "ssemov")))
-   (set_attr "prefix_data16" "*,1,*,*,*,*,1,*,*,*,*")
-   (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*,*,*")
-   (set_attr "prefix" "maybe_vex,orig,maybe_evex,orig,maybe_evex,orig,orig,maybe_evex,*,*,*")
+   (set (attr "prefix_data16")
+     (if_then_else (eq_attr "alternative" "1,6")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "5")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix")
+     (cond [(eq_attr "alternative" "0")
+             (const_string "maybe_vex")
+           (eq_attr "alternative" "1,3,5,6")
+             (const_string "orig")
+           (eq_attr "alternative" "2,4,7")
+             (const_string "maybe_evex")
+          ]
+          (const_string "*")))
    (set_attr "mode" "DF,V1DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,DF,DF,DF")])
 
 (define_split
            (not (match_test "TARGET_AVX")))
        (const_string "1")
        (const_string "*")))
-   (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*")
-   (set_attr "prefix" "orig,maybe_evex,orig,maybe_evex,maybe_vex,orig,orig,maybe_evex,maybe_vex")
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "5")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix")
+     (cond [(eq_attr "alternative" "1,3,7")
+             (const_string "maybe_evex")
+           (eq_attr "alternative" "4,8")
+             (const_string "maybe_vex")
+          ]
+          (const_string "orig")))
    (set_attr "mode" "DF,DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,V1DF")])
 
 (define_insn "vec_dupv2df<mask_name>"
    %vmovq\t{%1, %0|%0, %1}
    movlhps\t{%2, %0|%0, %2}
    movhps\t{%2, %0|%0, %2}"
-  [(set_attr "isa" "sse2_noavx,avx,avx512vl,sse3,avx512vl,sse2_noavx,avx,sse2,noavx,noavx")
+  [(set (attr "isa")
+     (cond [(eq_attr "alternative" "0,5")
+             (const_string "sse2_noavx")
+           (eq_attr "alternative" "1,6")
+             (const_string "avx")
+           (eq_attr "alternative" "2,4")
+             (const_string "avx512vl")
+           (eq_attr "alternative" "3")
+             (const_string "sse3")
+           (eq_attr "alternative" "7")
+             (const_string "sse2")
+          ]
+          (const_string "noavx")))
    (set (attr "type")
      (if_then_else
        (eq_attr "alternative" "0,1,2,3,4")
        (if_then_else (eq_attr "alternative" "5")
                      (const_string "1")
                      (const_string "*")))
-   (set_attr "prefix" "orig,vex,evex,maybe_vex,evex,orig,vex,maybe_vex,orig,orig")
+   (set (attr "prefix")
+     (cond [(eq_attr "alternative" "1,6")
+             (const_string "vex")
+           (eq_attr "alternative" "2,4")
+             (const_string "evex")
+           (eq_attr "alternative" "3,7")
+             (const_string "maybe_vex")
+          ]
+          (const_string "orig")))
    (set_attr "mode" "V2DF,V2DF,V2DF, DF, DF, V1DF,V1DF,DF,V4SF,V2SF")])
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 }
   [(set_attr "isa" "*,avx512dq,noavx,noavx,avx,avx512bw")
    (set_attr "type" "sselog1,sselog1,sseishft1,sseishft1,sseishft1,sseishft1")
-   (set_attr "prefix_extra" "1,1,*,*,*,*")
+   (set (attr "prefix_extra")
+     (if_then_else (eq_attr "alternative" "0,1")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "length_immediate" "1")
    (set_attr "prefix" "maybe_vex,evex,orig,orig,vex,evex")
    (set_attr "mode" "TI")])
    movhlps\t{%1, %0|%0, %1}
    #
    #"
-  [(set_attr "isa" "x64_sse4,x64_avx512dq,*,sse2_noavx,avx,avx512bw,noavx,*,x64")
-   (set_attr "type" "sselog1,sselog1,ssemov,sseishft1,sseishft1,sseishft1,ssemov,ssemov,imov")
-   (set_attr "length_immediate" "1,1,*,1,1,1,*,*,*")
-   (set_attr "prefix_rex" "1,1,*,*,*,*,*,*,*")
-   (set_attr "prefix_extra" "1,1,*,*,*,*,*,*,*")
+  [(set (attr "isa")
+     (cond [(eq_attr "alternative" "0")
+             (const_string "x64_sse4")
+           (eq_attr "alternative" "1")
+             (const_string "x64_avx512dq")
+           (eq_attr "alternative" "3")
+             (const_string "sse2_noavx")
+           (eq_attr "alternative" "4")
+             (const_string "avx")
+           (eq_attr "alternative" "5")
+             (const_string "avx512bw")
+           (eq_attr "alternative" "6")
+             (const_string "noavx")
+           (eq_attr "alternative" "8")
+             (const_string "x64")
+          ]
+          (const_string "*")))
+   (set (attr "type")
+     (cond [(eq_attr "alternative" "2,6,7")
+             (const_string "ssemov")
+           (eq_attr "alternative" "3,4,5")
+             (const_string "sseishft1")
+           (eq_attr "alternative" "8")
+             (const_string "imov")
+          ]
+          (const_string "sselog1")))
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "0,1,3,4,5")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix_rex")
+     (if_then_else (eq_attr "alternative" "0,1")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix_extra")
+     (if_then_else (eq_attr "alternative" "0,1")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "maybe_vex,evex,maybe_vex,orig,vex,evex,orig,*,*")
    (set_attr "mode" "TI,TI,V2SF,TI,TI,TI,V4SF,DI,DI")])
 
    punpckldq\t{%2, %0|%0, %2}
    movd\t{%1, %0|%0, %1}"
   [(set_attr "isa" "noavx,noavx,avx,noavx,noavx,avx,*,*,*")
-   (set_attr "type" "sselog,sselog,sselog,sselog,sselog,sselog,ssemov,mmxcvt,mmxmov")
-   (set_attr "prefix_extra" "1,1,1,*,*,*,*,*,*")
-   (set_attr "length_immediate" "1,1,1,*,*,*,*,*,*")
+   (set (attr "type")
+     (cond [(eq_attr "alternative" "6")
+             (const_string "ssemov")
+           (eq_attr "alternative" "7")
+             (const_string "mmxcvt")
+           (eq_attr "alternative" "8")
+             (const_string "mmxmov")
+          ]
+          (const_string "sselog")))
+   (set (attr "prefix_extra")
+     (if_then_else (eq_attr "alternative" "0,1,2")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "0,1,2")
+                  (const_string "1")
+                  (const_string "*")))
    (set_attr "prefix" "orig,orig,vex,orig,orig,vex,maybe_vex,orig,orig")
    (set_attr "mode" "TI,TI,TI,TI,TI,TI,TI,DI,DI")])
 
    movlhps\t{%2, %0|%0, %2}
    movhps\t{%2, %0|%0, %2}
    vmovhps\t{%2, %1, %0|%0, %1, %2}"
-  [(set_attr "isa" "x64_sse4_noavx,x64_sse4_noavx,x64_avx,x64,sse2,sse2,sse2_noavx,avx,noavx,noavx,avx")
+  [(set (attr "isa")
+     (cond [(eq_attr "alternative" "0,1")
+             (const_string "x64_sse4_noavx")
+           (eq_attr "alternative" "2")
+             (const_string "x64_avx")
+           (eq_attr "alternative" "3")
+             (const_string "x64")
+           (eq_attr "alternative" "4,5")
+             (const_string "sse2")
+           (eq_attr "alternative" "6")
+             (const_string "sse2_noavx")
+           (eq_attr "alternative" "7,10")
+             (const_string "avx")
+          ]
+          (const_string "noavx")))
    (set (attr "type")
      (if_then_else
        (eq_attr "alternative" "0,1,2,6,7")
        (const_string "sselog")
        (const_string "ssemov")))
-   (set_attr "prefix_rex" "1,1,1,1,*,*,*,*,*,*,*")
-   (set_attr "prefix_extra" "1,1,1,*,*,*,*,*,*,*,*")
-   (set_attr "length_immediate" "1,1,1,*,*,*,*,*,*,*,*")
-   (set_attr "prefix" "orig,orig,vex,maybe_vex,maybe_vex,orig,orig,vex,orig,orig,vex")
+   (set (attr "prefix_rex")
+     (if_then_else (eq_attr "alternative" "0,1,2,3")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix_extra")
+     (if_then_else (eq_attr "alternative" "0,1,2")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "0,1,2")
+                  (const_string "1")
+                  (const_string "*")))
+   (set (attr "prefix")
+     (cond [(eq_attr "alternative" "2,7,10")
+             (const_string "vex")
+           (eq_attr "alternative" "3,4")
+             (const_string "maybe_vex")
+          ]
+          (const_string "orig")))
    (set_attr "mode" "TI,TI,TI,TI,TI,TI,TI,TI,V4SF,V2SF,V2SF")])
 
 (define_expand "vec_unpacks_lo_<mode>"