LCOV - code coverage report
Current view: top level - gcc/config/i386 - mmx.md (source / functions) Coverage Total Hit
Test: gcc.info Lines: 93.6 % 3806 3561
Test Date: 2026-05-11 19:44:49 Functions: 87.4 % 652 570
Legend: Lines:     hit not hit

            Line data    Source code
       1              : ;; GCC machine description for MMX and 3dNOW! instructions
       2              : ;; Copyright (C) 2005-2026 Free Software Foundation, Inc.
       3              : ;;
       4              : ;; This file is part of GCC.
       5              : ;;
       6              : ;; GCC is free software; you can redistribute it and/or modify
       7              : ;; it under the terms of the GNU General Public License as published by
       8              : ;; the Free Software Foundation; either version 3, or (at your option)
       9              : ;; any later version.
      10              : ;;
      11              : ;; GCC is distributed in the hope that it will be useful,
      12              : ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
      13              : ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14              : ;; GNU General Public License for more details.
      15              : ;;
      16              : ;; You should have received a copy of the GNU General Public License
      17              : ;; along with GCC; see the file COPYING3.  If not see
      18              : ;; <http://www.gnu.org/licenses/>.
      19              : 
      20              : ;; The MMX and 3dNOW! patterns are in the same file because they use
      21              : ;; the same register file, and 3dNOW! adds a number of extensions to
      22              : ;; the base integer MMX isa.
      23              : 
      24              : ;; Note!  Except for the basic move instructions, *all* of these
      25              : ;; patterns are outside the normal optabs namespace.  This is because
      26              : ;; use of these registers requires the insertion of emms or femms
      27              : ;; instructions to return to normal fpu mode.  The compiler doesn't
      28              : ;; know how to do that itself, which means it's up to the user.  Which
      29              : ;; means that we should never use any of these patterns except at the
      30              : ;; direction of the user via a builtin.
      31              : 
      32              : (define_c_enum "unspec" [
      33              :   UNSPEC_3DNOW
      34              : 
      35              :   UNSPEC_MOVNTQ
      36              :   UNSPEC_PFRCP
      37              :   UNSPEC_PFRCPIT1
      38              :   UNSPEC_PFRCPIT2
      39              :   UNSPEC_PFRSQRT
      40              :   UNSPEC_PFRSQIT1
      41              : ])
      42              : 
      43              : (define_c_enum "unspecv" [
      44              :   UNSPECV_EMMS
      45              :   UNSPECV_FEMMS
      46              : ])
      47              : 
      48              : ;; 8 byte integral modes handled by MMX (and by extension, SSE)
      49              : (define_mode_iterator MMXMODEI [V8QI V4HI V2SI])
      50          284 : (define_mode_iterator MMXMODEI8 [V8QI V4HI V2SI (V1DI "TARGET_SSE2")])
      51           56 : 
      52              : ;; All 8-byte vector modes handled by MMX
      53              : (define_mode_iterator MMXMODE [V8QI V4HI V2SI V1DI V2SF V4HF V4BF])
      54        14680 : (define_mode_iterator MMXMODE124 [V8QI V4HI V2SI V2SF])
      55        14680 : 
      56        14680 : ;; Mix-n-match
      57              : (define_mode_iterator MMXMODE12 [V8QI V4HI])
      58        14680 : (define_mode_iterator MMXMODE14 [V8QI V2SI])
      59              : (define_mode_iterator MMXMODE24 [V4HI V2SI])
      60              : (define_mode_iterator MMXMODE248 [V4HI V2SI V1DI])
      61              : 
      62              : ;; All 4-byte integer/float16 vector modes
      63              : (define_mode_iterator V_32 [V4QI V2HI V1SI V2HF V2BF])
      64              : 
      65              : (define_mode_iterator V2FI_32 [V2HF V2BF V2HI])
      66              : (define_mode_iterator V4FI_64 [V4HF V4BF V4HI])
      67              : (define_mode_iterator V4F_64 [V4HF V4BF])
      68              : (define_mode_iterator V2F_32 [V2HF V2BF])
      69              : ;; 4-byte integer vector modes
      70              : (define_mode_iterator VI_32 [V4QI V2HI])
      71              : 
      72              : ;; 8-byte and 4-byte HImode vector modes
      73          110 : (define_mode_iterator VI2_32_64 [(V4HI "TARGET_MMX_WITH_SSE") V2HI])
      74            7 : 
      75           82 : ;; 8-byte, 4-byte and 2-byte QImode vector modes
      76            5 : (define_mode_iterator VI1_16_32_64 [(V8QI "TARGET_MMX_WITH_SSE") V4QI V2QI])
      77           23 : 
      78           12 : ;; 4-byte and 2-byte integer vector modes
      79           22 : (define_mode_iterator VI_16_32 [V4QI V2QI V2HI])
      80           22 : 
      81           45 : ;; 4-byte and 2-byte QImode vector modes
      82            6 : (define_mode_iterator VI1_16_32 [V4QI V2QI])
      83            6 : 
      84           17 : ;; All 2-byte, 4-byte and 8-byte vector modes.
      85              : (define_mode_iterator V_16_32_64
      86              :    [V2QI V4QI V2HI V1SI V2HF V2BF
      87         1473 :     (V8QI "TARGET_64BIT") (V4HI "TARGET_64BIT")
      88           15 :     (V4HF "TARGET_64BIT") (V4BF "TARGET_64BIT")
      89        51503 :     (V2SI "TARGET_64BIT") (V2SF "TARGET_64BIT")
      90          161 :     (V1DI "TARGET_64BIT")])
      91     31729200 : 
      92     32431129 : ;; V2S* modes
      93     50305393 : (define_mode_iterator V2FI [V2SF V2SI])
      94     77832237 : 
      95     59198109 : (define_mode_iterator V24FI [V2SF V2SI V4HF V4HI])
      96     37312721 : 
      97     13893271 : (define_mode_iterator V248FI [V2SF V2SI V4HF V4BF V4HI V8QI])
      98              : 
      99              : (define_mode_iterator V24FI_32 [V2HF V2BF V2HI V4QI])
     100              : 
     101              : ;; Mapping from integer vector mode to mnemonic suffix
     102              : (define_mode_attr mmxvecsize
     103              :   [(V8QI "b") (V4QI "b") (V2QI "b")
     104              :    (V4HI "w") (V2HI "w") (V2SI "d") (V1DI "q")])
     105              : 
     106              : ;; Mapping to same size integral mode.
     107              : (define_mode_attr mmxinsnmode
     108              :   [(V8QI "DI") (V4QI "SI") (V2QI "HI")
     109              :    (V4HI "DI") (V2HI "SI")
     110              :    (V2SI "DI")
     111              :    (V1DI "DI") (V1SI "SI")
     112              :    (V4HF "DI") (V2HF "SI")
     113              :    (V4BF "DI") (V2BF "SI")
     114              :    (V2SF "DI")])
     115              : 
     116              : (define_mode_attr mmxdoublemode
     117              :   [(V8QI "V8HI") (V4HI "V4SI")])
     118              : 
     119              : (define_mode_attr mmxhalfmode
     120              :   [(V4HI "V4QI") (V2HI "V2QI")])
     121              : 
     122              : (define_mode_attr mmxbytemode
     123              :   [(V4HI "V8QI") (V2HI "V4QI")])
     124              : 
     125              : (define_mode_attr mmxhalfmodelower
     126              :   [(V4HI "v4qi") (V2HI "v2qi")])
     127              : 
     128              : ;; Mapping of vector float modes to an integer mode of the same size
     129              : (define_mode_attr mmxintvecmode
     130              :   [(V2SF "V2SI") (V2SI "V2SI") (V4HI "V4HI") (V8QI "V8QI")
     131              :    (V4HF "V4HI") (V2HF "V2HI") (V4BF "V4HI") (V2BF "V2HI")])
     132              : 
     133              : (define_mode_attr mmxintvecmodelower
     134              :   [(V2SF "v2si") (V2SI "v2si") (V4HI "v4hi") (V8QI "v8qi")
     135              :    (V4HF "v4hi") (V2HF "v2hi")])
     136              : 
     137              : ;; Mapping of vector modes to a vector mode of double size
     138              : (define_mode_attr mmxdoublevecmode
     139              :   [(V2SF "V4SF") (V2SI "V4SI") (V4HF "V8HF") (V4HI "V8HI")
     140              :    (V2HI "V4HI") (V2HF "V4HF") (V2BF "V4BF")])
     141              : 
     142              : ;; Mapping of vector modes back to the scalar modes
     143              : (define_mode_attr mmxscalarmode
     144              :   [(V2SI "SI") (V2SF "SF")
     145              :    (V4HF "HF") (V4BF "BF")
     146              :    (V2HF "HF") (V2BF "BF")
     147              :    (V4HI "HI") (V2HI "HI")
     148              :    (V8QI "QI")])
     149              : 
     150              : (define_mode_attr mmxscalarmodelower
     151              :   [(V2SI "si") (V2SF "sf")
     152              :    (V4HF "hf") (V4BF "bf")
     153              :    (V2HF "hf") (V2BF "bf")
     154              :    (V4HI "hi") (V2HI "hi")
     155              :    (V8QI "qi")])
     156              : 
     157              : (define_mode_attr mmxscalarsize
     158              :   [(V1DI "64")
     159              :    (V2SI "32") (V2SF "32")
     160              :    (V4HF "16") (V4BF "16")
     161              :    (V2HF "16") (V2BF "16")
     162              :    (V4HI "16") (V2HI "16")
     163              :    (V8QI "8")])
     164              : 
     165              : (define_mode_attr Yv_Yw
     166              :   [(V8QI "Yw") (V4HI "Yw") (V2SI "Yv") (V1DI "Yv") (V2SF "Yv")])
     167              : 
     168              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     169              : ;;
     170              : ;; Move patterns
     171              : ;;
     172              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     173              : 
     174              : ;; All of these patterns are enabled for MMX as well as 3dNOW.
     175              : ;; This is essential for maintaining stable calling conventions.
     176              : 
     177              : (define_expand "mov<mode>"
     178              :   [(set (match_operand:MMXMODE 0 "nonimmediate_operand")
     179              :         (match_operand:MMXMODE 1 "nonimm_or_0_operand"))]
     180              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
     181       494977 : {
     182       494977 :   ix86_expand_vector_move (<MODE>mode, operands);
     183       494977 :   DONE;
     184              : })
     185              : 
     186              : (define_insn "*mov<mode>_internal"
     187              :   [(set (match_operand:MMXMODE 0 "nonimmediate_operand"
     188              :     "=r ,o ,r,r ,m ,?!y,!y,?!y,m  ,r  ,?!y,v,v,v,m,r,v,!y,*x")
     189              :         (match_operand:MMXMODE 1 "nonimm_or_0_operand"
     190              :     "rCo,rC,C,rm,rC,C  ,!y,m  ,?!y,?!y,r  ,C,v,m,v,v,r,*x,!y"))]
     191     72804615 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
     192     72470491 :    && !(MEM_P (operands[0]) && MEM_P (operands[1]))
     193     72182189 :    && ix86_hardreg_mov_ok (operands[0], operands[1])"
     194       226637 : {
     195     28224175 :   switch (get_attr_type (insn))
     196       819881 :     {
     197     27997922 :     case TYPE_MULTI:
     198              :       return "#";
     199          384 : 
     200        56934 :     case TYPE_IMOV:
     201        57318 :       if (get_attr_mode (insn) == MODE_SI)
     202              :         return "mov{l}\t{%1, %k0|%k0, %1}";
     203              :       else
     204        56856 :         return "mov{q}\t{%1, %0|%0, %1}";
     205              : 
     206            0 :     case TYPE_MMX:
     207            0 :       return "pxor\t%0, %0";
     208              : 
     209          549 :     case TYPE_MMXMOV:
     210              :       /* Handle broken assemblers that require movd instead of movq.  */
     211          549 :       if (!HAVE_AS_IX86_INTERUNIT_MOVQ
     212              :           && (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])))
     213              :         return "movd\t{%1, %0|%0, %1}";
     214          549 :       return "movq\t{%1, %0|%0, %1}";
     215              : 
     216          147 :     case TYPE_SSECVT:
     217          147 :       if (SSE_REG_P (operands[0]))
     218              :         return "movq2dq\t{%1, %0|%0, %1}";
     219              :       else
     220           41 :         return "movdq2q\t{%1, %0|%0, %1}";
     221              : 
     222         1857 :     case TYPE_SSELOG1:
     223         1857 :       return standard_sse_constant_opcode (insn, operands);
     224              : 
     225       167150 :     case TYPE_SSEMOV:
     226       167150 :       return ix86_output_ssemov (insn, operands);
     227              : 
     228            0 :     default:
     229            0 :       gcc_unreachable ();
     230              :     }
     231              : }
     232              :   [(set (attr "isa")
     233              :      (cond [(eq_attr "alternative" "0,1")
     234              :               (const_string "nox64")
     235       229673 :             (eq_attr "alternative" "2,3,4,9,10")
     236              :               (const_string "x64")
     237              :             (eq_attr "alternative" "15,16")
     238              :               (const_string "x64_sse2")
     239              :             (eq_attr "alternative" "17,18")
     240              :               (const_string "sse2")
     241              :            ]
     242              :            (const_string "*")))
     243              :    (set (attr "type")
     244              :      (cond [(eq_attr "alternative" "0,1")
     245              :               (const_string "multi")
     246              :             (eq_attr "alternative" "2,3,4")
     247              :               (const_string "imov")
     248              :             (eq_attr "alternative" "5")
     249              :               (const_string "mmx")
     250              :             (eq_attr "alternative" "6,7,8,9,10")
     251              :               (const_string "mmxmov")
     252              :             (eq_attr "alternative" "11")
     253              :               (const_string "sselog1")
     254              :             (eq_attr "alternative" "17,18")
     255              :               (const_string "ssecvt")
     256              :            ]
     257              :            (const_string "ssemov")))
     258              :    (set (attr "prefix_rex")
     259              :      (if_then_else (eq_attr "alternative" "9,10,15,16")
     260              :        (const_string "1")
     261              :        (const_string "*")))
     262              :    (set (attr "prefix")
     263              :      (if_then_else (eq_attr "type" "sselog1,ssemov")
     264              :        (const_string "maybe_vex")
     265              :        (const_string "orig")))
     266              :    (set (attr "prefix_data16")
     267              :      (if_then_else
     268              :        (and (eq_attr "type" "ssemov") (eq_attr "mode" "DI"))
     269              :        (const_string "1")
     270              :        (const_string "*")))
     271              :    (set (attr "mode")
     272              :      (cond [(eq_attr "alternative" "2")
     273              :               (const_string "SI")
     274              :             (eq_attr "alternative" "11,12")
     275              :               (cond [(match_test "<MODE>mode == V2SFmode
     276              :                                   || <MODE>mode == V4HFmode
     277              :                                   || <MODE>mode == V4BFmode")
     278              :                        (const_string "V4SF")
     279              :                      (ior (not (match_test "TARGET_SSE2"))
     280              :                           (match_test "optimize_function_for_size_p (cfun)"))
     281        46046 :                        (const_string "V4SF")
     282              :                     ]
     283              :                     (const_string "TI"))
     284              : 
     285              :             (and (eq_attr "alternative" "13")
     286      1810024 :                  (ior (ior (and (match_test "<MODE>mode == V2SFmode")
     287              :                                 (not (match_test "TARGET_MMX_WITH_SSE")))
     288              :                            (not (match_test "TARGET_SSE2")))
     289              :                       (match_test "<MODE>mode == V4HFmode
     290              :                                   || <MODE>mode == V4BFmode")))
     291              :               (const_string "V2SF")
     292              : 
     293              :             (and (eq_attr "alternative" "14")
     294      5750913 :                  (ior (ior (match_test "<MODE>mode == V2SFmode")
     295              :                            (not (match_test "TARGET_SSE2")))
     296              :                       (match_test "<MODE>mode == V4HFmode
     297              :                                   || <MODE>mode == V4BFmode")))
     298              :               (const_string "V2SF")
     299      6128891 :            ]
     300      6128891 :            (const_string "DI")))
     301      6128891 :    (set (attr "preferred_for_speed")
     302              :      (cond [(eq_attr "alternative" "9,15")
     303        18236 :               (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
     304              :             (eq_attr "alternative" "10,16")
     305      5991113 :               (symbol_ref "TARGET_INTER_UNIT_MOVES_TO_VEC")
     306              :            ]
     307       415321 :            (symbol_ref "true")))])
     308              : 
     309              : (define_split
     310              :   [(set (match_operand:MMXMODE 0 "nonimmediate_gr_operand")
     311              :         (match_operand:MMXMODE 1 "nonimmediate_gr_operand"))]
     312       184264 :   "!TARGET_64BIT && reload_completed"
     313        66111 :   [(const_int 0)]
     314       773859 :   "ix86_split_long_move (operands); DONE;")
     315        20705 : 
     316       707748 : (define_split
     317              :   [(set (match_operand:MMXMODE 0 "nonimmediate_gr_operand")
     318              :         (match_operand:MMXMODE 1 "const0_operand"))]
     319        33945 :   "!TARGET_64BIT && reload_completed"
     320        17272 :   [(const_int 0)]
     321        64327 :   "ix86_split_long_move (operands); DONE;")
     322        41451 : 
     323        47055 : (define_expand "movmisalign<mode>"
     324              :   [(set (match_operand:MMXMODE 0 "nonimmediate_operand")
     325         5401 :         (match_operand:MMXMODE 1 "nonimmediate_operand"))]
     326        17171 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
     327       129574 : {
     328       136156 :   ix86_expand_vector_move (<MODE>mode, operands);
     329       124173 :   DONE;
     330        17171 : })
     331              : 
     332       146895 : (define_expand "mov<mode>"
     333              :   [(set (match_operand:V_32 0 "nonimmediate_operand")
     334       146895 :         (match_operand:V_32 1 "nonimm_or_0_operand"))]
     335       146895 :   ""
     336       162510 : {
     337        43738 :   ix86_expand_vector_move (<MODE>mode, operands);
     338        43738 :   DONE;
     339              : })
     340              : 
     341              : (define_insn "*mov<mode>_internal"
     342        15444 :   [(set (match_operand:V_32 0 "nonimmediate_operand"
     343            0 :     "=r ,m ,v,v,v,m,r,v")
     344        15444 :         (match_operand:V_32 1 "nonimm_or_0_operand"
     345        15444 :     "rmC,rC,C,v,m,v,v,r"))]
     346     10046153 :   "!(MEM_P (operands[0]) && MEM_P (operands[1]))
     347     40513516 :    && ix86_hardreg_mov_ok (operands[0], operands[1])"
     348        16620 : {
     349     18789026 :   switch (get_attr_type (insn))
     350            3 :     {
     351     18772406 :     case TYPE_IMOV:
     352            0 :       return "mov{l}\t{%1, %0|%0, %1}";
     353              : 
     354          184 :     case TYPE_SSELOG1:
     355          184 :       return standard_sse_constant_opcode (insn, operands);
     356            0 : 
     357         7391 :     case TYPE_SSEMOV:
     358         7391 :       return ix86_output_ssemov (insn, operands);
     359              : 
     360            0 :     default:
     361            0 :       gcc_unreachable ();
     362              :     }
     363              : }
     364              :   [(set (attr "isa")
     365              :      (cond [(eq_attr "alternative" "6,7")
     366              :               (const_string "sse2")
     367         4889 :            ]
     368              :            (const_string "*")))
     369              :    (set (attr "type")
     370              :      (cond [(eq_attr "alternative" "2")
     371              :               (const_string "sselog1")
     372              :             (eq_attr "alternative" "3,4,5,6,7")
     373              :               (const_string "ssemov")
     374              :            ]
     375              :            (const_string "imov")))
     376              :    (set (attr "prefix")
     377              :      (if_then_else (eq_attr "type" "sselog1,ssemov")
     378              :        (const_string "maybe_vex")
     379              :        (const_string "orig")))
     380              :    (set (attr "prefix_data16")
     381              :      (if_then_else (and (eq_attr "type" "ssemov") (eq_attr "mode" "SI"))
     382              :        (const_string "1")
     383              :        (const_string "*")))
     384              :    (set (attr "mode")
     385              :      (cond [(eq_attr "alternative" "2,3")
     386              :               (cond [(match_test "<MODE>mode == V2HFmode
     387       131211 :                                  || <MODE>mode == V2BFmode")
     388              :                        (const_string "V4SF")
     389              :                      (match_test "TARGET_AVX")
     390              :                        (const_string "TI")
     391        26892 :                      (ior (not (match_test "TARGET_SSE2"))
     392        22063 :                           (match_test "optimize_function_for_size_p (cfun)"))
     393              :                        (const_string "V4SF")
     394              :                     ]
     395              :                     (const_string "TI"))
     396              : 
     397              :             (and (eq_attr "alternative" "4,5")
     398              :                  (ior (match_test "<MODE>mode == V2HFmode
     399              :                                  || <MODE>mode == V2BFmode")
     400              :                       (not (match_test "TARGET_SSE2"))))
     401              :               (const_string "SF")
     402              :            ]
     403              :            (const_string "SI")))
     404              :    (set (attr "preferred_for_speed")
     405              :      (cond [(eq_attr "alternative" "6")
     406              :               (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
     407              :             (eq_attr "alternative" "7")
     408              :               (symbol_ref "TARGET_INTER_UNIT_MOVES_TO_VEC")
     409              :            ]
     410              :            (symbol_ref "true")))])
     411              : 
     412              : ;; For TARGET_64BIT we always round up to 8 bytes.
     413              : (define_insn "*push<mode>2_rex64"
     414              :   [(set (match_operand:V_32 0 "push_operand" "=X,X")
     415              :         (match_operand:V_32 1 "nonmemory_no_elim_operand" "rC,*v"))]
     416            3 :   "TARGET_64BIT"
     417              :   "@
     418     18772403 :    push{q}\t%q1
     419     18772403 :    #"
     420              :   [(set_attr "type" "push,multi")
     421              :    (set_attr "mode" "DI")])
     422              : 
     423     59452621 : (define_split
     424     59452621 :   [(set (match_operand:V_32 0 "push_operand")
     425     40773425 :         (match_operand:V_32 1 "sse_reg_operand"))]
     426     91715555 :   "TARGET_64BIT && TARGET_SSE && reload_completed"
     427              :   [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
     428              :    (set (match_dup 0) (match_dup 1))]
     429            0 : {
     430            0 :   operands[2] = GEN_INT (-PUSH_ROUNDING (GET_MODE_SIZE (<V_32:MODE>mode)));
     431              :   /* Preserve memory attributes. */
     432            0 :   operands[0] = replace_equiv_address (operands[0], stack_pointer_rtx);
     433              : })
     434              : 
     435              : (define_expand "movmisalign<mode>"
     436            0 :   [(set (match_operand:V_32 0 "nonimmediate_operand")
     437              :         (match_operand:V_32 1 "nonimmediate_operand"))]
     438              :   ""
     439         8522 : {
     440         8522 :   ix86_expand_vector_move (<MODE>mode, operands);
     441         8522 :   DONE;
     442              : })
     443              : 
     444              : (define_expand "movv2qi"
     445              :   [(set (match_operand:V2QI 0 "nonimmediate_operand")
     446        53158 :         (match_operand:V2QI 1 "nonimm_or_0_operand"))]
     447          110 :   ""
     448        97794 : {
     449        53268 :   ix86_expand_vector_move (V2QImode, operands);
     450        53158 :   DONE;
     451          110 : })
     452              : 
     453              : (define_insn "*movv2qi_internal"
     454              :   [(set (match_operand:V2QI 0 "nonimmediate_operand"
     455           15 :     "=r,r,r,m ,v,v,v,jm,m,r,v")
     456              :         (match_operand:V2QI 1 "nonimm_or_0_operand"
     457           15 :     "r ,C,m,rC,C,v,m,x,v,v,r"))]
     458      8412344 :   "!(MEM_P (operands[0]) && MEM_P (operands[1]))
     459      8381740 :    && ix86_hardreg_mov_ok (operands[0], operands[1])"
     460        22063 : {
     461      3863390 :   switch (get_attr_type (insn))
     462        47336 :     {
     463      3858860 :     case TYPE_IMOV:
     464        17533 :       if (get_attr_mode (insn) == MODE_SI)
     465              :         return "mov{l}\t{%k1, %k0|%k0, %k1}";
     466            0 :       else
     467        17309 :         return "mov{w}\t{%1, %0|%0, %1}";
     468            0 : 
     469              :     case TYPE_IMOVX:
     470              :       /* movzwl is faster than movw on p2 due to partial word stalls,
     471              :          though not as fast as an aligned movl.  */
     472              :       return "movz{wl|x}\t{%1, %k0|%k0, %1}";
     473              : 
     474          393 :     case TYPE_SSELOG1:
     475          393 :       if (satisfies_constraint_C (operands[1]))
     476           46 :         return standard_sse_constant_opcode (insn, operands);
     477              : 
     478          347 :       if (SSE_REG_P (operands[0]))
     479              :         return "%vpinsrw\t{$0, %1, %d0|%d0, %1, 0}";
     480              :       else
     481           25 :         return "%vpextrw\t{$0, %1, %0|%0, %1, 0}";
     482              : 
     483          408 :     case TYPE_SSEMOV:
     484          408 :       return ix86_output_ssemov (insn, operands);
     485              : 
     486            0 :     default:
     487            0 :       gcc_unreachable ();
     488              :     }
     489              : }
     490              :   [(set (attr "isa")
     491              :         (cond [(eq_attr "alternative" "6,9,10")
     492              :                   (const_string "sse2")
     493            0 :                (eq_attr "alternative" "7")
     494              :                   (const_string "sse4_noavx")
     495              :                (eq_attr "alternative" "8")
     496              :                   (const_string "avx")
     497              :                ]
     498              :                (const_string "*")))
     499              :    (set (attr "addr")
     500              :         (if_then_else (eq_attr "alternative" "7")
     501              :                       (const_string "gpr16")
     502              :                       (const_string "*")))
     503              :    (set (attr "type")
     504              :      (cond [(eq_attr "alternative" "6,7,8")
     505              :               (if_then_else (match_test "TARGET_AVX512FP16")
     506              :                 (const_string "ssemov")
     507              :                 (const_string "sselog1"))
     508              :             (eq_attr "alternative" "4")
     509              :               (const_string "sselog1")
     510              :             (eq_attr "alternative" "5,9,10")
     511              :               (const_string "ssemov")
     512              :             (match_test "optimize_function_for_size_p (cfun)")
     513              :               (const_string "imov")
     514              :             (and (eq_attr "alternative" "0")
     515              :                  (ior (not (match_test "TARGET_PARTIAL_REG_STALL"))
     516            0 :                       (not (match_test "TARGET_HIMODE_MATH"))))
     517              :               (const_string "imov")
     518              :             (and (eq_attr "alternative" "1,2")
     519              :                  (match_operand:V2QI 1 "aligned_operand"))
     520     25100103 :               (const_string "imov")
     521    105800113 :             (and (match_test "TARGET_MOVX")
     522              :                  (eq_attr "alternative" "0,2"))
     523              :               (const_string "imovx")
     524     19467439 :            ]
     525     26395529 :            (const_string "imov")))
     526     26395529 :    (set (attr "prefix")
     527     26452529 :         (cond [(eq_attr "alternative" "4,5,6,7,8,9,10")
     528              :                  (const_string "maybe_evex")
     529            0 :               ]
     530    131472046 :               (const_string "orig")))
     531    119654865 :    (set (attr "mode")
     532     93342396 :      (cond [(eq_attr "alternative" "6,7,8")
     533        77663 :               (if_then_else (match_test "TARGET_AVX512FP16")
     534        60255 :                 (const_string "HI")
     535      8370654 :                 (const_string "TI"))
     536     92758577 :             (eq_attr "alternative" "9,10")
     537        17408 :               (if_then_else (match_test "TARGET_AVX512FP16")
     538     38069395 :                 (const_string "HI")
     539     38069395 :                 (const_string "SI"))
     540     92742238 :             (eq_attr "alternative" "4")
     541     38069395 :               (cond [(match_test "TARGET_AVX")
     542        37850 :                        (const_string "TI")
     543     38069395 :                      (ior (not (match_test "TARGET_SSE2"))
     544    126616272 :                           (match_test "optimize_function_for_size_p (cfun)"))
     545              :                        (const_string "V4SF")
     546      5077947 :                     ]
     547      5077947 :                     (const_string "TI"))
     548      5077947 :             (eq_attr "alternative" "5")
     549              :               (cond [(match_test "TARGET_AVX512FP16")
     550              :                        (const_string "HF")
     551              :                      (match_test "TARGET_AVX")
     552              :                        (const_string "TI")
     553           76 :                      (ior (not (match_test "TARGET_SSE2"))
     554           76 :                           (match_test "optimize_function_for_size_p (cfun)"))
     555           76 :                        (const_string "V4SF")
     556              :                     ]
     557     26398599 :                     (const_string "TI"))
     558     26398599 :             (eq_attr "type" "imovx")
     559     26398599 :               (const_string "SI")
     560              :             (and (eq_attr "alternative" "1,2")
     561              :                  (match_operand:V2QI 1 "aligned_operand"))
     562              :               (const_string "SI")
     563     25822547 :             (and (eq_attr "alternative" "0")
     564        32811 :                  (ior (not (match_test "TARGET_PARTIAL_REG_STALL"))
     565        32811 :                       (not (match_test "TARGET_HIMODE_MATH"))))
     566        32811 :               (const_string "SI")
     567     25855358 :             ]
     568              :             (const_string "HI")))
     569              :    (set (attr "preferred_for_speed")
     570              :      (cond [(eq_attr "alternative" "9")
     571     24837969 :               (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
     572              :             (eq_attr "alternative" "10")
     573              :               (symbol_ref "TARGET_INTER_UNIT_MOVES_TO_VEC")
     574              :            ]
     575              :            (symbol_ref "true")))])
     576         9742 : 
     577         9742 : (define_split
     578         9742 :   [(set (match_operand:V_16_32_64 0 "general_reg_operand")
     579              :         (match_operand:V_16_32_64 1 "memory_operand"))]
     580     26617600 :   "reload_completed
     581     26625139 :    && SYMBOL_REF_P (XEXP (operands[1], 0))
     582     26608864 :    && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0))"
     583          110 :   [(set (match_dup 0) (match_dup 1))]
     584        61260 : {
     585        61260 :   rtx op1 = avoid_constant_pool_reference (operands[1]);
     586     26406156 : 
     587        75736 :   if (!CONST_VECTOR_P (op1))
     588        22865 :     FAIL;
     589        68542 : 
     590     24791457 :   HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (op1, <MODE>mode);
     591        15208 : 
     592        15511 :   operands[0] = lowpart_subreg (<mmxinsnmode>mode, operands[0], <MODE>mode);
     593        15511 :   operands[1] = GEN_INT (val);
     594     20994800 : })
     595              : 
     596              : ;; 16-bit, 32-bit and 64-bit constant vector stores.  After reload,
     597          303 : ;; convert them to immediate integer stores.
     598              : (define_insn_and_split "*mov<mode>_imm"
     599              :   [(set (match_operand:V_16_32_64 0 "memory_operand" "=m")
     600          303 :         (match_operand:V_16_32_64 1 "x86_64_const_vector_operand" "i"))]
     601        42786 :   "!TARGET_LCP_STALL || <MODE>mode != V2QImode"
     602              :   "#"
     603      5409453 :   "&& reload_completed"
     604      5390334 :   [(set (match_dup 0) (match_dup 1))]
     605      1549007 : {
     606      1569265 :   rtx op1 = operands[1];
     607       109542 :   HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (op1, <MODE>mode);
     608      4407513 : 
     609      4402466 :   operands[0] = adjust_address (operands[0], <mmxinsnmode>mode, 0);
     610      3491438 :   operands[1] = GEN_INT (val);
     611      4400916 : })
     612      9306396 : 
     613      9306396 : ;; We always round up to UNITS_PER_WORD bytes.
     614     10505618 : (define_insn "*pushv2qi2"
     615              :   [(set (match_operand:V2QI 0 "push_operand" "=X,X")
     616       772066 :         (match_operand:V2QI 1 "nonmemory_no_elim_operand" "rC,v"))]
     617        20953 :   ""
     618       419429 :   "* return TARGET_64BIT ? \"push{q}\t%q1\" : \"push{l}\t%k1\";
     619       419429 :    #"
     620       419429 :   [(set_attr "isa" "*,sse4")
     621              :    (set_attr "type" "push,multi")
     622        67093 :    (set (attr "mode")
     623        46493 :      (cond [(eq_attr "alternative" "0")
     624      1115543 :               (if_then_else (match_test "TARGET_64BIT")
     625      1116426 :                 (const_string "DI")
     626      1115123 :                 (const_string "SI"))
     627        46493 :             (eq_attr "alternative" "1")
     628        45610 :               (if_then_else (match_test "TARGET_AVX512FP16")
     629        45610 :                 (const_string "HI")
     630        97169 :                 (const_string "TI"))
     631        97169 :            ]
     632        97169 :            (const_string "HI")))])
     633        52115 : 
     634              : (define_split
     635          237 :   [(set (match_operand:V2QI 0 "push_operand")
     636          237 :         (match_operand:V2QI 1 "sse_reg_operand"))]
     637            0 :   "TARGET_SSE4_1 && reload_completed"
     638              :   [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
     639              :    (set (match_dup 0) (match_dup 1))]
     640            0 : {
     641            0 :   operands[2] = GEN_INT (-PUSH_ROUNDING (GET_MODE_SIZE (V2QImode)));
     642            0 :   /* Preserve memory attributes. */
     643            0 :   operands[0] = replace_equiv_address (operands[0], stack_pointer_rtx);
     644            0 : })
     645              : 
     646              : (define_expand "movmisalignv2qi"
     647            0 :   [(set (match_operand:V2QI 0 "nonimmediate_operand")
     648              :         (match_operand:V2QI 1 "nonimmediate_operand"))]
     649              :   ""
     650         5774 : {
     651         5774 :   ix86_expand_vector_move (V2QImode, operands);
     652         5774 :   DONE;
     653        77399 : })
     654        77399 : 
     655        77399 : (define_insn "sse_movntq"
     656              :   [(set (match_operand:DI 0 "memory_operand" "=m,m")
     657         3317 :         (unspec:DI [(match_operand:DI 1 "register_operand" "y,r")]
     658            0 :                    UNSPEC_MOVNTQ))]
     659        80473 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
     660         3317 :    && (TARGET_SSE || TARGET_3DNOW_A)"
     661         3317 :   "@
     662            0 :    movntq\t{%1, %0|%0, %1}
     663        77094 :    movnti\t{%1, %0|%0, %1}"
     664         1024 :   [(set_attr "isa" "*,x64")
     665         1024 :    (set_attr "mmx_isa" "native,*")
     666           26 :    (set_attr "type" "mmxmov,ssemov")
     667          291 :    (set_attr "c86_attr" "movnt")
     668          317 :    (set_attr "mode" "DI")])
     669            0 : 
     670           26 : (define_expand "movq_<mode>_to_sse"
     671              :   [(set (match_operand:<mmxdoublevecmode> 0 "register_operand")
     672        95090 :         (vec_concat:<mmxdoublevecmode>
     673        95090 :           (match_operand:V24FI 1 "nonimmediate_operand")
     674        95090 :           (match_dup 2)))]
     675              :   "TARGET_SSE2"
     676        15673 : {
     677        15673 :   if (<MODE>mode != V2SImode
     678        16293 :       && !flag_trapping_math)
     679              :     {
     680        10086 :       rtx op1 = force_reg (<MODE>mode, operands[1]);
     681        10086 :       emit_move_insn (operands[0], lowpart_subreg (<mmxdoublevecmode>mode,
     682            0 :                                                    op1, <MODE>mode));
     683        10086 :       DONE;
     684              :     }
     685              : 
     686         5587 :   operands[2] = CONST0_RTX (<MODE>mode);
     687              : })
     688              : 
     689              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     690              : ;;
     691      1044617 : ;; Parallel single-precision floating point arithmetic
     692      1039030 : ;;
     693      1039030 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     694      1039030 : 
     695         5587 : (define_expand "<code>v2sf2"
     696              :   [(set (match_operand:V2SF 0 "register_operand")
     697              :         (absneg:V2SF
     698       993022 :           (match_operand:V2SF 1 "register_operand")))]
     699              :   "TARGET_MMX_WITH_SSE"
     700          432 :   "ix86_expand_fp_absneg_operator (<CODE>, V2SFmode, operands); DONE;")
     701              : 
     702       993418 : (define_insn_and_split "*mmx_<code>v2sf2"
     703          396 :   [(set (match_operand:V2SF 0 "register_operand" "=x,x,x")
     704          367 :         (absneg:V2SF
     705              :           (match_operand:V2SF 1 "register_operand" "0,x,x")))
     706       993022 :    (use (match_operand:V2SF 2 "nonimmediate_operand" "x,0,x"))]
     707          405 :   "TARGET_MMX_WITH_SSE"
     708           29 :   "#"
     709           72 :   "&& reload_completed"
     710              :   [(set (match_dup 0)
     711           42 :         (<absneg_op>:V2SF (match_dup 1) (match_dup 2)))]
     712         2007 : {
     713           62 :   if (!TARGET_AVX && operands_match_p (operands[0], operands[2]))
     714         1972 :     std::swap (operands[1], operands[2]);
     715         7009 : }
     716         7009 :   [(set_attr "isa" "noavx,noavx,avx")])
     717         5050 : 
     718         5064 : (define_insn_and_split "*mmx_nabsv2sf2"
     719         5028 :   [(set (match_operand:V2SF 0 "register_operand" "=x,x,x")
     720              :         (neg:V2SF
     721              :           (abs:V2SF
     722           36 :             (match_operand:V2SF 1 "register_operand" "0,x,x"))))
     723              :    (use (match_operand:V2SF 2 "nonimmediate_operand" "x,0,x"))]
     724            0 :   "TARGET_MMX_WITH_SSE"
     725              :   "#"
     726            0 :   "&& reload_completed"
     727          152 :   [(set (match_dup 0)
     728         2605 :         (ior:V2SF (match_dup 1) (match_dup 2)))]
     729         2757 : {
     730         2757 :   if (!TARGET_AVX && operands_match_p (operands[0], operands[2]))
     731         2757 :     std::swap (operands[1], operands[2]);
     732         2605 : }
     733         2605 :   [(set_attr "isa" "noavx,noavx,avx")])
     734         2605 : 
     735         2605 : (define_expand "<insn>v2sf3"
     736         2605 :   [(set (match_operand:V2SF 0 "register_operand")
     737         2605 :         (plusminusmult:V2SF
     738              :           (match_operand:V2SF 1 "nonimmediate_operand")
     739            0 :           (match_operand:V2SF 2 "nonimmediate_operand")))]
     740              :   "TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
     741         5610 : {
     742         5610 :   rtx op2 = gen_reg_rtx (V4SFmode);
     743         5610 :   rtx op1 = gen_reg_rtx (V4SFmode);
     744         5669 :   rtx op0 = gen_reg_rtx (V4SFmode);
     745              : 
     746         6797 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
     747         6797 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
     748         1187 : 
     749         5610 :   emit_insn (gen_<insn>v4sf3 (op0, op1, op2));
     750              : 
     751         5610 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
     752         6721 :   DONE;
     753              : })
     754              : 
     755              : (define_expand "mmx_addv2sf3"
     756         1111 :   [(parallel
     757              :      [(set (match_operand:V2SF 0 "register_operand")
     758              :            (plus:V2SF
     759              :              (match_operand:V2SF 1 "nonimmediate_operand")
     760         1111 :              (match_operand:V2SF 2 "nonimmediate_operand")))
     761              :       (unspec [(const_int 0)] UNSPEC_3DNOW)])]
     762              :   "TARGET_3DNOW"
     763           18 :   "ix86_fixup_binary_operands_no_copy (PLUS, V2SFmode, operands);")
     764              : 
     765              : (define_insn "*mmx_addv2sf3"
     766           42 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     767           18 :         (plus:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "%0")
     768           42 :                    (match_operand:V2SF 2 "nonimmediate_operand" "ym")))
     769       163989 :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
     770       164061 :   "TARGET_3DNOW && ix86_binary_operator_ok (PLUS, V2SFmode, operands)"
     771       163960 :   "pfadd\t{%2, %0|%0, %2}"
     772       163965 :   [(set_attr "type" "mmxadd")
     773              :    (set_attr "prefix_extra" "1")
     774          296 :    (set_attr "mode" "V2SF")])
     775          296 : 
     776              : (define_expand "mmx_subv2sf3"
     777           74 :   [(parallel
     778          103 :      [(set (match_operand:V2SF 0 "register_operand")
     779           74 :            (minus:V2SF (match_operand:V2SF 1 "register_operand")
     780           75 :                        (match_operand:V2SF 2 "nonimmediate_operand")))
     781       209136 :       (unspec [(const_int 0)] UNSPEC_3DNOW)])]
     782       209211 :   "TARGET_3DNOW")
     783       209151 : 
     784              : (define_expand "mmx_subrv2sf3"
     785           15 :   [(parallel
     786           15 :      [(set (match_operand:V2SF 0 "register_operand")
     787           15 :            (minus:V2SF (match_operand:V2SF 2 "register_operand")
     788              :                        (match_operand:V2SF 1 "nonimmediate_operand")))
     789              :       (unspec [(const_int 0)] UNSPEC_3DNOW)])]
     790              :   "TARGET_3DNOW")
     791              : 
     792       722178 : (define_insn "*mmx_subv2sf3"
     793       722178 :   [(set (match_operand:V2SF 0 "register_operand" "=y,y")
     794       722178 :         (minus:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "0,ym")
     795              :                     (match_operand:V2SF 2 "nonimmediate_operand" "ym,0")))
     796              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
     797            0 :   "TARGET_3DNOW && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
     798        97035 :   "@
     799              :    pfsub\t{%2, %0|%0, %2}
     800              :    pfsubr\t{%1, %0|%0, %1}"
     801              :   [(set_attr "type" "mmxadd")
     802        54186 :    (set_attr "prefix_extra" "1")
     803              :    (set_attr "mode" "V2SF")])
     804              : 
     805           53 : (define_expand "mmx_mulv2sf3"
     806           53 :   [(parallel
     807           53 :      [(set (match_operand:V2SF 0 "register_operand")
     808              :            (mult:V2SF (match_operand:V2SF 1 "nonimmediate_operand")
     809              :                       (match_operand:V2SF 2 "nonimmediate_operand")))
     810              :       (unspec [(const_int 0)] UNSPEC_3DNOW)])]
     811        30913 :   "TARGET_3DNOW"
     812        30875 :   "ix86_fixup_binary_operands_no_copy (MULT, V2SFmode, operands);")
     813        30904 : 
     814           44 : (define_insn "*mmx_mulv2sf3"
     815              :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     816           15 :         (mult:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "%0")
     817        25949 :                    (match_operand:V2SF 2 "nonimmediate_operand" "ym")))
     818              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
     819           78 :   "TARGET_3DNOW && ix86_binary_operator_ok (MULT, V2SFmode, operands)"
     820            9 :   "pfmul\t{%2, %0|%0, %2}"
     821        25964 :   [(set_attr "type" "mmxmul")
     822              :    (set_attr "prefix_extra" "1")
     823              :    (set_attr "mode" "V2SF")])
     824              : 
     825              : (define_expand "divv2sf3"
     826              :   [(set (match_operand:V2SF 0 "register_operand")
     827       367916 :         (div:V2SF (match_operand:V2SF 1 "register_operand")
     828       367915 :                   (match_operand:V2SF 2 "register_operand")))]
     829            1 :   "TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
     830       545497 : {
     831       644252 :   rtx op2 = gen_reg_rtx (V4SFmode);
     832       644251 :   rtx op1 = gen_reg_rtx (V4SFmode);
     833           69 :   rtx op0 = gen_reg_rtx (V4SFmode);
     834              : 
     835           69 :   rtx tmp = gen_rtx_VEC_CONCAT (V4SFmode, operands[2],
     836              :                                 force_reg (V2SFmode, CONST1_RTX (V2SFmode)));
     837           69 :   emit_insn (gen_rtx_SET (op2, tmp));
     838           69 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
     839              : 
     840           69 :   emit_insn (gen_divv4sf3 (op0, op1, op2));
     841              : 
     842           69 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
     843           69 :   DONE;
     844              : })
     845              : 
     846              : (define_expand "<code>v2sf3"
     847              :   [(set (match_operand:V2SF 0 "register_operand")
     848              :         (smaxmin:V2SF
     849              :           (match_operand:V2SF 1 "register_operand")
     850              :           (match_operand:V2SF 2 "register_operand")))]
     851              :   "TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
     852          142 : {
     853          142 :   rtx op2 = gen_reg_rtx (V4SFmode);
     854          142 :   rtx op1 = gen_reg_rtx (V4SFmode);
     855          142 :   rtx op0 = gen_reg_rtx (V4SFmode);
     856              : 
     857      1861797 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
     858      1861791 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
     859      1861655 : 
     860          148 :   emit_insn (gen_<code>v4sf3 (op0, op1, op2));
     861            6 : 
     862          142 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
     863          142 :   DONE;
     864              : })
     865              : 
     866              : (define_expand "mmx_<code>v2sf3"
     867              :   [(parallel
     868       282242 :      [(set (match_operand:V2SF 0 "register_operand")
     869       282242 :            (smaxmin:V2SF (match_operand:V2SF 1 "nonimmediate_operand")
     870       282242 :                          (match_operand:V2SF 2 "nonimmediate_operand")))
     871              :       (unspec [(const_int 0)] UNSPEC_3DNOW)])]
     872              :   "TARGET_3DNOW"
     873           28 : {
     874           28 :   if (!flag_finite_math_only || flag_signed_zeros)
     875              :     {
     876           28 :       operands[1] = force_reg (V2SFmode, operands[1]);
     877          310 :       emit_insn (gen_mmx_ieee_<maxmin_float>v2sf3
     878              :                  (operands[0], operands[1], operands[2]));
     879          310 :       DONE;
     880          282 :     }
     881          282 :   else
     882            0 :     ix86_fixup_binary_operands_no_copy (<CODE>, V2SFmode, operands);
     883              : })
     884              : 
     885              : ;; These versions of the min/max patterns are intentionally ignorant of
     886              : ;; their behavior wrt -0.0 and NaN (via the commutative operand mark).
     887            0 : ;; Since both the tree-level MAX_EXPR and the rtl-level SMAX operator
     888              : ;; are undefined in this condition, we're certain this is correct.
     889              : 
     890              : (define_insn "*mmx_<code>v2sf3"
     891              :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     892            0 :         (smaxmin:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "%0")
     893              :                       (match_operand:V2SF 2 "nonimmediate_operand" "ym")))
     894              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
     895            0 :   "TARGET_3DNOW && ix86_binary_operator_ok (<CODE>, V2SFmode, operands)"
     896              :   "pf<maxmin_float>\t{%2, %0|%0, %2}"
     897            8 :   [(set_attr "type" "mmxadd")
     898              :    (set_attr "prefix_extra" "1")
     899            8 :    (set_attr "mode" "V2SF")])
     900            8 : 
     901            8 : ;; These versions of the min/max patterns implement exactly the operations
     902              : ;;   min = (op1 < op2 ? op1 : op2)
     903              : ;;   max = (!(op1 < op2) ? op1 : op2)
     904       433112 : ;; Their operands are not commutative, and thus they may be used in the
     905       433112 : ;; presence of -0.0 and NaN.
     906              : 
     907       238912 : (define_insn "mmx_ieee_<ieee_maxmin>v2sf3"
     908       238912 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     909              :         (unspec:V2SF
     910              :           [(match_operand:V2SF 1 "register_operand" "0")
     911              :            (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
     912              :           IEEE_MAXMIN))
     913              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
     914           63 :   "TARGET_3DNOW"
     915              :   "pf<ieee_maxmin>\t{%2, %0|%0, %2}"
     916              :   [(set_attr "type" "mmxadd")
     917              :    (set_attr "prefix_extra" "1")
     918         7809 :    (set_attr "mode" "V2SF")])
     919          330 : 
     920         7809 : (define_insn "mmx_rcpv2sf2"
     921              :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     922         7479 :         (unspec:V2SF [(match_operand:V2SF 1 "nonimmediate_operand" "ym")]
     923         7479 :                      UNSPEC_PFRCP))]
     924         7550 :   "TARGET_3DNOW"
     925         7479 :   "pfrcp\t{%1, %0|%0, %1}"
     926         7479 :   [(set_attr "type" "mmx")
     927              :    (set_attr "prefix_extra" "1")
     928         7557 :    (set_attr "mode" "V2SF")])
     929         7557 : 
     930              : (define_insn "mmx_rcpit1v2sf3"
     931         7352 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     932         7352 :         (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0")
     933         7352 :                       (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
     934         7274 :                      UNSPEC_PFRCPIT1))]
     935         7425 :   "TARGET_3DNOW"
     936         7345 :   "pfrcpit1\t{%2, %0|%0, %2}"
     937         7345 :   [(set_attr "type" "mmx")
     938           71 :    (set_attr "prefix_extra" "1")
     939         7368 :    (set_attr "mode" "V2SF")])
     940         7368 : 
     941         7274 : (define_insn "mmx_rcpit2v2sf3"
     942         7368 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     943         7274 :         (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0")
     944         7274 :                       (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
     945         7274 :                      UNSPEC_PFRCPIT2))]
     946         7354 :   "TARGET_3DNOW"
     947              :   "pfrcpit2\t{%2, %0|%0, %2}"
     948         6477 :   [(set_attr "type" "mmx")
     949              :    (set_attr "prefix_extra" "1")
     950          872 :    (set_attr "mode" "V2SF")])
     951          872 : 
     952          778 : (define_expand "sqrtv2sf2"
     953           94 :   [(set (match_operand:V2SF 0 "register_operand")
     954          778 :         (sqrt:V2SF (match_operand:V2SF 1 "nonimmediate_operand")))]
     955              :   "TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
     956            8 : {
     957            8 :   rtx op1 = gen_reg_rtx (V4SFmode);
     958            8 :   rtx op0 = gen_reg_rtx (V4SFmode);
     959              : 
     960            8 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
     961            0 : 
     962            8 :   emit_insn (gen_sqrtv4sf2 (op0, op1));
     963              : 
     964            8 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
     965            8 :   DONE;
     966              : })
     967              : 
     968              : (define_insn "mmx_rsqrtv2sf2"
     969              :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     970              :         (unspec:V2SF [(match_operand:V2SF 1 "nonimmediate_operand" "ym")]
     971              :                      UNSPEC_PFRSQRT))]
     972           71 :   "TARGET_3DNOW"
     973              :   "pfrsqrt\t{%1, %0|%0, %1}"
     974              :   [(set_attr "type" "mmx")
     975              :    (set_attr "prefix_extra" "1")
     976         2016 :    (set_attr "mode" "V2SF")])
     977         2016 : 
     978          122 : (define_insn "mmx_rsqit1v2sf3"
     979          210 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
     980          332 :         (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0")
     981          332 :                       (match_operand:V2SF 2 "nonimmediate_operand" "ym")]
     982          122 :                      UNSPEC_PFRSQIT1))]
     983          289 :   "TARGET_3DNOW"
     984          209 :   "pfrsqit1\t{%2, %0|%0, %2}"
     985          209 :   [(set_attr "type" "mmx")
     986              :    (set_attr "prefix_extra" "1")
     987       117670 :    (set_attr "mode" "V2SF")])
     988       117670 : 
     989          146 : (define_expand "mmx_haddv2sf3"
     990         4811 :   [(set (match_operand:V2SF 0 "register_operand")
     991           28 :         (vec_concat:V2SF
     992              :           (plus:SF
     993              :             (vec_select:SF
     994              :               (match_operand:V2SF 1 "register_operand")
     995              :               (parallel [(const_int 0)]))
     996              :             (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
     997              :           (plus:SF
     998              :             (vec_select:SF
     999              :               (match_operand:V2SF 2 "nonimmediate_operand")
    1000              :               (parallel [(const_int 0)]))
    1001              :             (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))))]
    1002              :   "TARGET_3DNOW")
    1003              : 
    1004              : (define_insn "*mmx_haddv2sf3"
    1005              :   [(set (match_operand:V2SF 0 "register_operand" "=y")
    1006              :         (vec_concat:V2SF
    1007              :           (plus:SF
    1008              :             (vec_select:SF
    1009              :               (match_operand:V2SF 1 "register_operand" "0")
    1010              :               (parallel [(match_operand:SI 3 "const_0_to_1_operand")]))
    1011              :             (vec_select:SF (match_dup 1)
    1012              :             (parallel [(match_operand:SI 4 "const_0_to_1_operand")])))
    1013              :           (plus:SF
    1014              :             (vec_select:SF
    1015              :               (match_operand:V2SF 2 "nonimmediate_operand" "ym")
    1016              :               (parallel [(match_operand:SI 5 "const_0_to_1_operand")]))
    1017              :             (vec_select:SF (match_dup 2)
    1018              :             (parallel [(match_operand:SI 6 "const_0_to_1_operand")])))))]
    1019           79 :   "TARGET_3DNOW
    1020           79 :    && INTVAL (operands[3]) != INTVAL (operands[4])
    1021           79 :    && INTVAL (operands[5]) != INTVAL (operands[6])"
    1022            0 :   "pfacc\t{%2, %0|%0, %2}"
    1023              :   [(set_attr "type" "mmxadd")
    1024              :    (set_attr "prefix_extra" "1")
    1025         1679 :    (set_attr "mode" "V2SF")])
    1026         1679 : 
    1027              : (define_insn_and_split "*mmx_haddv2sf3_low"
    1028          173 :   [(set (match_operand:SF 0 "register_operand")
    1029         1852 :         (plus:SF
    1030         1506 :           (vec_select:SF
    1031          173 :             (match_operand:V2SF 1 "nonimmediate_operand")
    1032          173 :             (parallel [(match_operand:SI 2 "const_0_to_1_operand")]))
    1033          173 :           (vec_select:SF
    1034          173 :             (match_dup 1)
    1035              :             (parallel [(match_operand:SI 3 "const_0_to_1_operand")]))))]
    1036          164 :   "TARGET_SSE3 && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math
    1037          162 :    && INTVAL (operands[2]) != INTVAL (operands[3])
    1038            3 :    && ix86_pre_reload_split ()"
    1039          178 :   "#"
    1040          159 :   "&& 1"
    1041          218 :   [(const_int 0)]
    1042          101 : {
    1043          259 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1044          725 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1045          804 : 
    1046          200 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1047           30 : 
    1048           46 :   emit_insn (gen_sse3_haddv4sf3 (op0, op1, op1));
    1049           80 : 
    1050           81 :   emit_move_insn (operands[0], lowpart_subreg (SFmode, op0, V4SFmode));
    1051           81 :   DONE;
    1052           80 : })
    1053              : 
    1054           80 : (define_insn "mmx_hsubv2sf3"
    1055           80 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
    1056           80 :         (vec_concat:V2SF
    1057           80 :           (minus:SF
    1058              :             (vec_select:SF
    1059              :               (match_operand:V2SF 1 "register_operand" "0")
    1060              :               (parallel [(const_int  0)]))
    1061              :             (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
    1062              :           (minus:SF
    1063          719 :             (vec_select:SF
    1064              :               (match_operand:V2SF 2 "nonimmediate_operand" "ym")
    1065          719 :               (parallel [(const_int  0)]))
    1066          719 :             (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))))]
    1067          799 :   "TARGET_3DNOW_A"
    1068              :   "pfnacc\t{%2, %0|%0, %2}"
    1069              :   [(set_attr "type" "mmxadd")
    1070              :    (set_attr "prefix_extra" "1")
    1071           79 :    (set_attr "mode" "V2SF")])
    1072           79 : 
    1073           79 : (define_insn_and_split "*mmx_hsubv2sf3_low"
    1074           79 :   [(set (match_operand:SF 0 "register_operand")
    1075              :         (minus:SF
    1076           79 :           (vec_select:SF
    1077           79 :             (match_operand:V2SF 1 "register_operand")
    1078           79 :             (parallel [(const_int 0)]))
    1079              :           (vec_select:SF
    1080           79 :             (match_dup 1)
    1081           79 :             (parallel [(const_int 1)]))))]
    1082           82 :   "TARGET_SSE3 && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math
    1083            3 :    && ix86_pre_reload_split ()"
    1084           79 :   "#"
    1085           79 :   "&& 1"
    1086           79 :   [(const_int 0)]
    1087           13 : {
    1088           91 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1089          391 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1090          390 : 
    1091           12 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1092          109 : 
    1093          125 :   emit_insn (gen_sse3_hsubv4sf3 (op0, op1, op1));
    1094           79 : 
    1095            1 :   emit_move_insn (operands[0], lowpart_subreg (SFmode, op0, V4SFmode));
    1096           80 :   DONE;
    1097           79 : })
    1098           79 : 
    1099              : (define_expand "mmx_haddsubv2sf3"
    1100           79 :   [(set (match_operand:V2SF 0 "register_operand")
    1101           79 :         (vec_concat:V2SF
    1102           79 :           (minus:SF
    1103              :             (vec_select:SF
    1104              :               (match_operand:V2SF 1 "register_operand")
    1105              :               (parallel [(const_int 0)]))
    1106              :             (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
    1107              :           (plus:SF
    1108           14 :             (vec_select:SF
    1109              :               (match_operand:V2SF 2 "nonimmediate_operand")
    1110           14 :               (parallel [(const_int 0)]))
    1111           14 :             (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))))]
    1112           14 :   "TARGET_3DNOW_A")
    1113              : 
    1114              : (define_insn "*mmx_haddsubv2sf3"
    1115              :   [(set (match_operand:V2SF 0 "register_operand" "=y")
    1116              :         (vec_concat:V2SF
    1117              :           (minus:SF
    1118              :             (vec_select:SF
    1119              :               (match_operand:V2SF 1 "register_operand" "0")
    1120              :               (parallel [(const_int  0)]))
    1121              :             (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
    1122              :           (plus:SF
    1123              :             (vec_select:SF
    1124              :               (match_operand:V2SF 2 "nonimmediate_operand" "ym")
    1125              :               (parallel [(match_operand:SI 3 "const_0_to_1_operand")]))
    1126              :             (vec_select:SF
    1127              :               (match_dup 2)
    1128              :               (parallel [(match_operand:SI 4 "const_0_to_1_operand")])))))]
    1129           79 :   "TARGET_3DNOW_A
    1130           79 :    && INTVAL (operands[3]) != INTVAL (operands[4])"
    1131              :   "pfpnacc\t{%2, %0|%0, %2}"
    1132              :   [(set_attr "type" "mmxadd")
    1133              :    (set_attr "prefix_extra" "1")
    1134              :    (set_attr "mode" "V2SF")])
    1135              : 
    1136              : (define_expand "vec_addsubv2sf3"
    1137              :   [(set (match_operand:V2SF 0 "register_operand")
    1138      3179041 :         (vec_merge:V2SF
    1139      3179041 :           (minus:V2SF
    1140      3179041 :             (match_operand:V2SF 1 "nonimmediate_operand")
    1141      3179041 :             (match_operand:V2SF 2 "nonimmediate_operand"))
    1142      3179041 :           (plus:V2SF (match_dup 1) (match_dup 2))
    1143      3179041 :           (const_int 1)))]
    1144      3179041 :   "TARGET_SSE3 && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1145          277 : {
    1146        94921 :   rtx op2 = gen_reg_rtx (V4SFmode);
    1147        94921 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1148        90603 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1149       184970 : 
    1150         8097 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
    1151        87101 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1152              : 
    1153        81228 :   emit_insn (gen_vec_addsubv4sf3 (op0, op1, op2));
    1154              : 
    1155          277 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1156          277 :   DONE;
    1157              : })
    1158              : 
    1159              : (define_expand "vec_fmaddsubv2sf4"
    1160              :   [(match_operand:V2SF 0 "register_operand")
    1161              :    (match_operand:V2SF 1 "nonimmediate_operand")
    1162              :    (match_operand:V2SF 2 "nonimmediate_operand")
    1163              :    (match_operand:V2SF 3 "nonimmediate_operand")]
    1164              :   "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL)
    1165              :    && TARGET_MMX_WITH_SSE
    1166              :    && ix86_partial_vec_fp_math"
    1167            6 : {
    1168            6 :   rtx op3 = gen_reg_rtx (V4SFmode);
    1169            6 :   rtx op2 = gen_reg_rtx (V4SFmode);
    1170            6 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1171            8 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1172              : 
    1173            8 :   emit_insn (gen_movq_v2sf_to_sse (op3, operands[3]));
    1174            8 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
    1175            8 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1176              : 
    1177            6 :   emit_insn (gen_vec_fmaddsubv4sf4 (op0, op1, op2, op3));
    1178              : 
    1179            6 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1180            6 :   DONE;
    1181              : })
    1182              : 
    1183              : (define_expand "vec_fmsubaddv2sf4"
    1184              :   [(match_operand:V2SF 0 "register_operand")
    1185              :    (match_operand:V2SF 1 "nonimmediate_operand")
    1186              :    (match_operand:V2SF 2 "nonimmediate_operand")
    1187              :    (match_operand:V2SF 3 "nonimmediate_operand")]
    1188              :   "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL)
    1189              :    && TARGET_MMX_WITH_SSE
    1190              :    && ix86_partial_vec_fp_math"
    1191            5 : {
    1192            5 :   rtx op3 = gen_reg_rtx (V4SFmode);
    1193            5 :   rtx op2 = gen_reg_rtx (V4SFmode);
    1194          395 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1195            5 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1196          390 : 
    1197          395 :   emit_insn (gen_movq_v2sf_to_sse (op3, operands[3]));
    1198          395 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
    1199            5 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1200              : 
    1201            5 :   emit_insn (gen_vec_fmsubaddv4sf4 (op0, op1, op2, op3));
    1202              : 
    1203            5 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1204            5 :   DONE;
    1205              : })
    1206              : 
    1207              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1208              : ;;
    1209              : ;; Parallel single-precision floating point comparisons
    1210              : ;;
    1211              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1212              : 
    1213              : (define_expand "mmx_eqv2sf3"
    1214              :   [(parallel
    1215              :      [(set (match_operand:V2SI 0 "register_operand")
    1216              :            (eq:V2SI (match_operand:V2SF 1 "nonimmediate_operand")
    1217              :                     (match_operand:V2SF 2 "nonimmediate_operand")))
    1218              :       (unspec [(const_int 0)] UNSPEC_3DNOW)])]
    1219          218 :   "TARGET_3DNOW"
    1220           14 :   "ix86_fixup_binary_operands_no_copy (EQ, V2SFmode, operands);")
    1221          218 : 
    1222            0 : (define_insn "*mmx_eqv2sf3"
    1223          218 :   [(set (match_operand:V2SI 0 "register_operand" "=y")
    1224           14 :         (eq:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "%0")
    1225              :                  (match_operand:V2SF 2 "nonimmediate_operand" "ym")))
    1226              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
    1227           70 :   "TARGET_3DNOW && ix86_binary_operator_ok (EQ, V2SFmode, operands)"
    1228            0 :   "pfcmpeq\t{%2, %0|%0, %2}"
    1229           14 :   [(set_attr "type" "mmxcmp")
    1230              :    (set_attr "prefix_extra" "1")
    1231              :    (set_attr "mode" "V2SF")])
    1232              : 
    1233              : (define_insn "mmx_gtv2sf3"
    1234          151 :   [(set (match_operand:V2SI 0 "register_operand" "=y")
    1235              :         (gt:V2SI (match_operand:V2SF 1 "register_operand" "0")
    1236          151 :                  (match_operand:V2SF 2 "nonimmediate_operand" "ym")))
    1237        51418 :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
    1238          221 :   "TARGET_3DNOW"
    1239              :   "pfcmpgt\t{%2, %0|%0, %2}"
    1240              :   [(set_attr "type" "mmxcmp")
    1241        51267 :    (set_attr "prefix_extra" "1")
    1242        94230 :    (set_attr "mode" "V2SF")])
    1243        94230 : 
    1244        94230 : (define_insn "mmx_gev2sf3"
    1245        51267 :   [(set (match_operand:V2SI 0 "register_operand" "=y")
    1246        51267 :         (ge:V2SI (match_operand:V2SF 1 "register_operand" "0")
    1247        51267 :                  (match_operand:V2SF 2 "nonimmediate_operand" "ym")))
    1248              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
    1249        26931 :   "TARGET_3DNOW"
    1250        26861 :   "pfcmpge\t{%2, %0|%0, %2}"
    1251        26861 :   [(set_attr "type" "mmxcmp")
    1252        26861 :    (set_attr "prefix_extra" "1")
    1253        26861 :    (set_attr "mode" "V2SF")])
    1254        26861 : 
    1255              : (define_expand "vec_cmpv2sfv2si"
    1256       627684 :   [(set (match_operand:V2SI 0 "register_operand")
    1257       627684 :         (match_operator:V2SI 1 ""
    1258              :           [(match_operand:V2SF 2 "nonimmediate_operand")
    1259           22 :            (match_operand:V2SF 3 "nonimmediate_operand")]))]
    1260           22 :   "TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1261          133 : {
    1262          133 :   rtx ops[4];
    1263          133 :   ops[3] = gen_reg_rtx (V4SFmode);
    1264          122 :   ops[2] = gen_reg_rtx (V4SFmode);
    1265          133 :   ops[1] = gen_rtx_fmt_ee (GET_CODE (operands[1]), V4SImode, ops[2], ops[3]);
    1266          133 :   ops[0] = gen_reg_rtx (V4SImode);
    1267           11 : 
    1268          144 :   emit_insn (gen_movq_v2sf_to_sse (ops[3], operands[3]));
    1269          122 :   emit_insn (gen_movq_v2sf_to_sse (ops[2], operands[2]));
    1270           11 : 
    1271          133 :   bool ok = ix86_expand_fp_vec_cmp (ops);
    1272          133 :   gcc_assert (ok);
    1273           11 : 
    1274          133 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, ops[0], V4SImode));
    1275          122 :   DONE;
    1276              : })
    1277              : 
    1278              : (define_insn "@sse4_1_insertps_<mode>"
    1279              :   [(set (match_operand:V2FI 0 "register_operand" "=Yr,*x,v")
    1280              :         (unspec:V2FI
    1281              :           [(match_operand:V2FI 2 "nonimmediate_operand" "Yrjm,*xjm,vm")
    1282              :            (match_operand:V2FI 1 "register_operand" "0,0,v")
    1283              :            (match_operand:SI 3 "const_0_to_255_operand")]
    1284              :           UNSPEC_INSERTPS))]
    1285         6786 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    1286          556 : {
    1287          556 :   if (MEM_P (operands[2]))
    1288              :     {
    1289            6 :       unsigned count_s = INTVAL (operands[3]) >> 6;
    1290          125 :       if (count_s)
    1291            0 :         operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f);
    1292          125 :       operands[2] = adjust_address_nv (operands[2],
    1293        43299 :                                        <mmxscalarmode>mode, count_s * 4);
    1294        43418 :     }
    1295        43855 :   switch (which_alternative)
    1296        43299 :     {
    1297        43299 :     case 0:
    1298        43299 :     case 1:
    1299        43299 :       return "insertps\t{%3, %2, %0|%0, %2, %3}";
    1300        43855 :     case 2:
    1301        43855 :       return "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}";
    1302        43299 :     default:
    1303            0 :       gcc_unreachable ();
    1304        40248 :     }
    1305              : }
    1306          321 :   [(set_attr "isa" "noavx,noavx,avx")
    1307          321 :    (set_attr "addr" "gpr16,gpr16,*")
    1308              :    (set_attr "type" "sselog")
    1309          594 :    (set_attr "prefix_data16" "1,1,*")
    1310              :    (set_attr "prefix_extra" "1")
    1311              :    (set_attr "length_immediate" "1")
    1312              :    (set_attr "prefix" "orig,orig,maybe_evex")
    1313              :    (set_attr "mode" "V4SF")])
    1314              : 
    1315              : (define_insn "*mmx_blendps"
    1316              :   [(set (match_operand:V2SF 0 "register_operand" "=Yr,*x,x")
    1317              :         (vec_merge:V2SF
    1318              :           (match_operand:V2SF 2 "register_operand" "Yr,*x,x")
    1319              :           (match_operand:V2SF 1 "register_operand" "0,0,x")
    1320              :           (match_operand:SI 3 "const_0_to_3_operand")))]
    1321         1893 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    1322              :   "@
    1323              :    blendps\t{%3, %2, %0|%0, %2, %3}
    1324              :    blendps\t{%3, %2, %0|%0, %2, %3}
    1325            3 :    vblendps\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    1326            3 :   [(set_attr "isa" "noavx,noavx,avx")
    1327              :    (set_attr "type" "ssemov")
    1328            3 :    (set_attr "c86_attr" "blend")
    1329              :    (set_attr "length_immediate" "1")
    1330              :    (set_attr "prefix_data16" "1,1,*")
    1331              :    (set_attr "prefix_extra" "1")
    1332              :    (set_attr "prefix" "orig,orig,vex")
    1333              :    (set_attr "mode" "V4SF")])
    1334              : 
    1335              : (define_insn "mmx_blendvps"
    1336              :   [(set (match_operand:V2SF 0 "register_operand" "=Yr,*x,x")
    1337              :         (unspec:V2SF
    1338              :           [(match_operand:V2SF 1 "register_operand" "0,0,x")
    1339              :            (match_operand:V2SF 2 "register_operand" "Yr,*x,x")
    1340              :            (match_operand:V2SF 3 "register_operand" "Yz,Yz,x")]
    1341              :           UNSPEC_BLENDV))]
    1342           18 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    1343              :   "@
    1344              :    blendvps\t{%3, %2, %0|%0, %2, %3}
    1345              :    blendvps\t{%3, %2, %0|%0, %2, %3}
    1346         3806 :    vblendvps\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    1347         3806 :   [(set_attr "isa" "noavx,noavx,avx")
    1348              :    (set_attr "type" "ssemov")
    1349         3806 :    (set_attr "c86_attr" "blendv")
    1350              :    (set_attr "length_immediate" "1")
    1351              :    (set_attr "prefix_data16" "1,1,*")
    1352              :    (set_attr "prefix_extra" "1")
    1353              :    (set_attr "prefix" "orig,orig,vex")
    1354              :    (set_attr "btver2_decode" "vector")
    1355              :    (set_attr "mode" "V4SF")])
    1356              : 
    1357              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1358              : ;;
    1359              : ;; Parallel single-precision floating point logical operations
    1360              : ;;
    1361              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1362              : 
    1363              : (define_insn "*mmx_andnotv2sf3"
    1364              :   [(set (match_operand:V2SF 0 "register_operand" "=x,x")
    1365              :         (and:V2SF
    1366              :           (not:V2SF
    1367              :             (match_operand:V2SF 1 "register_operand" "0,x"))
    1368              :           (match_operand:V2SF 2 "register_operand" "x,x")))]
    1369          234 :   "TARGET_MMX_WITH_SSE"
    1370              :   "@
    1371              :    andnps\t{%2, %0|%0, %2}
    1372              :    vandnps\t{%2, %1, %0|%0, %1, %2}"
    1373            0 :   [(set_attr "isa" "noavx,avx")
    1374            0 :    (set_attr "type" "sselog")
    1375              :    (set_attr "prefix" "orig,vex")
    1376            0 :    (set_attr "mode" "V4SF")])
    1377              : 
    1378              : (define_insn "<code>v2sf3"
    1379              :   [(set (match_operand:V2SF 0 "register_operand" "=x,x")
    1380              :         (any_logic:V2SF
    1381              :           (match_operand:V2SF 1 "register_operand" "%0,x")
    1382              :           (match_operand:V2SF 2 "register_operand" "x,x")))]
    1383          630 :   "TARGET_MMX_WITH_SSE"
    1384              :   "@
    1385              :    <logic>ps\t{%2, %0|%0, %2}
    1386              :    v<logic>ps\t{%2, %1, %0|%0, %1, %2}"
    1387            2 :   [(set_attr "isa" "noavx,avx")
    1388            2 :    (set_attr "type" "sselog")
    1389            1 :    (set_attr "prefix" "orig,vex")
    1390              :    (set_attr "mode" "V4SF")])
    1391            1 : 
    1392              : (define_expand "copysignv2sf3"
    1393              :   [(set (match_dup 4)
    1394              :         (and:V2SF
    1395              :           (not:V2SF (match_dup 3))
    1396              :           (match_operand:V2SF 1 "register_operand")))
    1397              :    (set (match_dup 5)
    1398              :         (and:V2SF (match_dup 3)
    1399              :                   (match_operand:V2SF 2 "register_operand")))
    1400              :    (set (match_operand:V2SF 0 "register_operand")
    1401              :         (ior:V2SF (match_dup 4) (match_dup 5)))]
    1402              :   "TARGET_MMX_WITH_SSE"
    1403            7 : {
    1404            7 :   operands[3] = ix86_build_signbit_mask (V2SFmode, true, false);
    1405              : 
    1406            7 :   operands[4] = gen_reg_rtx (V2SFmode);
    1407            7 :   operands[5] = gen_reg_rtx (V2SFmode);
    1408              : })
    1409              : 
    1410              : (define_expand "xorsignv2sf3"
    1411              :   [(set (match_dup 4)
    1412            7 :         (and:V2SF (match_dup 3)
    1413              :                   (match_operand:V2SF 2 "register_operand")))
    1414              :    (set (match_operand:V2SF 0 "register_operand")
    1415              :         (xor:V2SF (match_dup 4)
    1416              :                   (match_operand:V2SF 1 "register_operand")))]
    1417              :   "TARGET_MMX_WITH_SSE"
    1418            8 : {
    1419            1 :   operands[3] = ix86_build_signbit_mask (V2SFmode, true, false);
    1420              : 
    1421            1 :   operands[4] = gen_reg_rtx (V2SFmode);
    1422              : })
    1423            2 : 
    1424              : (define_expand "signbitv2sf2"
    1425            2 :   [(set (match_operand:V2SI 0 "register_operand")
    1426            3 :         (lshiftrt:V2SI
    1427            2 :           (subreg:V2SI
    1428              :             (match_operand:V2SF 1 "register_operand") 0)
    1429              :           (match_dup 2)))]
    1430              :   "TARGET_MMX_WITH_SSE"
    1431            2 : {
    1432            1 :   operands[1] = force_reg (V2SFmode, operands[1]);
    1433            1 :   operands[2] = GEN_INT (GET_MODE_UNIT_BITSIZE (V2SFmode)-1);
    1434              : })
    1435              : 
    1436            1 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1437              : ;;
    1438            2 : ;; Parallel single-precision FMA multiply/accumulate instructions.
    1439            1 : ;;
    1440            1 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1441              : 
    1442            1 : (define_expand "fmav2sf4"
    1443              :   [(set (match_operand:V2SF 0 "register_operand")
    1444              :         (fma:V2SF
    1445              :           (match_operand:V2SF 1 "nonimmediate_operand")
    1446              :           (match_operand:V2SF 2 "nonimmediate_operand")
    1447           81 :           (match_operand:V2SF 3 "nonimmediate_operand")))]
    1448              :   "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL)
    1449           81 :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1450          800 : {
    1451          800 :   rtx op3 = gen_reg_rtx (V4SFmode);
    1452          719 :   rtx op2 = gen_reg_rtx (V4SFmode);
    1453          719 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1454          719 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1455              : 
    1456          719 :   emit_insn (gen_movq_v2sf_to_sse (op3, operands[3]));
    1457          719 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
    1458          719 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1459              : 
    1460          719 :   emit_insn (gen_fmav4sf4 (op0, op1, op2, op3));
    1461              : 
    1462          719 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1463          719 :   DONE;
    1464              : })
    1465              : 
    1466              : (define_expand "fmsv2sf4"
    1467              :   [(set (match_operand:V2SF 0 "register_operand")
    1468              :         (fma:V2SF
    1469              :           (match_operand:V2SF   1 "nonimmediate_operand")
    1470              :           (match_operand:V2SF   2 "nonimmediate_operand")
    1471              :           (neg:V2SF
    1472              :             (match_operand:V2SF 3 "nonimmediate_operand"))))]
    1473              :   "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL)
    1474              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1475           14 : {
    1476           14 :   rtx op3 = gen_reg_rtx (V4SFmode);
    1477           29 :   rtx op2 = gen_reg_rtx (V4SFmode);
    1478           14 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1479           29 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1480           15 : 
    1481           29 :   emit_insn (gen_movq_v2sf_to_sse (op3, operands[3]));
    1482           14 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
    1483           14 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1484              : 
    1485           14 :   emit_insn (gen_fmsv4sf4 (op0, op1, op2, op3));
    1486              : 
    1487           14 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1488           14 :   DONE;
    1489              : })
    1490              : 
    1491              : (define_expand "fnmav2sf4"
    1492              :   [(set (match_operand:V2SF 0 "register_operand")
    1493              :         (fma:V2SF
    1494              :           (neg:V2SF
    1495              :             (match_operand:V2SF 1 "nonimmediate_operand"))
    1496              :           (match_operand:V2SF   2 "nonimmediate_operand")
    1497              :           (match_operand:V2SF   3 "nonimmediate_operand")))]
    1498              :   "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL)
    1499              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1500          151 : {
    1501          151 :   rtx op3 = gen_reg_rtx (V4SFmode);
    1502          151 :   rtx op2 = gen_reg_rtx (V4SFmode);
    1503          697 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1504          151 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1505          546 : 
    1506          151 :   emit_insn (gen_movq_v2sf_to_sse (op3, operands[3]));
    1507          697 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
    1508          151 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1509              : 
    1510          151 :   emit_insn (gen_fnmav4sf4 (op0, op1, op2, op3));
    1511              : 
    1512          151 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1513          151 :   DONE;
    1514              : })
    1515              : 
    1516              : (define_expand "fnmsv2sf4"
    1517              :   [(set (match_operand:V2SF 0 "register_operand" "=v,v,x")
    1518              :         (fma:V2SF
    1519              :           (neg:V2SF
    1520              :             (match_operand:V2SF 1 "nonimmediate_operand"))
    1521              :           (match_operand:V2SF   2 "nonimmediate_operand")
    1522              :           (neg:V2SF
    1523              :             (match_operand:V2SF 3 "nonimmediate_operand"))))]
    1524              :   "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL)
    1525              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1526            2 : {
    1527            3 :   rtx op3 = gen_reg_rtx (V4SFmode);
    1528            2 :   rtx op2 = gen_reg_rtx (V4SFmode);
    1529            3 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1530            3 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1531            1 : 
    1532            2 :   emit_insn (gen_movq_v2sf_to_sse (op3, operands[3]));
    1533            2 :   emit_insn (gen_movq_v2sf_to_sse (op2, operands[2]));
    1534            2 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1535              : 
    1536            2 :   emit_insn (gen_fnmsv4sf4 (op0, op1, op2, op3));
    1537              : 
    1538            2 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1539            2 :   DONE;
    1540              : })
    1541              : 
    1542              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1543              : ;;
    1544              : ;; Parallel single-precision floating point conversion operations
    1545              : ;;
    1546              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1547              : 
    1548              : (define_expand "fix_truncv2sfv2si2"
    1549              :   [(set (match_operand:V2SI 0 "register_operand")
    1550              :         (fix:V2SI (match_operand:V2SF 1 "nonimmediate_operand")))]
    1551              :   "TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1552           81 : {
    1553           81 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1554           82 :   rtx op0 = gen_reg_rtx (V4SImode);
    1555              : 
    1556           82 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1557            1 : 
    1558           82 :   emit_insn (gen_fix_truncv4sfv4si2 (op0, op1));
    1559              : 
    1560           81 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    1561           81 :   DONE;
    1562              : })
    1563              : 
    1564              : (define_expand "fixuns_truncv2sfv2si2"
    1565              :   [(set (match_operand:V2SI 0 "register_operand")
    1566              :         (unsigned_fix:V2SI (match_operand:V2SF 1 "nonimmediate_operand")))]
    1567              :   "TARGET_AVX512VL && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1568            1 : {
    1569            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1570            1 :   rtx op0 = gen_reg_rtx (V4SImode);
    1571              : 
    1572            1 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1573              : 
    1574         1316 :   emit_insn (gen_fixuns_truncv4sfv4si2 (op0, op1));
    1575              : 
    1576         1316 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    1577         1316 :   DONE;
    1578         1315 : })
    1579              : 
    1580              : (define_insn "mmx_fix_truncv2sfv2si2"
    1581              :   [(set (match_operand:V2SI 0 "register_operand" "=y")
    1582              :         (fix:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "ym")))
    1583              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
    1584           54 :   "TARGET_3DNOW"
    1585              :   "pf2id\t{%1, %0|%0, %1}"
    1586              :   [(set_attr "type" "mmxcvt")
    1587              :    (set_attr "prefix_extra" "1")
    1588              :    (set_attr "mode" "V2SF")])
    1589              : 
    1590         1941 : (define_expand "floatv2siv2sf2"
    1591              :   [(set (match_operand:V2SF 0 "register_operand")
    1592         1941 :         (float:V2SF (match_operand:V2SI 1 "nonimmediate_operand")))]
    1593         1941 :   "TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1594     62119740 : {
    1595          390 :   rtx op1 = gen_reg_rtx (V4SImode);
    1596          390 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1597              : 
    1598     62117799 :   emit_insn (gen_movq_v2si_to_sse (op1, operands[1]));
    1599     62117409 : 
    1600     62117799 :   emit_insn (gen_floatv4siv4sf2 (op0, op1));
    1601     62117409 : 
    1602          390 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1603     61015348 :   DONE;
    1604     61014958 : })
    1605     61014958 : 
    1606     61014958 : (define_expand "floatunsv2siv2sf2"
    1607              :   [(set (match_operand:V2SF 0 "register_operand")
    1608     61007411 :         (unsigned_float:V2SF (match_operand:V2SI 1 "nonimmediate_operand")))]
    1609     61007411 :   "TARGET_AVX512VL && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1610     61007413 : {
    1611            2 :   rtx op1 = gen_reg_rtx (V4SImode);
    1612     61007413 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1613              : 
    1614     38007609 :   emit_insn (gen_movq_v2si_to_sse (op1, operands[1]));
    1615     38007607 : 
    1616            3 :   emit_insn (gen_floatunsv4siv4sf2 (op0, op1));
    1617     38005100 : 
    1618     38005103 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1619     38005103 :   DONE;
    1620     38005101 : })
    1621         9097 : 
    1622     37996003 : (define_insn "mmx_floatv2siv2sf2"
    1623     75612604 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
    1624              :         (float:V2SF (match_operand:V2SI 1 "nonimmediate_operand" "ym")))
    1625              :    (unspec [(const_int 0)] UNSPEC_3DNOW)]
    1626           66 :   "TARGET_3DNOW"
    1627              :   "pi2fd\t{%1, %0|%0, %1}"
    1628              :   [(set_attr "type" "mmxcvt")
    1629              :    (set_attr "prefix_extra" "1")
    1630              :    (set_attr "mode" "V2SF")])
    1631              : 
    1632            1 : (define_insn "mmx_pf2iw"
    1633              :   [(set (match_operand:V2SI 0 "register_operand" "=y")
    1634            1 :         (sign_extend:V2SI
    1635            1 :           (ss_truncate:V2HI
    1636           92 :             (fix:V2SI
    1637              :               (match_operand:V2SF 1 "nonimmediate_operand" "ym")))))]
    1638           70 :   "TARGET_3DNOW_A"
    1639              :   "pf2iw\t{%1, %0|%0, %1}"
    1640           91 :   [(set_attr "type" "mmxcvt")
    1641           91 :    (set_attr "prefix_extra" "1")
    1642        33907 :    (set_attr "mode" "V2SF")])
    1643        33907 : 
    1644        33816 : (define_insn "mmx_pi2fw"
    1645           90 :   [(set (match_operand:V2SF 0 "register_operand" "=y")
    1646        33906 :         (float:V2SF
    1647        33816 :           (sign_extend:V2SI
    1648        33866 :             (truncate:V2HI
    1649           50 :               (match_operand:V2SI 1 "nonimmediate_operand" "ym")))))]
    1650        11468 :   "TARGET_3DNOW_A"
    1651        11402 :   "pi2fw\t{%1, %0|%0, %1}"
    1652        12236 :   [(set_attr "type" "mmxcvt")
    1653           50 :    (set_attr "prefix_extra" "1")
    1654           50 :    (set_attr "mode" "V2SF")])
    1655              : 
    1656           28 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1657              : ;;
    1658            0 : ;; Parallel single-precision floating point element swizzling
    1659            0 : ;;
    1660       229242 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1661              : 
    1662              : (define_insn "mmx_pswapdv2sf2"
    1663              :   [(set (match_operand:V2SF 0 "register_operand" "=y,x,Yv")
    1664       229242 :         (vec_select:V2SF
    1665       229242 :           (match_operand:V2SF 1 "register_mmxmem_operand" "ym,0,Yv")
    1666       229242 :           (parallel [(const_int 1) (const_int 0)])))]
    1667       236198 :   "TARGET_3DNOW_A || TARGET_MMX_WITH_SSE"
    1668       229242 :   "@
    1669       229242 :    pswapd\t{%1, %0|%0, %1}
    1670              :    shufps\t{$0xe1, %1, %0|%0, %1, 0xe1}
    1671       155441 :    vshufps\t{$0xe1, %1, %1, %0|%0, %1, %1, 0xe1}"
    1672       155441 :   [(set_attr "isa" "*,sse_noavx,avx")
    1673       155441 :    (set_attr "mmx_isa" "native,*,*")
    1674       151096 :    (set_attr "type" "mmxcvt,ssemov,ssemov")
    1675       151096 :    (set_attr "prefix_extra" "1,*,*")
    1676       151096 :    (set_attr "mode" "V2SF,V4SF,V4SF")])
    1677              : 
    1678       151095 : (define_insn "*mmx_movshdup"
    1679       151095 :   [(set (match_operand:V2SF 0 "register_operand" "=v,x")
    1680       151095 :         (vec_select:V2SF
    1681       151095 :           (match_operand:V2SF 1 "register_operand" "v,0")
    1682       151095 :           (parallel [(const_int 1) (const_int 1)])))]
    1683         4161 :   "TARGET_MMX_WITH_SSE"
    1684         3334 :   "@
    1685         3334 :    %vmovshdup\t{%1, %0|%0, %1}
    1686         3334 :    shufps\t{$0xe5, %0, %0|%0, %0, 0xe5}"
    1687         3334 :   [(set_attr "isa" "sse3,*")
    1688         3334 :    (set_attr "type" "sse,sseshuf1")
    1689         6668 :    (set_attr "length_immediate" "*,1")
    1690              :    (set_attr "prefix_rep" "1,*")
    1691              :    (set_attr "prefix" "maybe_vex,orig")
    1692              :    (set_attr "mode" "V4SF")])
    1693         4881 : 
    1694         4881 : (define_insn "*mmx_movsldup"
    1695              :   [(set (match_operand:V2SF 0 "register_operand" "=v,x")
    1696         4444 :         (vec_select:V2SF
    1697         4444 :           (match_operand:V2SF 1 "register_operand" "v,0")
    1698         4411 :           (parallel [(const_int 0) (const_int 0)])))]
    1699         8657 :   "TARGET_MMX_WITH_SSE"
    1700              :   "@
    1701              :    %vmovsldup\t{%1, %0|%0, %1}
    1702              :    shufps\t{$0xe0, %0, %0|%0, %0, 0xe0}"
    1703          429 :   [(set_attr "isa" "sse3,*")
    1704          429 :    (set_attr "type" "sse,sseshuf1")
    1705          429 :    (set_attr "length_immediate" "*,1")
    1706          855 :    (set_attr "prefix_rep" "1,*")
    1707              :    (set_attr "prefix" "maybe_vex,orig")
    1708              :    (set_attr "mode" "V4SF")])
    1709              : 
    1710              : (define_insn_and_split "*vec_interleave_lowv2sf"
    1711              :   [(set (match_operand:V2SF 0 "register_operand" "=x,v")
    1712              :         (vec_select:V2SF
    1713              :           (vec_concat:V4SF
    1714              :             (match_operand:V2SF 1 "register_operand" "0,v")
    1715              :             (match_operand:V2SF 2 "register_operand" "x,v"))
    1716              :           (parallel [(const_int 0) (const_int 2)])))]
    1717         5685 :   "TARGET_MMX_WITH_SSE"
    1718              :   "#"
    1719          436 :   "&& reload_completed"
    1720          218 :   [(const_int 0)]
    1721        13977 :   "ix86_split_mmx_punpck (operands, false); DONE;"
    1722        13759 :   [(set_attr "isa" "noavx,avx")
    1723          698 :    (set_attr "type" "sselog")
    1724          698 :    (set_attr "prefix" "orig,maybe_evex")
    1725              :    (set_attr "mode" "V4SF")])
    1726              : 
    1727              : (define_insn_and_split "*vec_interleave_highv2sf"
    1728              :   [(set (match_operand:V2SF 0 "register_operand" "=x,v")
    1729              :         (vec_select:V2SF
    1730              :           (vec_concat:V4SF
    1731              :             (match_operand:V2SF 1 "register_operand" "0,v")
    1732              :             (match_operand:V2SF 2 "register_operand" "x,v"))
    1733           43 :           (parallel [(const_int 1) (const_int 3)])))]
    1734         2640 :   "TARGET_MMX_WITH_SSE"
    1735           43 :   "#"
    1736          238 :   "&& reload_completed"
    1737          162 :   [(const_int 0)]
    1738         7448 :   "ix86_split_mmx_punpck (operands, true); DONE;"
    1739         7329 :   [(set_attr "isa" "noavx,avx")
    1740          560 :    (set_attr "type" "sselog")
    1741          560 :    (set_attr "prefix" "orig,vex")
    1742              :    (set_attr "mode" "V4SF")])
    1743              : 
    1744              : (define_insn "*vec_dupv2sf"
    1745              :   [(set (match_operand:V2SF 0 "register_operand" "=y,Yv,x")
    1746              :         (vec_duplicate:V2SF
    1747              :           (match_operand:SF 1 "register_operand" "0,Yv,0")))]
    1748         5193 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    1749          416 :   "@
    1750              :    punpckldq\t%0, %0
    1751            1 :    %vmovsldup\t{%1, %0|%0, %1}
    1752           38 :    shufps\t{$0xe0, %0, %0|%0, %0, 0xe0}"
    1753           38 :   [(set_attr "isa" "*,sse3,sse_noavx")
    1754           32 :    (set_attr "mmx_isa" "native,*,*")
    1755           32 :    (set_attr "type" "mmxcvt,sse,sseshuf1")
    1756           69 :    (set_attr "length_immediate" "*,*,1")
    1757              :    (set_attr "prefix_rep" "*,1,*")
    1758              :    (set_attr "prefix" "*,maybe_vex,orig")
    1759              :    (set_attr "mode" "DI,V4SF,V4SF")])
    1760              : 
    1761              : (define_insn "*mmx_movss_<mode>"
    1762              :   [(set (match_operand:V2FI 0 "register_operand"   "=x,v")
    1763              :         (vec_merge:V2FI
    1764              :           (match_operand:V2FI 2 "register_operand" " x,v")
    1765              :           (match_operand:V2FI 1 "register_operand" " 0,v")
    1766              :           (const_int 1)))]
    1767         4293 :   "TARGET_MMX_WITH_SSE"
    1768              :   "@
    1769              :    movss\t{%2, %0|%0, %2}
    1770              :    vmovss\t{%2, %1, %0|%0, %1, %2}"
    1771         3396 :   [(set_attr "isa" "noavx,avx")
    1772         3396 :    (set_attr "type" "ssemov")
    1773              :    (set_attr "prefix" "orig,maybe_evex")
    1774         3396 :    (set_attr "mode" "SF")])
    1775       399783 : 
    1776       399783 : (define_insn "*mmx_concatv2sf"
    1777       399783 :   [(set (match_operand:V2SF 0 "register_operand"     "=y,y")
    1778       399783 :         (vec_concat:V2SF
    1779       399783 :           (match_operand:SF 1 "nonimmediate_operand" " 0,rm")
    1780       399783 :           (match_operand:SF 2 "nonimm_or_0_operand"  "ym,C")))]
    1781       480734 :   "TARGET_MMX && !TARGET_SSE"
    1782       399783 :   "@
    1783        80951 :    punpckldq\t{%2, %0|%0, %2}
    1784       388650 :    movd\t{%1, %0|%0, %1}"
    1785              :   [(set_attr "type" "mmxcvt,mmxmov")
    1786          272 :    (set_attr "mode" "DI")])
    1787          272 : 
    1788              : (define_expand "vec_setv2sf"
    1789              :   [(match_operand:V2SF 0 "register_operand")
    1790          272 :    (match_operand:SF 1 "register_operand")
    1791              :    (match_operand 2 "vec_setm_mmx_operand")]
    1792              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    1793           15 : {
    1794           15 :   if (CONST_INT_P (operands[2]))
    1795           13 :     ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
    1796           13 :                             INTVAL (operands[2]));
    1797              :   else
    1798            2 :     ix86_expand_vector_set_var (operands[0], operands[1], operands[2]);
    1799           15 :   DONE;
    1800              : })
    1801              : 
    1802              : ;; Avoid combining registers from different units in a single alternative,
    1803              : ;; see comment above inline_secondary_memory_needed function in i386.cc
    1804              : (define_insn_and_split "*vec_extractv2sf_0"
    1805              :   [(set (match_operand:SF 0 "nonimmediate_operand"     "=x, m,y ,m,f,r")
    1806              :         (vec_select:SF
    1807              :           (match_operand:V2SF 1 "nonimmediate_operand" " xm,x,ym,y,m,m")
    1808              :           (parallel [(const_int 0)])))]
    1809         1643 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    1810        11418 :    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
    1811              :   "#"
    1812         1593 :   "&& reload_completed"
    1813          546 :   [(set (match_dup 0) (match_dup 1))]
    1814        84266 :   "operands[1] = gen_lowpart (SFmode, operands[1]);"
    1815        83720 :   [(set_attr "mmx_isa" "*,*,native,native,*,*")])
    1816        14231 : 
    1817        14776 : ;; Avoid combining registers from different units in a single alternative,
    1818              : ;; see comment above inline_secondary_memory_needed function in i386.cc
    1819              : (define_insn "*vec_extractv2sf_1"
    1820          546 :   [(set (match_operand:SF 0 "nonimmediate_operand"     "=y,x,x,y,x,f,r")
    1821              :         (vec_select:SF
    1822              :           (match_operand:V2SF 1 "nonimmediate_operand" " 0,x,0,o,o,o,o")
    1823              :           (parallel [(const_int 1)])))]
    1824         5403 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    1825         5405 :    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
    1826              :   "@
    1827            2 :    punpckhdq\t%0, %0
    1828            2 :    %vmovshdup\t{%1, %0|%0, %1}
    1829        14288 :    shufps\t{$0xe5, %0, %0|%0, %0, 0xe5}
    1830        14286 :    #
    1831        14110 :    #
    1832        28396 :    #
    1833              :    #"
    1834        13925 :   [(set_attr "isa" "*,sse3,noavx,*,*,*,*")
    1835              :    (set_attr "mmx_isa" "native,*,*,native,*,*,*")
    1836              :    (set_attr "type" "mmxcvt,sse,sseshuf1,mmxmov,ssemov,fmov,imov")
    1837              :    (set (attr "length_immediate")
    1838              :      (if_then_else (eq_attr "alternative" "2")
    1839              :                    (const_string "1")
    1840              :                    (const_string "*")))
    1841              :    (set (attr "prefix_rep")
    1842              :      (if_then_else (eq_attr "alternative" "1")
    1843              :                    (const_string "1")
    1844              :                    (const_string "*")))
    1845              :    (set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig,orig")
    1846              :    (set_attr "mode" "DI,V4SF,V4SF,SF,SF,SF,SF")])
    1847              : 
    1848              : (define_split
    1849              :   [(set (match_operand:SF 0 "register_operand")
    1850              :         (vec_select:SF
    1851              :           (match_operand:V2SF 1 "memory_operand")
    1852              :           (parallel [(const_int 1)])))]
    1853           49 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && reload_completed"
    1854           43 :   [(set (match_dup 0) (match_dup 1))]
    1855           43 :   "operands[1] = adjust_address (operands[1], SFmode, 4);")
    1856              : 
    1857         5570 : (define_expand "vec_extractv2sfsf"
    1858         5613 :   [(match_operand:SF 0 "register_operand")
    1859         4226 :    (match_operand:V2SF 1 "register_operand")
    1860         4226 :    (match_operand 2 "const_int_operand")]
    1861         5613 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    1862         1315 : {
    1863         1315 :   ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
    1864         1315 :                               operands[1], INTVAL (operands[2]));
    1865         1315 :   DONE;
    1866            1 : })
    1867              : 
    1868            1 : (define_expand "vec_initv2sfsf"
    1869            1 :   [(match_operand:V2SF 0 "register_operand")
    1870            1 :    (match_operand 1)]
    1871              :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
    1872         1941 : {
    1873         1941 :   ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
    1874              :                            operands[1]);
    1875         1941 :   DONE;
    1876              : })
    1877              : 
    1878            1 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1879              : ;;
    1880            1 : ;; Parallel single-precision floating point rounding operations.
    1881            1 : ;;
    1882            1 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1883              : 
    1884              : (define_expand "nearbyintv2sf2"
    1885              :   [(match_operand:V2SF 0 "register_operand")
    1886              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    1887              :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1888            2 : {
    1889            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1890            2 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1891            1 : 
    1892            2 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1893              : 
    1894            1 :   emit_insn (gen_nearbyintv4sf2 (op0, op1));
    1895              : 
    1896            1 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1897            1 :   DONE;
    1898              : })
    1899              : 
    1900              : (define_expand "rintv2sf2"
    1901              :   [(match_operand:V2SF 0 "register_operand")
    1902              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    1903              :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1904            1 : {
    1905            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1906            1 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1907              : 
    1908            1 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1909              : 
    1910            9 :   emit_insn (gen_rintv4sf2 (op0, op1));
    1911              : 
    1912            9 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1913            9 :   DONE;
    1914            8 : })
    1915              : 
    1916              : (define_expand "lrintv2sfv2si2"
    1917              :   [(match_operand:V2SI 0 "register_operand")
    1918              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    1919              :   "TARGET_SSE4_1 && !flag_trapping_math
    1920              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1921            1 : {
    1922            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1923            1 :   rtx op0 = gen_reg_rtx (V4SImode);
    1924              : 
    1925            1 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1926          111 : 
    1927            1 :   emit_insn (gen_lrintv4sfv4si2 (op0, op1));
    1928          111 : 
    1929          112 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    1930          112 :   DONE;
    1931              : })
    1932              : 
    1933              : (define_expand "ceilv2sf2"
    1934              :   [(match_operand:V2SF 0 "register_operand")
    1935              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    1936              :   "TARGET_SSE4_1 && !flag_trapping_math
    1937              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1938            1 : {
    1939            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1940            1 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1941              : 
    1942            1 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1943            0 : 
    1944            1 :   emit_insn (gen_ceilv4sf2 (op0, op1));
    1945            0 : 
    1946            1 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1947            1 :   DONE;
    1948              : })
    1949              : 
    1950              : (define_expand "lceilv2sfv2si2"
    1951              :   [(match_operand:V2SI 0 "register_operand")
    1952              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    1953              :   "TARGET_SSE4_1 && !flag_trapping_math
    1954              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1955            1 : {
    1956            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1957            1 :   rtx op0 = gen_reg_rtx (V4SImode);
    1958              : 
    1959            1 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1960            4 : 
    1961            1 :   emit_insn (gen_lceilv4sfv4si2 (op0, op1));
    1962            4 : 
    1963            5 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    1964            5 :   DONE;
    1965              : })
    1966              : 
    1967              : (define_expand "floorv2sf2"
    1968              :   [(match_operand:V2SF 0 "register_operand")
    1969              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    1970              :   "TARGET_SSE4_1 && !flag_trapping_math
    1971              :   && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1972            2 : {
    1973            2 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1974            2 :   rtx op0 = gen_reg_rtx (V4SFmode);
    1975              : 
    1976            2 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1977            5 : 
    1978            2 :   emit_insn (gen_floorv4sf2 (op0, op1));
    1979            5 : 
    1980            7 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    1981            2 :   DONE;
    1982              : })
    1983              : 
    1984            5 : (define_expand "lfloorv2sfv2si2"
    1985              :   [(match_operand:V2SI 0 "register_operand")
    1986              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    1987              :   "TARGET_SSE4_1 && !flag_trapping_math
    1988              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    1989            8 : {
    1990            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    1991            8 :   rtx op0 = gen_reg_rtx (V4SImode);
    1992            7 : 
    1993            8 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    1994            0 : 
    1995            1 :   emit_insn (gen_lfloorv4sfv4si2 (op0, op1));
    1996            0 : 
    1997            1 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    1998            1 :   DONE;
    1999              : })
    2000              : 
    2001            0 : (define_expand "btruncv2sf2"
    2002              :   [(match_operand:V2SF 0 "register_operand")
    2003              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    2004              :   "TARGET_SSE4_1 && !flag_trapping_math
    2005              :   && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    2006            5 : {
    2007            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    2008            5 :   rtx op0 = gen_reg_rtx (V4SFmode);
    2009            4 : 
    2010            5 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    2011            0 : 
    2012            1 :   emit_insn (gen_btruncv4sf2 (op0, op1));
    2013            0 : 
    2014            1 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    2015            1 :   DONE;
    2016              : })
    2017              : 
    2018            0 : (define_expand "roundv2sf2"
    2019              :   [(match_operand:V2SF 0 "register_operand")
    2020              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    2021              :   "TARGET_SSE4_1 && !flag_trapping_math
    2022              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    2023            2 : {
    2024            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    2025            2 :   rtx op0 = gen_reg_rtx (V4SFmode);
    2026            1 : 
    2027            2 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    2028           10 : 
    2029            1 :   emit_insn (gen_roundv4sf2 (op0, op1));
    2030           10 : 
    2031           11 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    2032           11 :   DONE;
    2033              : })
    2034              : 
    2035              : (define_expand "lroundv2sfv2si2"
    2036              :   [(match_operand:V2SI 0 "register_operand")
    2037              :    (match_operand:V2SF 1 "nonimmediate_operand")]
    2038              :   "TARGET_SSE4_1 && !flag_trapping_math
    2039              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    2040            1 : {
    2041            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    2042            1 :   rtx op0 = gen_reg_rtx (V4SImode);
    2043              : 
    2044            1 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    2045            4 : 
    2046            1 :   emit_insn (gen_lroundv4sfv4si2 (op0, op1));
    2047            4 : 
    2048            5 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    2049            5 :   DONE;
    2050              : })
    2051              : 
    2052              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2053              : ;;
    2054              : ;; Parallel half-precision floating point arithmetic
    2055              : ;;
    2056              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2057              : 
    2058              : (define_mode_iterator VHF_32_64 [V2HF (V4HF "TARGET_MMX_WITH_SSE")])
    2059              : 
    2060              : (define_mode_iterator VBF_32_64 [V2BF (V4BF "TARGET_MMX_WITH_SSE")])
    2061              : 
    2062            4 : (define_expand "divv4hf3"
    2063              :   [(set (match_operand:V4HF 0 "register_operand")
    2064            4 :         (div:V4HF
    2065            4 :           (match_operand:V4HF 1 "nonimmediate_operand")
    2066            4 :           (match_operand:V4HF 2 "register_operand")))]
    2067              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math
    2068              :   && TARGET_MMX_WITH_SSE"
    2069            8 : {
    2070            8 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2071            8 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2072            8 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2073              : 
    2074            8 :   emit_insn (gen_movq_v4hf_to_sse (op1, operands[1]));
    2075            8 :   rtx tmp = gen_rtx_VEC_CONCAT (V8HFmode, operands[2],
    2076              :                                 force_reg (V4HFmode, CONST1_RTX (V4HFmode)));
    2077            8 :   emit_insn (gen_rtx_SET (op2, tmp));
    2078            8 :   emit_insn (gen_divv8hf3 (op0, op1, op2));
    2079            8 :   emit_move_insn (operands[0], lowpart_subreg (V4HFmode, op0, V8HFmode));
    2080            8 :   DONE;
    2081              : })
    2082              : 
    2083              : (define_mode_attr mov_to_sse_suffix
    2084              :   [(V2HF "d") (V4HF "q") (V2HI "d") (V4HI "q")])
    2085              : 
    2086              : (define_mode_attr mmxxmmmode
    2087              :   [(V2HF "V8HF") (V2HI "V8HI") (V2BF "V8BF")
    2088              :    (V4HF "V8HF") (V4HI "V8HI") (V4BF "V8BF")])
    2089              : 
    2090              : (define_mode_attr mmxxmmmodelower
    2091              :   [(V2HF "v8hf") (V2HI "v8hi") (V2BF "v8bf")
    2092              :    (V4HF "v8hf") (V4HI "v8hi") (V4BF "v8bf")])
    2093              : 
    2094            2 : (define_expand "movd_<mode>_to_sse"
    2095              :   [(set (match_operand:<mmxxmmmode> 0 "register_operand")
    2096            2 :         (vec_merge:<mmxxmmmode>
    2097            2 :           (vec_duplicate:<mmxxmmmode>
    2098            2 :             (match_operand:V2FI_32 1 "nonimmediate_operand"))
    2099              :           (match_dup 2)
    2100              :           (const_int 3)))]
    2101              :   "TARGET_SSE"
    2102          115 : {
    2103          115 :   if (!flag_trapping_math)
    2104              :   {
    2105           13 :     rtx op1 = force_reg (<MODE>mode, operands[1]);
    2106           13 :     emit_move_insn (operands[0],
    2107              :                    lowpart_subreg (<mmxxmmmode>mode, op1, <MODE>mode));
    2108           13 :     DONE;
    2109              :   }
    2110          102 :   operands[2] = CONST0_RTX (<mmxxmmmode>mode);
    2111              : })
    2112              : 
    2113              : (define_expand "movd_<mode>_to_sse_reg"
    2114              :   [(set (match_operand:<mmxxmmmode> 0 "register_operand")
    2115          102 :         (vec_merge:<mmxxmmmode>
    2116              :           (vec_duplicate:<mmxxmmmode>
    2117              :             (match_operand:V2FI_32 1 "nonimmediate_operand"))
    2118              :           (match_operand:<mmxxmmmode> 2 "register_operand")
    2119          102 :           (const_int 3)))]
    2120              :   "TARGET_SSE")
    2121              : 
    2122              : (define_expand "<insn><mode>3"
    2123              :   [(set (match_operand:VHF_32_64 0 "register_operand")
    2124            6 :         (plusminusmult:VHF_32_64
    2125              :           (match_operand:VHF_32_64 1 "nonimmediate_operand")
    2126            6 :           (match_operand:VHF_32_64 2 "nonimmediate_operand")))]
    2127            6 :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2128           35 : {
    2129           33 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2130           33 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2131           33 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2132              : 
    2133           33 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op2, operands[2]));
    2134           33 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2135           33 :   emit_insn (gen_<insn>v8hf3 (op0, op1, op2));
    2136              : 
    2137           33 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2138           33 :   DONE;
    2139              : })
    2140              : 
    2141              : ;; VDIVNEPBF16 does not generate floating point exceptions.
    2142              : (define_expand "<insn><mode>3"
    2143              :   [(set (match_operand:VBF_32_64 0 "register_operand")
    2144              :     (plusminusmultdiv:VBF_32_64
    2145              :       (match_operand:VBF_32_64 1 "nonimmediate_operand")
    2146              :       (match_operand:VBF_32_64 2 "nonimmediate_operand")))]
    2147              :   "TARGET_AVX10_2"
    2148           10 : {
    2149           41 :   rtx op0 = gen_reg_rtx (V8BFmode);
    2150           10 :   rtx op1 = lowpart_subreg (V8BFmode,
    2151              :                             force_reg (<MODE>mode, operands[1]), <MODE>mode);
    2152           16 :   rtx op2 = lowpart_subreg (V8BFmode,
    2153              :                             force_reg (<MODE>mode, operands[2]), <MODE>mode);
    2154           11 : 
    2155           21 :   emit_insn (gen_<insn>v8bf3 (op0, op1, op2));
    2156           11 : 
    2157           10 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8BFmode));
    2158           10 :   DONE;
    2159              : })
    2160              : 
    2161              : (define_expand "divv2hf3"
    2162              :   [(set (match_operand:V2HF 0 "register_operand")
    2163              :         (div:V2HF
    2164              :           (match_operand:V2HF 1 "nonimmediate_operand")
    2165              :           (match_operand:V2HF 2 "nonimmediate_operand")))]
    2166              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2167            5 : {
    2168            5 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2169            5 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2170            5 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2171              : 
    2172           13 :   emit_insn (gen_movd_v2hf_to_sse_reg (op2, operands[2],
    2173              :                                   force_reg (V8HFmode, CONST1_RTX (V8HFmode))));
    2174           13 :   emit_insn (gen_movd_v2hf_to_sse (op1, operands[1]));
    2175           13 :   emit_insn (gen_divv8hf3 (op0, op1, op2));
    2176            8 : 
    2177            5 :   emit_move_insn (operands[0], lowpart_subreg (V2HFmode, op0, V8HFmode));
    2178            5 :   DONE;
    2179              : })
    2180              : 
    2181              : (define_expand "<code><mode>3"
    2182              :   [(set (match_operand:VHF_32_64 0 "register_operand")
    2183              :         (smaxmin:VHF_32_64
    2184              :           (match_operand:VHF_32_64 1 "nonimmediate_operand")
    2185              :           (match_operand:VHF_32_64 2 "nonimmediate_operand")))]
    2186              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2187            4 : {
    2188            4 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2189            4 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2190            4 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2191              : 
    2192            4 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op2, operands[2]));
    2193            4 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2194            0 : 
    2195            4 :   emit_insn (gen_<code>v8hf3 (op0, op1, op2));
    2196            0 : 
    2197            4 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2198            4 :   DONE;
    2199              : })
    2200              : 
    2201              : (define_expand "<code><mode>3"
    2202              :   [(set (match_operand:VBF_32_64 0 "register_operand")
    2203              :     (smaxmin:VBF_32_64
    2204              :       (match_operand:VBF_32_64 1 "nonimmediate_operand")
    2205              :       (match_operand:VBF_32_64 2 "nonimmediate_operand")))]
    2206              :   "TARGET_AVX10_2"
    2207            4 : {
    2208            4 :   rtx op0 = gen_reg_rtx (V8BFmode);
    2209            4 :   rtx op1 = lowpart_subreg (V8BFmode,
    2210              :                             force_reg (<MODE>mode, operands[1]), <MODE>mode);
    2211            4 :   rtx op2 = lowpart_subreg (V8BFmode,
    2212            3 :                             force_reg (<MODE>mode, operands[2]), <MODE>mode);
    2213              : 
    2214            7 :   emit_insn (gen_<code>v8bf3 (op0, op1, op2));
    2215            3 : 
    2216            7 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8BFmode));
    2217            4 :   DONE;
    2218              : })
    2219              : 
    2220              : (define_expand "sqrt<mode>2"
    2221              :   [(set (match_operand:VHF_32_64 0 "register_operand")
    2222              :         (sqrt:VHF_32_64
    2223              :           (match_operand:VHF_32_64 1 "nonimmediate_operand")))]
    2224              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2225            2 : {
    2226            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2227            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2228              : 
    2229            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2230            2 :   emit_insn (gen_sqrtv8hf2 (op0, op1));
    2231            6 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2232            3 :   DONE;
    2233            4 : })
    2234            5 : 
    2235            4 : (define_expand "sqrt<mode>2"
    2236            1 :   [(set (match_operand:VBF_32_64 0 "register_operand")
    2237              :         (sqrt:VBF_32_64 (match_operand:VBF_32_64 1 "vector_operand")))]
    2238              :   "TARGET_AVX10_2"
    2239            0 : {
    2240            0 :   rtx op0 = gen_reg_rtx (V8BFmode);
    2241            0 :   rtx op1 = lowpart_subreg (V8BFmode,
    2242              :                             force_reg (<MODE>mode, operands[1]), <MODE>mode);
    2243              : 
    2244            0 :   emit_insn (gen_sqrtv8bf2 (op0, op1));
    2245            1 : 
    2246            1 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8BFmode));
    2247            1 :   DONE;
    2248            2 : })
    2249            1 : 
    2250            1 : (define_mode_iterator VHBF_32_64
    2251           18 :  [V2BF (V4BF "TARGET_MMX_WITH_SSE")
    2252           51 :   V2HF (V4HF "TARGET_MMX_WITH_SSE")]) 
    2253              : 
    2254              : (define_expand "<code><mode>2"
    2255           67 :   [(set (match_operand:VHBF_32_64 0 "register_operand")
    2256         5007 :         (absneg:VHBF_32_64
    2257         2661 :           (match_operand:VHBF_32_64 1 "register_operand")))]
    2258         2736 :   "TARGET_SSE"
    2259          452 :   "ix86_expand_fp_absneg_operator (<CODE>, <MODE>mode, operands); DONE;")
    2260         4557 : 
    2261            2 : (define_insn_and_split "*mmx_<code><mode>"
    2262              :   [(set (match_operand:VHBF_32_64 0 "register_operand" "=x,x,x")
    2263            2 :         (absneg:VHBF_32_64
    2264            0 :           (match_operand:VHBF_32_64 1 "register_operand" "0,x,x")))
    2265            2 :    (use (match_operand:VHBF_32_64 2 "register_operand" "x,0,x"))]
    2266           38 :   "TARGET_SSE"
    2267              :   "#"
    2268            4 :   "&& reload_completed"
    2269              :   [(set (match_dup 0)
    2270           21 :         (<absneg_op>:<MODE> (match_dup 1) (match_dup 2)))]
    2271           36 : {
    2272           27 :   if (!TARGET_AVX && operands_match_p (operands[0], operands[2]))
    2273           36 :     std::swap (operands[1], operands[2]);
    2274            7 : }
    2275            2 :   [(set_attr "isa" "noavx,noavx,avx")])
    2276            5 : 
    2277            9 : (define_insn_and_split "*mmx_nabs<mode>2"
    2278              :   [(set (match_operand:VHBF_32_64 0 "register_operand" "=x,x,x")
    2279              :         (neg:VHBF_32_64
    2280              :           (abs:VHBF_32_64
    2281            9 :             (match_operand:VHBF_32_64 1 "register_operand" "0,x,x"))))
    2282              :    (use (match_operand:VHBF_32_64 2 "register_operand" "x,0,x"))]
    2283            0 :   "TARGET_SSE"
    2284              :   "#"
    2285            0 :   "&& reload_completed"
    2286           70 :   [(set (match_dup 0)
    2287            0 :         (ior:<MODE> (match_dup 1) (match_dup 2)))])
    2288           70 : 
    2289           70 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2290           70 : ;;
    2291            0 : ;; Parallel half-precision floating point comparisons
    2292            0 : ;;
    2293              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2294              : 
    2295              : (define_expand "vec_cmpv4hfqi"
    2296            0 :   [(set (match_operand:QI 0 "register_operand")
    2297              :         (match_operator:QI 1 ""
    2298              :           [(match_operand:V4HF 2 "nonimmediate_operand")
    2299              :            (match_operand:V4HF 3 "nonimmediate_operand")]))]
    2300              :   "TARGET_MMX_WITH_SSE && TARGET_AVX512FP16 && TARGET_AVX512VL
    2301           22 :    && ix86_partial_vec_fp_math"
    2302           17 : {
    2303           39 :   rtx ops[4];
    2304           39 :   ops[3] = gen_reg_rtx (V8HFmode);
    2305           39 :   ops[2] = gen_reg_rtx (V8HFmode);
    2306              : 
    2307           17 :   emit_insn (gen_movq_v4hf_to_sse (ops[3], operands[3]));
    2308           17 :   emit_insn (gen_movq_v4hf_to_sse (ops[2], operands[2]));
    2309           17 :   emit_insn (gen_vec_cmpv8hfqi (operands[0], operands[1], ops[2], ops[3]));
    2310           17 :   DONE;
    2311              : })
    2312              : 
    2313              : (define_expand "vcond_mask_<mode>v4hi"
    2314              :   [(set (match_operand:V4F_64 0 "register_operand")
    2315              :         (vec_merge:V4F_64
    2316              :           (match_operand:V4F_64 1 "register_operand")
    2317              :           (match_operand:V4F_64 2 "register_operand")
    2318              :           (match_operand:V4HI 3  "register_operand")))]
    2319              :   "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
    2320           18 : {
    2321           18 :   ix86_expand_sse_movcc (operands[0], operands[3],
    2322              :                          operands[1], operands[2]);
    2323           18 :   DONE;
    2324            5 : })
    2325              : 
    2326            5 : (define_expand "vcond_mask_<mode>qi"
    2327            5 :   [(set (match_operand:V4FI_64 0 "register_operand")
    2328            5 :         (vec_merge:V4FI_64
    2329              :           (match_operand:V4FI_64 1 "register_operand")
    2330              :           (match_operand:V4FI_64 2 "register_operand")
    2331              :           (match_operand:QI 3 "register_operand")))]
    2332              :   "TARGET_MMX_WITH_SSE && TARGET_AVX512BW && TARGET_AVX512VL"
    2333           22 : {
    2334           22 :   rtx op0 = gen_reg_rtx (<mmxxmmmode>mode);
    2335           22 :   operands[1] = lowpart_subreg (<mmxxmmmode>mode, operands[1], <MODE>mode);
    2336           22 :   operands[2] = lowpart_subreg (<mmxxmmmode>mode, operands[2], <MODE>mode);
    2337           44 :   emit_insn (gen_vcond_mask_<mmxxmmmodelower>qi (op0, operands[1],
    2338              :                                                  operands[2], operands[3]));
    2339           44 :   emit_move_insn (operands[0],
    2340           22 :                   lowpart_subreg (<MODE>mode, op0, <mmxxmmmode>mode));
    2341           44 :   DONE;
    2342              : })
    2343              : 
    2344              : (define_expand "vec_cmpv2hfqi"
    2345              :   [(set (match_operand:QI 0 "register_operand")
    2346              :         (match_operator:QI 1 ""
    2347              :           [(match_operand:V2HF 2 "nonimmediate_operand")
    2348              :            (match_operand:V2HF 3 "nonimmediate_operand")]))]
    2349              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2350              :    && ix86_partial_vec_fp_math"
    2351           17 : {
    2352           17 :   rtx ops[4];
    2353           17 :   ops[3] = gen_reg_rtx (V8HFmode);
    2354           17 :   ops[2] = gen_reg_rtx (V8HFmode);
    2355            3 : 
    2356           17 :   emit_insn (gen_movd_v2hf_to_sse (ops[3], operands[3]));
    2357           20 :   emit_insn (gen_movd_v2hf_to_sse (ops[2], operands[2]));
    2358           20 :   emit_insn (gen_vec_cmpv8hfqi (operands[0], operands[1], ops[2], ops[3]));
    2359           20 :   DONE;
    2360              : })
    2361              : 
    2362              : (define_expand "vcond_mask_<mode>v2hi"
    2363              :   [(set (match_operand:V2F_32 0 "register_operand")
    2364              :         (vec_merge:V2F_32
    2365              :           (match_operand:V2F_32 1 "register_operand")
    2366              :           (match_operand:V2F_32 2 "register_operand")
    2367              :           (match_operand:V2HI 3 "register_operand")))]
    2368              :   "TARGET_SSE4_1"
    2369           18 : {
    2370           18 :   ix86_expand_sse_movcc (operands[0], operands[3],
    2371              :                          operands[1], operands[2]);
    2372           18 :   DONE;
    2373            1 : })
    2374              : 
    2375            1 : (define_expand "vcond_mask_<mode>qi"
    2376            1 :   [(set (match_operand:V2FI_32 0 "register_operand")
    2377            1 :         (vec_merge:V2FI_32
    2378              :           (match_operand:V2FI_32 1 "register_operand")
    2379              :           (match_operand:V2FI_32 2 "register_operand")
    2380              :           (match_operand:QI 3 "register_operand")))]
    2381              :   "TARGET_AVX512BW && TARGET_AVX512VL"
    2382           22 : {
    2383           22 :   rtx op0 = gen_reg_rtx (<mmxxmmmode>mode);
    2384           22 :   operands[1] = lowpart_subreg (<mmxxmmmode>mode, operands[1], <MODE>mode);
    2385           22 :   operands[2] = lowpart_subreg (<mmxxmmmode>mode, operands[2], <MODE>mode);
    2386           28 :   emit_insn (gen_vcond_mask_<mmxxmmmodelower>qi (op0, operands[1],
    2387              :                                                  operands[2], operands[3]));
    2388           28 :   emit_move_insn (operands[0],
    2389            6 :                   lowpart_subreg (<MODE>mode, op0, <mmxxmmmode>mode));
    2390           28 :   DONE;
    2391              : })
    2392              : 
    2393              : ;;This instruction does not generate floating point exceptions
    2394              : (define_expand "vec_cmp<mode>qi"
    2395              :   [(set (match_operand:QI 0 "register_operand")
    2396              :         (match_operator:QI 1 ""
    2397              :           [(match_operand:VBF_32_64 2 "register_operand")
    2398              :            (match_operand:VBF_32_64 3 "nonimmediate_operand")]))]
    2399              :   "TARGET_AVX10_2"
    2400           10 : {
    2401           10 :   rtx op2 = lowpart_subreg (V8BFmode,
    2402              :                              force_reg (<MODE>mode, operands[2]), <MODE>mode);
    2403           10 :   rtx op3 = lowpart_subreg (V8BFmode,
    2404            2 :                              force_reg (<MODE>mode, operands[3]), <MODE>mode);
    2405              : 
    2406           12 :   emit_insn (gen_vec_cmpv8bfqi (operands[0], operands[1], op2, op3));
    2407           12 :   DONE;
    2408            2 : })
    2409              : 
    2410              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2411              : ;;
    2412              : ;; Parallel half-precision floating point rounding operations.
    2413              : ;;
    2414              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2415              : 
    2416              : (define_expand "btrunc<mode>2"
    2417              :   [(match_operand:VHF_32_64 0 "register_operand")
    2418              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2419              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2420              :    && ix86_partial_vec_fp_math
    2421            1 :    && !flag_trapping_math"
    2422            2 : {
    2423            3 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2424            3 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2425            1 : 
    2426            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2427            2 :   emit_insn (gen_btruncv8hf2 (op0, op1));
    2428            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2429              : 
    2430            2 :   DONE;
    2431              : })
    2432              : 
    2433              : (define_expand "nearbyint<mode>2"
    2434              :   [(match_operand:VHF_32_64 0 "register_operand")
    2435              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2436              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2437              :    && ix86_partial_vec_fp_math"
    2438            2 : {
    2439            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2440            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2441              : 
    2442            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2443            3 :   emit_insn (gen_nearbyintv8hf2 (op0, op1));
    2444            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2445            1 : 
    2446            3 :   DONE;
    2447            1 : })
    2448              : 
    2449              : (define_expand "rint<mode>2"
    2450              :   [(match_operand:VHF_32_64 0 "register_operand")
    2451              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2452              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2453              :    && ix86_partial_vec_fp_math"
    2454            2 : {
    2455            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2456            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2457              : 
    2458            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2459            3 :   emit_insn (gen_rintv8hf2 (op0, op1));
    2460            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2461            1 : 
    2462            3 :   DONE;
    2463            1 : })
    2464              : 
    2465              : (define_expand "lrint<mode><mmxintvecmodelower>2"
    2466              :   [(match_operand:<mmxintvecmode> 0 "register_operand")
    2467              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2468              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2469              :    && ix86_partial_vec_fp_math"
    2470            0 : {
    2471            0 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2472            0 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2473              : 
    2474            0 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2475            0 :   emit_insn (gen_lrintv8hfv8hi2 (op0, op1));
    2476            0 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2477            0 : 
    2478            0 :   DONE;
    2479            0 : })
    2480              : 
    2481              : (define_expand "floor<mode>2"
    2482              :   [(match_operand:VHF_32_64 0 "register_operand")
    2483              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2484              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2485              :    && ix86_partial_vec_fp_math
    2486              :    && !flag_trapping_math"
    2487            2 : {
    2488            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2489            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2490              : 
    2491            3 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2492            2 :   emit_insn (gen_floorv8hf2 (op0, op1));
    2493            3 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2494            1 : 
    2495            3 :   DONE;
    2496              : })
    2497              : 
    2498              : (define_expand "lfloor<mode><mmxintvecmodelower>2"
    2499              :   [(match_operand:<mmxintvecmode> 0 "register_operand")
    2500              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2501              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2502              :    && ix86_partial_vec_fp_math
    2503              :    && !flag_trapping_math"
    2504            0 : {
    2505            0 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2506            0 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2507              : 
    2508            1 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2509            0 :   emit_insn (gen_lfloorv8hfv8hi2 (op0, op1));
    2510            1 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2511            1 : 
    2512            1 :   DONE;
    2513              : })
    2514              : 
    2515              : (define_expand "ceil<mode>2"
    2516              :   [(match_operand:VHF_32_64 0 "register_operand")
    2517              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2518              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2519              :    && ix86_partial_vec_fp_math
    2520              :    && !flag_trapping_math"
    2521            2 : {
    2522            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2523            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2524              : 
    2525            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2526            2 :   emit_insn (gen_ceilv8hf2 (op0, op1));
    2527            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2528            0 : 
    2529            2 :   DONE;
    2530              : })
    2531              : 
    2532              : (define_expand "lceil<mode><mmxintvecmodelower>2"
    2533              :   [(match_operand:<mmxintvecmode> 0 "register_operand")
    2534              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2535              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2536              :    && ix86_partial_vec_fp_math
    2537              :    && !flag_trapping_math"
    2538            0 : {
    2539            0 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2540            0 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2541              : 
    2542            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2543            0 :   emit_insn (gen_lceilv8hfv8hi2 (op0, op1));
    2544            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2545            2 : 
    2546            2 :   DONE;
    2547              : })
    2548              : 
    2549              : (define_expand "round<mode>2"
    2550              :   [(match_operand:VHF_32_64 0 "register_operand")
    2551              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2552              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2553              :    && ix86_partial_vec_fp_math
    2554              :    && !flag_trapping_math"
    2555            2 : {
    2556            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2557            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2558              : 
    2559            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2560            2 :   emit_insn (gen_roundv8hf2 (op0, op1));
    2561            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2562            0 : 
    2563            2 :   DONE;
    2564              : })
    2565              : 
    2566              : (define_expand "lround<mode><mmxintvecmodelower>2"
    2567              :   [(match_operand:<mmxintvecmode> 0 "register_operand")
    2568              :    (match_operand:VHF_32_64 1 "nonimmediate_operand")]
    2569              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2570              :    && ix86_partial_vec_fp_math
    2571              :    && !flag_trapping_math"
    2572            0 : {
    2573            0 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2574            0 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2575              : 
    2576            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2577            0 :   emit_insn (gen_lroundv8hfv8hi2 (op0, op1));
    2578            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2579            2 : 
    2580            2 :   DONE;
    2581              : })
    2582              : 
    2583              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2584              : ;;
    2585              : ;; Parallel half-precision floating point logical operations
    2586              : ;;
    2587              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2588              : 
    2589              : (define_insn "*mmx_andnot<mode>3"
    2590              :   [(set (match_operand:VHBF_32_64 0 "register_operand"    "=x,x")
    2591              :         (and:VHBF_32_64
    2592              :           (not:VHBF_32_64
    2593            0 :             (match_operand:VHBF_32_64 1 "register_operand" "0,x"))
    2594              :           (match_operand:VHBF_32_64 2 "register_operand"   "x,x")))]
    2595            2 :   "TARGET_SSE"
    2596            0 :   "@
    2597            0 :    andnps\t{%2, %0|%0, %2}
    2598              :    vandnps\t{%2, %1, %0|%0, %1, %2}"
    2599            2 :   [(set_attr "isa" "noavx,avx")
    2600            2 :    (set_attr "type" "sselog")
    2601              :    (set_attr "prefix" "orig,vex")
    2602            2 :    (set_attr "mode" "V4SF")])
    2603              : 
    2604              : (define_insn "<code><mode>3"
    2605              :   [(set (match_operand:VHBF_32_64 0 "register_operand"   "=x,x")
    2606              :         (any_logic:VHBF_32_64
    2607              :           (match_operand:VHBF_32_64 1 "register_operand" "%0,x")
    2608              :           (match_operand:VHBF_32_64 2 "register_operand" " x,x")))]
    2609           45 :   "TARGET_SSE"
    2610              :   "@
    2611              :    <logic>ps\t{%2, %0|%0, %2}
    2612              :    v<logic>ps\t{%2, %1, %0|%0, %1, %2}"
    2613           56 :   [(set_attr "isa" "noavx,avx")
    2614           56 :    (set_attr "type" "sselog,sselog")
    2615           42 :    (set_attr "prefix" "orig,vex")
    2616              :    (set_attr "mode" "V4SF")])
    2617           42 : 
    2618              : (define_expand "copysign<mode>3"
    2619              :   [(set (match_dup 4)
    2620              :         (and:VHBF_32_64
    2621              :           (not:VHBF_32_64 (match_dup 3))
    2622              :           (match_operand:VHBF_32_64 1 "register_operand")))
    2623              :    (set (match_dup 5)
    2624              :         (and:VHBF_32_64 (match_dup 3)
    2625              :                   (match_operand:VHBF_32_64 2 "register_operand")))
    2626              :    (set (match_operand:VHBF_32_64 0 "register_operand")
    2627              :         (ior:VHBF_32_64 (match_dup 4) (match_dup 5)))]
    2628              :   "TARGET_SSE"
    2629            2 : {
    2630            2 :   operands[3] = ix86_build_signbit_mask (<MODE>mode, true, false);
    2631              : 
    2632            2 :   operands[4] = gen_reg_rtx (<MODE>mode);
    2633            2 :   operands[5] = gen_reg_rtx (<MODE>mode);
    2634              : })
    2635              : 
    2636              : (define_expand "xorsign<mode>3"
    2637              :   [(set (match_dup 4)
    2638            2 :         (and:VHBF_32_64 (match_dup 3)
    2639              :                   (match_operand:VHBF_32_64 2 "register_operand")))
    2640              :    (set (match_operand:VHBF_32_64 0 "register_operand")
    2641              :         (xor:VHBF_32_64 (match_dup 4)
    2642              :                   (match_operand:VHBF_32_64 1 "register_operand")))]
    2643              :   "TARGET_SSE"
    2644            4 : {
    2645            2 :   operands[3] = ix86_build_signbit_mask (<MODE>mode, true, false);
    2646              : 
    2647            2 :   operands[4] = gen_reg_rtx (<MODE>mode);
    2648              : })
    2649            2 : 
    2650              : (define_expand "signbit<mode>2"
    2651            2 :   [(set (match_operand:<mmxintvecmode> 0 "register_operand")
    2652            4 :         (lshiftrt:<mmxintvecmode>
    2653            2 :           (subreg:<mmxintvecmode>
    2654              :             (match_operand:VHBF_32_64 1 "register_operand") 0)
    2655              :           (match_dup 2)))]
    2656              :   "TARGET_SSE2"
    2657            2 : {
    2658            0 :   operands[1] = force_reg (<MODE>mode, operands[1]);
    2659            0 :   operands[2] = GEN_INT (GET_MODE_UNIT_BITSIZE (<MODE>mode)-1);
    2660              : })
    2661              : 
    2662            4 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2663              : ;;
    2664            4 : ;; Parallel half-precision FMA multiply/accumulate instructions.
    2665            4 : ;;
    2666            4 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2667              : 
    2668            0 : (define_expand "fma<mode>4"
    2669              :   [(set (match_operand:VHF_32_64 0 "register_operand")
    2670              :         (fma:VHF_32_64
    2671              :           (match_operand:VHF_32_64 1 "nonimmediate_operand")
    2672              :           (match_operand:VHF_32_64 2 "nonimmediate_operand")
    2673            4 :           (match_operand:VHF_32_64 3 "nonimmediate_operand")))]
    2674              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2675            6 : {
    2676            6 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2677            6 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2678            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2679            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2680              : 
    2681            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op3, operands[3]));
    2682            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op2, operands[2]));
    2683            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2684              : 
    2685            2 :   emit_insn (gen_fmav8hf4 (op0, op1, op2, op3));
    2686              : 
    2687            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2688            2 :   DONE;
    2689              : })
    2690              : 
    2691              : (define_expand "fms<mode>4"
    2692              :   [(set (match_operand:VHF_32_64 0 "register_operand")
    2693              :         (fma:VHF_32_64
    2694              :           (match_operand:VHF_32_64   1 "nonimmediate_operand")
    2695              :           (match_operand:VHF_32_64   2 "nonimmediate_operand")
    2696              :           (neg:VHF_32_64
    2697              :             (match_operand:VHF_32_64 3 "nonimmediate_operand"))))]
    2698              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2699            2 : {
    2700            2 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2701            2 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2702            4 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2703            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2704            2 : 
    2705            4 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op3, operands[3]));
    2706            4 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op2, operands[2]));
    2707            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2708              : 
    2709            2 :   emit_insn (gen_fmsv8hf4 (op0, op1, op2, op3));
    2710              : 
    2711            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2712            2 :   DONE;
    2713              : })
    2714              : 
    2715              : (define_expand "fnma<mode>4"
    2716              :   [(set (match_operand:VHF_32_64 0 "register_operand")
    2717              :         (fma:VHF_32_64
    2718              :           (neg:VHF_32_64
    2719              :             (match_operand:VHF_32_64 1 "nonimmediate_operand"))
    2720              :           (match_operand:VHF_32_64   2 "nonimmediate_operand")
    2721              :           (match_operand:VHF_32_64   3 "nonimmediate_operand")))]
    2722              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2723            2 : {
    2724            2 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2725            2 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2726            4 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2727            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2728            2 : 
    2729            4 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op3, operands[3]));
    2730            4 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op2, operands[2]));
    2731            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2732              : 
    2733            2 :   emit_insn (gen_fnmav8hf4 (op0, op1, op2, op3));
    2734              : 
    2735            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2736            2 :   DONE;
    2737              : })
    2738              : 
    2739              : (define_expand "fnms<mode>4"
    2740              :   [(set (match_operand:VHF_32_64 0 "register_operand" "=v,v,x")
    2741              :         (fma:VHF_32_64
    2742              :           (neg:VHF_32_64
    2743              :             (match_operand:VHF_32_64 1 "nonimmediate_operand"))
    2744              :           (match_operand:VHF_32_64   2 "nonimmediate_operand")
    2745              :           (neg:VHF_32_64
    2746              :             (match_operand:VHF_32_64 3 "nonimmediate_operand"))))]
    2747              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2748            2 : {
    2749            2 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2750            4 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2751            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2752            4 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2753            2 : 
    2754            4 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op3, operands[3]));
    2755            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op2, operands[2]));
    2756            2 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2757              : 
    2758            2 :   emit_insn (gen_fnmsv8hf4 (op0, op1, op2, op3));
    2759              : 
    2760            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8HFmode));
    2761            2 :   DONE;
    2762              : })
    2763              : 
    2764              : (define_expand "vec_fmaddsubv4hf4"
    2765              :   [(match_operand:V4HF 0 "register_operand")
    2766              :    (match_operand:V4HF 1 "nonimmediate_operand")
    2767              :    (match_operand:V4HF 2 "nonimmediate_operand")
    2768              :    (match_operand:V4HF 3 "nonimmediate_operand")]
    2769              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2770              :    && TARGET_MMX_WITH_SSE
    2771              :    && ix86_partial_vec_fp_math"
    2772            1 : {
    2773            1 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2774            1 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2775            1 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2776            3 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2777              : 
    2778            3 :   emit_insn (gen_movq_v4hf_to_sse (op3, operands[3]));
    2779            3 :   emit_insn (gen_movq_v4hf_to_sse (op2, operands[2]));
    2780            3 :   emit_insn (gen_movq_v4hf_to_sse (op1, operands[1]));
    2781              : 
    2782            1 :   emit_insn (gen_vec_fmaddsubv8hf4 (op0, op1, op2, op3));
    2783              : 
    2784            1 :   emit_move_insn (operands[0], lowpart_subreg (V4HFmode, op0, V8HFmode));
    2785            1 :   DONE;
    2786              : })
    2787              : 
    2788              : (define_expand "vec_fmsubaddv4hf4"
    2789              :   [(match_operand:V4HF 0 "register_operand")
    2790              :    (match_operand:V4HF 1 "nonimmediate_operand")
    2791              :    (match_operand:V4HF 2 "nonimmediate_operand")
    2792              :    (match_operand:V4HF 3 "nonimmediate_operand")]
    2793              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2794              :    && ix86_partial_vec_fp_math
    2795              :    && TARGET_MMX_WITH_SSE"
    2796            1 : {
    2797            1 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2798            1 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2799            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2800            1 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2801            1 : 
    2802            2 :   emit_insn (gen_movq_v4hf_to_sse (op3, operands[3]));
    2803            2 :   emit_insn (gen_movq_v4hf_to_sse (op2, operands[2]));
    2804            1 :   emit_insn (gen_movq_v4hf_to_sse (op1, operands[1]));
    2805              : 
    2806            1 :   emit_insn (gen_vec_fmsubaddv8hf4 (op0, op1, op2, op3));
    2807              : 
    2808            1 :   emit_move_insn (operands[0], lowpart_subreg (V4HFmode, op0, V8HFmode));
    2809            1 :   DONE;
    2810              : })
    2811              : 
    2812              : (define_expand "fma<mode>4"
    2813              :   [(set (match_operand:VBF_32_64 0 "register_operand")
    2814              :         (fma:VBF_32_64
    2815              :           (match_operand:VBF_32_64 1 "nonimmediate_operand")
    2816              :           (match_operand:VBF_32_64 2 "nonimmediate_operand")
    2817              :           (match_operand:VBF_32_64 3 "nonimmediate_operand")))]
    2818              :   "TARGET_AVX10_2"
    2819            2 : {
    2820            2 :   rtx op0 = gen_reg_rtx (V8BFmode);
    2821            2 :   rtx op1 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[1]), <MODE>mode);
    2822            2 :   rtx op2 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[2]), <MODE>mode);
    2823            3 :   rtx op3 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[3]), <MODE>mode);
    2824              : 
    2825            3 :   emit_insn (gen_fmav8bf4 (op0, op1, op2, op3));
    2826            1 : 
    2827            3 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8BFmode));
    2828            2 :   DONE;
    2829              : })
    2830              : 
    2831              : (define_expand "fms<mode>4"
    2832              :   [(set (match_operand:VBF_32_64 0 "register_operand")
    2833              :         (fma:VBF_32_64
    2834              :           (match_operand:VBF_32_64   1 "nonimmediate_operand")
    2835              :           (match_operand:VBF_32_64   2 "nonimmediate_operand")
    2836              :           (neg:VBF_32_64
    2837              :             (match_operand:VBF_32_64 3 "nonimmediate_operand"))))]
    2838              :   "TARGET_AVX10_2"
    2839            2 : {
    2840            2 :   rtx op0 = gen_reg_rtx (V8BFmode);
    2841            2 :   rtx op1 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[1]), <MODE>mode);
    2842            4 :   rtx op2 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[2]), <MODE>mode);
    2843            2 :   rtx op3 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[3]), <MODE>mode);
    2844            2 : 
    2845            4 :   emit_insn (gen_fmsv8bf4 (op0, op1, op2, op3));
    2846            2 : 
    2847            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8BFmode));
    2848            2 :   DONE;
    2849              : })
    2850              : 
    2851              : (define_expand "fnma<mode>4"
    2852              :   [(set (match_operand:VBF_32_64 0 "register_operand")
    2853              :         (fma:VBF_32_64
    2854              :           (neg:VBF_32_64
    2855              :             (match_operand:VBF_32_64 1 "nonimmediate_operand"))
    2856              :           (match_operand:VBF_32_64   2 "nonimmediate_operand")
    2857              :           (match_operand:VBF_32_64   3 "nonimmediate_operand")))]
    2858              :   "TARGET_AVX10_2"
    2859            2 : {
    2860            2 :   rtx op0 = gen_reg_rtx (V8BFmode);
    2861            2 :   rtx op1 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[1]), <MODE>mode);
    2862            6 :   rtx op2 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[2]), <MODE>mode);
    2863            2 :   rtx op3 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[3]), <MODE>mode);
    2864            4 : 
    2865            6 :   emit_insn (gen_fnmav8bf4 (op0, op1, op2, op3));
    2866            4 : 
    2867            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8BFmode));
    2868            2 :   DONE;
    2869              : })
    2870              : 
    2871              : (define_expand "fnms<mode>4"
    2872              :   [(set (match_operand:VBF_32_64 0 "register_operand")
    2873              :         (fma:VBF_32_64
    2874              :           (neg:VBF_32_64
    2875              :             (match_operand:VBF_32_64 1 "nonimmediate_operand"))
    2876              :           (match_operand:VBF_32_64   2 "nonimmediate_operand")
    2877              :           (neg:VBF_32_64
    2878              :             (match_operand:VBF_32_64 3 "nonimmediate_operand"))))]
    2879              :   "TARGET_AVX10_2"
    2880            2 : {
    2881            2 :   rtx op0 = gen_reg_rtx (V8BFmode);
    2882            6 :   rtx op1 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[1]), <MODE>mode);
    2883            2 :   rtx op2 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[2]), <MODE>mode);
    2884            6 :   rtx op3 = lowpart_subreg (V8BFmode, force_reg (<MODE>mode, operands[3]), <MODE>mode);
    2885            4 : 
    2886            6 :   emit_insn (gen_fnmsv8bf4 (op0, op1, op2, op3));
    2887              : 
    2888            2 :   emit_move_insn (operands[0], lowpart_subreg (<MODE>mode, op0, V8BFmode));
    2889            2 :   DONE;
    2890              : })
    2891              : 
    2892              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2893              : ;;
    2894              : ;; Parallel half-precision floating point complex type operations
    2895              : ;;
    2896              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2897              : 
    2898              : (define_expand "cmlav4hf4"
    2899              :   [(match_operand:V4HF 0 "register_operand")
    2900              :    (match_operand:V4HF 1 "vector_operand")
    2901              :    (match_operand:V4HF 2 "vector_operand")
    2902              :    (match_operand:V4HF 3 "vector_operand")]
    2903              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2904            2 :   && TARGET_MMX_WITH_SSE"
    2905            1 : {
    2906            3 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2907            3 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2908            3 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2909            1 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2910              : 
    2911            1 :   emit_insn (gen_movq_v4hf_to_sse (op3, operands[3]));
    2912            1 :   emit_insn (gen_movq_v4hf_to_sse (op2, operands[2]));
    2913            1 :   emit_insn (gen_movq_v4hf_to_sse (op1, operands[1]));
    2914              : 
    2915            1 :   emit_insn (gen_cmlav8hf4 (op0, op1, op2, op3));
    2916              : 
    2917            1 :   emit_move_insn (operands[0], lowpart_subreg (V4HFmode, op0, V8HFmode));
    2918            1 :   DONE;
    2919              : })
    2920              : 
    2921              : (define_expand "cmla_conjv4hf4"
    2922              :   [(match_operand:V4HF 0 "register_operand")
    2923              :    (match_operand:V4HF 1 "vector_operand")
    2924              :    (match_operand:V4HF 2 "vector_operand")
    2925              :    (match_operand:V4HF 3 "vector_operand")]
    2926              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2927              :   && TARGET_MMX_WITH_SSE"
    2928            1 : {
    2929            1 :   rtx op3 = gen_reg_rtx (V8HFmode);
    2930            1 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2931            1 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2932            4 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2933              : 
    2934            4 :   emit_insn (gen_movq_v4hf_to_sse (op3, operands[3]));
    2935            4 :   emit_insn (gen_movq_v4hf_to_sse (op2, operands[2]));
    2936            4 :   emit_insn (gen_movq_v4hf_to_sse (op1, operands[1]));
    2937              : 
    2938            1 :   emit_insn (gen_cmla_conjv8hf4 (op0, op1, op2, op3));
    2939              : 
    2940            1 :   emit_move_insn (operands[0], lowpart_subreg (V4HFmode, op0, V8HFmode));
    2941            1 :   DONE;
    2942              : })
    2943              : 
    2944              : (define_expand "cmulv4hf3"
    2945              :   [(match_operand:V4HF 0 "register_operand")
    2946              :    (match_operand:V4HF 1 "vector_operand")
    2947              :    (match_operand:V4HF 2 "vector_operand")]
    2948              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2949              :   && TARGET_MMX_WITH_SSE"
    2950            1 : {
    2951            1 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2952            1 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2953            1 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2954              : 
    2955            2 :   emit_insn (gen_movq_v4hf_to_sse (op2, operands[2]));
    2956            1 :   emit_insn (gen_movq_v4hf_to_sse (op1, operands[1]));
    2957            1 : 
    2958            2 :   emit_insn (gen_cmulv8hf3 (op0, op1, op2));
    2959            2 :   emit_move_insn (operands[0], lowpart_subreg (V4HFmode, op0, V8HFmode));
    2960            1 :   DONE;
    2961              : })
    2962              : 
    2963              : (define_expand "cmul_conjv4hf3"
    2964              :   [(match_operand:V4HF 0 "register_operand")
    2965              :    (match_operand:V4HF 1 "vector_operand")
    2966              :    (match_operand:V4HF 2 "vector_operand")]
    2967              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    2968              :   && TARGET_MMX_WITH_SSE"
    2969            1 : {
    2970            1 :   rtx op2 = gen_reg_rtx (V8HFmode);
    2971            1 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2972            1 :   rtx op0 = gen_reg_rtx (V8HFmode);
    2973            1 : 
    2974            1 :   emit_insn (gen_movq_v4hf_to_sse (op2, operands[2]));
    2975            2 :   emit_insn (gen_movq_v4hf_to_sse (op1, operands[1]));
    2976            1 : 
    2977            2 :   emit_insn (gen_cmul_conjv8hf3 (op0, op1, op2));
    2978            1 :   emit_move_insn (operands[0], lowpart_subreg (V4HFmode, op0, V8HFmode));
    2979            1 :   DONE;
    2980              : })
    2981              : 
    2982              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2983              : ;;
    2984              : ;; Parallel half-precision floating point conversion operations
    2985              : ;;
    2986              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2987              : 
    2988              : (define_expand "fix<fixunssuffix>_trunc<mode><mmxintvecmodelower>2"
    2989              :   [(set (match_operand:<mmxintvecmode> 0 "register_operand")
    2990              :         (any_fix:<mmxintvecmode>
    2991              :           (match_operand:VHF_32_64 1 "nonimmediate_operand")))]
    2992            1 :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    2993            8 : {
    2994            9 :   rtx op1 = gen_reg_rtx (V8HFmode);
    2995            9 :   rtx op0 = gen_reg_rtx (V8HImode);
    2996            1 : 
    2997            8 :   emit_insn (gen_mov<mov_to_sse_suffix>_<mode>_to_sse (op1, operands[1]));
    2998              : 
    2999            8 :   emit_insn (gen_fix<fixunssuffix>_truncv8hfv8hi2 (op0, op1));
    3000              : 
    3001            8 :   emit_move_insn (operands[0],
    3002              :                  lowpart_subreg (<mmxintvecmode>mode, op0, V8HImode));
    3003            8 :   DONE;
    3004              : })
    3005              : 
    3006              : (define_expand "fix<fixunssuffix>_truncv2hfv2si2"
    3007              :   [(set (match_operand:V2SI 0 "register_operand")
    3008              :         (any_fix:V2SI
    3009              :           (match_operand:V2HF 1 "nonimmediate_operand")))]
    3010              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    3011              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    3012            2 : {
    3013            2 :   rtx op1 = gen_reg_rtx (V8HFmode);
    3014            2 :   rtx op0 = gen_reg_rtx (V4SImode);
    3015              : 
    3016            8 :   emit_insn (gen_movd_v2hf_to_sse (op1, operands[1]));
    3017              : 
    3018            8 :   emit_insn (gen_avx512fp16_fix<fixunssuffix>_truncv4si2 (op0, op1));
    3019            6 : 
    3020            8 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    3021            2 :   DONE;
    3022              : })
    3023              : 
    3024              : (define_expand "float<floatunssuffix><mmxintvecmodelower><mode>2"
    3025              :   [(set (match_operand:VHF_32_64 0 "register_operand")
    3026              :         (any_float:VHF_32_64
    3027              :           (match_operand:<mmxintvecmode> 1 "nonimmediate_operand")))]
    3028              :   "TARGET_AVX512FP16 && TARGET_AVX512VL && ix86_partial_vec_fp_math"
    3029            8 : {
    3030            8 :   rtx op1 = gen_reg_rtx (V8HImode);
    3031            8 :   rtx op0 = gen_reg_rtx (V8HFmode);
    3032              : 
    3033            8 :   rtx (*gen_movd_sse) (rtx, rtx)
    3034            4 :     = gen_mov<mov_to_sse_suffix>_<mmxintvecmodelower>_to_sse;
    3035            8 :   emit_insn (gen_movd_sse (op1, operands[1]));
    3036            4 : 
    3037           12 :   emit_insn (gen_float<floatunssuffix>v8hiv8hf2 (op0, op1));
    3038            4 : 
    3039            8 :   emit_move_insn (operands[0],
    3040              :                  lowpart_subreg (<MODE>mode, op0, V8HFmode));
    3041            8 :   DONE;
    3042              : })
    3043              : 
    3044              : (define_expand "float<floatunssuffix>v2siv2hf2"
    3045              :   [(set (match_operand:V2HF 0 "register_operand")
    3046              :         (any_float:V2HF
    3047              :           (match_operand:V2SI 1 "nonimmediate_operand")))]
    3048              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    3049              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    3050            2 : {
    3051            2 :   rtx op1 = gen_reg_rtx (V4SImode);
    3052            2 :   rtx op0 = gen_reg_rtx (V8HFmode);
    3053              : 
    3054           14 :   emit_insn (gen_movq_v2si_to_sse (op1, operands[1]));
    3055            4 : 
    3056           14 :   emit_insn (gen_avx512fp16_float<floatunssuffix>v4siv4hf2 (op0, op1));
    3057           16 : 
    3058           14 :   emit_move_insn (operands[0], lowpart_subreg (V2HFmode, op0, V8HFmode));
    3059            6 :   DONE;
    3060              : })
    3061              : 
    3062              : (define_expand "extendv2hfv2sf2"
    3063              :   [(set (match_operand:V2SF 0 "register_operand")
    3064              :         (float_extend:V2SF
    3065              :           (match_operand:V2HF 1 "nonimmediate_operand")))]
    3066              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    3067              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    3068            1 : {
    3069            1 :   rtx op1 = gen_reg_rtx (V8HFmode);
    3070            1 :   rtx op0 = gen_reg_rtx (V4SFmode);
    3071              : 
    3072           89 :   emit_insn (gen_movd_v2hf_to_sse (op1, operands[1]));
    3073              : 
    3074           89 :   emit_insn (gen_avx512fp16_float_extend_phv4sf2 (op0, op1));
    3075           88 : 
    3076           89 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    3077            1 :   DONE;
    3078              : })
    3079              : 
    3080              : (define_expand "truncv2sfv2hf2"
    3081              :   [(set (match_operand:V2HF 0 "register_operand")
    3082              :         (float_truncate:V2HF
    3083              :           (match_operand:V2SF 1 "nonimmediate_operand")))]
    3084              :   "TARGET_AVX512FP16 && TARGET_AVX512VL
    3085              :    && TARGET_MMX_WITH_SSE && ix86_partial_vec_fp_math"
    3086            1 : {
    3087            1 :   rtx op1 = gen_reg_rtx (V4SFmode);
    3088            1 :   rtx op0 = gen_reg_rtx (V8HFmode);
    3089              : 
    3090            1 :   emit_insn (gen_movq_v2sf_to_sse (op1, operands[1]));
    3091            0 : 
    3092            1 :   emit_insn (gen_avx512fp16_truncv4sfv4hf2 (op0, op1));
    3093            0 : 
    3094            1 :   emit_move_insn (operands[0], lowpart_subreg (V2HFmode, op0, V8HFmode));
    3095            1 :   DONE;
    3096              : })
    3097              : 
    3098              : (define_expand "truncv2sfv2bf2"
    3099              :   [(set (match_operand:V2BF 0 "register_operand")
    3100              :         (float_truncate:V2BF
    3101              :           (match_operand:V2SF 1 "nonimmediate_operand")))]
    3102              :   "TARGET_SSSE3 && TARGET_MMX_WITH_SSE
    3103              :   && !HONOR_NANS (BFmode) && !flag_rounding_math
    3104              :   && (flag_unsafe_math_optimizations
    3105              :       || TARGET_AVXNECONVERT
    3106              :       || (TARGET_AVX512BF16 && TARGET_AVX512VL))"
    3107            2 : {
    3108           35 :   rtx op1 = gen_reg_rtx (V4SFmode);
    3109            2 :   rtx op0 = gen_reg_rtx (V4BFmode);
    3110           33 : 
    3111           35 :   emit_move_insn (op1, lowpart_subreg (V4SFmode,
    3112           33 :                                        force_reg (V2SFmode, operands[1]),
    3113              :                                        V2SFmode));
    3114            2 :   emit_insn (gen_truncv4sfv4bf2 (op0, op1));
    3115              : 
    3116            2 :   emit_move_insn (operands[0], lowpart_subreg (V2BFmode, op0, V4BFmode));
    3117            2 :   DONE;
    3118              : })
    3119              : 
    3120              : (define_expand "extendv2bfv2sf2"
    3121              :   [(set (match_operand:V2SF 0 "register_operand")
    3122              :         (float_extend:V2SF
    3123              :           (match_operand:V2BF 1 "nonimmediate_operand")))]
    3124              :   "TARGET_SSE2 && TARGET_MMX_WITH_SSE && !HONOR_NANS (BFmode)"
    3125            2 : {
    3126            2 :   rtx op0 = gen_reg_rtx (V4SFmode);
    3127            2 :   rtx op1 = gen_reg_rtx (V4BFmode);
    3128              : 
    3129            2 :   emit_move_insn (op1, lowpart_subreg (V4BFmode,
    3130           33 :                                        force_reg (V2BFmode, operands[1]),
    3131              :                                        V2BFmode));
    3132           35 :   emit_insn (gen_extendv4bfv4sf2 (op0, op1));
    3133           33 : 
    3134           35 :   emit_move_insn (operands[0], lowpart_subreg (V2SFmode, op0, V4SFmode));
    3135            2 :   DONE;
    3136              : })
    3137              : 
    3138              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3139              : ;;
    3140              : ;; Parallel integral arithmetic
    3141              : ;;
    3142              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3143              : 
    3144              : (define_expand "neg<mode>2"
    3145              :   [(set (match_operand:MMXMODEI 0 "register_operand")
    3146              :         (minus:MMXMODEI
    3147              :           (match_dup 2)
    3148           40 :           (match_operand:MMXMODEI 1 "register_operand")))]
    3149              :   "TARGET_MMX_WITH_SSE"
    3150          133 :   "operands[2] = force_reg (<MODE>mode, CONST0_RTX (<MODE>mode));")
    3151           40 : 
    3152           40 : (define_expand "neg<mode>2"
    3153              :   [(set (match_operand:VI_32 0 "register_operand")
    3154           93 :         (minus:VI_32
    3155              :           (match_dup 2)
    3156              :           (match_operand:VI_32 1 "register_operand")))]
    3157              :   "TARGET_SSE2"
    3158          100 :   "operands[2] = force_reg (<MODE>mode, CONST0_RTX (<MODE>mode));")
    3159              : 
    3160              : (define_insn "negv2qi2"
    3161              :   [(set (match_operand:V2QI 0 "register_operand" "=?Q,&Yw")
    3162            7 :         (neg:V2QI
    3163          102 :           (match_operand:V2QI 1 "register_operand" "0,Yw")))
    3164              :    (clobber (reg:CC FLAGS_REG))]
    3165          148 :   "!TARGET_PARTIAL_REG_STALL || optimize_size || TARGET_SSE2"
    3166          112 :   "#"
    3167          108 :   [(set_attr "isa" "*,sse2")
    3168            6 :    (set_attr "type" "multi")
    3169              :    (set_attr "mode" "QI,TI")
    3170              :    (set (attr "enabled")
    3171           46 :         (cond [(and (eq_attr "alternative" "0")
    3172              :                     (and (match_test "TARGET_PARTIAL_REG_STALL")
    3173        37173 :                          (not (match_test "optimize_function_for_size_p (cfun)"))))
    3174        37174 :                 (symbol_ref "false")
    3175           47 :               ]
    3176         5801 :               (const_string "*")))])
    3177         5802 : 
    3178            1 : (define_split
    3179              :   [(set (match_operand:V2QI 0 "general_reg_operand")
    3180              :         (neg:V2QI
    3181              :           (match_operand:V2QI 1 "general_reg_operand")))
    3182              :    (clobber (reg:CC FLAGS_REG))]
    3183            4 :   "(!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
    3184            4 :    && reload_completed"
    3185            4 :   [(parallel
    3186            4 :      [(set (strict_low_part (match_dup 0))
    3187            0 :            (neg:QI (match_dup 1)))
    3188            4 :       (clobber (reg:CC FLAGS_REG))])
    3189              :    (parallel
    3190              :      [(set (zero_extract:HI (match_dup 2) (const_int 8) (const_int 8))
    3191              :            (subreg:HI
    3192              :              (neg:QI
    3193              :                (subreg:QI
    3194              :                  (zero_extract:HI (match_dup 3)
    3195              :                                   (const_int 8)
    3196              :                                   (const_int 8)) 0)) 0))
    3197              :       (clobber (reg:CC FLAGS_REG))])]
    3198            4 : {
    3199            4 :   operands[3] = lowpart_subreg (HImode, operands[1], V2QImode);
    3200            4 :   operands[2] = lowpart_subreg (HImode, operands[0], V2QImode);
    3201            4 :   operands[1] = lowpart_subreg (QImode, operands[1], V2QImode);
    3202            4 :   operands[0] = lowpart_subreg (QImode, operands[0], V2QImode);
    3203              : })
    3204              : 
    3205              : (define_split
    3206            4 :   [(set (match_operand:V2QI 0 "sse_reg_operand")
    3207              :         (neg:V2QI
    3208              :           (match_operand:V2QI 1 "sse_reg_operand")))
    3209              :    (clobber (reg:CC FLAGS_REG))]
    3210            0 :   "TARGET_SSE2 && reload_completed"
    3211            4 :   [(set (match_dup 0) (match_dup 2))
    3212            0 :    (set (match_dup 0)
    3213              :         (minus:V16QI (match_dup 0) (match_dup 1)))]
    3214         3497 : {
    3215         3501 :   operands[2] = CONST0_RTX (V16QImode);
    3216            0 :   operands[1] = lowpart_subreg (V16QImode, operands[1], V2QImode);
    3217           52 :   operands[0] = lowpart_subreg (V16QImode, operands[0], V2QImode);
    3218          104 : })
    3219              : 
    3220         1124 : (define_expand "mmx_<insn><mode>3"
    3221            0 :   [(set (match_operand:MMXMODEI8 0 "register_operand")
    3222         1124 :         (plusminus:MMXMODEI8
    3223         1124 :           (match_operand:MMXMODEI8 1 "register_mmxmem_operand")
    3224              :           (match_operand:MMXMODEI8 2 "register_mmxmem_operand")))]
    3225            0 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    3226          254 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    3227         1124 : 
    3228              : (define_expand "<insn><mode>3"
    3229              :   [(set (match_operand:MMXMODEI 0 "register_operand")
    3230         7483 :         (plusminus:MMXMODEI
    3231              :           (match_operand:MMXMODEI 1 "register_operand")
    3232         7262 :           (match_operand:MMXMODEI 2 "register_operand")))]
    3233         7229 :   "TARGET_MMX_WITH_SSE")
    3234          287 : 
    3235           33 : (define_insn "*mmx_<insn><mode>3"
    3236           33 :   [(set (match_operand:MMXMODEI8 0 "register_operand" "=y,x,<Yv_Yw>")
    3237         7229 :         (plusminus:MMXMODEI8
    3238              :           (match_operand:MMXMODEI8 1 "register_mmxmem_operand"
    3239         2440 :             "<comm>0,0,<Yv_Yw>")
    3240          233 :           (match_operand:MMXMODEI8 2 "register_mmxmem_operand"
    3241         2440 :             "ym,x,<Yv_Yw>")))]
    3242        14184 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3243       126607 :    && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
    3244        55335 :   "@
    3245           33 :    p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
    3246         2473 :    p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
    3247       165298 :    vp<plusminus_mnemonic><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3248       165298 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3249       165298 :    (set_attr "mmx_isa" "native,*,*")
    3250              :    (set_attr "type" "mmxadd,sseadd,sseadd")
    3251       280859 :    (set_attr "mode" "DI,TI,TI")])
    3252              : 
    3253          142 : (define_insn "<insn><mode>3"
    3254          142 :   [(set (match_operand:VI_32 0 "register_operand" "=x,Yw")
    3255          142 :         (plusminus:VI_32
    3256              :           (match_operand:VI_32 1 "register_operand" "<comm>0,Yw")
    3257              :           (match_operand:VI_32 2 "register_operand" "x,Yw")))]
    3258        10323 :   "TARGET_SSE2"
    3259              :   "@
    3260              :    p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
    3261              :    vp<plusminus_mnemonic><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3262        13575 :   [(set_attr "isa" "noavx,avx")
    3263         1765 :    (set_attr "type" "sseadd")
    3264        11810 :    (set_attr "mode" "TI")])
    3265         1765 : 
    3266        13575 : (define_insn "<insn>v2qi3"
    3267              :   [(set (match_operand:V2QI 0 "register_operand" "=?Q,x,Yw")
    3268         1765 :         (plusminus:V2QI
    3269              :           (match_operand:V2QI 1 "register_operand" "<comm>0,0,Yw")
    3270              :           (match_operand:V2QI 2 "register_operand" "Q,x,Yw")))
    3271              :    (clobber (reg:CC FLAGS_REG))]
    3272         2300 :   "!TARGET_PARTIAL_REG_STALL || optimize_size || TARGET_SSE2"
    3273              :   "#"
    3274          585 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3275          585 :    (set_attr "type" "multi,sseadd,sseadd")
    3276              :    (set_attr "mode" "QI,TI,TI")
    3277              :    (set (attr "enabled")
    3278              :         (cond [(and (eq_attr "alternative" "0")
    3279      7467970 :                     (and (match_test "TARGET_PARTIAL_REG_STALL")
    3280         7694 :                          (not (match_test "optimize_function_for_size_p (cfun)"))))
    3281         7723 :                 (symbol_ref "false")
    3282          176 :               ]
    3283       120565 :               (const_string "*")))])
    3284         7564 : 
    3285           17 : (define_split
    3286         7564 :   [(set (match_operand:V2QI 0 "general_reg_operand")
    3287              :         (plusminus:V2QI
    3288         1871 :           (match_operand:V2QI 1 "general_reg_operand")
    3289         1871 :           (match_operand:V2QI 2 "general_reg_operand")))
    3290         1871 :    (clobber (reg:CC FLAGS_REG))]
    3291         2015 :   "(!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
    3292          198 :    && reload_completed"
    3293         3895 :   [(parallel
    3294          974 :      [(set (strict_low_part (match_dup 0))
    3295           50 :            (plusminus:QI (match_dup 1) (match_dup 2)))
    3296           50 :       (clobber (reg:CC FLAGS_REG))])
    3297          974 :    (parallel
    3298              :      [(set (zero_extract:HI (match_dup 3) (const_int 8) (const_int 8))
    3299              :            (subreg:HI
    3300              :              (plusminus:QI
    3301              :                (subreg:QI
    3302              :                  (zero_extract:HI (match_dup 4)
    3303              :                                   (const_int 8)
    3304              :                                   (const_int 8)) 0)
    3305              :                (subreg:QI
    3306              :                  (zero_extract:HI (match_dup 5)
    3307              :                                   (const_int 8)
    3308              :                                   (const_int 8)) 0)) 0))
    3309              :       (clobber (reg:CC FLAGS_REG))])]
    3310          183 : {
    3311          183 :   operands[5] = lowpart_subreg (HImode, operands[2], V2QImode);
    3312          183 :   operands[4] = lowpart_subreg (HImode, operands[1], V2QImode);
    3313          183 :   operands[3] = lowpart_subreg (HImode, operands[0], V2QImode);
    3314          183 :   operands[2] = lowpart_subreg (QImode, operands[2], V2QImode);
    3315          183 :   operands[1] = lowpart_subreg (QImode, operands[1], V2QImode);
    3316          183 :   operands[0] = lowpart_subreg (QImode, operands[0], V2QImode);
    3317              : })
    3318              : 
    3319              : (define_split
    3320          183 :   [(set (match_operand:V2QI 0 "sse_reg_operand")
    3321              :         (plusminus:V2QI
    3322              :           (match_operand:V2QI 1 "sse_reg_operand")
    3323              :           (match_operand:V2QI 2 "sse_reg_operand")))
    3324              :    (clobber (reg:CC FLAGS_REG))]
    3325           50 :   "TARGET_SSE2 && reload_completed"
    3326          924 :   [(set (match_dup 0)
    3327           50 :         (plusminus:V16QI (match_dup 1) (match_dup 2)))]
    3328           50 : {
    3329      2852651 :   operands[2] = lowpart_subreg (V16QImode, operands[2], V2QImode);
    3330      1440530 :   operands[1] = lowpart_subreg (V16QImode, operands[1], V2QImode);
    3331      1412354 :   operands[0] = lowpart_subreg (V16QImode, operands[0], V2QImode);
    3332      1412304 : })
    3333           81 : 
    3334           81 : (define_expand "mmx_<insn><mode>3"
    3335         1046 :   [(set (match_operand:MMXMODE12 0 "register_operand")
    3336           24 :         (sat_plusminus:MMXMODE12
    3337         1077 :           (match_operand:MMXMODE12 1 "register_mmxmem_operand")
    3338          960 :           (match_operand:MMXMODE12 2 "register_mmxmem_operand")))]
    3339         1010 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    3340          208 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    3341              : 
    3342              : (define_expand "<insn><mode>3"
    3343              :   [(set (match_operand:MMXMODE12 0 "register_operand")
    3344          277 :         (sat_plusminus:MMXMODE12
    3345              :           (match_operand:MMXMODE12 1 "register_operand")
    3346            1 :           (match_operand:MMXMODE12 2 "register_operand")))]
    3347            1 :   "TARGET_MMX_WITH_SSE")
    3348          276 : 
    3349              : (define_insn "*mmx_<insn><mode>3"
    3350              :   [(set (match_operand:MMXMODE12 0 "register_operand" "=y,x,Yw")
    3351            1 :         (sat_plusminus:MMXMODE12
    3352              :           (match_operand:MMXMODE12 1 "register_mmxmem_operand" "<comm>0,0,Yw")
    3353           98 :           (match_operand:MMXMODE12 2 "register_mmxmem_operand" "ym,x,Yw")))]
    3354          232 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3355         1812 :    && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
    3356          459 :   "@
    3357           68 :    p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
    3358          361 :    p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
    3359         1368 :    vp<plusminus_mnemonic><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3360         1031 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3361           26 :    (set_attr "mmx_isa" "native,*,*")
    3362              :    (set_attr "type" "mmxadd,sseadd,sseadd")
    3363          361 :    (set_attr "mode" "DI,TI,TI")])
    3364              : 
    3365          427 : (define_insn "<insn><mode>3"
    3366           39 :   [(set (match_operand:VI_16_32 0 "register_operand" "=x,Yw")
    3367          427 :         (sat_plusminus:VI_16_32
    3368          492 :           (match_operand:VI_16_32 1 "register_operand" "<comm>0,Yw")
    3369          465 :           (match_operand:VI_16_32 2 "register_operand" "x,Yw")))]
    3370          218 :   "TARGET_SSE2"
    3371           26 :   "@
    3372           27 :    p<plusminus_mnemonic><mmxvecsize>\t{%2, %0|%0, %2}
    3373           17 :    vp<plusminus_mnemonic><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3374          445 :   [(set_attr "isa" "noavx,avx")
    3375          445 :    (set_attr "type" "sseadd")
    3376              :    (set_attr "mode" "TI")])
    3377           34 : 
    3378          337 : (define_insn "mulv2si3"
    3379        16220 :   [(set (match_operand:V2SI 0 "register_operand" "=Yr,*x,v")
    3380        14762 :         (mult:V2SI
    3381        14427 :           (match_operand:V2SI 1 "register_operand" "%0,0,v")
    3382         1462 :           (match_operand:V2SI 2 "register_operand" "Yr,*x,v")))]
    3383         7488 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    3384              :   "@
    3385       346853 :    pmulld\t{%2, %0|%0, %2}
    3386       345796 :    pmulld\t{%2, %0|%0, %2}
    3387       351256 :    vpmulld\t{%2, %1, %0|%0, %1, %2}"
    3388         6514 :   [(set_attr "isa" "noavx,noavx,avx")
    3389              :    (set_attr "type" "sseimul")
    3390         9656 :    (set_attr "prefix_extra" "1")
    3391          196 :    (set_attr "prefix" "orig,orig,vex")
    3392          536 :    (set_attr "btver2_decode" "vector")
    3393            0 :    (set_attr "mode" "TI")])
    3394            0 : 
    3395            0 : (define_expand "mmx_mulv4hi3"
    3396              :   [(set (match_operand:V4HI 0 "register_operand")
    3397              :         (mult:V4HI (match_operand:V4HI 1 "register_mmxmem_operand")
    3398              :                    (match_operand:V4HI 2 "register_mmxmem_operand")))]
    3399              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    3400           33 :   "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
    3401              : 
    3402              : (define_expand "mulv4hi3"
    3403              :   [(set (match_operand:V4HI 0 "register_operand")
    3404           33 :         (mult:V4HI (match_operand:V4HI 1 "register_operand")
    3405              :                    (match_operand:V4HI 2 "register_operand")))]
    3406              :   "TARGET_MMX_WITH_SSE")
    3407              : 
    3408           33 : (define_insn "*mmx_mulv4hi3"
    3409              :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    3410              :         (mult:V4HI (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yw")
    3411              :                    (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw")))]
    3412         4000 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3413         4022 :    && ix86_binary_operator_ok (MULT, V4HImode, operands)"
    3414         1460 :   "@
    3415           22 :    pmullw\t{%2, %0|%0, %2}
    3416           22 :    pmullw\t{%2, %0|%0, %2}
    3417        11256 :    vpmullw\t{%2, %1, %0|%0, %1, %2}"
    3418        11234 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3419              :    (set_attr "mmx_isa" "native,*,*")
    3420        11234 :    (set_attr "type" "mmxmul,ssemul,ssemul")
    3421              :    (set_attr "mode" "DI,TI,TI")])
    3422              : 
    3423              : (define_insn "mulv2hi3"
    3424              :   [(set (match_operand:V2HI 0 "register_operand" "=x,Yw")
    3425              :         (mult:V2HI (match_operand:V2HI 1 "register_operand" "%0,Yw")
    3426              :                    (match_operand:V2HI 2 "register_operand" "x,Yw")))]
    3427         9325 :   "TARGET_SSE2"
    3428              :   "@
    3429              :    pmullw\t{%2, %0|%0, %2}
    3430              :    vpmullw\t{%2, %1, %0|%0, %1, %2}"
    3431              :   [(set_attr "isa" "noavx,avx")
    3432              :    (set_attr "type" "ssemul")
    3433              :    (set_attr "mode" "TI")])
    3434              : 
    3435       387553 : (define_expand "mulv8qi3"
    3436       387553 :   [(set (match_operand:V8QI 0 "register_operand")
    3437       387553 :         (mult:V8QI (match_operand:V8QI 1 "register_operand")
    3438              :                    (match_operand:V8QI 2 "register_operand")))]
    3439       210181 :   "TARGET_MMX_WITH_SSE"
    3440       210540 : {
    3441          359 :   ix86_expand_vecop_qihi_partial (MULT, operands[0], operands[1], operands[2]);
    3442        39424 :   DONE;
    3443        39065 : })
    3444        39065 : 
    3445        39065 : (define_expand "mulv4qi3"
    3446        39065 :   [(set (match_operand:V4QI 0 "register_operand")
    3447        39065 :         (mult:V4QI (match_operand:V4QI 1 "register_operand")
    3448              :                    (match_operand:V4QI 2 "register_operand")))]
    3449        21241 :   "TARGET_SSE2"
    3450        22179 : {
    3451        22179 :   ix86_expand_vecop_qihi_partial (MULT, operands[0], operands[1], operands[2]);
    3452          938 :   DONE;
    3453              : })
    3454        41456 : 
    3455              : (define_expand "mmx_smulv4hi3_highpart"
    3456           11 :   [(set (match_operand:V4HI 0 "register_operand")
    3457              :         (truncate:V4HI
    3458           11 :           (lshiftrt:V4SI
    3459           11 :             (mult:V4SI
    3460              :               (sign_extend:V4SI
    3461              :                 (match_operand:V4HI 1 "register_mmxmem_operand"))
    3462              :               (sign_extend:V4SI
    3463           11 :                 (match_operand:V4HI 2 "register_mmxmem_operand")))
    3464              :             (const_int 16))))]
    3465              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    3466           56 :   "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
    3467              : 
    3468           38 : (define_insn "*mmx_smulv4hi3_highpart"
    3469           22 :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    3470           72 :         (truncate:V4HI
    3471           16 :           (lshiftrt:V4SI
    3472              :             (mult:V4SI
    3473              :               (sign_extend:V4SI
    3474           16 :                 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yw"))
    3475           34 :               (sign_extend:V4SI
    3476              :                 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw")))
    3477              :             (const_int 16))))]
    3478           16 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3479          196 :    && ix86_binary_operator_ok (MULT, V4HImode, operands)"
    3480           22 :   "@
    3481              :    pmulhw\t{%2, %0|%0, %2}
    3482           22 :    pmulhw\t{%2, %0|%0, %2}
    3483           27 :    vpmulhw\t{%2, %1, %0|%0, %1, %2}"
    3484           27 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3485              :    (set_attr "mmx_isa" "native,*,*")
    3486              :    (set_attr "type" "mmxmul,ssemul,ssemul")
    3487              :    (set_attr "mode" "DI,TI,TI")])
    3488              : 
    3489              : (define_expand "mmx_umulv4hi3_highpart"
    3490              :   [(set (match_operand:V4HI 0 "register_operand")
    3491              :         (truncate:V4HI
    3492              :           (lshiftrt:V4SI
    3493              :             (mult:V4SI
    3494              :               (zero_extend:V4SI
    3495              :                 (match_operand:V4HI 1 "register_mmxmem_operand"))
    3496              :               (zero_extend:V4SI
    3497              :                 (match_operand:V4HI 2 "register_mmxmem_operand")))
    3498              :             (const_int 16))))]
    3499              :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3500              :    && (TARGET_SSE || TARGET_3DNOW_A)"
    3501           22 :   "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
    3502              : 
    3503              : (define_insn "*mmx_umulv4hi3_highpart"
    3504              :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    3505           22 :         (truncate:V4HI
    3506              :           (lshiftrt:V4SI
    3507              :             (mult:V4SI
    3508              :               (zero_extend:V4SI
    3509              :                 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yw"))
    3510           22 :               (zero_extend:V4SI
    3511              :                 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw")))
    3512              :           (const_int 16))))]
    3513           17 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3514          247 :    && (TARGET_SSE || TARGET_3DNOW_A)
    3515          248 :    && ix86_binary_operator_ok (MULT, V4HImode, operands)"
    3516            0 :   "@
    3517            1 :    pmulhuw\t{%2, %0|%0, %2}
    3518            1 :    pmulhuw\t{%2, %0|%0, %2}
    3519            5 :    vpmulhuw\t{%2, %1, %0|%0, %1, %2}"
    3520            5 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3521              :    (set_attr "mmx_isa" "native,*,*")
    3522            1 :    (set_attr "type" "mmxmul,ssemul,ssemul")
    3523              :    (set_attr "mode" "DI,TI,TI")])
    3524              : 
    3525              : (define_expand "<s>mulv4hi3_highpart"
    3526              :   [(set (match_operand:V4HI 0 "register_operand")
    3527           17 :         (truncate:V4HI
    3528              :           (lshiftrt:V4SI
    3529           17 :             (mult:V4SI
    3530           17 :               (any_extend:V4SI
    3531              :                 (match_operand:V4HI 1 "register_operand"))
    3532              :               (any_extend:V4SI
    3533           17 :                 (match_operand:V4HI 2 "register_operand")))
    3534              :             (const_int 16))))]
    3535              :   "TARGET_MMX_WITH_SSE")
    3536              : 
    3537              : (define_insn "<s>mulv2hi3_highpart"
    3538         1121 :   [(set (match_operand:V2HI 0 "register_operand" "=x,Yw")
    3539              :         (truncate:V2HI
    3540         1121 :           (lshiftrt:V2SI
    3541         1121 :             (mult:V2SI
    3542              :               (any_extend:V2SI
    3543              :                 (match_operand:V2HI 1 "register_operand" "%0,Yw"))
    3544              :               (any_extend:V2SI
    3545         1121 :                 (match_operand:V2HI 2 "register_operand" "x,Yw")))
    3546              :             (const_int 16))))]
    3547           10 :   "TARGET_SSE2"
    3548              :   "@
    3549              :    pmulh<u>w\t{%2, %0|%0, %2}
    3550           43 :    vpmulh<u>w\t{%2, %1, %0|%0, %1, %2}"
    3551              :   [(set_attr "isa" "noavx,avx")
    3552           43 :    (set_attr "type" "ssemul")
    3553           43 :    (set_attr "mode" "TI")])
    3554           43 : 
    3555         3600 : (define_expand "mmx_pmaddwd"
    3556         3600 :   [(set (match_operand:V2SI 0 "register_operand")
    3557              :         (plus:V2SI
    3558              :           (mult:V2SI
    3559         2442 :             (sign_extend:V2SI
    3560          494 :               (vec_select:V2HI
    3561         2195 :                 (match_operand:V4HI 1 "register_mmxmem_operand")
    3562              :                 (parallel [(const_int 0) (const_int 2)])))
    3563           94 :             (sign_extend:V2SI
    3564           94 :               (vec_select:V2HI
    3565              :                 (match_operand:V4HI 2 "register_mmxmem_operand")
    3566           94 :                 (parallel [(const_int 0) (const_int 2)]))))
    3567           94 :           (mult:V2SI
    3568           94 :             (sign_extend:V2SI
    3569              :               (vec_select:V2HI (match_dup 1)
    3570           94 :                 (parallel [(const_int 1) (const_int 3)])))
    3571           94 :             (sign_extend:V2SI
    3572           94 :               (vec_select:V2HI (match_dup 2)
    3573              :                 (parallel [(const_int 1) (const_int 3)]))))))]
    3574           94 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    3575          128 :   "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
    3576           94 : 
    3577           94 : (define_insn "*mmx_pmaddwd"
    3578              :   [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yw")
    3579          128 :         (plus:V2SI
    3580           94 :           (mult:V2SI
    3581           94 :             (sign_extend:V2SI
    3582              :               (vec_select:V2HI
    3583           94 :                 (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yw")
    3584           94 :                 (parallel [(const_int 0) (const_int 2)])))
    3585           94 :             (sign_extend:V2SI
    3586              :               (vec_select:V2HI
    3587           94 :                 (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw")
    3588           94 :                 (parallel [(const_int 0) (const_int 2)]))))
    3589           94 :           (mult:V2SI
    3590           34 :             (sign_extend:V2SI
    3591           94 :               (vec_select:V2HI (match_dup 1)
    3592           94 :                 (parallel [(const_int 1) (const_int 3)])))
    3593           94 :             (sign_extend:V2SI
    3594           94 :               (vec_select:V2HI (match_dup 2)
    3595          346 :                 (parallel [(const_int 1) (const_int 3)]))))))]
    3596          275 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3597          527 :    && ix86_binary_operator_ok (MULT, V4HImode, operands)"
    3598          433 :   "@
    3599            7 :    pmaddwd\t{%2, %0|%0, %2}
    3600           87 :    pmaddwd\t{%2, %0|%0, %2}
    3601           87 :    vpmaddwd\t{%2, %1, %0|%0, %1, %2}"
    3602          339 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3603              :    (set_attr "mmx_isa" "native,*,*")
    3604           87 :    (set_attr "type" "mmxmul,sseiadd,sseiadd")
    3605      1595358 :    (set_attr "c86_attr" "madd")
    3606      1595358 :    (set_attr "mode" "DI,TI,TI")])
    3607      1595445 : 
    3608      1595283 : (define_expand "mmx_pmulhrwv4hi3"
    3609      1595271 :   [(set (match_operand:V4HI 0 "register_operand")
    3610      1595283 :         (truncate:V4HI
    3611      1595271 :           (lshiftrt:V4SI
    3612           12 :             (plus:V4SI
    3613      1200345 :               (mult:V4SI
    3614      1200345 :                 (sign_extend:V4SI
    3615      1200345 :                   (match_operand:V4HI 1 "nonimmediate_operand"))
    3616      1200345 :                 (sign_extend:V4SI
    3617      1200345 :                   (match_operand:V4HI 2 "nonimmediate_operand")))
    3618              :               (const_vector:V4SI [(const_int 32768) (const_int 32768)
    3619      1069236 :                                   (const_int 32768) (const_int 32768)]))
    3620      1069236 :             (const_int 16))))]
    3621      1069236 :   "TARGET_3DNOW"
    3622      1069250 :   "ix86_fixup_binary_operands_no_copy (MULT, V4HImode, operands);")
    3623      1069236 : 
    3624      1069236 : (define_insn "*mmx_pmulhrwv4hi3"
    3625      1069236 :   [(set (match_operand:V4HI 0 "register_operand" "=y")
    3626      1069250 :         (truncate:V4HI
    3627      1069236 :           (lshiftrt:V4SI
    3628      1069236 :             (plus:V4SI
    3629      1069236 :               (mult:V4SI
    3630      1069236 :                 (sign_extend:V4SI
    3631      1069236 :                   (match_operand:V4HI 1 "nonimmediate_operand" "%0"))
    3632      1069236 :                 (sign_extend:V4SI
    3633              :                   (match_operand:V4HI 2 "nonimmediate_operand" "ym")))
    3634         4110 :               (const_vector:V4SI [(const_int 32768) (const_int 32768)
    3635         4096 :                                   (const_int 32768) (const_int 32768)]))
    3636              :             (const_int 16))))]
    3637         4183 :   "TARGET_3DNOW && ix86_binary_operator_ok (MULT, V4HImode, operands)"
    3638            8 :   "pmulhrw\t{%2, %0|%0, %2}"
    3639              :   [(set_attr "type" "mmxmul")
    3640          237 :    (set_attr "prefix_extra" "1")
    3641         1528 :    (set_attr "mode" "DI")])
    3642         1765 : 
    3643         1528 : (define_expand "sse2_umulv1siv1di3"
    3644          237 :   [(set (match_operand:V1DI 0 "register_operand")
    3645         1528 :         (mult:V1DI
    3646         1528 :           (zero_extend:V1DI
    3647              :             (vec_select:V1SI
    3648         1492 :               (match_operand:V2SI 1 "register_mmxmem_operand")
    3649         1492 :               (parallel [(const_int 0)])))
    3650         1492 :           (zero_extend:V1DI
    3651              :             (vec_select:V1SI
    3652         1492 :               (match_operand:V2SI 2 "register_mmxmem_operand")
    3653         1492 :               (parallel [(const_int 0)])))))]
    3654         1492 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE2"
    3655         1504 :   "ix86_fixup_binary_operands_no_copy (MULT, V2SImode, operands);")
    3656         1492 : 
    3657              : (define_insn "*sse2_umulv1siv1di3"
    3658          419 :   [(set (match_operand:V1DI 0 "register_operand" "=y,x,Yv")
    3659          431 :         (mult:V1DI
    3660              :           (zero_extend:V1DI
    3661          277 :             (vec_select:V1SI
    3662              :               (match_operand:V2SI 1 "register_mmxmem_operand" "%0,0,Yv")
    3663              :               (parallel [(const_int 0)])))
    3664          419 :           (zero_extend:V1DI
    3665           12 :             (vec_select:V1SI
    3666              :               (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv")
    3667              :               (parallel [(const_int 0)])))))]
    3668           65 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3669           65 :    && TARGET_SSE2
    3670           89 :    && ix86_binary_operator_ok (MULT, V2SImode, operands)"
    3671            1 :   "@
    3672           24 :    pmuludq\t{%2, %0|%0, %2}
    3673           24 :    pmuludq\t{%2, %0|%0, %2}
    3674              :    vpmuludq\t{%2, %1, %0|%0, %1, %2}"
    3675              :   [(set_attr "isa" "*,sse2_noavx,avx")
    3676           24 :    (set_attr "mmx_isa" "native,*,*")
    3677              :    (set_attr "type" "mmxmul,ssemul,ssemul")
    3678        92834 :    (set_attr "mode" "DI,TI,TI")])
    3679        92834 : 
    3680        92834 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3681          262 : ;;
    3682        12995 : ;; Parallel integral shifts
    3683        13257 : ;;
    3684        13257 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3685        12995 : 
    3686        12995 : (define_insn "<code><mode>3"
    3687              :   [(set (match_operand:MMXMODE14 0 "register_operand" "=Yr,*x,Yv")
    3688         1807 :         (smaxmin:MMXMODE14
    3689         1545 :           (match_operand:MMXMODE14 1 "register_operand" "%0,0,Yv")
    3690              :           (match_operand:MMXMODE14 2 "register_operand" "Yr,*x,Yv")))]
    3691          410 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    3692              :   "@
    3693         1451 :    p<maxmin_int><mmxvecsize>\t{%2, %0|%0, %2}
    3694              :    p<maxmin_int><mmxvecsize>\t{%2, %0|%0, %2}
    3695          573 :    vp<maxmin_int><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3696           74 :   [(set_attr "isa" "noavx,noavx,avx")
    3697           32 :    (set_attr "type" "sseiadd")
    3698              :    (set_attr "prefix_extra" "1")
    3699              :    (set_attr "prefix" "orig,orig,vex")
    3700              :    (set_attr "mode" "TI")])
    3701              : 
    3702              : (define_expand "mmx_<code>v4hi3"
    3703              :   [(set (match_operand:V4HI 0 "register_operand")
    3704              :         (smaxmin:V4HI
    3705              :           (match_operand:V4HI 1 "register_mmxmem_operand")
    3706              :           (match_operand:V4HI 2 "register_mmxmem_operand")))]
    3707              :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3708              :    && (TARGET_SSE || TARGET_3DNOW_A)"
    3709           44 :   "ix86_fixup_binary_operands_no_copy (<CODE>, V4HImode, operands);")
    3710              : 
    3711              : (define_insn "*mmx_<code>v4hi3"
    3712              :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    3713           44 :         (smaxmin:V4HI
    3714              :           (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yw")
    3715              :           (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw")))]
    3716          109 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3717          543 :    && (TARGET_SSE || TARGET_3DNOW_A)
    3718          998 :    && ix86_binary_operator_ok (<CODE>, V4HImode, operands)"
    3719              :   "@
    3720              :    p<maxmin_int>w\t{%2, %0|%0, %2}
    3721              :    p<maxmin_int>w\t{%2, %0|%0, %2}
    3722          169 :    vp<maxmin_int>w\t{%2, %1, %0|%0, %1, %2}"
    3723          319 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3724           63 :    (set_attr "mmx_isa" "native,*,*")
    3725          276 :    (set_attr "type" "mmxadd,sseiadd,sseiadd")
    3726            0 :    (set_attr "mode" "DI,TI,TI")])
    3727          213 : 
    3728              : (define_expand "<code>v4hi3"
    3729           63 :   [(set (match_operand:V4HI 0 "register_operand")
    3730              :         (smaxmin:V4HI
    3731              :           (match_operand:V4HI 1 "register_operand")
    3732              :           (match_operand:V4HI 2 "register_operand")))]
    3733              :   "TARGET_MMX_WITH_SSE")
    3734          317 : 
    3735              : (define_insn "<code><mode>3"
    3736          317 :   [(set (match_operand:VI1_16_32 0 "register_operand" "=Yr,*x,Yv")
    3737          317 :         (smaxmin:VI1_16_32
    3738              :           (match_operand:VI1_16_32 1 "register_operand" "%0,0,Yv")
    3739              :           (match_operand:VI1_16_32 2 "register_operand" "Yr,*x,Yv")))]
    3740          106 :   "TARGET_SSE4_1"
    3741          317 :   "@
    3742              :    p<maxmin_int>b\t{%2, %0|%0, %2}
    3743              :    p<maxmin_int>b\t{%2, %0|%0, %2}
    3744          184 :    vp<maxmin_int>b\t{%2, %1, %0|%0, %1, %2}"
    3745           10 :   [(set_attr "isa" "noavx,noavx,avx")
    3746           18 :    (set_attr "type" "sseiadd")
    3747              :    (set_attr "prefix_extra" "1")
    3748           18 :    (set_attr "prefix" "orig,orig,vex")
    3749           18 :    (set_attr "mode" "TI")])
    3750           18 : 
    3751              : (define_insn "<code>v2hi3"
    3752              :   [(set (match_operand:V2HI 0 "register_operand" "=x,Yw")
    3753              :         (smaxmin:V2HI
    3754              :           (match_operand:V2HI 1 "register_operand" "%0,Yw")
    3755              :           (match_operand:V2HI 2 "register_operand" "x,Yw")))]
    3756          174 :   "TARGET_SSE2"
    3757              :   "@
    3758              :    p<maxmin_int>w\t{%2, %0|%0, %2}
    3759              :    vp<maxmin_int>w\t{%2, %1, %0|%0, %1, %2}"
    3760              :   [(set_attr "isa" "noavx,avx")
    3761              :    (set_attr "type" "sseiadd")
    3762              :    (set_attr "mode" "TI")])
    3763              : 
    3764              : (define_insn "<code><mode>3"
    3765       198888 :   [(set (match_operand:MMXMODE24 0 "register_operand" "=Yr,*x,Yv")
    3766       198888 :         (umaxmin:MMXMODE24
    3767       109034 :           (match_operand:MMXMODE24 1 "register_operand" "%0,0,Yv")
    3768         1652 :           (match_operand:MMXMODE24 2 "register_operand" "Yr,*x,Yv")))]
    3769         1878 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    3770              :   "@
    3771       103867 :    p<maxmin_int><mmxvecsize>\t{%2, %0|%0, %2}
    3772       103867 :    p<maxmin_int><mmxvecsize>\t{%2, %0|%0, %2}
    3773       104147 :    vp<maxmin_int><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3774          280 :   [(set_attr "isa" "noavx,noavx,avx")
    3775              :    (set_attr "type" "sseiadd")
    3776              :    (set_attr "prefix_extra" "1")
    3777       222860 :    (set_attr "prefix" "orig,orig,vex")
    3778       222860 :    (set_attr "mode" "TI")])
    3779       222860 : 
    3780              : (define_expand "mmx_<code>v8qi3"
    3781              :   [(set (match_operand:V8QI 0 "register_operand")
    3782              :         (umaxmin:V8QI
    3783      4168028 :           (match_operand:V8QI 1 "register_mmxmem_operand")
    3784      4168028 :           (match_operand:V8QI 2 "register_mmxmem_operand")))]
    3785      4168028 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3786              :    && (TARGET_SSE || TARGET_3DNOW_A)"
    3787           44 :   "ix86_fixup_binary_operands_no_copy (<CODE>, V8QImode, operands);")
    3788              : 
    3789      1115922 : (define_insn "*mmx_<code>v8qi3"
    3790      1115922 :   [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yw")
    3791      1115966 :         (umaxmin:V8QI
    3792              :           (match_operand:V8QI 1 "register_mmxmem_operand" "%0,0,Yw")
    3793              :           (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yw")))]
    3794          280 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    3795      4129819 :    && (TARGET_SSE || TARGET_3DNOW_A)
    3796      4129775 :    && ix86_binary_operator_ok (<CODE>, V8QImode, operands)"
    3797      4129495 :   "@
    3798              :    p<maxmin_int>b\t{%2, %0|%0, %2}
    3799              :    p<maxmin_int>b\t{%2, %0|%0, %2}
    3800          294 :    vp<maxmin_int>b\t{%2, %1, %0|%0, %1, %2}"
    3801      1470570 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3802      1470448 :    (set_attr "mmx_isa" "native,*,*")
    3803      1470448 :    (set_attr "type" "mmxadd,sseiadd,sseiadd")
    3804            0 :    (set_attr "mode" "DI,TI,TI")])
    3805            0 : 
    3806              : (define_expand "<code>v8qi3"
    3807         2441 :   [(set (match_operand:V8QI 0 "register_operand")
    3808         2355 :         (umaxmin:V8QI
    3809         2355 :           (match_operand:V8QI 1 "register_operand")
    3810              :           (match_operand:V8QI 2 "register_operand")))]
    3811              :   "TARGET_MMX_WITH_SSE")
    3812              : 
    3813         1219 : (define_insn "<code><mode>3"
    3814         1219 :   [(set (match_operand:VI1_16_32 0 "register_operand" "=x,Yw")
    3815         1219 :         (umaxmin:VI1_16_32
    3816         1219 :           (match_operand:VI1_16_32 1 "register_operand" "%0,Yw")
    3817            0 :           (match_operand:VI1_16_32 2 "register_operand" "x,Yw")))]
    3818          409 :   "TARGET_SSE2"
    3819          201 :   "@
    3820              :    p<maxmin_int>b\t{%2, %0|%0, %2}
    3821              :    vp<maxmin_int>b\t{%2, %1, %0|%0, %1, %2}"
    3822           38 :   [(set_attr "isa" "noavx,avx")
    3823           28 :    (set_attr "type" "sseiadd")
    3824              :    (set_attr "mode" "TI")])
    3825              : 
    3826              : (define_insn "<code>v2hi3"
    3827              :   [(set (match_operand:V2HI 0 "register_operand" "=Yr,*x,Yv")
    3828              :         (umaxmin:V2HI
    3829              :           (match_operand:V2HI 1 "register_operand" "%0,0,Yv")
    3830              :           (match_operand:V2HI 2 "register_operand" "Yr,*x,Yv")))]
    3831           10 :   "TARGET_SSE4_1"
    3832              :   "@
    3833              :    p<maxmin_int>w\t{%2, %0|%0, %2}
    3834              :    p<maxmin_int>w\t{%2, %0|%0, %2}
    3835            0 :    vp<maxmin_int>w\t{%2, %1, %0|%0, %1, %2}"
    3836            0 :   [(set_attr "isa" "noavx,noavx,avx")
    3837            0 :    (set_attr "type" "sseiadd")
    3838            0 :    (set_attr "prefix_extra" "1")
    3839            0 :    (set_attr "prefix" "orig,orig,vex")
    3840              :    (set_attr "mode" "TI")])
    3841              : 
    3842              : (define_insn "ssse3_abs<mode>2"
    3843              :   [(set (match_operand:MMXMODEI 0 "register_operand" "=y,Yv")
    3844              :         (abs:MMXMODEI
    3845              :           (match_operand:MMXMODEI 1 "register_mmxmem_operand" "ym,Yv")))]
    3846          106 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSSE3"
    3847           62 :   "@
    3848              :    pabs<mmxvecsize>\t{%1, %0|%0, %1}
    3849              :    %vpabs<mmxvecsize>\t{%1, %0|%0, %1}"
    3850          396 :   [(set_attr "mmx_isa" "native,*")
    3851          396 :    (set_attr "type" "sselog1")
    3852          386 :    (set_attr "prefix_rep" "0")
    3853          386 :    (set_attr "prefix_extra" "1")
    3854          682 :    (set (attr "prefix_rex") (symbol_ref "x86_extended_reg_mentioned_p (insn)"))
    3855              :    (set_attr "mode" "DI,TI")])
    3856              : 
    3857              : (define_expand "abs<mode>2"
    3858              :   [(set (match_operand:MMXMODEI 0 "register_operand")
    3859              :         (abs:MMXMODEI
    3860              :           (match_operand:MMXMODEI 1 "register_operand")))]
    3861              :   "TARGET_SSSE3 && TARGET_MMX_WITH_SSE")
    3862              : 
    3863              : (define_insn "abs<mode>2"
    3864              :   [(set (match_operand:VI_16_32 0 "register_operand" "=Yv")
    3865              :         (abs:VI_16_32
    3866              :           (match_operand:VI_16_32 1 "register_operand" "Yv")))]
    3867           36 :   "TARGET_SSSE3"
    3868           48 :   "%vpabs<mmxvecsize>\t{%1, %0|%0, %1}"
    3869              :   [(set_attr "type" "sselog1")
    3870              :    (set_attr "prefix_rep" "0")
    3871           62 :    (set_attr "prefix_extra" "1")
    3872           62 :    (set (attr "prefix_rex") (symbol_ref "x86_extended_reg_mentioned_p (insn)"))
    3873           50 :    (set_attr "mode" "TI")])
    3874           50 : 
    3875          102 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3876              : ;;
    3877      1803471 : ;; Parallel integral shifts
    3878              : ;;
    3879              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3880              : 
    3881      1803471 : (define_insn "mmx_ashr<mode>3"
    3882      1803471 :   [(set (match_operand:MMXMODE24 0 "register_operand" "=y,x,<Yv_Yw>")
    3883      1803471 :         (ashiftrt:MMXMODE24
    3884      1803471 :           (match_operand:MMXMODE24 1 "register_operand" "0,0,<Yv_Yw>")
    3885      1803471 :           (match_operand:DI 2 "nonmemory_operand" "yN,xN,<Yv_Yw>N")))]
    3886      1805501 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    3887              :   "@
    3888         1413 :    psra<mmxvecsize>\t{%2, %0|%0, %2}
    3889         1413 :    psra<mmxvecsize>\t{%2, %0|%0, %2}
    3890         3954 :    vpsra<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3891         5367 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3892         1413 :    (set_attr "mmx_isa" "native,*,*")
    3893              :    (set_attr "type" "mmxshft,sseishft,sseishft")
    3894         4736 :    (set (attr "length_immediate")
    3895          782 :      (if_then_else (match_operand 2 "const_int_operand")
    3896          782 :        (const_string "1")
    3897         1320 :        (const_string "0")))
    3898          244 :    (set_attr "mode" "DI,TI,TI")])
    3899          538 : 
    3900          538 : (define_insn_and_split "*mmx_ashr<mode>3_1"
    3901          538 :   [(set (match_operand:MMXMODE24 0 "register_operand")
    3902          538 :         (lt:MMXMODE24
    3903          538 :           (match_operand:MMXMODE24 1 "register_operand")
    3904              :           (match_operand:MMXMODE24 2 "const0_operand")))]
    3905         5463 :   "TARGET_MMX_WITH_SSE && ix86_pre_reload_split ()"
    3906              :   "#"
    3907          100 :   "&& 1"
    3908          550 :   [(set (match_dup 0) (ashiftrt:MMXMODE24 (match_dup 1) (match_dup 3)))]
    3909         2607 :   "operands[3] = gen_int_mode (<mmxscalarsize> - 1, DImode);")
    3910         1880 : 
    3911          225 : (define_expand "ashr<mode>3"
    3912          663 :   [(set (match_operand:MMXMODE24 0 "register_operand")
    3913              :         (ashiftrt:MMXMODE24
    3914              :           (match_operand:MMXMODE24 1 "register_operand")
    3915              :           (match_operand:DI 2 "nonmemory_operand")))]
    3916          450 :   "TARGET_MMX_WITH_SSE")
    3917              : 
    3918              : (define_insn "mmx_<insn><mode>3"
    3919              :   [(set (match_operand:MMXMODE248 0 "register_operand" "=y,x,<Yv_Yw>")
    3920              :         (any_lshift:MMXMODE248
    3921           26 :           (match_operand:MMXMODE248 1 "register_operand" "0,0,<Yv_Yw>")
    3922              :           (match_operand:DI 2 "nonmemory_operand" "yN,xN,<Yv_Yw>N")))]
    3923         6019 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    3924           26 :   "@
    3925           26 :    p<vshift><mmxvecsize>\t{%2, %0|%0, %2}
    3926              :    p<vshift><mmxvecsize>\t{%2, %0|%0, %2}
    3927        60323 :    vp<vshift><mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    3928        60323 :   [(set_attr "isa" "*,sse2_noavx,avx")
    3929              :    (set_attr "mmx_isa" "native,*,*")
    3930              :    (set_attr "type" "mmxshft,sseishft,sseishft")
    3931        60323 :    (set (attr "length_immediate")
    3932              :      (if_then_else (match_operand 2 "const_int_operand")
    3933              :        (const_string "1")
    3934              :        (const_string "0")))
    3935              :    (set_attr "mode" "DI,TI,TI")])
    3936              : 
    3937              : (define_split
    3938              :   [(set (match_operand:MMXMODE248 0 "register_operand")
    3939              :         (and:MMXMODE248
    3940              :           (lt:MMXMODE248
    3941              :             (match_operand:MMXMODE248 1 "register_operand")
    3942              :             (match_operand:MMXMODE248 2 "const0_operand"))
    3943              :           (match_operand:MMXMODE248 3 "const1_operand")))]
    3944            0 :   "TARGET_MMX_WITH_SSE && ix86_pre_reload_split ()"
    3945           28 :   [(set (match_dup 0) (lshiftrt:MMXMODE248 (match_dup 1) (match_dup 4)))]
    3946            0 :   "operands[4] = gen_int_mode (<mmxscalarsize> - 1, DImode);")
    3947              : 
    3948           28 : (define_expand "<insn><mode>3"
    3949           28 :   [(set (match_operand:MMXMODE24 0 "register_operand")
    3950              :         (any_lshift:MMXMODE24
    3951           28 :           (match_operand:MMXMODE24 1 "register_operand")
    3952              :           (match_operand:DI 2 "nonmemory_operand")))]
    3953            0 :   "TARGET_MMX_WITH_SSE")
    3954              : 
    3955              : (define_insn "mmx_<insn>v1si3"
    3956              :   [(set (match_operand:V1SI 0 "register_operand" "=x,Yw")
    3957              :         (any_lshift:V1SI
    3958           11 :           (match_operand:V1SI 1 "register_operand" "0,Yw")
    3959           45 :           (match_operand:DI 2 "nonmemory_operand" "xN,YwN")))]
    3960         3822 :   "TARGET_SSE2"
    3961           56 :   "@
    3962           11 :    p<vshift>d\t{%2, %0|%0, %2}
    3963           45 :    vp<vshift>d\t{%2, %1, %0|%0, %1, %2}"
    3964          846 :   [(set_attr "isa" "noavx,avx")
    3965          846 :    (set_attr "type" "sseishft")
    3966              :    (set (attr "length_immediate")
    3967              :      (if_then_else (match_operand 2 "const_int_operand")
    3968          846 :        (const_string "1")
    3969              :        (const_string "0")))
    3970              :    (set_attr "mode" "TI")])
    3971              : 
    3972              : (define_insn "<insn>v2hi3"
    3973              :   [(set (match_operand:V2HI 0 "register_operand" "=x,Yw")
    3974              :         (any_shift:V2HI
    3975              :           (match_operand:V2HI 1 "register_operand" "0,Yw")
    3976              :           (match_operand:DI 2 "nonmemory_operand" "xN,YwN")))]
    3977          946 :   "TARGET_SSE2"
    3978              :   "@
    3979              :    p<vshift>w\t{%2, %0|%0, %2}
    3980              :    vp<vshift>w\t{%2, %1, %0|%0, %1, %2}"
    3981          253 :   [(set_attr "isa" "noavx,avx")
    3982          253 :    (set_attr "type" "sseishft")
    3983          253 :    (set (attr "length_immediate")
    3984              :      (if_then_else (match_operand 2 "const_int_operand")
    3985              :        (const_string "1")
    3986          253 :        (const_string "0")))
    3987              :    (set_attr "mode" "TI")])
    3988              : 
    3989              : (define_insn_and_split "*mmx_ashrv2hi3_1"
    3990              :   [(set (match_operand:V2HI 0 "register_operand")
    3991              :         (lt:V2HI
    3992              :           (match_operand:V2HI 1 "register_operand")
    3993              :           (match_operand:V2HI 2 "const0_operand")))]
    3994          147 :   "TARGET_SSE2 && ix86_pre_reload_split ()"
    3995              :   "#"
    3996              :   "&& 1"
    3997           12 :   [(set (match_dup 0) (ashiftrt:V2HI (match_dup 1) (match_dup 3)))]
    3998           12 :   "operands[3] = gen_int_mode (15, DImode);")
    3999              : 
    4000              : (define_split
    4001           12 :   [(set (match_operand:V2HI 0 "register_operand")
    4002              :         (and:V2HI
    4003       547469 :           (lt:V2HI
    4004       547469 :             (match_operand:V2HI 1 "register_operand")
    4005      1015124 :             (match_operand:V2HI 2 "const0_operand"))
    4006      1015112 :           (match_operand:V2HI 3 "const1_operand")))]
    4007      1015112 :   "TARGET_SSE2 && ix86_pre_reload_split ()"
    4008       547469 :   [(set (match_dup 0) (lshiftrt:V2HI (match_dup 1) (match_dup 4)))]
    4009            0 :   "operands[4] = gen_int_mode (15, DImode);")
    4010         3681 : 
    4011      1048318 : (define_expand "<insn>v8qi3"
    4012      1044632 :   [(set (match_operand:V8QI 0 "register_operand")
    4013      1048318 :         (any_shift:V8QI (match_operand:V8QI 1 "register_operand")
    4014            0 :                         (match_operand:DI 2 "nonmemory_operand")))]
    4015       246646 :   "TARGET_MMX_WITH_SSE"
    4016       246738 : {
    4017       484172 :   ix86_expand_vecop_qihi_partial (<CODE>, operands[0],
    4018       484075 :                                   operands[1], operands[2]);
    4019       484172 :   DONE;
    4020              : })
    4021            3 : 
    4022              : (define_expand "<insn>v4qi3"
    4023      1594206 :   [(set (match_operand:V4QI 0 "register_operand")
    4024      1594206 :         (any_shift:V4QI (match_operand:V4QI 1 "register_operand")
    4025      1594206 :                         (match_operand:DI 2 "nonmemory_operand")))]
    4026              :   "TARGET_SSE2"
    4027           33 : {
    4028           33 :   ix86_expand_vecop_qihi_partial (<CODE>, operands[0],
    4029       709759 :                                   operands[1], operands[2]);
    4030       709792 :   DONE;
    4031       709759 : })
    4032       709759 : 
    4033            7 : (define_insn_and_split "<insn>v2qi3"
    4034            0 :   [(set (match_operand:V2QI 0 "register_operand" "=Q")
    4035            7 :         (any_shift:V2QI
    4036            7 :           (match_operand:V2QI 1 "register_operand" "0")
    4037            7 :           (match_operand:QI 2 "nonmemory_operand" "cI")))
    4038              :    (clobber (reg:CC FLAGS_REG))]
    4039          637 :   "!TARGET_PARTIAL_REG_STALL || optimize_size"
    4040           54 :   "#"
    4041          123 :   "(!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
    4042          299 :    && reload_completed"
    4043           50 :   [(parallel
    4044           53 :      [(set (zero_extract:HI (match_dup 3) (const_int 8) (const_int 8))
    4045              :            (subreg:HI
    4046       156662 :              (any_shift:QI
    4047       156669 :                (subreg:QI
    4048          134 :                  (zero_extract:HI (match_dup 4)
    4049        67954 :                                   (const_int 8)
    4050       128726 :                                   (const_int 8)) 0)
    4051       128726 :                (match_dup 2)) 0))
    4052       128623 :       (clobber (reg:CC FLAGS_REG))])
    4053           59 :    (parallel
    4054           69 :      [(set (strict_low_part (match_dup 0))
    4055           20 :            (any_shift:QI (match_dup 1) (match_dup 2)))
    4056              :       (clobber (reg:CC FLAGS_REG))])]
    4057           50 : {
    4058           50 :   operands[4] = lowpart_subreg (HImode, operands[1], V2QImode);
    4059           50 :   operands[3] = lowpart_subreg (HImode, operands[0], V2QImode);
    4060           50 :   operands[1] = lowpart_subreg (QImode, operands[1], V2QImode);
    4061           50 :   operands[0] = lowpart_subreg (QImode, operands[0], V2QImode);
    4062              : }
    4063              :   [(set_attr "type" "multi")
    4064              :    (set_attr "mode" "QI")])
    4065           50 : 
    4066              : (define_expand "v<insn>v8qi3"
    4067              :   [(set (match_operand:V8QI 0 "register_operand")
    4068              :         (any_shift:V8QI
    4069              :           (match_operand:V8QI 1 "register_operand")
    4070              :           (match_operand:V8QI 2 "register_operand")))]
    4071              :   "TARGET_AVX512BW && TARGET_AVX512VL && TARGET_MMX_WITH_SSE"
    4072            9 : {
    4073            9 :   ix86_expand_vecop_qihi_partial (<CODE>, operands[0],
    4074           50 :                                   operands[1], operands[2]);
    4075            9 :   DONE;
    4076              : })
    4077              : 
    4078              : (define_expand "v<insn>v4qi3"
    4079            3 :   [(set (match_operand:V4QI 0 "register_operand")
    4080              :         (any_shift:V4QI
    4081            3 :           (match_operand:V4QI 1 "register_operand")
    4082            3 :           (match_operand:V4QI 2 "register_operand")))]
    4083            3 :   "TARGET_AVX512BW && TARGET_AVX512VL"
    4084            4 : {
    4085            4 :   ix86_expand_vecop_qihi_partial (<CODE>, operands[0],
    4086              :                                   operands[1], operands[2]);
    4087            4 :   DONE;
    4088              : })
    4089            5 : 
    4090              : (define_expand "vec_shl_<mode>"
    4091            5 :   [(set (match_operand:V248FI 0 "register_operand")
    4092            5 :         (ashift:V1DI
    4093            5 :           (match_operand:V248FI 1 "nonimmediate_operand")
    4094              :           (match_operand:DI 2 "nonmemory_operand")))]
    4095              :   "TARGET_MMX_WITH_SSE"
    4096            7 : {
    4097            8 :   rtx op0 = gen_reg_rtx (V1DImode);
    4098            7 :   rtx op1 = force_reg (<MODE>mode, operands[1]);
    4099              : 
    4100            7 :   emit_insn (gen_mmx_ashlv1di3
    4101            9 :               (op0, gen_lowpart (V1DImode, op1), operands[2]));
    4102            7 :   emit_move_insn (operands[0], gen_lowpart (<MODE>mode, op0));
    4103            9 :   DONE;
    4104            3 : })
    4105            3 : 
    4106              : (define_expand "vec_shl_<mode>"
    4107              :   [(set (match_operand:V24FI_32 0 "register_operand")
    4108              :         (ashift:V1SI
    4109              :           (match_operand:V24FI_32 1 "nonimmediate_operand")
    4110              :           (match_operand:DI 2 "nonmemory_operand")))]
    4111              :   "TARGET_SSE2"
    4112            4 : {
    4113            4 :   rtx op0 = gen_reg_rtx (V1SImode);
    4114            4 :   rtx op1 = force_reg (<MODE>mode, operands[1]);
    4115              : 
    4116            4 :   emit_insn (gen_mmx_ashlv1si3
    4117         1254 :               (op0, gen_lowpart (V1SImode, op1), operands[2]));
    4118            4 :   emit_move_insn (operands[0], gen_lowpart (<MODE>mode, op0));
    4119         1254 :   DONE;
    4120         1250 : })
    4121         1250 : 
    4122              : (define_expand "vec_shr_<mode>"
    4123              :   [(set (match_operand:V248FI 0 "register_operand")
    4124              :         (lshiftrt:V1DI
    4125              :           (match_operand:V248FI 1 "nonimmediate_operand")
    4126              :           (match_operand:DI 2 "nonmemory_operand")))]
    4127              :   "TARGET_MMX_WITH_SSE"
    4128         1250 : {
    4129         1250 :   rtx op0 = gen_reg_rtx (V1DImode);
    4130         1250 :   rtx op1 = force_reg (<MODE>mode, operands[1]);
    4131              : 
    4132         1250 :   emit_insn (gen_mmx_lshrv1di3
    4133         1491 :               (op0, gen_lowpart (V1DImode, op1), operands[2]));
    4134         1250 :   emit_move_insn (operands[0], gen_lowpart (<MODE>mode, op0));
    4135         1491 :   DONE;
    4136          241 : })
    4137          241 : 
    4138              : (define_expand "vec_shr_<mode>"
    4139              :   [(set (match_operand:V24FI_32 0 "register_operand")
    4140              :         (lshiftrt:V1SI
    4141              :           (match_operand:V24FI_32 1 "nonimmediate_operand")
    4142              :           (match_operand:DI 2 "nonmemory_operand")))]
    4143              :   "TARGET_SSE2"
    4144          241 : {
    4145          241 :   rtx op0 = gen_reg_rtx (V1SImode);
    4146          241 :   rtx op1 = force_reg (<MODE>mode, operands[1]);
    4147              : 
    4148          241 :   emit_insn (gen_mmx_lshrv1si3
    4149         1133 :               (op0, gen_lowpart (V1SImode, op1), operands[2]));
    4150          241 :   emit_move_insn (operands[0], gen_lowpart (<MODE>mode, op0));
    4151         1133 :   DONE;
    4152          892 : })
    4153          892 : 
    4154              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4155              : ;;
    4156              : ;; Parallel integral comparisons
    4157              : ;;
    4158              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4159              : 
    4160              : (define_expand "mmx_eq<mode>3"
    4161              :   [(set (match_operand:MMXMODEI 0 "register_operand")
    4162              :         (eq:MMXMODEI
    4163              :           (match_operand:MMXMODEI 1 "register_mmxmem_operand")
    4164              :           (match_operand:MMXMODEI 2 "register_mmxmem_operand")))]
    4165          161 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4166          105 :   "ix86_fixup_binary_operands_no_copy (EQ, <MODE>mode, operands);")
    4167          161 : 
    4168          161 : (define_insn "*mmx_eq<mode>3"
    4169          161 :   [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,x")
    4170          105 :         (eq:MMXMODEI
    4171              :           (match_operand:MMXMODEI 1 "register_mmxmem_operand" "%0,0,x")
    4172              :           (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,x")))]
    4173         1831 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    4174        11479 :    && ix86_binary_operator_ok (EQ, <MODE>mode, operands)"
    4175        10011 :   "@
    4176              :    pcmpeq<mmxvecsize>\t{%2, %0|%0, %2}
    4177              :    pcmpeq<mmxvecsize>\t{%2, %0|%0, %2}
    4178        19740 :    vpcmpeq<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    4179        19934 :   [(set_attr "isa" "*,sse2_noavx,avx")
    4180              :    (set_attr "mmx_isa" "native,*,*")
    4181        29511 :    (set_attr "type" "mmxcmp,ssecmp,ssecmp")
    4182          194 :    (set_attr "mode" "DI,TI,TI")])
    4183          194 : 
    4184              : (define_insn "*eq<mode>3"
    4185              :   [(set (match_operand:VI_16_32 0 "register_operand" "=x,x")
    4186              :         (eq:VI_16_32
    4187              :           (match_operand:VI_16_32 1 "register_operand" "%0,x")
    4188              :           (match_operand:VI_16_32 2 "register_operand" "x,x")))]
    4189          928 :   "TARGET_SSE2"
    4190              :   "@
    4191              :    pcmpeq<mmxvecsize>\t{%2, %0|%0, %2}
    4192              :    vpcmpeq<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    4193         2102 :   [(set_attr "isa" "noavx,avx")
    4194         2102 :    (set_attr "type" "ssecmp")
    4195              :    (set_attr "mode" "TI")])
    4196         2102 : 
    4197              : (define_insn "mmx_gt<mode>3"
    4198              :   [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,x")
    4199              :         (gt:MMXMODEI
    4200              :           (match_operand:MMXMODEI 1 "register_operand" "0,0,x")
    4201              :           (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,x")))]
    4202         2073 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4203      6132567 :   "@
    4204              :    pcmpgt<mmxvecsize>\t{%2, %0|%0, %2}
    4205              :    pcmpgt<mmxvecsize>\t{%2, %0|%0, %2}
    4206        11734 :    vpcmpgt<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    4207      6144301 :   [(set_attr "isa" "*,sse2_noavx,avx")
    4208      6132567 :    (set_attr "mmx_isa" "native,*,*")
    4209      6144301 :    (set_attr "type" "mmxcmp,ssecmp,ssecmp")
    4210      6132567 :    (set_attr "mode" "DI,TI,TI")])
    4211      6132567 : 
    4212              : (define_insn "*gt<mode>3"
    4213       427849 :   [(set (match_operand:VI_16_32 0 "register_operand" "=x,x")
    4214       427849 :         (gt:VI_16_32
    4215              :           (match_operand:VI_16_32 1 "register_operand" "0,x")
    4216            0 :           (match_operand:VI_16_32 2 "register_operand" "x,x")))]
    4217          370 :   "TARGET_SSE2"
    4218              :   "@
    4219              :    pcmpgt<mmxvecsize>\t{%2, %0|%0, %2}
    4220              :    vpcmpgt<mmxvecsize>\t{%2, %1, %0|%0, %1, %2}"
    4221         1557 :   [(set_attr "isa" "noavx,avx")
    4222         1557 :    (set_attr "type" "ssecmp")
    4223              :    (set_attr "mode" "TI")])
    4224         1557 : 
    4225              : (define_insn "*xop_maskcmp<mode>3"
    4226              :   [(set (match_operand:MMXMODEI 0 "register_operand" "=x")
    4227              :         (match_operator:MMXMODEI 1 "ix86_comparison_int_operator"
    4228              :          [(match_operand:MMXMODEI 2 "register_operand" "x")
    4229      4572873 :           (match_operand:MMXMODEI 3 "register_operand" "x")]))]
    4230      4573002 :   "TARGET_XOP"
    4231      4572873 :   "vpcom%Y1<mmxvecsize>\t{%3, %2, %0|%0, %2, %3}"
    4232      4572873 :   [(set_attr "type" "sse4arg")
    4233      4572873 :    (set_attr "mode" "TI")])
    4234      4572873 : 
    4235        17522 : (define_insn "*xop_maskcmp<mode>3"
    4236         4299 :   [(set (match_operand:VI_16_32 0 "register_operand" "=x")
    4237        21821 :         (match_operator:VI_16_32 1 "ix86_comparison_int_operator"
    4238              :          [(match_operand:VI_16_32 2 "register_operand" "x")
    4239         4299 :           (match_operand:VI_16_32 3 "register_operand" "x")]))]
    4240            0 :   "TARGET_XOP"
    4241              :   "vpcom%Y1<mmxvecsize>\t{%3, %2, %0|%0, %2, %3}"
    4242              :   [(set_attr "type" "sse4arg")
    4243              :    (set_attr "mode" "TI")])
    4244         2366 : 
    4245         2366 : (define_insn "*xop_maskcmp_uns<mode>3"
    4246              :   [(set (match_operand:MMXMODEI 0 "register_operand" "=x")
    4247         2366 :         (match_operator:MMXMODEI 1 "ix86_comparison_uns_operator"
    4248              :          [(match_operand:MMXMODEI 2 "register_operand" "x")
    4249              :           (match_operand:MMXMODEI 3 "register_operand" "x")]))]
    4250     38287736 :   "TARGET_XOP"
    4251              :   "vpcom%Y1u<mmxvecsize>\t{%3, %2, %0|%0, %2, %3}"
    4252              :   [(set_attr "type" "sse4arg")
    4253              :    (set_attr "mode" "TI")])
    4254     38299955 : 
    4255     38299955 : (define_insn "*xop_maskcmp_uns<mode>3"
    4256     38287736 :   [(set (match_operand:VI_16_32 0 "register_operand" "=x")
    4257     38299955 :         (match_operator:VI_16_32 1 "ix86_comparison_uns_operator"
    4258     38287736 :          [(match_operand:VI_16_32 2 "register_operand" "x")
    4259              :           (match_operand:VI_16_32 3 "register_operand" "x")]))]
    4260     30877151 :   "TARGET_XOP"
    4261     30877151 :   "vpcom%Y1u<mmxvecsize>\t{%3, %2, %0|%0, %2, %3}"
    4262     30877151 :   [(set_attr "type" "sse4arg")
    4263              :    (set_attr "mode" "TI")])
    4264         1774 : 
    4265         1774 : (define_expand "vec_cmp<mode><mode>"
    4266      3767286 :   [(set (match_operand:MMXMODEI 0 "register_operand")
    4267      3769060 :         (match_operator:MMXMODEI 1 ""
    4268      3767286 :           [(match_operand:MMXMODEI 2 "register_operand")
    4269              :            (match_operand:MMXMODEI 3 "register_operand")]))]
    4270              :   "TARGET_MMX_WITH_SSE"
    4271          787 : {
    4272      3125911 :   bool ok = ix86_expand_int_vec_cmp (operands);
    4273      3125911 :   gcc_assert (ok);
    4274      6357214 :   DONE;
    4275              : })
    4276              : 
    4277              : (define_expand "vec_cmp<mode><mode>"
    4278      3749478 :   [(set (match_operand:VI_16_32 0 "register_operand")
    4279      3749478 :         (match_operator:VI_16_32 1 ""
    4280      3231303 :           [(match_operand:VI_16_32 2 "register_operand")
    4281      3231738 :            (match_operand:VI_16_32 3 "register_operand")]))]
    4282      3231738 :   "TARGET_SSE2"
    4283      3231858 : {
    4284          120 :   bool ok = ix86_expand_int_vec_cmp (operands);
    4285      2759066 :   gcc_assert (ok);
    4286      2759066 :   DONE;
    4287      2758946 : })
    4288      2758655 : 
    4289      2758903 : (define_expand "vec_cmpu<mode><mode>"
    4290      2758992 :   [(set (match_operand:MMXMODEI 0 "register_operand")
    4291      2758992 :         (match_operator:MMXMODEI 1 ""
    4292      2758992 :           [(match_operand:MMXMODEI 2 "register_operand")
    4293      2758566 :            (match_operand:MMXMODEI 3 "register_operand")]))]
    4294      2758566 :   "TARGET_MMX_WITH_SSE"
    4295      2758754 : {
    4296      2758754 :   bool ok = ix86_expand_int_vec_cmp (operands);
    4297      2758754 :   gcc_assert (ok);
    4298      2758754 :   DONE;
    4299      2758566 : })
    4300      2758790 : 
    4301              : (define_expand "vec_cmpu<mode><mode>"
    4302      2712085 :   [(set (match_operand:VI_16_32 0 "register_operand")
    4303      2592716 :         (match_operator:VI_16_32 1 ""
    4304       162690 :           [(match_operand:VI_16_32 2 "register_operand")
    4305      2874151 :            (match_operand:VI_16_32 3 "register_operand")]))]
    4306              :   "TARGET_SSE2"
    4307         5836 : {
    4308         5836 :   bool ok = ix86_expand_int_vec_cmp (operands);
    4309          109 :   gcc_assert (ok);
    4310          303 :   DONE;
    4311          194 : })
    4312          320 : 
    4313          194 : (define_expand "vcond_mask_<mode><mmxintvecmodelower>"
    4314          320 :   [(set (match_operand:MMXMODE124 0 "register_operand")
    4315          320 :         (vec_merge:MMXMODE124
    4316          320 :           (match_operand:MMXMODE124 1 "register_operand")
    4317           46 :           (match_operand:MMXMODE124 2 "register_operand")
    4318          148 :           (match_operand:<mmxintvecmode> 3 "register_operand")))]
    4319          148 :   "TARGET_MMX_WITH_SSE"
    4320          399 : {
    4321          251 :   ix86_expand_sse_movcc (operands[0], operands[3],
    4322          126 :                          operands[1], operands[2]);
    4323          377 :   DONE;
    4324              : })
    4325            9 : 
    4326            6 : (define_expand "vcond_mask_<mode><mode>"
    4327            9 :   [(set (match_operand:VI_16_32 0 "register_operand")
    4328            6 :         (vec_merge:VI_16_32
    4329            3 :           (match_operand:VI_16_32 1 "register_operand")
    4330            6 :           (match_operand:VI_16_32 2 "register_operand")
    4331              :           (match_operand:VI_16_32 3 "register_operand")))]
    4332            2 :   "TARGET_SSE2"
    4333          128 : {
    4334          126 :   ix86_expand_sse_movcc (operands[0], operands[3],
    4335              :                          operands[1], operands[2]);
    4336          126 :   DONE;
    4337              : })
    4338           33 : 
    4339              : (define_insn "mmx_pblendvb_v8qi"
    4340           33 :   [(set (match_operand:V8QI 0 "register_operand" "=Yr,*x,x")
    4341            0 :         (unspec:V8QI
    4342           33 :           [(match_operand:V8QI 1 "register_operand" "0,0,x")
    4343              :            (match_operand:V8QI 2 "register_operand" "Yr,*x,x")
    4344              :            (match_operand:V8QI 3 "register_operand" "Yz,Yz,x")]
    4345              :           UNSPEC_BLENDV))]
    4346         1851 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    4347              :   "@
    4348              :    pblendvb\t{%3, %2, %0|%0, %2, %3}
    4349              :    pblendvb\t{%3, %2, %0|%0, %2, %3}
    4350         3569 :    vpblendvb\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4351         3522 :   [(set_attr "isa" "noavx,noavx,avx")
    4352           47 :    (set_attr "type" "ssemov")
    4353         3569 :    (set_attr "c86_attr" "blendv")
    4354           47 :    (set_attr "prefix_extra" "1")
    4355              :    (set_attr "length_immediate" "1")
    4356              :    (set_attr "prefix" "orig,orig,vex")
    4357              :    (set_attr "btver2_decode" "vector")
    4358              :    (set_attr "mode" "TI")])
    4359              : 
    4360              : (define_insn_and_split "*mmx_pblendvb_v8qi_1"
    4361              :   [(set (match_operand:V8QI 0 "register_operand")
    4362              :        (unspec:V8QI
    4363              :           [(match_operand:V8QI 1 "register_operand")
    4364              :            (match_operand:V8QI 2 "register_operand")
    4365              :            (eq:V8QI
    4366              :              (eq:V8QI
    4367              :                 (match_operand:V8QI 3 "register_operand")
    4368              :                 (match_operand:V8QI 4 "nonmemory_operand"))
    4369              :              (match_operand:V8QI 5 "const0_operand"))]
    4370              :            UNSPEC_BLENDV))]
    4371            0 :   "TARGET_MMX_WITH_SSE && ix86_pre_reload_split ()"
    4372            0 :   "#"
    4373              :   "&& 1"
    4374            0 :   [(set (match_dup 6)
    4375            6 :         (eq:V8QI (match_dup 3) (match_dup 7)))
    4376            6 :    (set (match_dup 0)
    4377            6 :         (unspec:V8QI
    4378            6 :           [(match_dup 2)
    4379              :            (match_dup 1)
    4380              :            (match_dup 6)]
    4381              :           UNSPEC_BLENDV))]
    4382            0 : {
    4383            0 :   operands[6] = gen_reg_rtx (V8QImode);
    4384            0 :   operands[7] = force_reg (V8QImode, operands[4]);
    4385              : })
    4386              : 
    4387              : (define_insn_and_split "*mmx_pblendvb_v8qi_2"
    4388            0 :   [(set (match_operand:V8QI 0 "register_operand")
    4389              :        (unspec:V8QI
    4390              :           [(match_operand:V8QI 1 "register_operand")
    4391              :            (match_operand:V8QI 2 "register_operand")
    4392              :            (subreg:V8QI
    4393            0 :              (eq:MMXMODE24
    4394              :                (eq:MMXMODE24
    4395              :                  (match_operand:MMXMODE24 3 "register_operand")
    4396              :                  (match_operand:MMXMODE24 4 "nonmemory_operand"))
    4397              :              (match_operand:MMXMODE24 5 "const0_operand")) 0)]
    4398              :            UNSPEC_BLENDV))]
    4399           10 :   "TARGET_MMX_WITH_SSE && ix86_pre_reload_split ()"
    4400            0 :   "#"
    4401            1 :   "&& 1"
    4402            0 :   [(set (match_dup 6)
    4403           34 :         (eq:MMXMODE24 (match_dup 3) (match_dup 8)))
    4404           30 :    (set (match_dup 0)
    4405           15 :         (unspec:V8QI
    4406           15 :           [(match_dup 2)
    4407              :            (match_dup 1)
    4408              :            (match_dup 7)]
    4409              :           UNSPEC_BLENDV))]
    4410            3 : {
    4411            3 :   operands[6] = gen_reg_rtx (<MODE>mode);
    4412            3 :   operands[7] = lowpart_subreg (V8QImode, operands[6], <MODE>mode);
    4413            3 :   operands[8] = force_reg (<MODE>mode, operands[4]);
    4414              : })
    4415              : 
    4416              : (define_insn "mmx_pblendvb_<mode>"
    4417            3 :   [(set (match_operand:VI_16_32 0 "register_operand" "=Yr,*x,x")
    4418              :         (unspec:VI_16_32
    4419              :           [(match_operand:VI_16_32 1 "register_operand" "0,0,x")
    4420              :            (match_operand:VI_16_32 2 "register_operand" "Yr,*x,x")
    4421              :            (match_operand:VI_16_32 3 "register_operand" "Yz,Yz,x")]
    4422            3 :           UNSPEC_BLENDV))]
    4423         1964 :   "TARGET_SSE4_1"
    4424              :   "@
    4425              :    pblendvb\t{%3, %2, %0|%0, %2, %3}
    4426              :    pblendvb\t{%3, %2, %0|%0, %2, %3}
    4427         1007 :    vpblendvb\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4428         1011 :   [(set_attr "isa" "noavx,noavx,avx")
    4429              :    (set_attr "type" "ssemov")
    4430         1011 :    (set_attr "c86_attr" "blendv")
    4431            0 :    (set_attr "prefix_extra" "1")
    4432            4 :    (set_attr "length_immediate" "1")
    4433              :    (set_attr "prefix" "orig,orig,vex")
    4434              :    (set_attr "btver2_decode" "vector")
    4435              :    (set_attr "mode" "TI")])
    4436              : 
    4437              : (define_insn_and_split "*mmx_pblendvb_<mode>_1"
    4438              :   [(set (match_operand:VI_16_32 0 "register_operand")
    4439              :         (unspec:VI_16_32
    4440              :           [(match_operand:VI_16_32 1 "register_operand")
    4441              :            (match_operand:VI_16_32 2 "register_operand")
    4442              :            (eq:VI_16_32
    4443              :              (eq:VI_16_32
    4444              :                 (match_operand:VI_16_32 3 "register_operand")
    4445              :                 (match_operand:VI_16_32 4 "nonmemory_operand"))
    4446              :              (match_operand:VI_16_32 5 "const0_operand"))]
    4447              :            UNSPEC_BLENDV))]
    4448           36 :   "TARGET_SSE2 && ix86_pre_reload_split ()"
    4449            0 :   "#"
    4450              :   "&& 1"
    4451            0 :   [(set (match_dup 6)
    4452           30 :         (eq:VI_16_32 (match_dup 3) (match_dup 7)))
    4453           24 :    (set (match_dup 0)
    4454           12 :         (unspec:VI_16_32
    4455           24 :           [(match_dup 2)
    4456              :            (match_dup 1)
    4457              :            (match_dup 6)]
    4458         5639 :           UNSPEC_BLENDV))]
    4459         5657 : {
    4460         8499 :   operands[6] = gen_reg_rtx (<MODE>mode);
    4461         8502 :   operands[7] = force_reg (<MODE>mode, operands[4]);
    4462         8487 : })
    4463         8481 : 
    4464         8481 : (define_insn_and_split "*mmx_pblendvb_v4qi_2"
    4465         8499 :   [(set (match_operand:V4QI 0 "register_operand")
    4466         8481 :        (unspec:V4QI
    4467         8481 :           [(match_operand:V4QI 1 "register_operand")
    4468         8481 :            (match_operand:V4QI 2 "register_operand")
    4469         8481 :            (subreg:V4QI
    4470           18 :              (eq:V2HI
    4471         8481 :                (eq:V2HI
    4472              :                  (match_operand:V2HI 3 "register_operand")
    4473         7048 :                  (match_operand:V2HI 4 "nonmemory_operand"))
    4474         7048 :              (match_operand:V2HI 5 "const0_operand")) 0)]
    4475            5 :            UNSPEC_BLENDV))]
    4476         7102 :   "TARGET_SSE2 && ix86_pre_reload_split ()"
    4477            5 :   "#"
    4478           14 :   "&& 1"
    4479            0 :   [(set (match_dup 6)
    4480           24 :         (eq:V2HI (match_dup 3) (match_dup 8)))
    4481              :    (set (match_dup 0)
    4482            5 :         (unspec:V4QI
    4483              :           [(match_dup 2)
    4484          834 :            (match_dup 1)
    4485          834 :            (match_dup 7)]
    4486              :           UNSPEC_BLENDV))]
    4487           15 : {
    4488           15 :   operands[6] = gen_reg_rtx (V2HImode);
    4489           15 :   operands[7] = lowpart_subreg (V4QImode, operands[6], V2HImode);
    4490        29036 :   operands[8] = force_reg (V2HImode, operands[4]);
    4491        29021 : })
    4492            0 : 
    4493          797 : ;; XOP parallel XMM conditional moves
    4494          818 : (define_insn "*xop_pcmov_<mode>"
    4495              :   [(set (match_operand:MMXMODE124 0 "register_operand" "=x")
    4496              :         (if_then_else:MMXMODE124
    4497              :           (match_operand:MMXMODE124 3 "register_operand" "x")
    4498              :           (match_operand:MMXMODE124 1 "register_operand" "x")
    4499           15 :           (match_operand:MMXMODE124 2 "register_operand" "x")))]
    4500          174 :   "TARGET_XOP && TARGET_MMX_WITH_SSE"
    4501              :   "vpcmov\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4502              :   [(set_attr "type" "sse4arg")
    4503              :    (set_attr "mode" "TI")])
    4504          390 : 
    4505          381 : (define_insn "*xop_pcmov_<mode>"
    4506            9 :   [(set (match_operand:V4F_64 0 "register_operand" "=x")
    4507          393 :         (if_then_else:V4F_64
    4508              :           (match_operand:V4F_64 3 "register_operand" "x")
    4509              :           (match_operand:V4F_64 1 "register_operand" "x")
    4510              :           (match_operand:V4F_64 2 "register_operand" "x")))]
    4511           18 :   "TARGET_XOP && TARGET_MMX_WITH_SSE"
    4512              :   "vpcmov\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4513              :   [(set_attr "type" "sse4arg")
    4514              :    (set_attr "mode" "TI")])
    4515            3 : 
    4516            3 : (define_insn "*xop_pcmov_<mode>"
    4517            1 :   [(set (match_operand:VI_16_32 0 "register_operand" "=x")
    4518            3 :         (if_then_else:VI_16_32
    4519            1 :           (match_operand:VI_16_32 3 "register_operand" "x")
    4520            0 :           (match_operand:VI_16_32 1 "register_operand" "x")
    4521            1 :           (match_operand:VI_16_32 2 "register_operand" "x")))]
    4522            0 :   "TARGET_XOP"
    4523              :   "vpcmov\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4524              :   [(set_attr "type" "sse4arg")
    4525              :    (set_attr "mode" "TI")])
    4526          243 : 
    4527          243 : (define_insn "*xop_pcmov_<mode>"
    4528              :   [(set (match_operand:V2F_32 0 "register_operand" "=x")
    4529          243 :         (if_then_else:V2F_32
    4530              :           (match_operand:V2F_32 3 "register_operand" "x")
    4531              :           (match_operand:V2F_32 1 "register_operand" "x")
    4532              :           (match_operand:V2F_32 2 "register_operand" "x")))]
    4533            3 :   "TARGET_XOP"
    4534              :   "vpcmov\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4535              :   [(set_attr "type" "sse4arg")
    4536              :    (set_attr "mode" "TI")])
    4537            3 : 
    4538            3 : ;; XOP permute instructions
    4539              : (define_insn "mmx_ppermv64"
    4540            3 :   [(set (match_operand:V8QI 0 "register_operand" "=x")
    4541          318 :         (unspec:V8QI
    4542          318 :           [(match_operand:V8QI 1 "register_operand" "x")
    4543              :            (match_operand:V8QI 2 "register_operand" "x")
    4544          311 :            (match_operand:V16QI 3 "nonimmediate_operand" "xm")]
    4545          311 :           UNSPEC_XOP_PERMUTE))]
    4546          546 :   "TARGET_XOP && TARGET_MMX_WITH_SSE"
    4547          311 :   "vpperm\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4548          311 :   [(set_attr "type" "sse4arg")
    4549              :    (set_attr "mode" "TI")])
    4550          307 : 
    4551          307 : (define_insn "mmx_ppermv32"
    4552          307 :   [(set (match_operand:V4QI 0 "register_operand" "=x")
    4553          307 :         (unspec:V4QI
    4554          307 :           [(match_operand:V4QI 1 "register_operand" "x")
    4555              :            (match_operand:V4QI 2 "register_operand" "x")
    4556          306 :            (match_operand:V16QI 3 "nonimmediate_operand" "xm")]
    4557          306 :           UNSPEC_XOP_PERMUTE))]
    4558          306 :   "TARGET_XOP"
    4559          306 :   "vpperm\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4560              :   [(set_attr "type" "sse4arg")
    4561          302 :    (set_attr "mode" "TI")])
    4562              : 
    4563           80 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4564           80 : ;;
    4565              : ;; Parallel integral logical operations
    4566        14267 : ;;
    4567        14347 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4568              : 
    4569           10 : (define_expand "one_cmpl<mode>2"
    4570           10 :   [(set (match_operand:MMXMODEI 0 "register_operand")
    4571           10 :         (xor:MMXMODEI
    4572              :           (match_operand:MMXMODEI 1 "register_operand")
    4573           10 :           (match_dup 2)))]
    4574           10 :   "TARGET_MMX_WITH_SSE"
    4575           57 :   "operands[2] = force_reg (<MODE>mode, CONSTM1_RTX (<MODE>mode));")
    4576              : 
    4577           10 : (define_insn "one_cmpl<mode>2"
    4578           10 :   [(set (match_operand:VI_16_32 0 "register_operand" "=?r,&x,&v")
    4579           57 :         (not:VI_16_32
    4580           10 :           (match_operand:VI_16_32 1 "register_operand" "0,x,v")))]
    4581           10 :   ""
    4582              :   "#"
    4583           47 :   [(set_attr "isa" "*,sse2,avx512vl")
    4584            0 :    (set_attr "type" "negnot,sselog1,sselog1")
    4585            0 :    (set_attr "mode" "SI,TI,TI")])
    4586              : 
    4587              : (define_split
    4588            2 :   [(set (match_operand:VI_16_32 0 "general_reg_operand")
    4589            4 :         (not:VI_16_32
    4590            2 :           (match_operand:VI_16_32 1 "general_reg_operand")))]
    4591            7 :   "reload_completed"
    4592            6 :   [(set (match_dup 0)
    4593       381832 :         (not:SI (match_dup 1)))]
    4594           17 : {
    4595           19 :   operands[1] = lowpart_subreg (SImode, operands[1], <MODE>mode);
    4596       381839 :   operands[0] = lowpart_subreg (SImode, operands[0], <MODE>mode);
    4597              : })
    4598              : 
    4599              : (define_split
    4600            6 :   [(set (match_operand:VI_16_32 0 "sse_reg_operand")
    4601            0 :         (not:VI_16_32
    4602              :           (match_operand:VI_16_32 1 "sse_reg_operand")))]
    4603           18 :   "TARGET_SSE2 && reload_completed"
    4604           12 :   [(set (match_dup 0) (match_dup 2))
    4605       381795 :    (set (match_dup 0)
    4606           43 :         (xor:V16QI
    4607           43 :           (match_dup 0) (match_dup 1)))]
    4608       381850 : {
    4609           44 :   operands[2] = CONSTM1_RTX (V16QImode);
    4610           12 :   operands[1] = lowpart_subreg (V16QImode, operands[1], <MODE>mode);
    4611           44 :   operands[0] = lowpart_subreg (V16QImode, operands[0], <MODE>mode);
    4612            0 : })
    4613           32 : 
    4614              : (define_expand "andn<mode>3"
    4615           12 :   [(set (match_operand:MMXMODEI 0 "register_operand")
    4616              :         (and:MMXMODEI
    4617              :           (not:MMXMODEI (match_operand:MMXMODEI 2 "register_operand"))
    4618              :           (match_operand:MMXMODEI 1 "register_operand")))]
    4619           12 :   "TARGET_MMX_WITH_SSE")
    4620              : 
    4621              : (define_insn "mmx_andnot<mode>3"
    4622              :   [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,x,v")
    4623              :         (and:MMXMODEI
    4624            0 :           (not:MMXMODEI (match_operand:MMXMODEI 1 "register_operand" "0,0,x,v"))
    4625           36 :           (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,x,v")))]
    4626          215 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4627           36 :   "@
    4628            0 :    pandn\t{%2, %0|%0, %2}
    4629           36 :    pandn\t{%2, %0|%0, %2}
    4630         1877 :    vpandn\t{%2, %1, %0|%0, %1, %2}
    4631         1664 :    vpandnd\t{%2, %1, %0|%0, %1, %2}"
    4632          213 :   [(set_attr "isa" "*,sse2_noavx,avx,avx512vl")
    4633         1664 :    (set_attr "mmx_isa" "native,*,*,*")
    4634          174 :    (set_attr "type" "mmxadd,sselog,sselog,sselog")
    4635           39 :    (set_attr "mode" "DI,TI,TI,TI")])
    4636           39 : 
    4637              : (define_insn "*andnot<mode>3"
    4638           97 :   [(set (match_operand:VI_16_32 0 "register_operand" "=?&r,?r,x,x,v")
    4639           97 :         (and:VI_16_32
    4640           97 :           (not:VI_16_32
    4641              :             (match_operand:VI_16_32 1 "register_operand" "0,r,0,x,v"))
    4642           84 :           (match_operand:VI_16_32 2 "register_operand" "r,r,x,x,v")))
    4643           13 :    (clobber (reg:CC FLAGS_REG))]
    4644           13 :   ""
    4645              :   "#"
    4646          124 :   [(set_attr "isa" "*,bmi,sse2_noavx,avx,avx512vl")
    4647          124 :    (set_attr "type" "alu,bitmanip,sselog,sselog,sselog")
    4648          124 :    (set_attr "mode" "SI,SI,TI,TI,TI")])
    4649              : 
    4650           99 : (define_split
    4651           25 :   [(set (match_operand:VI_16_32 0 "general_reg_operand")
    4652           25 :         (and:VI_16_32
    4653              :           (not:VI_16_32 (match_operand:VI_16_32 1 "general_reg_operand"))
    4654            0 :           (match_operand:VI_16_32 2 "general_reg_operand")))
    4655            0 :    (clobber (reg:CC FLAGS_REG))]
    4656            1 :   "TARGET_BMI && reload_completed"
    4657            0 :   [(parallel
    4658            3 :      [(set (match_dup 0)
    4659              :            (and:SI (not:SI (match_dup 1)) (match_dup 2)))
    4660              :       (clobber (reg:CC FLAGS_REG))])]
    4661            0 : {
    4662            0 :   operands[2] = lowpart_subreg (SImode, operands[2], <MODE>mode);
    4663            0 :   operands[1] = lowpart_subreg (SImode, operands[1], <MODE>mode);
    4664            0 :   operands[0] = lowpart_subreg (SImode, operands[0], <MODE>mode);
    4665              : })
    4666              : 
    4667              : (define_split
    4668            0 :   [(set (match_operand:VI_16_32 0 "general_reg_operand")
    4669              :         (and:VI_16_32
    4670              :           (not:VI_16_32 (match_operand:VI_16_32 1 "general_reg_operand"))
    4671              :           (match_operand:VI_16_32 2 "general_reg_operand")))
    4672              :    (clobber (reg:CC FLAGS_REG))]
    4673            3 :   "!TARGET_BMI && reload_completed"
    4674            3 :   [(set (match_dup 0)
    4675              :         (not:SI (match_dup 1)))
    4676          136 :    (parallel
    4677           66 :      [(set (match_dup 0)
    4678           66 :            (and:SI (match_dup 0) (match_dup 2)))
    4679          136 :       (clobber (reg:CC FLAGS_REG))])]
    4680            3 : {
    4681            3 :   operands[2] = lowpart_subreg (SImode, operands[2], <MODE>mode);
    4682            3 :   operands[1] = lowpart_subreg (SImode, operands[1], <MODE>mode);
    4683            3 :   operands[0] = lowpart_subreg (SImode, operands[0], <MODE>mode);
    4684              : })
    4685              : 
    4686              : (define_split
    4687            3 :   [(set (match_operand:VI_16_32 0 "sse_reg_operand")
    4688              :         (and:VI_16_32
    4689              :           (not:VI_16_32 (match_operand:VI_16_32 1 "sse_reg_operand"))
    4690              :           (match_operand:VI_16_32 2 "sse_reg_operand")))
    4691              :    (clobber (reg:CC FLAGS_REG))]
    4692           69 :   "TARGET_SSE2 && reload_completed"
    4693           70 :   [(set (match_dup 0)
    4694           66 :         (and:V16QI (not:V16QI (match_dup 1)) (match_dup 2)))]
    4695           66 : {
    4696         2074 :   operands[2] = lowpart_subreg (V16QImode, operands[2], <MODE>mode);
    4697         2148 :   operands[1] = lowpart_subreg (V16QImode, operands[1], <MODE>mode);
    4698          142 :   operands[0] = lowpart_subreg (V16QImode, operands[0], <MODE>mode);
    4699         2006 : })
    4700          150 : 
    4701           76 : (define_expand "mmx_<code><mode>3"
    4702          144 :   [(set (match_operand:MMXMODEI 0 "register_operand")
    4703              :         (any_logic:MMXMODEI
    4704            2 :           (match_operand:MMXMODEI 1 "register_mmxmem_operand")
    4705              :           (match_operand:MMXMODEI 2 "register_mmxmem_operand")))]
    4706           66 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4707          109 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    4708              : 
    4709              : (define_expand "<code><mode>3"
    4710              :   [(set (match_operand:MMXMODEI 0 "register_operand")
    4711          433 :         (any_logic:MMXMODEI
    4712              :           (match_operand:MMXMODEI 1 "register_operand")
    4713          324 :           (match_operand:MMXMODEI 2 "register_operand")))]
    4714          324 :   "TARGET_MMX_WITH_SSE")
    4715          109 : 
    4716              : (define_insn "*mmx_<code><mode>3"
    4717              :   [(set (match_operand:MMXMODEI 0 "register_operand" "=y,x,x,v")
    4718          289 :         (any_logic:MMXMODEI
    4719              :           (match_operand:MMXMODEI 1 "register_mmxmem_operand" "%0,0,x,v")
    4720         2014 :           (match_operand:MMXMODEI 2 "register_mmxmem_operand" "ym,x,x,v")))]
    4721         2095 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    4722        31516 :    && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
    4723         8689 :   "@
    4724          167 :    p<logic>\t{%2, %0|%0, %2}
    4725          698 :    p<logic>\t{%2, %0|%0, %2}
    4726        31958 :    vp<logic>\t{%2, %1, %0|%0, %1, %2}
    4727        33107 :    vp<logic>d\t{%2, %1, %0|%0, %1, %2}"
    4728        21873 :   [(set_attr "isa" "*,sse2_noavx,avx,avx512vl")
    4729              :    (set_attr "mmx_isa" "native,*,*,*")
    4730        39342 :    (set_attr "type" "mmxadd,sselog,sselog,sselog")
    4731              :    (set_attr "mode" "DI,TI,TI,TI")])
    4732           96 : 
    4733            5 : (define_expand "<code><mode>3"
    4734           96 :   [(set (match_operand:VI_16_32 0 "nonimmediate_operand")
    4735          202 :         (any_logic:VI_16_32
    4736           96 :           (match_operand:VI_16_32 1 "nonimmediate_operand")
    4737          106 :           (match_operand:VI_16_32 2 "nonimmediate_or_x86_64_const_vector_operand")))]
    4738          101 :   ""
    4739          364 :   "ix86_expand_binary_operator (<CODE>, <MODE>mode, operands); DONE;")
    4740              : 
    4741              : (define_insn "*<code><mode>3"
    4742              :   [(set (match_operand:VI_16_32 0 "nonimmediate_operand" "=?r,m,x,x,v")
    4743              :         (any_logic:VI_16_32
    4744              :           (match_operand:VI_16_32 1 "nonimmediate_operand" "%0,0,0,x,v")
    4745              :           (match_operand:VI_16_32 2 "nonimmediate_or_x86_64_const_vector_operand" "r,i,x,x,v")))
    4746              :    (clobber (reg:CC FLAGS_REG))]
    4747         3805 :   "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
    4748          217 :   "#"
    4749          981 :   [(set_attr "isa" "*,*,sse2_noavx,avx,avx512vl")
    4750          981 :    (set_attr "type" "alu,alu,sselog,sselog,sselog")
    4751         5656 :    (set_attr "mode" "SI,SI,TI,TI,TI")])
    4752         5992 : 
    4753         1348 : (define_split
    4754         1648 :   [(set (match_operand:VI_16_32 0 "nonimmediate_gr_operand")
    4755         9907 :         (any_logic:VI_16_32
    4756        11895 :           (match_operand:VI_16_32 1 "nonimmediate_gr_operand")
    4757          102 :           (match_operand:VI_16_32 2 "reg_or_const_vector_operand")))
    4758         4146 :    (clobber (reg:CC FLAGS_REG))]
    4759         4168 :   "reload_completed"
    4760           57 :   [(parallel
    4761          965 :      [(set (match_dup 0)
    4762          328 :            (any_logic:<mmxinsnmode> (match_dup 1) (match_dup 2)))
    4763          328 :       (clobber (reg:CC FLAGS_REG))])]
    4764         1022 : {
    4765           57 :   if (!register_operand (operands[2], <MODE>mode))
    4766              :     {
    4767            9 :       HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (operands[2],
    4768              :                                                                 <MODE>mode);
    4769            9 :       operands[2] = GEN_INT (val);
    4770              :     }
    4771              :   else
    4772           48 :     operands[2] = lowpart_subreg (<mmxinsnmode>mode, operands[2], <MODE>mode);
    4773           57 :   operands[1] = lowpart_subreg (<mmxinsnmode>mode, operands[1], <MODE>mode);
    4774           57 :   operands[0] = lowpart_subreg (<mmxinsnmode>mode, operands[0], <MODE>mode);
    4775              : })
    4776              : 
    4777              : (define_split
    4778           57 :   [(set (match_operand:VI_16_32 0 "sse_reg_operand")
    4779              :         (any_logic:VI_16_32
    4780              :           (match_operand:VI_16_32 1 "sse_reg_operand")
    4781              :           (match_operand:VI_16_32 2 "sse_reg_operand")))
    4782           57 :    (clobber (reg:CC FLAGS_REG))]
    4783          328 :   "TARGET_SSE2 && reload_completed"
    4784          637 :   [(set (match_dup 0)
    4785          328 :         (any_logic:V16QI (match_dup 1) (match_dup 2)))]
    4786          328 : {
    4787          879 :   operands[2] = lowpart_subreg (V16QImode, operands[2], <MODE>mode);
    4788         1495 :   operands[1] = lowpart_subreg (V16QImode, operands[1], <MODE>mode);
    4789          379 :   operands[0] = lowpart_subreg (V16QImode, operands[0], <MODE>mode);
    4790          910 : })
    4791          541 : 
    4792          860 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4793          328 : ;;
    4794              : ;; Parallel integral element swizzling
    4795              : ;;
    4796              : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4797          328 : 
    4798              : (define_insn_and_split "mmx_packsswb"
    4799              :   [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yw")
    4800              :         (vec_concat:V8QI
    4801              :           (ss_truncate:V4QI
    4802              :             (match_operand:V4HI 1 "register_operand" "0,0,Yw"))
    4803         4419 :           (ss_truncate:V4QI
    4804              :             (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw"))))]
    4805         4764 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4806            0 :   "@
    4807         4419 :    packsswb\t{%2, %0|%0, %2}
    4808              :    #
    4809          286 :    #"
    4810           98 :   "&& reload_completed
    4811           46 :    && SSE_REGNO_P (REGNO (operands[0]))"
    4812              :   [(const_int 0)]
    4813           92 :   "ix86_split_mmx_pack (operands, SS_TRUNCATE); DONE;"
    4814              :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    4815          112 :    (set_attr "type" "mmxshft,sselog,sselog")
    4816          224 :    (set_attr "mode" "DI,TI,TI")])
    4817              : 
    4818              : ;; This instruction does unsigned saturation of signed source
    4819              : ;; and is different from generic us_truncate RTX.
    4820              : (define_insn_and_split "mmx_packuswb"
    4821              :   [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yw")
    4822              :         (unspec:V8QI
    4823              :           [(match_operand:V4HI 1 "register_operand" "0,0,Yw")
    4824              :            (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw")]
    4825          431 :           UNSPEC_US_TRUNCATE))]
    4826         5979 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4827          431 :   "@
    4828            0 :    packuswb\t{%2, %0|%0, %2}
    4829          431 :    #
    4830         1061 :    #"
    4831         2201 :   "&& reload_completed
    4832          570 :    && SSE_REGNO_P (REGNO (operands[0]))"
    4833              :   [(const_int 0)]
    4834         1140 :   "ix86_split_mmx_pack (operands, US_TRUNCATE); DONE;"
    4835              :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    4836          184 :    (set_attr "type" "mmxshft,sselog,sselog")
    4837          368 :    (set_attr "mode" "DI,TI,TI")])
    4838              : 
    4839              : (define_insn_and_split "mmx_packssdw"
    4840              :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    4841              :         (vec_concat:V4HI
    4842              :           (ss_truncate:V2HI
    4843              :             (match_operand:V2SI 1 "register_operand" "0,0,Yw"))
    4844              :           (ss_truncate:V2HI
    4845              :             (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yw"))))]
    4846          770 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4847              :   "@
    4848          366 :    packssdw\t{%2, %0|%0, %2}
    4849            0 :    #
    4850          366 :    #"
    4851          112 :   "&& reload_completed
    4852           56 :    && SSE_REGNO_P (REGNO (operands[0]))"
    4853              :   [(const_int 0)]
    4854          112 :   "ix86_split_mmx_pack (operands, SS_TRUNCATE); DONE;"
    4855              :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    4856              :    (set_attr "type" "mmxshft,sselog,sselog")
    4857              :    (set_attr "mode" "DI,TI,TI")])
    4858              : 
    4859              : (define_insn_and_split "mmx_packusdw"
    4860        14050 :   [(set (match_operand:V4HI 0 "register_operand" "=Yr,*x,Yw")
    4861              :         (unspec:V4HI
    4862       484075 :           [(match_operand:V2SI 1 "register_operand" "0,0,Yw")
    4863              :            (match_operand:V2SI 2 "register_operand" "Yr,*x,Yw")]
    4864       498125 :            UNSPEC_US_TRUNCATE))]
    4865       500451 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    4866       498125 :   "#"
    4867       498329 :   "&& reload_completed"
    4868       498145 :   [(const_int 0)]
    4869       498329 :   "ix86_split_mmx_pack (operands, US_TRUNCATE); DONE;"
    4870        14050 :   [(set_attr "isa" "noavx,noavx,avx")
    4871       318195 :    (set_attr "type" "sselog")
    4872       318195 :    (set_attr "mode" "TI")])
    4873       368927 : 
    4874       354877 : (define_insn_and_split "mmx_punpckhbw"
    4875       447782 :   [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yw")
    4876       447782 :         (vec_select:V8QI
    4877       447782 :           (vec_concat:V16QI
    4878       439096 :             (match_operand:V8QI 1 "register_operand" "0,0,Yw")
    4879       363520 :             (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yw"))
    4880       143621 :           (parallel [(const_int 4) (const_int 12)
    4881       384430 :                      (const_int 5) (const_int 13)
    4882        48696 :                      (const_int 6) (const_int 14)
    4883         6416 :                      (const_int 7) (const_int 15)])))]
    4884         1720 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4885         7992 :   "@
    4886         7986 :    punpckhbw\t{%2, %0|%0, %2}
    4887         1616 :    #
    4888        11926 :    #"
    4889         3600 :   "&& reload_completed
    4890          381 :    && SSE_REGNO_P (REGNO (operands[0]))"
    4891              :   [(const_int 0)]
    4892          958 :   "ix86_split_mmx_punpck (operands, true); DONE;"
    4893          392 :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    4894          862 :    (set_attr "type" "mmxcvt,sselog,sselog")
    4895         1724 :    (set_attr "mode" "DI,TI,TI")])
    4896              : 
    4897              : (define_insn_and_split "mmx_punpckhbw_low"
    4898              :   [(set (match_operand:V4QI 0 "register_operand" "=x,Yw")
    4899              :         (vec_select:V4QI
    4900              :           (vec_concat:V8QI
    4901              :             (match_operand:V4QI 1 "register_operand" "0,Yw")
    4902              :             (match_operand:V4QI 2 "register_operand" "x,Yw"))
    4903           18 :           (parallel [(const_int 2) (const_int 6)
    4904              :                      (const_int 3) (const_int 7)])))]
    4905         3925 :   "TARGET_SSE2"
    4906           18 :   "#"
    4907          496 :   "&& reload_completed"
    4908              :   [(const_int 0)]
    4909        12260 :   "ix86_split_mmx_punpck (operands, true); DONE;"
    4910          131 :   [(set_attr "isa" "noavx,avx")
    4911         2550 :    (set_attr "type" "sselog")
    4912         5100 :    (set_attr "mode" "TI")])
    4913              : 
    4914              : (define_insn_and_split "mmx_punpcklbw"
    4915              :   [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yw")
    4916              :         (vec_select:V8QI
    4917              :           (vec_concat:V16QI
    4918              :             (match_operand:V8QI 1 "register_operand" "0,0,Yw")
    4919              :             (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yw"))
    4920           21 :           (parallel [(const_int 0) (const_int 8)
    4921              :                      (const_int 1) (const_int 9)
    4922           21 :                      (const_int 2) (const_int 10)
    4923           21 :                      (const_int 3) (const_int 11)])))]
    4924         7144 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4925              :   "@
    4926              :    punpcklbw\t{%2, %0|%0, %k2}
    4927              :    #
    4928         3429 :    #"
    4929         4291 :   "&& reload_completed
    4930          431 :    && SSE_REGNO_P (REGNO (operands[0]))"
    4931              :   [(const_int 0)]
    4932          862 :   "ix86_split_mmx_punpck (operands, false); DONE;"
    4933              :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    4934          478 :    (set_attr "type" "mmxcvt,sselog,sselog")
    4935          478 :    (set_attr "mode" "DI,TI,TI")])
    4936              : 
    4937              : (define_insn_and_split "mmx_punpcklbw_low"
    4938              :   [(set (match_operand:V4QI 0 "register_operand" "=x,Yw")
    4939              :         (vec_select:V4QI
    4940              :           (vec_concat:V8QI
    4941              :             (match_operand:V4QI 1 "register_operand" "0,Yw")
    4942              :             (match_operand:V4QI 2 "register_operand" "x,Yw"))
    4943           33 :           (parallel [(const_int 0) (const_int 4)
    4944              :                      (const_int 1) (const_int 5)])))]
    4945         5239 :   "TARGET_SSE2"
    4946           33 :   "#"
    4947          765 :   "&& reload_completed"
    4948              :   [(const_int 0)]
    4949        16111 :   "ix86_split_mmx_punpck (operands, false); DONE;"
    4950          184 :   [(set_attr "isa" "noavx,avx")
    4951         3426 :    (set_attr "type" "sselog")
    4952         6852 :    (set_attr "mode" "TI")])
    4953              : 
    4954              : (define_insn_and_split "mmx_punpckhwd"
    4955              :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    4956              :         (vec_select:V4HI
    4957              :           (vec_concat:V8HI
    4958              :             (match_operand:V4HI 1 "register_operand" "0,0,Yw")
    4959              :             (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw"))
    4960            5 :           (parallel [(const_int 2) (const_int 6)
    4961              :                      (const_int 3) (const_int 7)])))]
    4962        14468 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4963            5 :   "@
    4964            5 :    punpckhwd\t{%2, %0|%0, %2}
    4965              :    #
    4966         4474 :    #"
    4967         7024 :   "&& reload_completed
    4968         1275 :    && SSE_REGNO_P (REGNO (operands[0]))"
    4969              :   [(const_int 0)]
    4970         2550 :   "ix86_split_mmx_punpck (operands, true); DONE;"
    4971              :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    4972          732 :    (set_attr "type" "mmxcvt,sselog,sselog")
    4973          732 :    (set_attr "mode" "DI,TI,TI")])
    4974              : 
    4975              : (define_insn_and_split "mmx_punpcklwd"
    4976              :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    4977              :         (vec_select:V4HI
    4978              :           (vec_concat:V8HI
    4979              :             (match_operand:V4HI 1 "register_operand" "0,0,Yw")
    4980              :             (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw"))
    4981           29 :           (parallel [(const_int 0) (const_int 4)
    4982              :                      (const_int 1) (const_int 5)])))]
    4983        19018 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    4984           29 :   "@
    4985           29 :    punpcklwd\t{%2, %0|%0, %k2}
    4986              :    #
    4987              :    #"
    4988         3426 :   "&& reload_completed
    4989         1713 :    && SSE_REGNO_P (REGNO (operands[0]))"
    4990              :   [(const_int 0)]
    4991         7696 :   "ix86_split_mmx_punpck (operands, false); DONE;"
    4992         4270 :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    4993         4279 :    (set_attr "type" "mmxcvt,sselog,sselog")
    4994              :    (set_attr "mode" "DI,TI,TI")])
    4995              : 
    4996              : (define_insn_and_split "mmx_punpckhdq"
    4997       495815 :   [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yv")
    4998       495815 :         (vec_select:V2SI
    4999       495815 :           (vec_concat:V4SI
    5000       495815 :             (match_operand:V2SI 1 "register_operand" "0,0,Yv")
    5001              :             (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv"))
    5002       320067 :           (parallel [(const_int 1)
    5003       320033 :                      (const_int 3)])))]
    5004       327956 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    5005           34 :   "@
    5006           34 :    punpckhdq\t{%2, %0|%0, %2}
    5007              :    #
    5008        35651 :    #"
    5009          560 :   "&& reload_completed
    5010        35931 :    && SSE_REGNO_P (REGNO (operands[0]))"
    5011          280 :   [(const_int 0)]
    5012       221724 :   "ix86_split_mmx_punpck (operands, true); DONE;"
    5013       221444 :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    5014       216812 :    (set_attr "type" "mmxcvt,sselog,sselog")
    5015           81 :    (set_attr "mode" "DI,TI,TI")])
    5016           81 : 
    5017        11339 : (define_insn_and_split "mmx_punpckldq"
    5018        57136 :   [(set (match_operand:V2SI 0 "register_operand" "=y,x,Yv")
    5019        57136 :         (vec_select:V2SI
    5020        57136 :           (vec_concat:V4SI
    5021              :             (match_operand:V2SI 1 "register_operand" "0,0,Yv")
    5022            0 :             (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv"))
    5023           14 :           (parallel [(const_int 0)
    5024              :                      (const_int 2)])))]
    5025        14471 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    5026           14 :   "@
    5027           14 :    punpckldq\t{%2, %0|%0, %k2}
    5028              :    #
    5029         2402 :    #"
    5030         3100 :   "&& reload_completed
    5031          349 :    && SSE_REGNO_P (REGNO (operands[0]))"
    5032          349 :   [(const_int 0)]
    5033          349 :   "ix86_split_mmx_punpck (operands, false); DONE;"
    5034              :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    5035          238 :    (set_attr "type" "mmxcvt,sselog,sselog")
    5036          238 :    (set_attr "mode" "DI,TI,TI")])
    5037              : 
    5038              : (define_insn "sse4_1_<code>v4qiv4hi2"
    5039              :   [(set (match_operand:V4HI 0 "register_operand" "=Yr,*x,Yw")
    5040              :         (any_extend:V4HI
    5041              :           (vec_select:V4QI
    5042              :             (match_operand:V8QI 1 "register_operand" "Yr,*x,Yw")
    5043              :             (parallel [(const_int 0) (const_int 1)
    5044            9 :                        (const_int 2) (const_int 3)]))))]
    5045         2552 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5046            9 :   "%vpmov<extsuffix>bw\t{%1, %0|%0, %1}"
    5047            9 :   [(set_attr "isa" "noavx,noavx,avx")
    5048            9 :    (set_attr "type" "ssemov")
    5049        12459 :    (set_attr "c86_attr" "vpmovx")
    5050        12459 :    (set_attr "prefix_extra" "1")
    5051              :    (set_attr "prefix" "orig,orig,maybe_evex")
    5052         2557 :    (set_attr "mode" "TI")])
    5053         2557 : 
    5054              : (define_expand "<insn>v4qiv4hi2"
    5055              :   [(set (match_operand:V4HI 0 "register_operand")
    5056              :         (any_extend:V4HI
    5057              :           (match_operand:V4QI 1 "register_operand")))]
    5058              :   "TARGET_MMX_WITH_SSE"
    5059           47 : {
    5060           47 :   if (!TARGET_SSE4_1)
    5061              :     {
    5062           32 :       ix86_expand_sse_extend (operands[0], operands[1], <u_bool>);
    5063           32 :       DONE;
    5064              :     }
    5065              : 
    5066           15 :   rtx op1 = force_reg (V4QImode, operands[1]);
    5067           15 :   op1 = lowpart_subreg (V8QImode, op1, V4QImode);
    5068           15 :   emit_insn (gen_sse4_1_<code>v4qiv4hi2 (operands[0], op1));
    5069           15 :   DONE;
    5070              : })
    5071              : 
    5072              : (define_insn "sse4_1_<code>v2hiv2si2"
    5073              :   [(set (match_operand:V2SI 0 "register_operand" "=Yr,*x,v")
    5074              :         (any_extend:V2SI
    5075              :           (vec_select:V2HI
    5076              :             (match_operand:V4HI 1 "register_operand" "Yr,*x,v")
    5077              :             (parallel [(const_int 0) (const_int 1)]))))]
    5078         5114 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5079              :   "%vpmov<extsuffix>wd\t{%1, %0|%0, %1}"
    5080              :   [(set_attr "isa" "noavx,noavx,avx")
    5081              :    (set_attr "type" "ssemov")
    5082          329 :    (set_attr "c86_attr" "vpmovx")
    5083          282 :    (set_attr "prefix_extra" "1")
    5084           47 :    (set_attr "prefix" "orig,orig,maybe_evex")
    5085           47 :    (set_attr "mode" "TI")])
    5086           47 : 
    5087              : (define_expand "<insn>v2hiv2si2"
    5088              :   [(set (match_operand:V2SI 0 "register_operand")
    5089              :         (any_extend:V2SI
    5090              :           (match_operand:V2HI 1 "register_operand")))]
    5091              :   "TARGET_MMX_WITH_SSE"
    5092           39 : {
    5093           39 :   if (!TARGET_SSE4_1)
    5094              :     {
    5095           30 :       ix86_expand_sse_extend (operands[0], operands[1], <u_bool>);
    5096           30 :       DONE;
    5097              :     }
    5098              : 
    5099            9 :   rtx op1 = force_reg (V2HImode, operands[1]);
    5100            9 :   op1 = lowpart_subreg (V4HImode, op1, V2HImode);
    5101            9 :   emit_insn (gen_sse4_1_<code>v2hiv2si2 (operands[0], op1));
    5102            9 :   DONE;
    5103              : })
    5104              : 
    5105              : (define_insn "sse4_1_<code>v2qiv2si2"
    5106              :   [(set (match_operand:V2SI 0 "register_operand" "=Yr,*x,v")
    5107              :         (any_extend:V2SI
    5108              :           (vec_select:V2QI
    5109              :             (match_operand:V4QI 1 "register_operand" "Yr,*x,v")
    5110              :             (parallel [(const_int 0) (const_int 1)]))))]
    5111          564 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5112              :   "%vpmov<extsuffix>bd\t{%1, %0|%0, %1}"
    5113              :   [(set_attr "isa" "noavx,noavx,avx")
    5114              :    (set_attr "type" "ssemov")
    5115          446 :    (set_attr "c86_attr" "vpmovx")
    5116          112 :    (set_attr "prefix_extra" "1")
    5117          334 :    (set_attr "prefix" "orig,orig,maybe_evex")
    5118          334 :    (set_attr "mode" "TI")])
    5119          334 : 
    5120              : (define_expand "<insn>v2qiv2si2"
    5121              :   [(set (match_operand:V2SI 0 "register_operand")
    5122              :         (any_extend:V2SI
    5123              :           (match_operand:V2QI 1 "register_operand")))]
    5124              :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5125           38 : {
    5126           38 :   rtx op1 = force_reg (V2QImode, operands[1]);
    5127           38 :   op1 = lowpart_subreg (V4QImode, op1, V2QImode);
    5128           38 :   emit_insn (gen_sse4_1_<code>v2qiv2si2 (operands[0], op1));
    5129           38 :   DONE;
    5130              : })
    5131              : 
    5132              : (define_insn "sse4_1_<code>v2qiv2hi2"
    5133              :   [(set (match_operand:V2HI 0 "register_operand" "=Yr,*x,Yw")
    5134              :         (any_extend:V2HI
    5135              :           (vec_select:V2QI
    5136              :             (match_operand:V4QI 1 "register_operand" "Yr,*x,Yw")
    5137              :             (parallel [(const_int 0) (const_int 1)]))))]
    5138          112 :   "TARGET_SSE4_1"
    5139              :   "%vpmov<extsuffix>bw\t{%1, %0|%0, %1}"
    5140              :   [(set_attr "isa" "noavx,noavx,avx")
    5141              :    (set_attr "type" "ssemov")
    5142          727 :    (set_attr "c86_attr" "vpmovx")
    5143              :    (set_attr "prefix_extra" "1")
    5144          727 :    (set_attr "prefix" "orig,orig,maybe_evex")
    5145          727 :    (set_attr "mode" "TI")])
    5146       110441 : 
    5147       109714 : (define_expand "<insn>v2qiv2hi2"
    5148            3 :   [(set (match_operand:V2HI 0 "register_operand")
    5149       109717 :         (any_extend:V2HI
    5150              :           (match_operand:V2QI 1 "register_operand")))]
    5151            3 :   "TARGET_SSE2"
    5152           66 : {
    5153           66 :   if (!TARGET_SSE4_1)
    5154              :     {
    5155           57 :       ix86_expand_sse_extend (operands[0], operands[1], <u_bool>);
    5156         2511 :       DONE;
    5157              :     }
    5158              : 
    5159            6 :   rtx op1 = force_reg (V2QImode, operands[1]);
    5160         2460 :   op1 = lowpart_subreg (V4QImode, op1, V2QImode);
    5161         2460 :   emit_insn (gen_sse4_1_<code>v2qiv2hi2 (operands[0], op1));
    5162         2460 :   DONE;
    5163         2454 : })
    5164         2454 : 
    5165         2454 : (define_expand "trunc<mode><mmxhalfmodelower>2"
    5166         2454 :   [(set (match_operand:<mmxhalfmode> 0 "register_operand")
    5167         2454 :         (truncate:<mmxhalfmode>
    5168         2454 :           (match_operand:VI2_32_64 1 "register_operand")))]
    5169              :   "TARGET_AVX2"
    5170           41 : {
    5171           41 :   if (TARGET_AVX512VL && TARGET_AVX512BW)
    5172           21 :     emit_insn (gen_avx512vl_trunc<mode><mmxhalfmodelower>2 (operands[0], operands[1]));
    5173              :   else
    5174           11 :     ix86_expand_trunc_with_avx2_noavx512f (operands[0], operands[1], <mmxbytemode>mode);
    5175          475 :   DONE;
    5176              : })
    5177          443 : 
    5178          443 : (define_insn "avx512vl_trunc<mode><mmxhalfmodelower>2"
    5179          443 :   [(set (match_operand:<mmxhalfmode> 0 "register_operand" "=v")
    5180              :         (truncate:<mmxhalfmode>
    5181              :           (match_operand:VI2_32_64 1 "register_operand" "v")))]
    5182          175 :   "TARGET_AVX512VL && TARGET_AVX512BW"
    5183              :   "vpmovwb\t{%1, %0|%0, %1}"
    5184              :   [(set_attr "type" "ssemov")
    5185              :    (set_attr "prefix" "evex")
    5186           73 :    (set_attr "mode" "TI")])
    5187           73 : 
    5188          370 : (define_mode_iterator V2QI_V2HI [V2QI V2HI])
    5189              : (define_mode_attr v2qi_quad_v2hi_double
    5190          297 :   [(V2QI "V8QI") (V2HI "V4HI")])
    5191          297 : (define_expand "truncv2si<mode>2"
    5192          297 :   [(set (match_operand:V2QI_V2HI 0 "register_operand")
    5193              :         (truncate:V2QI_V2HI
    5194              :           (match_operand:V2SI 1 "register_operand")))]
    5195              :   "TARGET_AVX2 && TARGET_MMX_WITH_SSE"
    5196           47 : {
    5197           47 :   if (TARGET_AVX512VL)
    5198           15 :     emit_insn (gen_avx512vl_truncv2si<mode>2 (operands[0], operands[1]));
    5199              :   else
    5200           32 :     ix86_expand_trunc_with_avx2_noavx512f (operands[0], operands[1], <v2qi_quad_v2hi_double>mode);
    5201           47 :   DONE;
    5202              : })
    5203              : 
    5204              : (define_insn "avx512vl_truncv2si<mode>2"
    5205              :   [(set (match_operand:V2QI_V2HI 0 "register_operand" "=v")
    5206              :         (truncate:V2QI_V2HI
    5207              :           (match_operand:V2SI 1 "register_operand" "v")))]
    5208          115 :   "TARGET_AVX512VL && TARGET_MMX_WITH_SSE"
    5209              :   "vpmovd<mmxvecsize>\t{%1, %0|%0, %1}"
    5210           40 :   [(set_attr "type" "ssemov")
    5211           15 :    (set_attr "prefix" "evex")
    5212           40 :    (set_attr "mode" "TI")])
    5213              : 
    5214          281 : ;; Pack/unpack vector modes
    5215              : (define_mode_attr mmxpackmode
    5216          335 :   [(V4HI "V8QI") (V2SI "V4HI")])
    5217          301 : 
    5218          335 : (define_expand "vec_pack_trunc_<mode>"
    5219              :   [(match_operand:<mmxpackmode> 0 "register_operand")
    5220              :    (match_operand:MMXMODE24 1 "register_operand")
    5221              :    (match_operand:MMXMODE24 2 "register_operand")]
    5222              :   "TARGET_MMX_WITH_SSE"
    5223          727 : {
    5224          727 :   rtx op1 = gen_lowpart (<mmxpackmode>mode, operands[1]);
    5225          727 :   rtx op2 = gen_lowpart (<mmxpackmode>mode, operands[2]);
    5226          727 :   ix86_expand_vec_extract_even_odd (operands[0], op1, op2, 0);
    5227          727 :   DONE;
    5228              : })
    5229              : 
    5230              : (define_expand "vec_pack_trunc_v2hi"
    5231              :   [(match_operand:V4QI 0 "register_operand")
    5232              :    (match_operand:V2HI 1 "register_operand")
    5233              :    (match_operand:V2HI 2 "register_operand")]
    5234              :   "TARGET_SSE2"
    5235           24 : {
    5236           24 :   rtx op1 = gen_lowpart (V4QImode, operands[1]);
    5237           24 :   rtx op2 = gen_lowpart (V4QImode, operands[2]);
    5238           24 :   ix86_expand_vec_extract_even_odd (operands[0], op1, op2, 0);
    5239           24 :   DONE;
    5240           10 : })
    5241            3 : 
    5242           10 : (define_mode_attr mmxunpackmode
    5243           13 :   [(V8QI "V4HI") (V4HI "V2SI")])
    5244           10 : 
    5245            3 : (define_expand "vec_unpacks_lo_<mode>"
    5246              :   [(match_operand:<mmxunpackmode> 0 "register_operand")
    5247              :    (match_operand:MMXMODE12 1 "register_operand")]
    5248              :   "TARGET_MMX_WITH_SSE"
    5249          439 :   "ix86_expand_sse_unpack (operands[0], operands[1], false, false); DONE;")
    5250              : 
    5251              : (define_expand "vec_unpacks_hi_<mode>"
    5252              :   [(match_operand:<mmxunpackmode> 0 "register_operand")
    5253            0 :    (match_operand:MMXMODE12 1 "register_operand")]
    5254              :   "TARGET_MMX_WITH_SSE"
    5255          443 :   "ix86_expand_sse_unpack (operands[0], operands[1], false, true); DONE;")
    5256            0 : 
    5257            0 : (define_expand "vec_unpacku_lo_<mode>"
    5258              :   [(match_operand:<mmxunpackmode> 0 "register_operand")
    5259              :    (match_operand:MMXMODE12 1 "register_operand")]
    5260              :   "TARGET_MMX_WITH_SSE"
    5261          900 :   "ix86_expand_sse_unpack (operands[0], operands[1], true, false); DONE;")
    5262              : 
    5263          451 : (define_expand "vec_unpacku_hi_<mode>"
    5264          451 :   [(match_operand:<mmxunpackmode> 0 "register_operand")
    5265          451 :    (match_operand:MMXMODE12 1 "register_operand")]
    5266              :   "TARGET_MMX_WITH_SSE"
    5267          461 :   "ix86_expand_sse_unpack (operands[0], operands[1], true, true); DONE;")
    5268              : 
    5269           10 : (define_expand "vec_unpacks_lo_v4qi"
    5270           10 :   [(match_operand:V2HI 0 "register_operand")
    5271           10 :    (match_operand:V4QI 1 "register_operand")]
    5272              :   "TARGET_SSE2"
    5273           75 :   "ix86_expand_sse_unpack (operands[0], operands[1], false, false); DONE;")
    5274            0 : 
    5275           75 : (define_expand "vec_unpacks_hi_v4qi"
    5276           75 :   [(match_operand:V2HI 0 "register_operand")
    5277           75 :    (match_operand:V4QI 1 "register_operand")]
    5278            0 :   "TARGET_SSE2"
    5279          191 :   "ix86_expand_sse_unpack (operands[0], operands[1], false, true); DONE;")
    5280           55 : 
    5281          191 : (define_expand "vec_unpacku_lo_v4qi"
    5282          246 :   [(match_operand:V2HI 0 "register_operand")
    5283          191 :    (match_operand:V4QI 1 "register_operand")]
    5284           55 :   "TARGET_SSE2"
    5285           10 :   "ix86_expand_sse_unpack (operands[0], operands[1], true, false); DONE;")
    5286         1940 : 
    5287              : (define_expand "vec_unpacku_hi_v4qi"
    5288         1940 :   [(match_operand:V2HI 0 "register_operand")
    5289            0 :    (match_operand:V4QI 1 "register_operand")]
    5290         1940 :   "TARGET_SSE2"
    5291           10 :   "ix86_expand_sse_unpack (operands[0], operands[1], true, true); DONE;")
    5292          199 : 
    5293              : (define_insn "*mmx_pinsrd"
    5294          199 :   [(set (match_operand:V2SI 0 "register_operand" "=x,Yv")
    5295            0 :         (vec_merge:V2SI
    5296          199 :           (vec_duplicate:V2SI
    5297              :             (match_operand:SI 2 "nonimmediate_operand" "jrjm,rm"))
    5298           43 :           (match_operand:V2SI 1 "register_operand" "0,Yv")
    5299              :           (match_operand:SI 3 "const_int_operand")))]
    5300          243 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE
    5301          200 :    && ((unsigned) exact_log2 (INTVAL (operands[3]))
    5302          243 :        < GET_MODE_NUNITS (V2SImode))"
    5303           26 : {
    5304           52 :   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
    5305           26 :   switch (which_alternative)
    5306           21 :     {
    5307           21 :     case 1:
    5308            0 :       return "vpinsrd\t{%3, %2, %1, %0|%0, %1, %2, %3}";
    5309            0 :     case 0:
    5310           21 :       return "pinsrd\t{%3, %2, %0|%0, %2, %3}";
    5311            0 :     default:
    5312            0 :       gcc_unreachable ();
    5313              :     }
    5314              : }
    5315              :   [(set_attr "isa" "noavx,avx")
    5316              :    (set_attr "addr" "gpr16,*")
    5317              :    (set_attr "prefix_extra" "1")
    5318            0 :    (set_attr "type" "sselog")
    5319              :    (set_attr "c86_attr" "insr")
    5320              :    (set_attr "length_immediate" "1")
    5321              :    (set_attr "prefix" "orig,vex")
    5322              :    (set_attr "mode" "TI")])
    5323              : 
    5324              : (define_insn "*mmx_pinsrw"
    5325              :   [(set (match_operand:V4FI_64 0 "register_operand" "=y,x,YW,&x")
    5326              :         (vec_merge:V4FI_64
    5327              :           (vec_duplicate:V4FI_64
    5328              :             (match_operand:<mmxscalarmode> 2 "nonimmediate_operand" "rm,rm,rm,x"))
    5329              :           (match_operand:V4FI_64 1 "register_operand" "0,0,YW,x")
    5330              :           (match_operand:SI 3 "const_int_operand")))]
    5331           63 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5332          372 :    && (TARGET_SSE || TARGET_3DNOW_A)
    5333          372 :    && ((unsigned) exact_log2 (INTVAL (operands[3]))
    5334           15 :        < GET_MODE_NUNITS (V4HImode))"
    5335           39 : {
    5336           39 :   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
    5337           39 :   switch (which_alternative)
    5338          567 :     {
    5339          567 :     case 3:
    5340              :       return "#";
    5341           16 :     case 2:
    5342          940 :       if (MEM_P (operands[2]))
    5343              :         return "vpinsrw\t{%3, %2, %1, %0|%0, %1, %2, %3}";
    5344              :       else
    5345           16 :         return "vpinsrw\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
    5346           23 :     case 1:
    5347           23 :     case 0:
    5348           23 :       if (MEM_P (operands[2]))
    5349              :         return "pinsrw\t{%3, %2, %0|%0, %2, %3}";
    5350              :       else
    5351           13 :         return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
    5352            0 :     default:
    5353            0 :       gcc_unreachable ();
    5354              :     }
    5355              : }
    5356              :   [(set_attr "isa" "*,sse2_noavx,avx,sse4")
    5357              :    (set_attr "mmx_isa" "native,*,*,*")
    5358              :    (set_attr "type" "mmxcvt,sselog,sselog,sselog")
    5359           40 :    (set_attr "c86_attr" "insr")
    5360              :    (set_attr "length_immediate" "1")
    5361              :    (set_attr "mode" "DI,TI,TI,TI")])
    5362              : 
    5363              : ;; For TARGET_SSE2, implement insert from XMM reg with PSHULFW + PBLENDW.
    5364              : (define_split
    5365              :   [(set (match_operand:V4FI_64 0 "sse_reg_operand")
    5366              :         (vec_merge:V4FI_64
    5367              :           (vec_duplicate:V4FI_64
    5368              :             (match_operand:<mmxscalarmode> 2 "sse_reg_operand"))
    5369              :           (match_operand:V4FI_64 1 "sse_reg_operand")
    5370              :           (match_operand:SI 3 "const_int_operand")))]
    5371            3 :   "TARGET_MMX_WITH_SSE && TARGET_SSE4_1 && reload_completed
    5372            3 :    && ((unsigned) exact_log2 (INTVAL (operands[3]))
    5373            3 :        < GET_MODE_NUNITS (<MODE>mode))"
    5374              :   [(set (match_dup 0)
    5375            3 :         (vec_duplicate:V4FI_64 (match_dup 2)))
    5376              :    (set (match_dup 0)
    5377          115 :         (vec_merge:V4FI_64 (match_dup 1) (match_dup 0) (match_dup 3)))]
    5378          118 :   "operands[3] = GEN_INT (~INTVAL (operands[3]) & 0xf);")
    5379              : 
    5380              : (define_insn "*mmx_pinsrb"
    5381          118 :   [(set (match_operand:V8QI 0 "register_operand" "=x,YW")
    5382              :         (vec_merge:V8QI
    5383              :           (vec_duplicate:V8QI
    5384              :             (match_operand:QI 2 "nonimmediate_operand" "jrjm,rm"))
    5385              :           (match_operand:V8QI 1 "register_operand" "0,YW")
    5386            3 :           (match_operand:SI 3 "const_int_operand")))]
    5387           10 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE
    5388           10 :    && ((unsigned) exact_log2 (INTVAL (operands[3]))
    5389           10 :        < GET_MODE_NUNITS (V8QImode))"
    5390            1 : {
    5391        26721 :   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
    5392            1 :   switch (which_alternative)
    5393        26726 :     {
    5394        26727 :     case 1:
    5395        26720 :       if (MEM_P (operands[2]))
    5396              :         return "vpinsrb\t{%3, %2, %1, %0|%0, %1, %2, %3}";
    5397            7 :       else
    5398            1 :         return "vpinsrb\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
    5399            0 :     case 0:
    5400            0 :       if (MEM_P (operands[2]))
    5401              :         return "pinsrb\t{%3, %2, %0|%0, %2, %3}";
    5402              :       else
    5403            0 :         return "pinsrb\t{%3, %k2, %0|%0, %k2, %3}";
    5404            0 :     default:
    5405            0 :       gcc_unreachable ();
    5406              :     }
    5407              : }
    5408              :   [(set_attr "isa" "noavx,avx")
    5409              :    (set_attr "type" "sselog")
    5410              :    (set_attr "c86_attr" "insr")
    5411              :    (set_attr "addr" "gpr16,*")
    5412              :    (set_attr "prefix_extra" "1")
    5413              :    (set_attr "length_immediate" "1")
    5414              :    (set_attr "prefix" "orig,vex")
    5415              :    (set_attr "mode" "TI")])
    5416              : 
    5417              : (define_insn "*mmx_pextrw"
    5418            8 :   [(set (match_operand:HI 0 "register_sse4nonimm_operand" "=r,r,jm,m")
    5419              :         (vec_select:HI
    5420              :           (match_operand:V4HI 1 "register_operand" "y,YW,YW,YW")
    5421              :           (parallel [(match_operand:SI 2 "const_0_to_3_operand")])))]
    5422         2124 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5423         2124 :    && (TARGET_SSE || TARGET_3DNOW_A)"
    5424              :   "@
    5425              :    pextrw\t{%2, %1, %k0|%k0, %1, %2}
    5426              :    %vpextrw\t{%2, %1, %k0|%k0, %1, %2}
    5427          640 :    pextrw\t{%2, %1, %0|%0, %1, %2}
    5428          640 :    vpextrw\t{%2, %1, %0|%0, %1, %2}"
    5429          628 :   [(set_attr "isa" "*,sse2,sse4_noavx,avx")
    5430          640 :    (set_attr "addr" "*,*,gpr16,*")
    5431              :    (set_attr "mmx_isa" "native,*,*,*")
    5432              :    (set_attr "type" "mmxcvt,sselog1,sselog1,sselog1")
    5433              :    (set_attr "c86_attr" "extr")
    5434              :    (set_attr "length_immediate" "1")
    5435              :    (set_attr "prefix" "orig,maybe_vex,maybe_vex,maybe_evex")
    5436              :    (set_attr "mode" "DI,TI,TI,TI")])
    5437              : 
    5438              : (define_insn "*mmx_pextrw<mode>"
    5439              :   [(set (match_operand:<mmxscalarmode> 0 "register_sse4nonimm_operand" "=?r,?r,jm,m,x,Yw")
    5440              :         (vec_select:<mmxscalarmode>
    5441              :           (match_operand:V4F_64 1 "register_operand" "y,YW,YW,YW,0,YW")
    5442              :           (parallel [(match_operand:SI 2 "const_0_to_3_operand")])))]
    5443           14 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5444            0 :    && (TARGET_SSE || TARGET_3DNOW_A)"
    5445            8 : {
    5446            8 :   switch (which_alternative)
    5447              :     {
    5448           68 :     case 0:
    5449           68 :     case 1:
    5450           62 :      return "%vpextrw\t{%2, %1, %k0|%k0, %1, %2}";
    5451           72 :     case 2:
    5452            4 :     case 3:
    5453            4 :      return "%vpextrw\t{%2, %1, %0|%0, %1, %2}";
    5454            4 :     case 4:
    5455            4 :       operands[2] = GEN_INT (INTVAL (operands[2]) * 2);
    5456            4 :       return "psrldq\t{%2, %0|%0, %2}";
    5457            0 :     case 5:
    5458            0 :       operands[2] = GEN_INT (INTVAL (operands[2]) * 2);
    5459            0 :       return "vpsrldq\t{%2, %1, %0|%0, %1, %2}";
    5460              : 
    5461            0 :     default:
    5462            0 :       gcc_unreachable ();
    5463              :     }
    5464              : }
    5465              :   [(set_attr "isa" "*,sse2,sse4_noavx,avx,noavx,avx")
    5466              :    (set_attr "addr" "*,*,gpr16,*,*,*")
    5467              :    (set_attr "mmx_isa" "native,*,*,*,*,*")
    5468            0 :    (set_attr "type" "mmxcvt,sselog1,sselog1,sselog1,sseishft1,sseishft1")
    5469              :    (set_attr "c86_attr" "extr,extr,extr,extr,*,*")
    5470              :    (set_attr "length_immediate" "1")
    5471              :    (set_attr "prefix" "orig,maybe_vex,maybe_vex,maybe_evex,orig,maybe_evex")
    5472              :    (set_attr "mode" "DI,TI,TI,TI,TI,TI")])
    5473              : 
    5474              : (define_insn "*mmx_pextrw_zext"
    5475              :   [(set (match_operand:SWI48 0 "register_operand" "=r,r")
    5476              :         (zero_extend:SWI48
    5477              :           (vec_select:HI
    5478              :             (match_operand:V4HI 1 "register_operand" "y,YW")
    5479              :             (parallel [(match_operand:SI 2 "const_0_to_3_operand")]))))]
    5480         6925 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5481         6925 :    && (TARGET_SSE || TARGET_3DNOW_A)"
    5482              :   "@
    5483              :    pextrw\t{%2, %1, %k0|%k0, %1, %2}
    5484              :    %vpextrw\t{%2, %1, %k0|%k0, %1, %2}"
    5485         5089 :   [(set_attr "isa" "*,sse2")
    5486         5089 :    (set_attr "mmx_isa" "native,*")
    5487              :    (set_attr "type" "mmxcvt,sselog1")
    5488              :    (set_attr "c86_attr" "extr")
    5489              :    (set_attr "length_immediate" "1")
    5490              :    (set_attr "prefix" "orig,maybe_vex")
    5491              :    (set_attr "mode" "DI,TI")])
    5492              : 
    5493              : (define_insn "*mmx_pextrb"
    5494              :   [(set (match_operand:QI 0 "nonimmediate_operand" "=jr,jm,r,m")
    5495            0 :         (vec_select:QI
    5496              :           (match_operand:V8QI 1 "register_operand" "YW,YW,YW,YW")
    5497              :           (parallel [(match_operand:SI 2 "const_0_to_7_operand")])))]
    5498         3251 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5499              :   "@
    5500              :    pextrb\t{%2, %1, %k0|%k0, %1, %2}
    5501              :    pextrb\t{%2, %1, %0|%0, %1, %2}
    5502          152 :    vpextrb\t{%2, %1, %k0|%k0, %1, %2}
    5503          152 :    vpextrb\t{%2, %1, %0|%0, %1, %2}"
    5504          109 :   [(set_attr "isa" "noavx,noavx,avx,avx")
    5505          152 :    (set_attr "addr" "*,gpr16,*,*")
    5506              :    (set_attr "type" "sselog1")
    5507              :    (set_attr "c86_attr" "extr")
    5508              :    (set_attr "prefix_extra" "1")
    5509              :    (set_attr "length_immediate" "1")
    5510              :    (set_attr "prefix" "maybe_vex")
    5511              :    (set_attr "mode" "TI")])
    5512              : 
    5513              : (define_insn "*mmx_pextrb_zext"
    5514              :   [(set (match_operand:SWI248 0 "register_operand" "=jr,r")
    5515              :         (zero_extend:SWI248
    5516              :           (vec_select:QI
    5517              :             (match_operand:V8QI 1 "register_operand" "YW,YW")
    5518              :             (parallel [(match_operand:SI 2 "const_0_to_7_operand")]))))]
    5519         5067 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5520              :   "%vpextrb\t{%2, %1, %k0|%k0, %1, %2}"
    5521              :   [(set_attr "isa" "noavx,avx")
    5522              :    (set_attr "type" "sselog1")
    5523          386 :    (set_attr "c86_attr" "extr")
    5524          386 :    (set_attr "prefix_extra" "1")
    5525              :    (set_attr "length_immediate" "1")
    5526              :    (set_attr "prefix" "maybe_vex")
    5527              :    (set_attr "mode" "TI")])
    5528              : 
    5529              : (define_insn "mmx_pshufbv8qi3"
    5530              :   [(set (match_operand:V8QI 0 "register_operand" "=x,Yw")
    5531              :         (unspec:V8QI
    5532              :           [(match_operand:V8QI 1 "register_operand" "0,Yw")
    5533              :            (match_operand:V16QI 2 "vector_operand" "xja,Ywm")]
    5534              :           UNSPEC_PSHUFB))]
    5535         2670 :   "TARGET_SSSE3 && TARGET_MMX_WITH_SSE"
    5536          281 :   "@
    5537              :    pshufb\t{%2, %0|%0, %2}
    5538              :    vpshufb\t{%2, %1, %0|%0, %1, %2}"
    5539         2919 :   [(set_attr "isa" "noavx,avx")
    5540         2919 :    (set_attr "addr" "gpr16,*")
    5541         2919 :    (set_attr "type" "sselog1")
    5542         2919 :    (set_attr "prefix_extra" "1")
    5543         2919 :    (set_attr "prefix" "orig,maybe_evex")
    5544              :    (set_attr "btver2_decode" "vector")
    5545              :    (set_attr "mode" "TI")])
    5546              : 
    5547              : (define_insn "mmx_pshufbv4qi3"
    5548              :   [(set (match_operand:V4QI 0 "register_operand" "=x,Yw")
    5549              :         (unspec:V4QI
    5550              :           [(match_operand:V4QI 1 "register_operand" "0,Yw")
    5551              :            (match_operand:V16QI 2 "vector_operand" "xja,Ywm")]
    5552              :           UNSPEC_PSHUFB))]
    5553         2721 :   "TARGET_SSSE3"
    5554          198 :   "@
    5555              :    pshufb\t{%2, %0|%0, %2}
    5556              :    vpshufb\t{%2, %1, %0|%0, %1, %2}"
    5557              :   [(set_attr "isa" "noavx,avx")
    5558              :    (set_attr "addr" "gpr16,*")
    5559              :    (set_attr "type" "sselog1")
    5560              :    (set_attr "prefix_extra" "1")
    5561        43304 :    (set_attr "prefix" "orig,maybe_evex")
    5562        43304 :    (set_attr "btver2_decode" "vector")
    5563              :    (set_attr "mode" "TI")])
    5564        11196 : 
    5565        11196 : (define_expand "mmx_pshufw"
    5566        11196 :   [(match_operand:V4HI 0 "register_operand")
    5567              :    (match_operand:V4HI 1 "register_mmxmem_operand")
    5568        11112 :    (match_operand:SI 2 "const_int_operand")]
    5569        11112 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5570        11112 :    && (TARGET_SSE || TARGET_3DNOW_A)"
    5571           75 : {
    5572         9459 :   int mask = INTVAL (operands[2]);
    5573         9459 :   emit_insn (gen_mmx_pshufwv4hi_1 (operands[0], operands[1],
    5574         9384 :                                    GEN_INT ((mask >> 0) & 3),
    5575        14899 :                                    GEN_INT ((mask >> 2) & 3),
    5576           75 :                                    GEN_INT ((mask >> 4) & 3),
    5577           75 :                                    GEN_INT ((mask >> 6) & 3)));
    5578           75 :   DONE;
    5579              : })
    5580              : 
    5581              : (define_insn "mmx_pshufw<mode>_1"
    5582              :   [(set (match_operand:V4FI_64 0 "register_operand" "=y,Yw")
    5583              :         (vec_select:V4FI_64
    5584              :           (match_operand:V4FI_64 1 "register_mmxmem_operand" "ym,Yw")
    5585              :           (parallel [(match_operand 2 "const_0_to_3_operand")
    5586              :                      (match_operand 3 "const_0_to_3_operand")
    5587              :                      (match_operand 4 "const_0_to_3_operand")
    5588              :                      (match_operand 5 "const_0_to_3_operand")])))]
    5589          417 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5590            0 :    && (TARGET_SSE || TARGET_3DNOW_A)"
    5591         6478 : {
    5592         1156 :   int mask = 0;
    5593         1156 :   mask |= INTVAL (operands[2]) << 0;
    5594        13309 :   mask |= INTVAL (operands[3]) << 2;
    5595        13309 :   mask |= INTVAL (operands[4]) << 4;
    5596        10217 :   mask |= INTVAL (operands[5]) << 6;
    5597         9061 :   operands[2] = GEN_INT (mask);
    5598        19432 : 
    5599         1156 :   switch (which_alternative)
    5600              :     {
    5601              :     case 0:
    5602              :       return "pshufw\t{%2, %1, %0|%0, %1, %2}";
    5603         1156 :     case 1:
    5604         1340 :       return "%vpshuflw\t{%2, %1, %0|%0, %1, %2}";
    5605            0 :     default:
    5606            0 :       gcc_unreachable ();
    5607              :     }
    5608          184 : }
    5609          184 :   [(set_attr "isa" "*,sse2")
    5610          184 :    (set_attr "mmx_isa" "native,*")
    5611          184 :    (set_attr "type" "mmxcvt,sselog1")
    5612         2137 :    (set_attr "length_immediate" "1")
    5613          184 :    (set_attr "mode" "DI,TI")])
    5614          184 : 
    5615          184 : (define_insn "*mmx_pshufd_1"
    5616          184 :   [(set (match_operand:V2SI 0 "register_operand" "=Yv")
    5617          184 :         (vec_select:V2SI
    5618          184 :           (match_operand:V2SI 1 "register_operand" "Yv")
    5619              :           (parallel [(match_operand 2 "const_0_to_1_operand")
    5620           10 :                      (match_operand 3 "const_0_to_1_operand")])))]
    5621         9783 :   "TARGET_MMX_WITH_SSE"
    5622          807 : {
    5623          807 :   int mask = 0;
    5624          807 :   mask |= INTVAL (operands[2]) << 0;
    5625          807 :   mask |= INTVAL (operands[3]) << 2;
    5626          804 :   mask |= 2 << 4;
    5627          814 :   mask |= 3 << 6;
    5628          804 :   operands[2] = GEN_INT (mask);
    5629            7 : 
    5630          797 :   return "%vpshufd\t{%2, %1, %0|%0, %1, %2}";
    5631              : }
    5632              :   [(set_attr "type" "sselog1")
    5633              :    (set_attr "prefix_data16" "1")
    5634              :    (set_attr "length_immediate" "1")
    5635              :    (set_attr "mode" "TI")])
    5636              : 
    5637              : (define_insn "*mmx_pblendw64"
    5638              :   [(set (match_operand:V4FI_64 0 "register_operand" "=Yr,*x,x")
    5639              :         (vec_merge:V4FI_64
    5640              :           (match_operand:V4FI_64 2 "register_operand" "Yr,*x,x")
    5641              :           (match_operand:V4FI_64 1 "register_operand" "0,0,x")
    5642              :           (match_operand:SI 3 "const_0_to_15_operand")))]
    5643         2957 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5644              :   "@
    5645              :    pblendw\t{%3, %2, %0|%0, %2, %3}
    5646              :    pblendw\t{%3, %2, %0|%0, %2, %3}
    5647         6226 :    vpblendw\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    5648         6226 :   [(set_attr "isa" "noavx,noavx,avx")
    5649              :    (set_attr "type" "ssemov")
    5650         6226 :    (set_attr "c86_attr" "blend")
    5651              :    (set_attr "prefix_extra" "1")
    5652              :    (set_attr "length_immediate" "1")
    5653              :    (set_attr "prefix" "orig,orig,vex")
    5654              :    (set_attr "mode" "TI")])
    5655              : 
    5656              : (define_insn "*mmx_pblendw32"
    5657              :   [(set (match_operand:V2FI_32 0 "register_operand" "=Yr,*x,x")
    5658              :         (vec_merge:V2FI_32
    5659              :           (match_operand:V2FI_32 2 "register_operand" "Yr,*x,x")
    5660              :           (match_operand:V2FI_32 1 "register_operand" "0,0,x")
    5661              :           (match_operand:SI 3 "const_0_to_7_operand")))]
    5662            1 :   "TARGET_SSE4_1"
    5663              :   "@
    5664              :    pblendw\t{%3, %2, %0|%0, %2, %3}
    5665              :    pblendw\t{%3, %2, %0|%0, %2, %3}
    5666           64 :    vpblendw\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    5667           64 :   [(set_attr "isa" "noavx,noavx,avx")
    5668              :    (set_attr "type" "ssemov")
    5669       165082 :    (set_attr "c86_attr" "blend")
    5670              :    (set_attr "prefix_extra" "1")
    5671        66609 :    (set_attr "length_immediate" "1")
    5672        66609 :    (set_attr "prefix" "orig,orig,vex")
    5673              :    (set_attr "mode" "TI")])
    5674         2492 : 
    5675         2492 : ;; Optimize V2SImode load from memory, swapping the elements and
    5676              : ;; storing back into the memory into DImode rotate of the memory by 32.
    5677         2492 : (define_split
    5678              :   [(set (match_operand:V2SI 0 "memory_operand")
    5679              :         (vec_select:V2SI (match_dup 0)
    5680              :           (parallel [(const_int 1) (const_int 0)])))]
    5681           55 :   "TARGET_64BIT && (TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())"
    5682           55 :   [(set (match_dup 0)
    5683              :         (rotate:DI (match_dup 0) (const_int 32)))]
    5684           55 :   "operands[0] = adjust_address (operands[0], DImode, 0);")
    5685              : 
    5686              : (define_insn "mmx_pswapdv2si2"
    5687           55 :   [(set (match_operand:V2SI 0 "register_operand" "=y,Yv")
    5688              :         (vec_select:V2SI
    5689       437371 :           (match_operand:V2SI 1 "register_mmxmem_operand" "ym,Yv")
    5690              :           (parallel [(const_int 1) (const_int 0)])))]
    5691       261699 :   "TARGET_3DNOW_A"
    5692       411686 :   "@
    5693       194880 :    pswapd\t{%1, %0|%0, %1}
    5694              :    %vpshufd\t{$0xe1, %1, %0|%0, %1, 0xe1}";
    5695      1246002 :   [(set_attr "isa" "*,sse2")
    5696      1174011 :    (set_attr "mmx_isa" "native,*")
    5697      1174002 :    (set_attr "type" "mmxcvt,sselog1")
    5698       138799 :    (set_attr "prefix_extra" "1,*")
    5699      1140596 :    (set_attr "length_immediate" "*,1")
    5700        28370 :    (set_attr "mode" "DI,TI")])
    5701       838252 : 
    5702       809891 : (define_insn "*vec_dupv4hi"
    5703            3 :   [(set (match_operand:V4HI 0 "register_operand" "=y,Yw")
    5704        96375 :         (vec_duplicate:V4HI
    5705        96375 :           (truncate:HI
    5706              :             (match_operand:SI 1 "register_operand" "0,Yw"))))]
    5707         9910 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5708         9826 :    && (TARGET_SSE || TARGET_3DNOW_A)"
    5709              :   "@
    5710              :    pshufw\t{$0, %0, %0|%0, %0, 0}
    5711              :    %vpshuflw\t{$0, %1, %0|%0, %1, 0}"
    5712          246 :   [(set_attr "isa" "*,sse2")
    5713          246 :    (set_attr "mmx_isa" "native,*")
    5714          246 :    (set_attr "type" "mmxcvt,sselog1")
    5715          246 :    (set_attr "length_immediate" "1")
    5716              :    (set_attr "mode" "DI,TI")])
    5717              : 
    5718              : (define_insn "*vec_dup<mode>"
    5719              :   [(set (match_operand:V4FI_64 0 "register_operand" "=Yw")
    5720              :         (vec_duplicate:V4FI_64
    5721              :           (match_operand:<mmxscalarmode> 1 "register_operand" "Yw")))]
    5722           32 :   "TARGET_MMX_WITH_SSE"
    5723           77 :   "%vpshuflw\t{$0, %1, %0|%0, %1, 0}"
    5724              :   [(set_attr "isa" "sse2")
    5725              :    (set_attr "type" "sselog1")
    5726        15098 :    (set_attr "length_immediate" "1")
    5727        15098 :    (set_attr "mode" "TI")])
    5728        13871 : 
    5729        13871 : (define_insn "*vec_dupv2si"
    5730        18485 :   [(set (match_operand:V2SI 0 "register_operand" "=y,Yv")
    5731              :         (vec_duplicate:V2SI
    5732              :           (match_operand:SI 1 "register_operand" "0,Yv")))]
    5733        10808 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    5734         1169 :   "@
    5735              :    punpckldq\t%0, %0
    5736              :    %vpshufd\t{$0xe0, %1, %0|%0, %1, 0xe0}"
    5737           23 :   [(set_attr "isa" "*,sse2")
    5738           23 :    (set_attr "mmx_isa" "native,*")
    5739           18 :    (set_attr "type" "mmxcvt,sselog1")
    5740           18 :    (set_attr "prefix_data16" "*,1")
    5741           23 :    (set_attr "length_immediate" "*,1")
    5742              :    (set_attr "mode" "DI,TI")])
    5743              : 
    5744              : (define_insn "*mmx_concatv2si"
    5745              :   [(set (match_operand:V2SI 0 "register_operand"     "=y,y")
    5746              :         (vec_concat:V2SI
    5747              :           (match_operand:SI 1 "nonimmediate_operand" " 0,rm")
    5748              :           (match_operand:SI 2 "nonimm_or_0_operand"  "ym,C")))]
    5749       396591 :   "TARGET_MMX && !TARGET_SSE"
    5750              :   "@
    5751       396591 :    punpckldq\t{%2, %0|%0, %2}
    5752              :    movd\t{%1, %0|%0, %1}"
    5753              :   [(set_attr "type" "mmxcvt,mmxmov")
    5754              :    (set_attr "mode" "DI")])
    5755              : 
    5756              : (define_expand "vec_setv2si"
    5757              :   [(match_operand:V2SI 0 "register_operand")
    5758              :    (match_operand:SI 1 "register_operand")
    5759              :    (match_operand 2 "vec_setm_mmx_operand")]
    5760              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    5761          191 : {
    5762          191 :   if (CONST_INT_P (operands[2]))
    5763          189 :     ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
    5764          189 :                             INTVAL (operands[2]));
    5765              :   else
    5766            2 :     ix86_expand_vector_set_var (operands[0], operands[1], operands[2]);
    5767          191 :   DONE;
    5768              : })
    5769              : 
    5770              : ;; Avoid combining registers from different units in a single alternative,
    5771              : ;; see comment above inline_secondary_memory_needed function in i386.cc
    5772              : (define_insn_and_split "*vec_extractv2si_0"
    5773              :   [(set (match_operand:SI 0 "nonimmediate_operand"     "=x,m,y, m,r,r")
    5774              :         (vec_select:SI
    5775              :           (match_operand:V2SI 1 "nonimmediate_operand" "xm,x,ym,y,m,x")
    5776              :           (parallel [(const_int 0)])))]
    5777        25121 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5778        25121 :    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
    5779              :   "#"
    5780         3943 :   "&& reload_completed"
    5781         1940 :   [(set (match_dup 0) (match_dup 1))]
    5782       331336 :   "operands[1] = gen_lowpart (SImode, operands[1]);"
    5783       329396 :   [(set_attr "isa" "*,*,*,*,*,sse2")
    5784       444296 :    (set_attr "mmx_isa" "*,*,native,native,*,*")
    5785       116840 :    (set (attr "preferred_for_speed")
    5786       114900 :      (cond [(eq_attr "alternative" "5")
    5787              :               (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
    5788         1940 :            ]
    5789              :            (symbol_ref "true")))])
    5790              : 
    5791              : (define_insn "*vec_extractv2si_0_zext_sse4"
    5792              :   [(set (match_operand:DI 0 "register_operand" "=r,x")
    5793            7 :         (zero_extend:DI
    5794              :           (vec_select:SI
    5795            7 :             (match_operand:V2SI 1 "register_operand" "x,x")
    5796            7 :             (parallel [(const_int 0)]))))]
    5797          859 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE4_1"
    5798              :   "#"
    5799          852 :   [(set_attr "isa" "x64,*")
    5800              :    (set (attr "preferred_for_speed")
    5801              :      (cond [(eq_attr "alternative" "0")
    5802              :               (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC")
    5803              :            ]
    5804              :            (symbol_ref "true")))])
    5805              : 
    5806              : (define_insn "*vec_extractv2si_0_zext"
    5807              :   [(set (match_operand:DI 0 "register_operand" "=r")
    5808              :         (zero_extend:DI
    5809              :           (vec_select:SI
    5810              :             (match_operand:V2SI 1 "register_operand" "x")
    5811              :             (parallel [(const_int 0)]))))]
    5812            0 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5813          852 :    && TARGET_64BIT && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_FROM_VEC"
    5814              :   "#")
    5815              : 
    5816              : (define_split
    5817              :   [(set (match_operand:DI 0 "register_operand")
    5818         3116 :         (zero_extend:DI
    5819         3116 :           (vec_select:SI
    5820              :             (match_operand:V2SI 1 "register_operand")
    5821         2630 :             (parallel [(const_int 0)]))))]
    5822          398 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5823          398 :    && TARGET_SSE2 && reload_completed"
    5824          199 :   [(set (match_dup 0) (zero_extend:DI (match_dup 1)))]
    5825          199 :   "operands[1] = gen_lowpart (SImode, operands[1]);")
    5826              : 
    5827         1360 : ;; Avoid combining registers from different units in a single alternative,
    5828         1559 : ;; see comment above inline_secondary_memory_needed function in i386.cc
    5829         1360 : (define_insn "*vec_extractv2si_1"
    5830              :   [(set (match_operand:SI 0 "nonimmediate_operand"     "=y,jrjm,rm,x,x,y,x,r")
    5831          199 :         (vec_select:SI
    5832              :           (match_operand:V2SI 1 "nonimmediate_operand" " 0,x,   x ,x,0,o,o,o")
    5833              :           (parallel [(const_int 1)])))]
    5834        15380 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5835        15380 :    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
    5836          816 :   "@
    5837              :    punpckhdq\t%0, %0
    5838          816 :    pextrd\t{$1, %1, %0|%0, %1, 1}
    5839       183371 :    vpextrd\t{$1, %1, %0|%0, %1, 1}
    5840       183371 :    %vpshufd\t{$0xe5, %1, %0|%0, %1, 0xe5}
    5841       176361 :    shufps\t{$0xe5, %0, %0|%0, %0, 0xe5}
    5842       176361 :    #
    5843       356812 :    #
    5844              :    #"
    5845              :   [(set_attr "isa" "*,sse4_noavx,avx,sse2,noavx,*,*,*")
    5846              :    (set (attr "addr")
    5847              :         (if_then_else (eq_attr "alternative" "1")
    5848              :                       (const_string "gpr16")
    5849              :                       (const_string "*")))
    5850              :    (set_attr "mmx_isa" "native,*,*,*,*,native,*,*")
    5851              :    (set_attr "type" "mmxcvt,ssemov,ssemov,sseshuf1,sseshuf1,mmxmov,ssemov,imov")
    5852              :    (set_attr "c86_attr" "*,extr,extr,*,*,*,*,*")
    5853              :    (set (attr "length_immediate")
    5854              :      (if_then_else (eq_attr "alternative" "1,2,3,4")
    5855              :                    (const_string "1")
    5856              :                    (const_string "*")))
    5857              :    (set_attr "prefix" "orig,orig,maybe_evex,maybe_vex,orig,orig,orig,orig")
    5858              :    (set_attr "mode" "DI,TI,TI,TI,V4SF,SI,SI,SI")])
    5859              : 
    5860              : (define_split
    5861              :   [(set (match_operand:SI 0 "register_operand")
    5862              :         (vec_select:SI
    5863              :           (match_operand:V2SI 1 "memory_operand")
    5864              :           (parallel [(const_int 1)])))]
    5865           43 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && reload_completed"
    5866           43 :   [(set (match_dup 0) (match_dup 1))]
    5867           43 :   "operands[1] = adjust_address (operands[1], SImode, 4);")
    5868              : 
    5869         4328 : (define_insn "*vec_extractv2si_1_zext"
    5870         4371 :   [(set (match_operand:DI 0 "register_operand" "=jr,r")
    5871         3097 :         (zero_extend:DI
    5872         3097 :           (vec_select:SI
    5873         4403 :             (match_operand:V2SI 1 "register_operand" "x,x")
    5874              :             (parallel [(const_int 1)]))))]
    5875          974 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    5876          974 :    && TARGET_64BIT && TARGET_SSE4_1"
    5877              :   "%vpextrd\t{$1, %1, %k0|%k0, %1, 1}"
    5878            0 :   [(set_attr "isa" "noavx,avx")
    5879              :    (set_attr "type" "sselog1")
    5880            0 :    (set_attr "c86_attr" "extr")
    5881            0 :    (set_attr "prefix_extra" "1")
    5882            0 :    (set_attr "length_immediate" "1")
    5883         4134 :    (set_attr "prefix" "maybe_vex")
    5884         4134 :    (set_attr "mode" "TI")])
    5885              : 
    5886         1457 : (define_insn_and_split "*vec_extractv2si_zext_mem"
    5887         1457 :   [(set (match_operand:DI 0 "register_operand" "=y,x,r")
    5888            2 :         (zero_extend:DI
    5889         1459 :           (vec_select:SI
    5890              :             (match_operand:V2SI 1 "memory_operand" "o,o,o")
    5891              :             (parallel [(match_operand:SI 2 "const_0_to_1_operand")]))))]
    5892            2 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_64BIT"
    5893         1455 :   "#"
    5894            0 :   "&& reload_completed"
    5895          199 :   [(set (match_dup 0) (zero_extend:DI (match_dup 1)))]
    5896         2650 : {
    5897         2650 :   operands[1] = adjust_address (operands[1], SImode, INTVAL (operands[2]) * 4);
    5898          740 : }
    5899         3390 :   [(set_attr "isa" "*,sse2,*")
    5900         2650 :    (set_attr "mmx_isa" "native,*,*")])
    5901          740 : 
    5902              : (define_expand "vec_extractv2sisi"
    5903              :   [(match_operand:SI 0 "register_operand")
    5904            0 :    (match_operand:V2SI 1 "register_operand")
    5905              :    (match_operand 2 "const_int_operand")]
    5906              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    5907         8273 : {
    5908         8273 :   ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
    5909        11735 :                               operands[1], INTVAL (operands[2]));
    5910         8273 :   DONE;
    5911         3462 : })
    5912         3462 : 
    5913         3462 : (define_expand "vec_initv2sisi"
    5914              :   [(match_operand:V2SI 0 "register_operand")
    5915              :    (match_operand 1)]
    5916              :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
    5917        18444 : {
    5918        34251 :   ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
    5919              :                            operands[1]);
    5920        18444 :   DONE;
    5921              : })
    5922              : 
    5923            2 : (define_expand "vec_set<mode>"
    5924              :   [(match_operand:V4FI_64 0 "register_operand")
    5925            2 :    (match_operand:<mmxscalarmode> 1 "register_operand")
    5926            2 :    (match_operand 2 "vec_setm_mmx_operand")]
    5927            2 :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    5928            9 : {
    5929            9 :   if (CONST_INT_P (operands[2]))
    5930           10 :     ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
    5931            6 :                             INTVAL (operands[2]));
    5932              :   else
    5933            7 :     ix86_expand_vector_set_var (operands[0], operands[1], operands[2]);
    5934            9 :   DONE;
    5935            4 : })
    5936            4 : 
    5937            4 : (define_expand "vec_extract<mode><mmxscalarmodelower>"
    5938              :   [(match_operand:<mmxscalarmode> 0 "register_operand")
    5939              :    (match_operand:V4FI_64 1 "register_operand")
    5940              :    (match_operand 2 "const_int_operand")]
    5941              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    5942          825 : {
    5943          853 :   ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
    5944          825 :                               operands[1], INTVAL (operands[2]));
    5945          825 :   DONE;
    5946              : })
    5947          968 : 
    5948              : (define_expand "vec_initv4hihi"
    5949          968 :   [(match_operand:V4HI 0 "register_operand")
    5950          968 :    (match_operand 1)]
    5951          968 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
    5952         3462 : {
    5953         3467 :   ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
    5954              :                            operands[1]);
    5955         3462 :   DONE;
    5956              : })
    5957              : 
    5958            2 : (define_expand "vec_init<mode><mmxscalarmodelower>"
    5959            0 :   [(match_operand:V4F_64 0 "register_operand")
    5960            2 :    (match_operand 1)]
    5961            2 :   "TARGET_MMX_WITH_SSE"
    5962           23 : {
    5963           21 :   ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
    5964              :                            operands[1]);
    5965           21 :   DONE;
    5966              : })
    5967              : 
    5968              : (define_expand "vec_setv8qi"
    5969            1 :   [(match_operand:V8QI 0 "register_operand")
    5970              :    (match_operand:QI 1 "register_operand")
    5971            1 :    (match_operand 2 "vec_setm_mmx_operand")]
    5972            0 :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5973            3 : {
    5974            2 :   if (CONST_INT_P (operands[2]))
    5975            0 :     ix86_expand_vector_set (TARGET_MMX_WITH_SSE, operands[0], operands[1],
    5976            0 :                             INTVAL (operands[2]));
    5977              :   else
    5978           29 :     ix86_expand_vector_set_var (operands[0], operands[1], operands[2]);
    5979            2 :   DONE;
    5980           27 : })
    5981           27 : 
    5982           27 : (define_expand "vec_extractv8qiqi"
    5983            0 :   [(match_operand:QI 0 "register_operand")
    5984              :    (match_operand:V8QI 1 "register_operand")
    5985              :    (match_operand 2 "const_int_operand")]
    5986              :   "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE"
    5987          630 : {
    5988          630 :   ix86_expand_vector_extract (TARGET_MMX_WITH_SSE, operands[0],
    5989          630 :                               operands[1], INTVAL (operands[2]));
    5990          630 :   DONE;
    5991              : })
    5992            0 : 
    5993              : (define_expand "vec_initv8qiqi"
    5994            0 :   [(match_operand:V8QI 0 "register_operand")
    5995            0 :    (match_operand 1)]
    5996            0 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
    5997          331 : {
    5998          335 :   ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
    5999              :                            operands[1]);
    6000          331 :   DONE;
    6001              : })
    6002              : 
    6003          392 : (define_insn "*pinsrw"
    6004              :   [(set (match_operand:V2FI_32 0 "register_operand" "=x,YW,&x")
    6005          392 :         (vec_merge:V2FI_32
    6006          392 :           (vec_duplicate:V2FI_32
    6007          392 :             (match_operand:<mmxscalarmode> 2 "nonimmediate_operand" "rm,rm,x"))
    6008              :           (match_operand:V2FI_32 1 "register_operand" "0,YW,x")
    6009              :           (match_operand:SI 3 "const_int_operand")))]
    6010            7 :   "TARGET_SSE2
    6011          682 :    && ((unsigned) exact_log2 (INTVAL (operands[3]))
    6012            7 :        < GET_MODE_NUNITS (V2HImode))"
    6013           63 : {
    6014           61 :   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
    6015           63 :   switch (which_alternative)
    6016         1152 :     {
    6017         1152 :     case 2:
    6018              :       return "#";
    6019            1 :     case 1:
    6020         1826 :       if (MEM_P (operands[2]))
    6021              :         return "vpinsrw\t{%3, %2, %1, %0|%0, %1, %2, %3}";
    6022              :       else
    6023            0 :         return "vpinsrw\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
    6024           60 :     case 0:
    6025           60 :       if (MEM_P (operands[2]))
    6026              :         return "pinsrw\t{%3, %2, %0|%0, %2, %3}";
    6027              :       else
    6028           41 :         return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
    6029            0 :     default:
    6030            0 :       gcc_unreachable ();
    6031              :     }
    6032              : }
    6033              :   [(set_attr "isa" "noavx,avx,sse4")
    6034              :    (set_attr "type" "sselog")
    6035              :    (set_attr "c86_attr" "insr")
    6036           61 :    (set_attr "length_immediate" "1")
    6037              :    (set_attr "mode" "TI")])
    6038              : 
    6039              : ;; For TARGET_SSE2, implement insert from XMM reg with PSHULFW + PBLENDW.
    6040              : (define_split
    6041              :   [(set (match_operand:V2FI_32 0 "sse_reg_operand")
    6042              :         (vec_merge:V2FI_32
    6043              :           (vec_duplicate:V2FI_32
    6044              :             (match_operand:<mmxscalarmode> 2 "sse_reg_operand"))
    6045              :           (match_operand:V2FI_32 1 "sse_reg_operand")
    6046              :           (match_operand:SI 3 "const_int_operand")))]
    6047            1 :   "TARGET_SSE4_1 && reload_completed
    6048            1 :    && ((unsigned) exact_log2 (INTVAL (operands[3]))
    6049            1 :        < GET_MODE_NUNITS (<MODE>mode))"
    6050              :   [(set (match_dup 0)
    6051            1 :         (vec_duplicate:V2FI_32 (match_dup 2)))
    6052              :    (set (match_dup 0)
    6053          232 :         (vec_merge:V2FI_32 (match_dup 1) (match_dup 0) (match_dup 3)))]
    6054          233 :   "operands[3] = GEN_INT (~INTVAL (operands[3]) & 0x3);")
    6055              : 
    6056              : 
    6057          233 : (define_insn "*pinsrb"
    6058              :   [(set (match_operand:V4QI 0 "register_operand" "=x,YW")
    6059      1408332 :         (vec_merge:V4QI
    6060              :           (vec_duplicate:V4QI
    6061      1408332 :             (match_operand:QI 2 "nonimmediate_operand" "jrjm,rm"))
    6062      1408333 :           (match_operand:V4QI 1 "register_operand" "0,YW")
    6063      1408332 :           (match_operand:SI 3 "const_int_operand")))]
    6064      1408332 :   "TARGET_SSE4_1
    6065      1408332 :    && ((unsigned) exact_log2 (INTVAL (operands[3]))
    6066            0 :        < GET_MODE_NUNITS (V4QImode))"
    6067      1094048 : {
    6068      1093970 :   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
    6069           93 :   switch (which_alternative)
    6070           93 :     {
    6071           93 :     case 1:
    6072            0 :       if (MEM_P (operands[2]))
    6073           15 :         return "vpinsrb\t{%3, %2, %1, %0|%0, %1, %2, %3}";
    6074         3277 :       else
    6075         3277 :         return "vpinsrb\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
    6076            0 :     case 0:
    6077           95 :       if (MEM_P (operands[2]))
    6078           95 :         return "pinsrb\t{%3, %2, %0|%0, %2, %3}";
    6079              :       else
    6080            0 :         return "pinsrb\t{%3, %k2, %0|%0, %k2, %3}";
    6081            0 :     default:
    6082            0 :       gcc_unreachable ();
    6083            0 :     }
    6084            0 : }
    6085              :   [(set_attr "isa" "noavx,avx")
    6086              :    (set_attr "addr" "gpr16,*")
    6087              :    (set_attr "type" "sselog")
    6088              :    (set_attr "c86_attr" "insr")
    6089              :    (set_attr "prefix_extra" "1")
    6090              :    (set_attr "length_immediate" "1")
    6091              :    (set_attr "prefix" "orig,vex")
    6092              :    (set_attr "mode" "TI")])
    6093              : 
    6094            7 : (define_insn "*pextrw"
    6095              :   [(set (match_operand:HI 0 "register_sse4nonimm_operand" "=r,jm,m")
    6096              :         (vec_select:HI
    6097              :           (match_operand:V2HI 1 "register_operand" "YW,YW,YW")
    6098              :           (parallel [(match_operand:SI 2 "const_0_to_1_operand")])))]
    6099          628 :   "TARGET_SSE2"
    6100              :   "@
    6101              :    %vpextrw\t{%2, %1, %k0|%k0, %1, %2}
    6102              :    pextrw\t{%2, %1, %0|%0, %1, %2}
    6103        19755 :    vpextrw\t{%2, %1, %0|%0, %1, %2}"
    6104        19755 :   [(set_attr "isa" "*,sse4_noavx,avx")
    6105        19582 :    (set_attr "addr" "*,gpr16,*")
    6106        39337 :    (set_attr "type" "sselog1")
    6107              :    (set_attr "c86_attr" "extr")
    6108              :    (set_attr "length_immediate" "1")
    6109              :    (set_attr "prefix" "maybe_vex")
    6110              :    (set_attr "mode" "TI")])
    6111              : 
    6112              : (define_insn "*pextrw<mode>"
    6113              :   [(set (match_operand:<mmxscalarmode> 0 "register_sse4nonimm_operand" "=?r,jm,m,x,Yw")
    6114              :         (vec_select:<mmxscalarmode>
    6115              :           (match_operand:V2F_32 1 "register_operand" "YW,YW,YW,0,YW")
    6116              :           (parallel [(match_operand:SI 2 "const_0_to_1_operand")])))]
    6117           62 :   "TARGET_SSE2"
    6118           13 : {
    6119            7 :   switch (which_alternative)
    6120              :     {
    6121         4224 :     case 0:
    6122         4224 :      return "%vpextrw\t{%2, %1, %k0|%k0, %1, %2}";
    6123         4077 :     case 1:
    6124         8301 :      return "pextrw\t{%2, %1, %0|%0, %1, %2}";
    6125            0 :     case 2:
    6126            0 :      return "vpextrw\t{%2, %1, %0|%0, %1, %2}";
    6127            1 :     case 3:
    6128            1 :       operands[2] = GEN_INT (INTVAL (operands[2]) * 2);
    6129            1 :       return "psrldq\t{%2, %0|%0, %2}";
    6130            6 :     case 4:
    6131            6 :       operands[2] = GEN_INT (INTVAL (operands[2]) * 2);
    6132            6 :       return "vpsrldq\t{%2, %1, %0|%0, %1, %2}";
    6133              : 
    6134            0 :     default:
    6135            0 :       gcc_unreachable ();
    6136              :     }
    6137              : }
    6138              :   [(set_attr "isa" "*,sse4_noavx,avx,noavx,avx")
    6139              :    (set_attr "addr" "*,gpr16,*,*,*")
    6140              :    (set_attr "type" "sselog1,sselog1,sselog1,sseishft1,sseishft1")
    6141            0 :    (set_attr "c86_attr" "extr,extr,extr,*,*")
    6142              :    (set_attr "length_immediate" "1")
    6143              :    (set_attr "prefix" "maybe_vex,orig,maybe_evex,orig,maybe_evex")
    6144              :    (set_attr "mode" "TI")])
    6145              : 
    6146              : (define_insn "*pextrw_zext"
    6147              :   [(set (match_operand:SWI48 0 "register_operand" "=r")
    6148            0 :         (zero_extend:SWI48
    6149              :           (vec_select:HI
    6150              :             (match_operand:V2HI 1 "register_operand" "YW")
    6151              :             (parallel [(match_operand:SI 2 "const_0_to_1_operand")]))))]
    6152         5105 :   "TARGET_SSE2"
    6153              :   "%vpextrw\t{%2, %1, %k0|%k0, %1, %2}"
    6154              :   [(set_attr "type" "sselog1")
    6155              :    (set_attr "c86_attr" "extr")
    6156        50858 :    (set_attr "length_immediate" "1")
    6157        50858 :    (set_attr "prefix" "maybe_vex")
    6158              :    (set_attr "mode" "TI")])
    6159              : 
    6160              : (define_insn "*pextrb"
    6161              :   [(set (match_operand:QI 0 "nonimmediate_operand" "=jr,jm,r,m")
    6162              :         (vec_select:QI
    6163              :           (match_operand:V4QI 1 "register_operand" "YW,YW,YW,YW")
    6164              :           (parallel [(match_operand:SI 2 "const_0_to_3_operand")])))]
    6165          109 :   "TARGET_SSE4_1"
    6166              :   "@
    6167              :    pextrb\t{%2, %1, %k0|%k0, %1, %2}
    6168              :    pextrb\t{%2, %1, %0|%0, %1, %2}
    6169              :    vpextrb\t{%2, %1, %k0|%k0, %1, %2}
    6170              :    vpextrb\t{%2, %1, %0|%0, %1, %2}"
    6171              :   [(set_attr "isa" "noavx,noavx,avx,avx")
    6172              :    (set_attr "addr" "*,gpr16,*,*")
    6173         5296 :    (set_attr "type" "sselog1")
    6174         5296 :    (set_attr "c86_attr" "extr")
    6175         2883 :    (set_attr "prefix_extra" "1")
    6176         8179 :    (set_attr "length_immediate" "1")
    6177              :    (set_attr "prefix" "maybe_vex")
    6178              :    (set_attr "mode" "TI")])
    6179              : 
    6180              : (define_insn "*pextrb_zext"
    6181              :   [(set (match_operand:SWI248 0 "register_operand" "=jr,r")
    6182              :         (zero_extend:SWI248
    6183              :           (vec_select:QI
    6184              :             (match_operand:V4QI 1 "register_operand" "YW,YW")
    6185              :             (parallel [(match_operand:SI 2 "const_0_to_3_operand")]))))]
    6186          386 :   "TARGET_SSE4_1"
    6187              :   "%vpextrb\t{%2, %1, %k0|%k0, %1, %2}"
    6188              :   [(set_attr "isa" "noavx,avx")
    6189              :    (set_attr "type" "sselog1")
    6190        14050 :    (set_attr "c86_attr" "extr")
    6191        14050 :    (set_attr "prefix_extra" "1")
    6192              :    (set_attr "length_immediate" "1")
    6193              :    (set_attr "prefix" "maybe_vex")
    6194              :    (set_attr "mode" "TI")])
    6195              : 
    6196              : (define_expand "vec_set<mode>"
    6197              :   [(match_operand:V2FI_32 0 "register_operand")
    6198              :    (match_operand:<mmxscalarmode> 1 "register_operand")
    6199              :    (match_operand 2 "vec_setm_sse41_operand")]
    6200              :   "TARGET_SSE2"
    6201           29 : {
    6202           29 :   if (CONST_INT_P (operands[2]))
    6203           26 :     ix86_expand_vector_set (false, operands[0], operands[1],
    6204           26 :                             INTVAL (operands[2]));
    6205              :   else
    6206            3 :     ix86_expand_vector_set_var (operands[0], operands[1], operands[2]);
    6207           29 :   DONE;
    6208              : })
    6209              : 
    6210              : (define_expand "vec_extract<mode><mmxscalarmodelower>"
    6211              :   [(match_operand:<mmxscalarmode> 0 "register_operand")
    6212              :    (match_operand:V2FI_32 1 "register_operand")
    6213              :    (match_operand 2 "const_int_operand")]
    6214              :   "TARGET_SSE2"
    6215          399 : {
    6216          399 :   ix86_expand_vector_extract (false, operands[0],
    6217          399 :                               operands[1], INTVAL (operands[2]));
    6218          399 :   DONE;
    6219              : })
    6220          314 : 
    6221              : (define_expand "vec_setv4qi"
    6222          314 :   [(match_operand:V4QI 0 "register_operand")
    6223          314 :    (match_operand:QI 1 "register_operand")
    6224          314 :    (match_operand 2 "vec_setm_mmx_operand")]
    6225              :   "TARGET_SSE4_1"
    6226            2 : {
    6227            2 :   if (CONST_INT_P (operands[2]))
    6228            0 :     ix86_expand_vector_set (false, operands[0], operands[1],
    6229            0 :                             INTVAL (operands[2]));
    6230              :   else
    6231         4317 :     ix86_expand_vector_set_var (operands[0], operands[1], operands[2]);
    6232          182 :   DONE;
    6233         4315 : })
    6234         4495 : 
    6235         4315 : (define_expand "vec_extractv4qiqi"
    6236          180 :   [(match_operand:QI 0 "register_operand")
    6237              :    (match_operand:V4QI 1 "register_operand")
    6238              :    (match_operand 2 "const_int_operand")]
    6239              :   "TARGET_SSE4_1"
    6240           78 : {
    6241           78 :   ix86_expand_vector_extract (false, operands[0],
    6242           78 :                               operands[1], INTVAL (operands[2]));
    6243           78 :   DONE;
    6244              : })
    6245           22 : 
    6246              : (define_insn_and_split "*punpckwd"
    6247           22 :   [(set (match_operand:V2FI_32 0 "register_operand" "=x,Yw")
    6248           22 :         (vec_select:V2FI_32
    6249           22 :           (vec_concat:<mmxdoublevecmode>
    6250              :             (match_operand:V2FI_32 1 "register_operand" "0,Yw")
    6251              :             (match_operand:V2FI_32 2 "register_operand" "x,Yw"))
    6252              :           (parallel [(match_operand 3 "const_0_to_3_operand")
    6253              :                      (match_operand 4 "const_0_to_3_operand")])))]
    6254            0 :   "TARGET_SSE2"
    6255              :   "#"
    6256          363 :   "&& reload_completed"
    6257              :   [(set (match_dup 5)
    6258         2342 :         (vec_select:<mmxxmmmode>
    6259         2162 :           (match_dup 5)
    6260          723 :           (parallel [(match_dup 3) (match_dup 4)
    6261          360 :                      (const_int 2) (const_int 3)
    6262         5493 :                      (const_int 4) (const_int 5)
    6263         5493 :                      (const_int 6) (const_int 7)])))]
    6264          942 : {
    6265          952 :   rtx dest = lowpart_subreg (<mmxxmmmode>mode, operands[0], <MODE>mode);
    6266          180 :   rtx op1 = lowpart_subreg (<mmxxmmmode>mode, operands[1], <MODE>mode);
    6267          180 :   rtx op2 = lowpart_subreg (<mmxxmmmode>mode, operands[2], <MODE>mode);
    6268              : 
    6269          180 :   emit_insn (gen_vec_interleave_low<mmxxmmmodelower> (dest, op1, op2));
    6270              : 
    6271          180 :   static const int map[4] = { 0, 2, 1, 3 };
    6272              : 
    6273          180 :   int sel0 = map[INTVAL (operands[3])];
    6274          180 :   int sel1 = map[INTVAL (operands[4])];
    6275              : 
    6276          180 :   if (sel0 == 0 && sel1 == 1)
    6277           69 :     DONE;
    6278              : 
    6279          111 :   operands[3] = GEN_INT (sel0);
    6280          111 :   operands[4] = GEN_INT (sel1);
    6281          111 :   operands[5] = dest;
    6282              : }
    6283              :   [(set_attr "isa" "noavx,avx")
    6284              :    (set_attr "type" "sselog")
    6285          111 :    (set_attr "mode" "TI")])
    6286              : 
    6287              : (define_insn "*pshufw<mode>_1"
    6288              :   [(set (match_operand:V2FI_32 0 "register_operand" "=Yw")
    6289              :         (vec_select:V2FI_32
    6290              :           (match_operand:V2FI_32 1 "register_operand" "Yw")
    6291          111 :           (parallel [(match_operand 2 "const_0_to_1_operand")
    6292              :                      (match_operand 3 "const_0_to_1_operand")])))]
    6293            0 :   "TARGET_SSE2"
    6294           82 : {
    6295           82 :   int mask = 0;
    6296           96 :   mask |= INTVAL (operands[2]) << 0;
    6297         1855 :   mask |= INTVAL (operands[3]) << 2;
    6298         1869 :   mask |= 2 << 4;
    6299         1707 :   mask |= 3 << 6;
    6300         1625 :   operands[2] = GEN_INT (mask);
    6301         3073 : 
    6302       150124 :   return "%vpshuflw\t{%2, %1, %0|%0, %1, %2}";
    6303        28301 : }
    6304        15404 :   [(set_attr "type" "sselog1")
    6305         1263 :    (set_attr "length_immediate" "1")
    6306         1263 :    (set_attr "mode" "TI")])
    6307       150166 : 
    6308              : (define_insn "*vec_dupv2hi"
    6309              :   [(set (match_operand:V2HI 0 "register_operand" "=Yw")
    6310              :         (vec_duplicate:V2HI
    6311              :           (truncate:HI
    6312              :             (match_operand:SI 1 "register_operand" "Yw"))))]
    6313          246 :   "TARGET_SSE2"
    6314              :   "%vpshuflw\t{$0, %1, %0|%0, %1, 0}"
    6315              :   [(set_attr "type" "sselog1")
    6316              :    (set_attr "length_immediate" "1")
    6317              :    (set_attr "mode" "TI")])
    6318              : 
    6319              : (define_insn "*vec_dup<mode>"
    6320              :   [(set (match_operand:V2FI_32 0 "register_operand" "=Yw")
    6321              :         (vec_duplicate:V2FI_32
    6322              :           (match_operand:<mmxscalarmode> 1 "register_operand" "Yw")))]
    6323           18 :   "TARGET_SSE2"
    6324           52 :   "%vpshuflw\t{$0, %1, %0|%0, %1, 0}"
    6325              :   [(set_attr "type" "sselog1")
    6326              :    (set_attr "length_immediate" "1")
    6327     13196605 :    (set_attr "mode" "TI")])
    6328         1007 : 
    6329          960 : (define_expand "vec_init<mode><mmxscalarmodelower>"
    6330          960 :   [(match_operand:V2FI_32 0 "register_operand")
    6331         1967 :    (match_operand 1)]
    6332         1006 :   "TARGET_SSE2"
    6333     13195912 : {
    6334     13196975 :   ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
    6335     13196604 :                            operands[1]);
    6336         1320 :   DONE;
    6337     13195598 : })
    6338         1006 : 
    6339     13195598 : (define_expand "vec_initv4qiqi"
    6340          760 :   [(match_operand:V2HI 0 "register_operand")
    6341          760 :    (match_operand 1)]
    6342          760 :   "TARGET_SSE2"
    6343         5879 : {
    6344      7042446 :   ix86_expand_vector_init (TARGET_MMX_WITH_SSE, operands[0],
    6345      7038153 :                            operands[1]);
    6346      7042428 :   DONE;
    6347      7038153 : })
    6348              : 
    6349      3118120 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    6350      3118110 : ;;
    6351      3085007 : ;; Miscellaneous
    6352      6032011 : ;;
    6353           10 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    6354              : 
    6355              : (define_expand "mmx_uavg<mode>3"
    6356              :   [(set (match_operand:MMXMODE12 0 "register_operand")
    6357              :         (truncate:MMXMODE12
    6358              :           (lshiftrt:<mmxdoublemode>
    6359           16 :             (plus:<mmxdoublemode>
    6360              :               (plus:<mmxdoublemode>
    6361           16 :                 (zero_extend:<mmxdoublemode>
    6362           16 :                   (match_operand:MMXMODE12 1 "register_mmxmem_operand"))
    6363           16 :                 (zero_extend:<mmxdoublemode>
    6364              :                   (match_operand:MMXMODE12 2 "register_mmxmem_operand")))
    6365              :               (match_dup 3))
    6366              :             (const_int 1))))]
    6367              :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    6368              :    && (TARGET_SSE || TARGET_3DNOW)"
    6369           62 : {
    6370           62 :   operands[3] = CONST1_RTX(<mmxdoublemode>mode);
    6371           62 :   ix86_fixup_binary_operands_no_copy (PLUS, <MODE>mode, operands);
    6372              : })
    6373              : 
    6374              : (define_insn "*mmx_uavgv8qi3"
    6375              :   [(set (match_operand:V8QI 0 "register_operand" "=y,x,Yw")
    6376           62 :         (truncate:V8QI
    6377              :           (lshiftrt:V8HI
    6378              :             (plus:V8HI
    6379              :               (plus:V8HI
    6380              :                 (zero_extend:V8HI
    6381           62 :                   (match_operand:V8QI 1 "register_mmxmem_operand" "%0,0,Yw"))
    6382              :                 (zero_extend:V8HI
    6383              :                   (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yw")))
    6384              :               (const_vector:V8HI [(const_int 1) (const_int 1)
    6385              :                                   (const_int 1) (const_int 1)
    6386          343 :                                   (const_int 1) (const_int 1)
    6387              :                                   (const_int 1) (const_int 1)]))
    6388          343 :             (const_int 1))))]
    6389          584 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    6390          584 :    && (TARGET_SSE || TARGET_3DNOW)
    6391          241 :    && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    6392          220 : {
    6393           42 :   switch (which_alternative)
    6394              :     {
    6395          165 :     case 2:
    6396          165 :       return "vpavgb\t{%2, %1, %0|%0, %1, %2}";
    6397          181 :     case 1:
    6398           16 :     case 0:
    6399          165 :       /* These two instructions have the same operation, but their encoding
    6400          165 :          is different.  Prefer the one that is de facto standard.  */
    6401           16 :       if (TARGET_SSE || TARGET_3DNOW_A)
    6402          165 :         return "pavgb\t{%2, %0|%0, %2}";
    6403          165 :       else
    6404            0 :         return "pavgusb\t{%2, %0|%0, %2}";
    6405          165 :       default:
    6406          165 :         gcc_unreachable ();
    6407              :     }
    6408          165 : }
    6409              :   [(set_attr "isa" "*,sse2_noavx,avx")
    6410          145 :    (set_attr "mmx_isa" "native,*,*")
    6411          145 :    (set_attr "type" "mmxshft,sseiadd,sseiadd")
    6412              :    (set (attr "prefix_extra")
    6413              :      (if_then_else
    6414          204 :        (not (ior (match_test "TARGET_SSE")
    6415          145 :                  (match_test "TARGET_3DNOW_A")))
    6416              :        (const_string "1")
    6417            0 :        (const_string "*")))
    6418              :    (set_attr "mode" "DI,TI,TI")])
    6419              : 
    6420              : (define_insn "*mmx_uavgv4hi3"
    6421              :   [(set (match_operand:V4HI 0 "register_operand" "=y,x,Yw")
    6422              :         (truncate:V4HI
    6423              :           (lshiftrt:V4SI
    6424       167428 :             (plus:V4SI
    6425       167428 :               (plus:V4SI
    6426       167428 :                 (zero_extend:V4SI
    6427       167428 :                   (match_operand:V4HI 1 "register_mmxmem_operand" "%0,0,Yw"))
    6428       167428 :                 (zero_extend:V4SI
    6429              :                   (match_operand:V4HI 2 "register_mmxmem_operand" "ym,x,Yw")))
    6430              :               (const_vector:V4SI [(const_int 1) (const_int 1)
    6431              :                                   (const_int 1) (const_int 1)]))
    6432              :             (const_int 1))))]
    6433          133 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    6434          133 :    && (TARGET_SSE || TARGET_3DNOW_A)
    6435          133 :    && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    6436              :   "@
    6437          152 :    pavgw\t{%2, %0|%0, %2}
    6438          152 :    pavgw\t{%2, %0|%0, %2}
    6439          172 :    vpavgw\t{%2, %1, %0|%0, %1, %2}"
    6440          172 :   [(set_attr "isa" "*,sse2_noavx,avx")
    6441          152 :    (set_attr "mmx_isa" "native,*,*")
    6442          152 :    (set_attr "type" "mmxshft,sseiadd,sseiadd")
    6443           20 :    (set_attr "mode" "DI,TI,TI")])
    6444              : 
    6445        10728 : (define_expand "uavg<mode>3_ceil"
    6446              :   [(set (match_operand:MMXMODE12 0 "register_operand")
    6447              :         (truncate:MMXMODE12
    6448              :           (lshiftrt:<mmxdoublemode>
    6449              :             (plus:<mmxdoublemode>
    6450              :               (plus:<mmxdoublemode>
    6451           76 :                 (zero_extend:<mmxdoublemode>
    6452           76 :                   (match_operand:MMXMODE12 1 "register_operand"))
    6453           76 :                 (zero_extend:<mmxdoublemode>
    6454           76 :                   (match_operand:MMXMODE12 2 "register_operand")))
    6455           76 :               (match_dup 3))
    6456              :             (const_int 1))))]
    6457              :   "TARGET_MMX_WITH_SSE"
    6458            4 :   "operands[3] = CONST1_RTX(<mmxdoublemode>mode);")
    6459              : 
    6460              : (define_insn "uavgv4qi3_ceil"
    6461              :   [(set (match_operand:V4QI 0 "register_operand" "=x,Yw")
    6462            4 :         (truncate:V4QI
    6463              :           (lshiftrt:V4HI
    6464       786001 :             (plus:V4HI
    6465       786001 :               (plus:V4HI
    6466       786001 :                 (zero_extend:V4HI
    6467            4 :                   (match_operand:V4QI 1 "register_operand" "%0,Yw"))
    6468              :                 (zero_extend:V4HI
    6469              :                   (match_operand:V4QI 2 "register_operand" "x,Yw")))
    6470              :               (const_vector:V4HI [(const_int 1) (const_int 1)
    6471              :                                   (const_int 1) (const_int 1)]))
    6472           30 :             (const_int 1))))]
    6473            5 :   "TARGET_SSE2"
    6474           30 :   "@
    6475           30 :    pavgb\t{%2, %0|%0, %2}
    6476           30 :    vpavgb\t{%2, %1, %0|%0, %1, %2}"
    6477              :   [(set_attr "isa" "noavx,avx")
    6478              :    (set_attr "type" "sseiadd")
    6479              :    (set_attr "mode" "TI")])
    6480              : 
    6481          222 : (define_insn "uavgv2qi3_ceil"
    6482          222 :   [(set (match_operand:V2QI 0 "register_operand" "=x,Yw")
    6483          222 :         (truncate:V2QI
    6484              :           (lshiftrt:V2HI
    6485          222 :             (plus:V2HI
    6486          222 :               (plus:V2HI
    6487              :                 (zero_extend:V2HI
    6488          222 :                   (match_operand:V2QI 1 "register_operand" "%0,Yw"))
    6489              :                 (zero_extend:V2HI
    6490          202 :                   (match_operand:V2QI 2 "register_operand" "x,Yw")))
    6491          202 :               (const_vector:V2HI [(const_int 1) (const_int 1)]))
    6492              :             (const_int 1))))]
    6493          110 :   "TARGET_SSE2"
    6494          202 :   "@
    6495              :    pavgb\t{%2, %0|%0, %2}
    6496              :    vpavgb\t{%2, %1, %0|%0, %1, %2}"
    6497           20 :   [(set_attr "isa" "noavx,avx")
    6498           20 :    (set_attr "type" "sseiadd")
    6499              :    (set_attr "mode" "TI")])
    6500              : 
    6501           20 : (define_insn "uavgv2hi3_ceil"
    6502              :   [(set (match_operand:V2HI 0 "register_operand" "=x,Yw")
    6503              :         (truncate:V2HI
    6504              :           (lshiftrt:V2SI
    6505              :             (plus:V2SI
    6506              :               (plus:V2SI
    6507              :                 (zero_extend:V2SI
    6508              :                   (match_operand:V2HI 1 "register_operand" "%0,Yw"))
    6509              :                 (zero_extend:V2SI
    6510              :                   (match_operand:V2HI 2 "register_operand" "x,Yw")))
    6511              :               (const_vector:V2SI [(const_int 1) (const_int 1)]))
    6512              :             (const_int 1))))]
    6513            5 :   "TARGET_SSE2"
    6514              :   "@
    6515              :    pavgw\t{%2, %0|%0, %2}
    6516              :    vpavgw\t{%2, %1, %0|%0, %1, %2}"
    6517              :   [(set_attr "isa" "noavx,avx")
    6518              :    (set_attr "type" "sseiadd")
    6519              :    (set_attr "mode" "TI")])
    6520              : 
    6521              : (define_expand "mmx_psadbw"
    6522              :   [(set (match_operand:V1DI 0 "register_operand")
    6523              :         (unspec:V1DI [(match_operand:V8QI 1 "register_mmxmem_operand")
    6524              :                       (match_operand:V8QI 2 "register_mmxmem_operand")]
    6525          517 :                      UNSPEC_PSADBW))]
    6526          517 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && (TARGET_SSE || TARGET_3DNOW_A)"
    6527          880 :   "ix86_fixup_binary_operands_no_copy (PLUS, V8QImode, operands);")
    6528              : 
    6529          512 : (define_insn "*mmx_psadbw"
    6530          512 :   [(set (match_operand:V1DI 0 "register_operand" "=y,x,Yw")
    6531          875 :         (unspec:V1DI [(match_operand:V8QI 1 "register_mmxmem_operand" "%0,0,Yw")
    6532          512 :                       (match_operand:V8QI 2 "register_mmxmem_operand" "ym,x,Yw")]
    6533          512 :                      UNSPEC_PSADBW))]
    6534         5952 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && (TARGET_SSE || TARGET_3DNOW_A)
    6535         6315 :    && ix86_binary_operator_ok (PLUS, V8QImode, operands)"
    6536         4459 :   "@
    6537          512 :    psadbw\t{%2, %0|%0, %2}
    6538          512 :    psadbw\t{%2, %0|%0, %2}
    6539          837 :    vpsadbw\t{%2, %1, %0|%0, %1, %2}"
    6540         1000 :   [(set_attr "isa" "*,sse2_noavx,avx")
    6541          163 :    (set_attr "mmx_isa" "native,*,*")
    6542          836 :    (set_attr "type" "mmxshft,sseiadd,sseiadd")
    6543            0 :    (set_attr "c86_attr" "sadbw")
    6544          359 :    (set_attr "mode" "DI,TI,TI")])
    6545          338 : 
    6546          137 : (define_expand "reduc_<code>_scal_<mode>"
    6547          120 :  [(any_logic:MMXMODE12
    6548          403 :     (match_operand:<mmxscalarmode> 0 "register_operand")
    6549              :     (match_operand:MMXMODE12 1 "register_operand"))]
    6550              :  "TARGET_MMX_WITH_SSE"
    6551           44 : {
    6552           44 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    6553           44 :   ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
    6554           44 :   emit_insn (gen_vec_extract<mode><mmxscalarmodelower> (operands[0],
    6555              :                                                        tmp, const0_rtx));
    6556           44 :   DONE;
    6557              : })
    6558              : 
    6559              : (define_expand "reduc_<code>_scal_v4qi"
    6560              :  [(any_logic:V4QI
    6561              :     (match_operand:QI 0 "register_operand")
    6562              :     (match_operand:V4QI 1 "register_operand"))]
    6563              :  "TARGET_SSE2"
    6564           30 : {
    6565           30 :   rtx tmp = gen_reg_rtx (V4QImode);
    6566           30 :   ix86_expand_reduc (gen_<code>v4qi3, tmp, operands[1]);
    6567           30 :   emit_insn (gen_vec_extractv4qiqi (operands[0], tmp, const0_rtx));
    6568           30 :   DONE;
    6569          243 : })
    6570              : 
    6571          243 : (define_expand "reduc_plus_scal_v8qi"
    6572          243 :  [(plus:V8QI
    6573          243 :     (match_operand:QI 0 "register_operand")
    6574              :     (match_operand:V8QI 1 "register_operand"))]
    6575              :  "TARGET_MMX_WITH_SSE"
    6576          335 : {
    6577          335 :   rtx tmp = gen_reg_rtx (V8QImode);
    6578          335 :   emit_move_insn (tmp, CONST0_RTX (V8QImode));
    6579          335 :   rtx tmp2 = gen_reg_rtx (V1DImode);
    6580          335 :   emit_insn (gen_mmx_psadbw (tmp2, operands[1], tmp));
    6581          341 :   tmp2 = gen_lowpart (V8QImode, tmp2);
    6582          335 :   emit_insn (gen_vec_extractv8qiqi (operands[0], tmp2, const0_rtx));
    6583          341 :   DONE;
    6584            6 : })
    6585            6 : 
    6586              : (define_expand "reduc_plus_scal_v4hi"
    6587              :  [(plus:V4HI
    6588              :     (match_operand:HI 0 "register_operand")
    6589              :     (match_operand:V4HI 1 "register_operand"))]
    6590              :  "TARGET_MMX_WITH_SSE"
    6591          231 : {
    6592          231 :   rtx tmp = gen_reg_rtx (V4HImode);
    6593          231 :   ix86_expand_reduc (gen_addv4hi3, tmp, operands[1]);
    6594          231 :   emit_insn (gen_vec_extractv4hihi (operands[0], tmp, const0_rtx));
    6595          231 :   DONE;
    6596            5 : })
    6597              : 
    6598            5 : (define_expand "reduc_<code>_scal_v4hi"
    6599            5 :   [(smaxmin:V4HI
    6600            5 :      (match_operand:HI 0 "register_operand")
    6601              :      (match_operand:V4HI 1 "register_operand"))]
    6602              :   "TARGET_MMX_WITH_SSE"
    6603            4 : {
    6604            4 :   rtx tmp = gen_reg_rtx (V4HImode);
    6605            4 :   ix86_expand_reduc (gen_<code>v4hi3, tmp, operands[1]);
    6606            4 :   emit_insn (gen_vec_extractv4hihi (operands[0], tmp, const0_rtx));
    6607            4 :   DONE;
    6608          314 : })
    6609              : 
    6610          314 : (define_expand "reduc_<code>_scal_v4qi"
    6611          314 :   [(smaxmin:V4QI
    6612          314 :      (match_operand:QI 0 "register_operand")
    6613              :      (match_operand:V4QI 1 "register_operand"))]
    6614              :   "TARGET_SSE4_1"
    6615            4 : {
    6616            4 :   rtx tmp = gen_reg_rtx (V4QImode);
    6617            4 :   ix86_expand_reduc (gen_<code>v4qi3, tmp, operands[1]);
    6618            4 :   emit_insn (gen_vec_extractv4qiqi (operands[0], tmp, const0_rtx));
    6619            4 :   DONE;
    6620           16 : })
    6621              : 
    6622           16 : (define_expand "reduc_<code>_scal_v4hi"
    6623           16 :   [(umaxmin:V4HI
    6624           16 :      (match_operand:HI 0 "register_operand")
    6625              :      (match_operand:V4HI 1 "register_operand"))]
    6626              :   "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
    6627            6 : {
    6628            6 :   rtx tmp = gen_reg_rtx (V4HImode);
    6629            6 :   ix86_expand_reduc (gen_<code>v4hi3, tmp, operands[1]);
    6630            6 :   emit_insn (gen_vec_extractv4hihi (operands[0], tmp, const0_rtx));
    6631            6 :   DONE;
    6632           12 : })
    6633              : 
    6634           12 : (define_expand "reduc_<code>_scal_v4qi"
    6635           12 :   [(umaxmin:V4QI
    6636           12 :      (match_operand:QI 0 "register_operand")
    6637              :      (match_operand:V4QI 1 "register_operand"))]
    6638              :   "TARGET_SSE4_1"
    6639            4 : {
    6640            4 :   rtx tmp = gen_reg_rtx (V4QImode);
    6641            4 :   ix86_expand_reduc (gen_<code>v4qi3, tmp, operands[1]);
    6642            4 :   emit_insn (gen_vec_extractv4qiqi (operands[0], tmp, const0_rtx));
    6643            4 :   DONE;
    6644           45 : })
    6645              : 
    6646           45 : (define_expand "reduc_plus_scal_v4qi"
    6647           45 :  [(plus:V4QI
    6648           45 :     (match_operand:QI 0 "register_operand")
    6649              :     (match_operand:V4QI 1 "register_operand"))]
    6650              :  "TARGET_SSE2"
    6651          314 : {
    6652          314 :   rtx op1 = gen_reg_rtx (V16QImode);
    6653          314 :   emit_insn (gen_vec_setv4si_0 (lowpart_subreg (V4SImode, op1, V16QImode),
    6654              :                                 CONST0_RTX (V4SImode),
    6655              :                                 lowpart_subreg (SImode,
    6656            1 :                                                 operands[1],
    6657           22 :                                                 V4QImode)));
    6658          315 :   rtx tmp = gen_reg_rtx (V16QImode);
    6659          337 :   emit_move_insn (tmp, CONST0_RTX (V16QImode));
    6660          314 :   rtx tmp2 = gen_reg_rtx (V2DImode);
    6661          336 :   emit_insn (gen_sse2_psadbw (tmp2, op1, tmp));
    6662          314 :   tmp2 = gen_lowpart (V16QImode, tmp2);
    6663          315 :   emit_insn (gen_vec_extractv16qiqi (operands[0], tmp2, const0_rtx));
    6664          314 :   DONE;
    6665              : })
    6666              : 
    6667              : (define_expand "usadv8qi"
    6668           15 :   [(match_operand:V2SI 0 "register_operand")
    6669              :    (match_operand:V8QI 1 "register_operand")
    6670           15 :    (match_operand:V8QI 2 "register_operand")
    6671           15 :    (match_operand:V2SI 3 "register_operand")]
    6672              :   "TARGET_MMX_WITH_SSE"
    6673            5 : {
    6674            5 :   rtx t1 = gen_reg_rtx (V1DImode);
    6675            5 :   rtx t2 = gen_reg_rtx (V2SImode);
    6676            5 :   emit_insn (gen_mmx_psadbw (t1, operands[1], operands[2]));
    6677        19677 :   convert_move (t2, t1, 0);
    6678            5 :   emit_insn (gen_addv2si3 (operands[0], t2, operands[3]));
    6679        19677 :   DONE;
    6680        19672 : })
    6681        19672 : 
    6682              : (define_expand "usdot_prodv2siv8qi"
    6683              :   [(match_operand:V2SI 0 "register_operand")
    6684              :    (match_operand:V8QI 1 "register_operand")
    6685              :    (match_operand:V8QI 2 "register_operand")
    6686              :    (match_operand:V2SI 3 "register_operand")]
    6687              :   "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
    6688            7 : {
    6689            7 :   operands[1] = force_reg (V8QImode, operands[1]);
    6690            7 :   operands[2] = force_reg (V8QImode, operands[2]);
    6691            7 :   operands[3] = force_reg (V2SImode, operands[3]);
    6692              : 
    6693          112 :   if ((TARGET_AVX512VNNI && TARGET_AVX512VL)
    6694            5 :      || TARGET_AVXVNNI)
    6695          105 :     {
    6696          110 :       rtx op1 = lowpart_subreg (V16QImode, operands[1], V8QImode);
    6697            5 :       rtx op2 = lowpart_subreg (V16QImode, operands[2], V8QImode);
    6698            5 :       rtx op3 = lowpart_subreg (V4SImode, operands[3], V2SImode);
    6699            5 :       rtx op0 = gen_reg_rtx (V4SImode);
    6700              : 
    6701            5 :       emit_insn (gen_usdot_prodv4siv16qi (op0, op1, op2, op3));
    6702            5 :       emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    6703            5 :      }
    6704              :    else
    6705              :      {
    6706            2 :       rtx op1 = gen_reg_rtx (V8HImode);
    6707            2 :       rtx op2 = gen_reg_rtx (V8HImode);
    6708            2 :       rtx op3 = gen_reg_rtx (V4SImode);
    6709            2 :       rtx op0 = gen_reg_rtx (V4SImode);
    6710            2 :       rtx op0_1 = gen_reg_rtx (V4SImode);
    6711              : 
    6712            2 :       emit_move_insn (op3, CONST0_RTX (V4SImode));
    6713            2 :       emit_insn (gen_zero_extendv8qiv8hi2 (op1, operands[1]));
    6714            2 :       emit_insn (gen_extendv8qiv8hi2 (op2, operands[2]));
    6715            2 :       emit_insn (gen_sdot_prodv4siv8hi (op0, op1, op2, op3));
    6716              : 
    6717              :       /* vec_perm (op0, 2, 3, 0, 1);  */
    6718            2 :       emit_insn (gen_sse2_pshufd (op0_1, op0, GEN_INT (78)));
    6719            2 :       emit_insn (gen_addv4si3 (op0, op0, op0_1));
    6720            2 :       emit_insn (gen_addv2si3 (operands[0], operands[3],
    6721              :                                lowpart_subreg (V2SImode, op0, V4SImode)));
    6722              :      }
    6723            7 :     DONE;
    6724              : })
    6725              : 
    6726              : (define_expand "sdot_prodv2siv8qi"
    6727              :   [(match_operand:V2SI 0 "register_operand")
    6728              :    (match_operand:V8QI 1 "register_operand")
    6729              :    (match_operand:V8QI 2 "register_operand")
    6730              :    (match_operand:V2SI 3 "register_operand")]
    6731              :   "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
    6732            9 : {
    6733            9 :   operands[1] = force_reg (V8QImode, operands[1]);
    6734            9 :   operands[2] = force_reg (V8QImode, operands[2]);
    6735            9 :   operands[3] = force_reg (V2SImode, operands[3]);
    6736              : 
    6737       495857 :   if (TARGET_AVXVNNIINT8)
    6738              :     {
    6739       495853 :       rtx op1 = lowpart_subreg (V16QImode, operands[1], V8QImode);
    6740       495853 :       rtx op2 = lowpart_subreg (V16QImode, operands[2], V8QImode);
    6741       495853 :       rtx op3 = lowpart_subreg (V4SImode, operands[3], V2SImode);
    6742            5 :       rtx op0 = gen_reg_rtx (V4SImode);
    6743              : 
    6744            5 :       emit_insn (gen_sdot_prodv4siv16qi (op0, op1, op2, op3));
    6745            5 :       emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    6746              :     }
    6747              :   else
    6748              :     {
    6749            4 :       rtx op1 = gen_reg_rtx (V8HImode);
    6750            4 :       rtx op2 = gen_reg_rtx (V8HImode);
    6751            4 :       rtx op3 = gen_reg_rtx (V4SImode);
    6752            4 :       rtx op0 = gen_reg_rtx (V4SImode);
    6753            4 :       rtx op0_1 = gen_reg_rtx (V4SImode);
    6754              : 
    6755            4 :       emit_move_insn (op3, CONST0_RTX (V4SImode));
    6756            4 :       emit_insn (gen_extendv8qiv8hi2 (op1, operands[1]));
    6757            4 :       emit_insn (gen_extendv8qiv8hi2 (op2, operands[2]));
    6758            4 :       emit_insn (gen_sdot_prodv4siv8hi (op0, op1, op2, op3));
    6759              : 
    6760              :       /* vec_perm (op0, 2, 3, 0, 1);  */
    6761            4 :       emit_insn (gen_sse2_pshufd (op0_1, op0, GEN_INT (78)));
    6762            4 :       emit_insn (gen_addv4si3 (op0, op0, op0_1));
    6763            4 :       emit_insn (gen_addv2si3 (operands[0], operands[3],
    6764              :                                lowpart_subreg (V2SImode, op0, V4SImode)));
    6765              :     }
    6766            9 :   DONE;
    6767              : 
    6768              : })
    6769              : 
    6770              : (define_expand "udot_prodv2siv8qi"
    6771              :   [(match_operand:V2SI 0 "register_operand")
    6772              :    (match_operand:V8QI 1 "register_operand")
    6773              :    (match_operand:V8QI 2 "register_operand")
    6774              :    (match_operand:V2SI 3 "register_operand")]
    6775              :   "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
    6776            9 : {
    6777            9 :   operands[1] = force_reg (V8QImode, operands[1]);
    6778            9 :   operands[2] = force_reg (V8QImode, operands[2]);
    6779            9 :   operands[3] = force_reg (V2SImode, operands[3]);
    6780              : 
    6781          207 :   if (TARGET_AVXVNNIINT8)
    6782              :     {
    6783          203 :       rtx op1 = lowpart_subreg (V16QImode, operands[1], V8QImode);
    6784          203 :       rtx op2 = lowpart_subreg (V16QImode, operands[2], V8QImode);
    6785          203 :       rtx op3 = lowpart_subreg (V4SImode, operands[3], V2SImode);
    6786            5 :       rtx op0 = gen_reg_rtx (V4SImode);
    6787              : 
    6788            5 :       emit_insn (gen_udot_prodv4siv16qi (op0, op1, op2, op3));
    6789            5 :       emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    6790              :     }
    6791              :   else
    6792              :     {
    6793            4 :       rtx op1 = gen_reg_rtx (V8HImode);
    6794            4 :       rtx op2 = gen_reg_rtx (V8HImode);
    6795            4 :       rtx op3 = gen_reg_rtx (V4SImode);
    6796            4 :       rtx op0 = gen_reg_rtx (V4SImode);
    6797            4 :       rtx op0_1 = gen_reg_rtx (V4SImode);
    6798              : 
    6799            4 :       emit_move_insn (op3, CONST0_RTX (V4SImode));
    6800            4 :       emit_insn (gen_zero_extendv8qiv8hi2 (op1, operands[1]));
    6801            4 :       emit_insn (gen_zero_extendv8qiv8hi2 (op2, operands[2]));
    6802            4 :       emit_insn (gen_sdot_prodv4siv8hi (op0, op1, op2, op3));
    6803              : 
    6804              :       /* vec_perm (op0, 2, 3, 0, 1);  */
    6805            4 :       emit_insn (gen_sse2_pshufd (op0_1, op0, GEN_INT (78)));
    6806            4 :       emit_insn (gen_addv4si3 (op0, op0, op0_1));
    6807            4 :       emit_insn (gen_addv2si3 (operands[0], operands[3],
    6808              :                                lowpart_subreg (V2SImode, op0, V4SImode)));
    6809              :     }
    6810            9 :   DONE;
    6811              : 
    6812              : })
    6813              : 
    6814              : (define_expand "usdot_prodv2siv4hi"
    6815              :   [(match_operand:V2SI 0 "register_operand")
    6816              :    (match_operand:V4HI 1 "register_operand")
    6817              :    (match_operand:V4HI 2 "register_operand")
    6818              :    (match_operand:V2SI 3 "register_operand")]
    6819              :   "TARGET_AVXVNNIINT16 && TARGET_MMX_WITH_SSE"
    6820            3 : {
    6821            3 :   operands[1] = force_reg (V4HImode, operands[1]);
    6822            3 :   operands[2] = force_reg (V4HImode, operands[2]);
    6823            3 :   operands[3] = force_reg (V2SImode, operands[3]);
    6824              : 
    6825        16609 :   rtx op1 = lowpart_subreg (V8HImode, operands[1], V4HImode);
    6826            3 :   rtx op2 = lowpart_subreg (V8HImode, operands[2], V4HImode);
    6827        16609 :   rtx op3 = lowpart_subreg (V4SImode, operands[3], V2SImode);
    6828        16609 :   rtx op0 = gen_reg_rtx (V4SImode);
    6829        16606 : 
    6830            3 :   emit_insn (gen_usdot_prodv4siv8hi (op0, op1, op2, op3));
    6831            3 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    6832            3 :   DONE;
    6833              : })
    6834              : 
    6835              : (define_expand "udot_prodv2siv4hi"
    6836              :   [(match_operand:V2SI 0 "register_operand")
    6837              :    (match_operand:V4HI 1 "register_operand")
    6838              :    (match_operand:V4HI 2 "register_operand")
    6839              :    (match_operand:V2SI 3 "register_operand")]
    6840              :   "TARGET_AVXVNNIINT16 && TARGET_MMX_WITH_SSE"
    6841            3 : {
    6842            3 :   operands[1] = force_reg (V4HImode, operands[1]);
    6843            3 :   operands[2] = force_reg (V4HImode, operands[2]);
    6844            3 :   operands[3] = force_reg (V2SImode, operands[3]);
    6845              : 
    6846         9275 :   rtx op1 = lowpart_subreg (V8HImode, operands[1], V4HImode);
    6847            3 :   rtx op2 = lowpart_subreg (V8HImode, operands[2], V4HImode);
    6848         9275 :   rtx op3 = lowpart_subreg (V4SImode, operands[3], V2SImode);
    6849         9275 :   rtx op0 = gen_reg_rtx (V4SImode);
    6850         9272 : 
    6851            3 :   emit_insn (gen_udot_prodv4siv8hi (op0, op1, op2, op3));
    6852            3 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    6853            3 :   DONE;
    6854              : })
    6855              : 
    6856              : (define_expand "sdot_prodv2siv4hi"
    6857              :   [(match_operand:V2SI 0 "register_operand")
    6858              :    (match_operand:V4HI 1 "register_operand")
    6859              :    (match_operand:V4HI 2 "register_operand")
    6860              :    (match_operand:V2SI 3 "register_operand")]
    6861              :   "TARGET_MMX_WITH_SSE"
    6862           42 : {
    6863           42 :   operands[1] = force_reg (V4HImode, operands[1]);
    6864           42 :   operands[2] = force_reg (V4HImode, operands[2]);
    6865           42 :   operands[3] = force_reg (V2SImode, operands[3]);
    6866              : 
    6867        15030 :   rtx op1 = lowpart_subreg (V8HImode, operands[1], V4HImode);
    6868           42 :   rtx op2 = lowpart_subreg (V8HImode, operands[2], V4HImode);
    6869        15030 :   rtx op3 = lowpart_subreg (V4SImode, operands[3], V2SImode);
    6870        15030 :   rtx op0 = gen_reg_rtx (V4SImode);
    6871        14988 : 
    6872           42 :   emit_insn (gen_sdot_prodv4siv8hi (op0, op1, op2, op3));
    6873           42 :   emit_move_insn (operands[0], lowpart_subreg (V2SImode, op0, V4SImode));
    6874           42 :   DONE;
    6875              : })
    6876              : 
    6877              : (define_insn_and_split "mmx_pmovmskb"
    6878              :   [(set (match_operand:SI 0 "register_operand" "=r,r,jr")
    6879              :         (unspec:SI [(match_operand:V8QI 1 "register_operand" "y,x,x")]
    6880              :                    UNSPEC_MOVMSK))]
    6881          111 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE)
    6882          111 :    && (TARGET_SSE || TARGET_3DNOW_A)"
    6883              :   "@
    6884              :    pmovmskb\t{%1, %0|%0, %1}
    6885              :    #
    6886          109 :    #"
    6887          153 :   "TARGET_SSE2 && reload_completed
    6888       120693 :    && SSE_REGNO_P (REGNO (operands[1]))"
    6889           22 :   [(set (match_dup 0)
    6890       128655 :         (unspec:SI [(match_dup 1)] UNSPEC_MOVMSK))
    6891       128655 :    (set (match_dup 0)
    6892       120562 :         (zero_extend:SI (match_dup 2)))]
    6893         2428 : {
    6894         2406 :   /* Generate SSE pmovmskb and zero-extend from QImode to SImode.  */
    6895           44 :   operands[1] = lowpart_subreg (V16QImode, operands[1],
    6896           22 :                                 GET_MODE (operands[1]));
    6897           44 :   operands[2] = lowpart_subreg (QImode, operands[0],
    6898           22 :                                 GET_MODE (operands[0]));
    6899            0 : }
    6900            0 :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    6901              :    (set_attr "type" "mmxcvt,ssemov,ssemov")
    6902           22 :    (set_attr "mode" "DI,TI,TI")])
    6903              : 
    6904              : (define_expand "mmx_maskmovq"
    6905              :   [(set (match_operand:V8QI 0 "memory_operand")
    6906              :         (unspec:V8QI [(match_operand:V8QI 1 "register_operand")
    6907           22 :                       (match_operand:V8QI 2 "register_operand")
    6908              :                       (match_dup 0)]
    6909              :                      UNSPEC_MASKMOV))]
    6910              :   "TARGET_SSE || TARGET_3DNOW_A")
    6911              : 
    6912        16804 : (define_insn "*mmx_maskmovq"
    6913              :   [(set (mem:V8QI (match_operand:P 0 "register_operand" "D"))
    6914        16804 :         (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y")
    6915        16804 :                       (match_operand:V8QI 2 "register_operand" "y")
    6916        16804 :                       (mem:V8QI (match_dup 0))]
    6917              :                      UNSPEC_MASKMOV))]
    6918            9 :   "TARGET_SSE || TARGET_3DNOW_A"
    6919              :   ;; @@@ check ordering of operands in intel/nonintel syntax
    6920              :   "maskmovq\t{%2, %1|%1, %2}"
    6921              :   [(set_attr "type" "mmxcvt")
    6922              :    (set_attr "znver1_decode" "vector")
    6923              :    (set_attr "c86_decode" "vector")
    6924              :    (set_attr "mode" "DI")])
    6925              : 
    6926              : (define_int_iterator EMMS
    6927          104 :   [(UNSPECV_EMMS "TARGET_MMX")
    6928           15 :    (UNSPECV_FEMMS "TARGET_3DNOW")])
    6929            0 : 
    6930            0 : (define_int_attr emms
    6931           15 :   [(UNSPECV_EMMS "emms")
    6932           15 :    (UNSPECV_FEMMS "femms")])
    6933            0 : 
    6934        94994 : (define_expand "mmx_<emms>"
    6935        94994 :   [(parallel
    6936        94994 :     [(unspec_volatile [(const_int 0)] EMMS)
    6937        94994 :       (clobber (reg:XF ST0_REG))
    6938   1814860320 :       (clobber (reg:XF ST1_REG))
    6939              :       (clobber (reg:XF ST2_REG))
    6940              :       (clobber (reg:XF ST3_REG))
    6941              :       (clobber (reg:XF ST4_REG))
    6942   1814860320 :       (clobber (reg:XF ST5_REG))
    6943   1814860320 :       (clobber (reg:XF ST6_REG))
    6944   1814860320 :       (clobber (reg:XF ST7_REG))
    6945   1814860320 :       (clobber (reg:DI MM0_REG))
    6946   1814860320 :       (clobber (reg:DI MM1_REG))
    6947   1814860320 :       (clobber (reg:DI MM2_REG))
    6948   1814860320 :       (clobber (reg:DI MM3_REG))
    6949   1814860320 :       (clobber (reg:DI MM4_REG))
    6950              :       (clobber (reg:DI MM5_REG))
    6951   1551888473 :       (clobber (reg:DI MM6_REG))
    6952   1551888473 :       (clobber (reg:DI MM7_REG))])]
    6953              :   "TARGET_MMX || TARGET_MMX_WITH_SSE"
    6954    134826174 : {
    6955    134826174 :    if (!TARGET_MMX)
    6956              :      {
    6957    124545371 :        emit_insn (gen_nop ());
    6958    124545371 :        DONE;
    6959    124545370 :      }
    6960              : })
    6961              : 
    6962              : (define_insn "*mmx_<emms>"
    6963      8164093 :   [(unspec_volatile [(const_int 0)] EMMS)
    6964      8164212 :    (clobber (reg:XF ST0_REG))
    6965      8164093 :    (clobber (reg:XF ST1_REG))
    6966              :    (clobber (reg:XF ST2_REG))
    6967              :    (clobber (reg:XF ST3_REG))
    6968              :    (clobber (reg:XF ST4_REG))
    6969       565091 :    (clobber (reg:XF ST5_REG))
    6970       565091 :    (clobber (reg:XF ST6_REG))
    6971       565091 :    (clobber (reg:XF ST7_REG))
    6972              :    (clobber (reg:DI MM0_REG))
    6973              :    (clobber (reg:DI MM1_REG))
    6974          119 :    (clobber (reg:DI MM2_REG))
    6975      1360921 :    (clobber (reg:DI MM3_REG))
    6976      1360921 :    (clobber (reg:DI MM4_REG))
    6977      1360921 :    (clobber (reg:DI MM5_REG))
    6978              :    (clobber (reg:DI MM6_REG))
    6979        71228 :    (clobber (reg:DI MM7_REG))]
    6980              :   ""
    6981       143855 :   "<emms>"
    6982       143855 :   [(set_attr "type" "mmx")
    6983       143855 :    (set_attr "modrm" "0")
    6984              :    (set_attr "memory" "none")])
    6985              : 
    6986              : (define_insn "popcount<mode>2"
    6987        74620 :   [(set (match_operand:VI1_16_32_64 0 "register_operand" "=v")
    6988        74620 :         (popcount:VI1_16_32_64
    6989              :           (match_operand:VI1_16_32_64 1 "register_operand" "v")))]
    6990        73823 :   "TARGET_AVX512VL && TARGET_AVX512BITALG"
    6991        73827 :   "vpopcntb\t{%1, %0|%0, %1}")
    6992              : 
    6993        50640 : (define_insn "popcount<mode>2"
    6994        50664 :   [(set (match_operand:VI2_32_64 0 "register_operand" "=v")
    6995        50664 :         (popcount:VI2_32_64
    6996        50652 :           (match_operand:VI2_32_64 1 "register_operand" "v")))]
    6997        50662 :   "TARGET_AVX512VL && TARGET_AVX512BITALG"
    6998        50686 :   "vpopcntw\t{%1, %0|%0, %1}")
    6999              : 
    7000        50640 : (define_insn "popcountv2si2"
    7001        50652 :   [(set (match_operand:V2SI 0 "register_operand" "=v")
    7002           12 :         (popcount:V2SI
    7003        50646 :           (match_operand:V2SI 1 "register_operand" "v")))]
    7004        50656 :   "TARGET_AVX512VPOPCNTDQ && TARGET_AVX512VL && TARGET_MMX_WITH_SSE"
    7005        50663 :   "vpopcntd\t{%1, %0|%0, %1}")
    7006        50640 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7007              : /* (content generated from coverage data) */
    7008              : /* ... */
    7009              : /* ... */
    7010              : /* ... */
    7011              : /* ... */
    7012              : /* ... */
    7013              : /* ... */
    7014      3125124 : /* END: function "_Z8recog_60P7rtx_defP8rtx_insnPi" */
    7015              : /* ... */
    7016              : /* ... */
    7017              : /* ... */
    7018      3125124 : /* ... */
    7019      3125124 : /* ... */
    7020      3125124 : /* ... */
    7021      3125124 : /* ... */
    7022      3125124 : /* ... */
    7023      3125124 : /* ... */
    7024      3125124 : /* ... */
    7025      3125124 : /* ... */
    7026      3125124 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7027              : /* (content generated from coverage data) */
    7028      2082323 : /* ... */
    7029      2082323 : /* ... */
    7030      2082323 : /* ... */
    7031      2082323 : /* ... */
    7032      2082323 : /* ... */
    7033      2082323 : /* ... */
    7034      2082323 : /* ... */
    7035              : /* ... */
    7036        17662 : /* ... */
    7037        17662 : /* ... */
    7038        16974 : /* ... */
    7039        16974 : /* ... */
    7040        32307 : /* ... */
    7041         5170 : /* ... */
    7042        12492 : /* ... */
    7043              : /* ... */
    7044              : /* ... */
    7045              : /* ... */
    7046              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7047              : /* (content generated from coverage data) */
    7048              : /* ... */
    7049              : /* ... */
    7050              : /* ... */
    7051              : /* ... */
    7052              : /* ... */
    7053              : /* ... */
    7054              : /* ... */
    7055              : /* ... */
    7056              : /* ... */
    7057              : /* ... */
    7058              : /* ... */
    7059              : /* ... */
    7060              : /* ... */
    7061              : /* ... */
    7062              : /* ... */
    7063              : /* ... */
    7064              : /* ... */
    7065              : /* ... */
    7066              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7067              : /* (content generated from coverage data) */
    7068              : /* ... */
    7069              : /* ... */
    7070              : /* ... */
    7071              : /* ... */
    7072              : /* ... */
    7073              : /* ... */
    7074              : /* ... */
    7075              : /* ... */
    7076              : /* ... */
    7077              : /* ... */
    7078              : /* ... */
    7079              : /* ... */
    7080              : /* ... */
    7081              : /* ... */
    7082              : /* ... */
    7083              : /* ... */
    7084              : /* ... */
    7085              : /* ... */
    7086              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7087              : /* (content generated from coverage data) */
    7088              : /* ... */
    7089              : /* ... */
    7090              : /* ... */
    7091              : /* ... */
    7092              : /* ... */
    7093              : /* ... */
    7094              : /* ... */
    7095              : /* ... */
    7096              : /* ... */
    7097              : /* ... */
    7098              : /* ... */
    7099              : /* ... */
    7100              : /* ... */
    7101              : /* ... */
    7102              : /* ... */
    7103              : /* ... */
    7104              : /* ... */
    7105              : /* ... */
    7106              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7107              : /* (content generated from coverage data) */
    7108              : /* ... */
    7109              : /* ... */
    7110              : /* ... */
    7111              : /* ... */
    7112              : /* ... */
    7113              : /* ... */
    7114              : /* ... */
    7115              : /* ... */
    7116              : /* ... */
    7117              : /* ... */
    7118              : /* ... */
    7119              : /* ... */
    7120              : /* ... */
    7121              : /* ... */
    7122              : /* ... */
    7123              : /* ... */
    7124              : /* ... */
    7125              : /* ... */
    7126              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7127              : /* (content generated from coverage data) */
    7128              : /* ... */
    7129              : /* ... */
    7130              : /* ... */
    7131              : /* ... */
    7132              : /* ... */
    7133              : /* ... */
    7134              : /* ... */
    7135              : /* ... */
    7136              : /* ... */
    7137              : /* ... */
    7138              : /* ... */
    7139              : /* ... */
    7140              : /* ... */
    7141              : /* ... */
    7142              : /* ... */
    7143              : /* ... */
    7144              : /* ... */
    7145              : /* ... */
    7146              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7147              : /* (content generated from coverage data) */
    7148              : /* ... */
    7149              : /* ... */
    7150              : /* ... */
    7151              : /* ... */
    7152              : /* ... */
    7153              : /* ... */
    7154              : /* ... */
    7155              : /* ... */
    7156              : /* ... */
    7157              : /* ... */
    7158              : /* ... */
    7159              : /* ... */
    7160              : /* ... */
    7161              : /* ... */
    7162              : /* ... */
    7163              : /* ... */
    7164              : /* ... */
    7165              : /* ... */
    7166              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7167              : /* (content generated from coverage data) */
    7168              : /* ... */
    7169              : /* ... */
    7170              : /* ... */
    7171              : /* ... */
    7172              : /* ... */
    7173              : /* ... */
    7174              : /* ... */
    7175              : /* ... */
    7176              : /* ... */
    7177              : /* ... */
    7178              : /* ... */
    7179              : /* ... */
    7180              : /* ... */
    7181              : /* ... */
    7182              : /* ... */
    7183              : /* ... */
    7184              : /* ... */
    7185              : /* ... */
    7186              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7187              : /* (content generated from coverage data) */
    7188              : /* ... */
    7189              : /* ... */
    7190              : /* ... */
    7191              : /* ... */
    7192              : /* ... */
    7193              : /* ... */
    7194              : /* ... */
    7195              : /* ... */
    7196              : /* ... */
    7197              : /* ... */
    7198              : /* ... */
    7199              : /* ... */
    7200              : /* ... */
    7201              : /* ... */
    7202              : /* ... */
    7203              : /* ... */
    7204              : /* ... */
    7205              : /* ... */
    7206              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7207              : /* (content generated from coverage data) */
    7208              : /* ... */
    7209              : /* ... */
    7210              : /* ... */
    7211              : /* ... */
    7212              : /* ... */
    7213              : /* ... */
    7214              : /* ... */
    7215              : /* ... */
    7216              : /* ... */
    7217              : /* ... */
    7218              : /* ... */
    7219              : /* ... */
    7220              : /* ... */
    7221              : /* ... */
    7222              : /* ... */
    7223              : /* ... */
    7224              : /* ... */
    7225              : /* ... */
    7226              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7227              : /* (content generated from coverage data) */
    7228              : /* ... */
    7229              : /* ... */
    7230              : /* ... */
    7231              : /* ... */
    7232              : /* ... */
    7233              : /* ... */
    7234              : /* ... */
    7235              : /* ... */
    7236              : /* ... */
    7237              : /* ... */
    7238              : /* ... */
    7239              : /* ... */
    7240              : /* ... */
    7241              : /* ... */
    7242              : /* ... */
    7243              : /* ... */
    7244              : /* ... */
    7245              : /* ... */
    7246              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7247              : /* (content generated from coverage data) */
    7248              : /* ... */
    7249              : /* ... */
    7250              : /* ... */
    7251              : /* ... */
    7252              : /* ... */
    7253              : /* ... */
    7254              : /* ... */
    7255              : /* ... */
    7256              : /* ... */
    7257              : /* ... */
    7258              : /* ... */
    7259              : /* ... */
    7260              : /* ... */
    7261              : /* ... */
    7262              : /* ... */
    7263              : /* ... */
    7264              : /* ... */
    7265              : /* ... */
    7266              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7267              : /* (content generated from coverage data) */
    7268              : /* ... */
    7269              : /* ... */
    7270              : /* ... */
    7271              : /* ... */
    7272              : /* ... */
    7273              : /* ... */
    7274              : /* ... */
    7275              : /* ... */
    7276              : /* ... */
    7277              : /* ... */
    7278              : /* ... */
    7279              : /* ... */
    7280              : /* ... */
    7281              : /* ... */
    7282              : /* ... */
    7283              : /* ... */
    7284              : /* ... */
    7285              : /* ... */
    7286              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7287              : /* (content generated from coverage data) */
    7288              : /* ... */
    7289              : /* ... */
    7290              : /* ... */
    7291              : /* ... */
    7292              : /* ... */
    7293              : /* ... */
    7294              : /* ... */
    7295              : /* ... */
    7296              : /* ... */
    7297              : /* ... */
    7298              : /* ... */
    7299              : /* ... */
    7300              : /* ... */
    7301              : /* ... */
    7302              : /* ... */
    7303              : /* ... */
    7304              : /* ... */
    7305              : /* ... */
    7306              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7307              : /* (content generated from coverage data) */
    7308              : /* ... */
    7309              : /* ... */
    7310              : /* ... */
    7311              : /* ... */
    7312              : /* ... */
    7313              : /* ... */
    7314              : /* ... */
    7315              : /* ... */
    7316              : /* ... */
    7317              : /* ... */
    7318              : /* ... */
    7319              : /* ... */
    7320              : /* ... */
    7321              : /* ... */
    7322              : /* ... */
    7323              : /* ... */
    7324              : /* ... */
    7325              : /* ... */
    7326              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7327              : /* (content generated from coverage data) */
    7328              : /* ... */
    7329              : /* ... */
    7330              : /* ... */
    7331              : /* ... */
    7332              : /* ... */
    7333              : /* ... */
    7334              : /* ... */
    7335              : /* ... */
    7336              : /* ... */
    7337              : /* ... */
    7338              : /* ... */
    7339              : /* ... */
    7340              : /* ... */
    7341              : /* ... */
    7342              : /* ... */
    7343              : /* ... */
    7344              : /* ... */
    7345              : /* ... */
    7346              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7347              : /* (content generated from coverage data) */
    7348              : /* ... */
    7349              : /* ... */
    7350              : /* ... */
    7351              : /* ... */
    7352              : /* ... */
    7353              : /* ... */
    7354              : /* ... */
    7355              : /* ... */
    7356              : /* ... */
    7357              : /* ... */
    7358              : /* ... */
    7359              : /* ... */
    7360              : /* ... */
    7361              : /* ... */
    7362              : /* ... */
    7363              : /* ... */
    7364              : /* ... */
    7365              : /* ... */
    7366              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7367              : /* (content generated from coverage data) */
    7368              : /* ... */
    7369              : /* ... */
    7370              : /* ... */
    7371              : /* ... */
    7372              : /* ... */
    7373              : /* ... */
    7374              : /* ... */
    7375              : /* ... */
    7376              : /* ... */
    7377              : /* ... */
    7378              : /* ... */
    7379              : /* ... */
    7380              : /* ... */
    7381              : /* ... */
    7382              : /* ... */
    7383              : /* ... */
    7384              : /* ... */
    7385              : /* ... */
    7386              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7387              : /* (content generated from coverage data) */
    7388              : /* ... */
    7389              : /* ... */
    7390              : /* ... */
    7391              : /* ... */
    7392              : /* ... */
    7393              : /* ... */
    7394              : /* ... */
    7395              : /* ... */
    7396              : /* ... */
    7397              : /* ... */
    7398              : /* ... */
    7399              : /* ... */
    7400              : /* ... */
    7401              : /* ... */
    7402              : /* ... */
    7403              : /* ... */
    7404              : /* ... */
    7405              : /* ... */
    7406              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7407              : /* (content generated from coverage data) */
    7408              : /* ... */
    7409              : /* ... */
    7410              : /* ... */
    7411              : /* ... */
    7412              : /* ... */
    7413              : /* ... */
    7414              : /* ... */
    7415              : /* ... */
    7416              : /* ... */
    7417              : /* ... */
    7418              : /* ... */
    7419              : /* ... */
    7420              : /* ... */
    7421              : /* ... */
    7422              : /* ... */
    7423              : /* ... */
    7424              : /* ... */
    7425              : /* ... */
    7426              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7427              : /* (content generated from coverage data) */
    7428              : /* ... */
    7429              : /* ... */
    7430              : /* ... */
    7431              : /* ... */
    7432              : /* ... */
    7433              : /* ... */
    7434              : /* ... */
    7435              : /* ... */
    7436              : /* ... */
    7437              : /* ... */
    7438              : /* ... */
    7439              : /* ... */
    7440              : /* ... */
    7441              : /* ... */
    7442              : /* ... */
    7443              : /* ... */
    7444              : /* ... */
    7445              : /* ... */
    7446              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7447              : /* (content generated from coverage data) */
    7448              : /* ... */
    7449              : /* ... */
    7450              : /* ... */
    7451              : /* ... */
    7452              : /* ... */
    7453              : /* ... */
    7454              : /* ... */
    7455              : /* ... */
    7456              : /* ... */
    7457              : /* ... */
    7458              : /* ... */
    7459              : /* ... */
    7460              : /* ... */
    7461              : /* ... */
    7462              : /* ... */
    7463              : /* ... */
    7464              : /* ... */
    7465              : /* ... */
    7466              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7467              : /* (content generated from coverage data) */
    7468              : /* ... */
    7469              : /* ... */
    7470              : /* ... */
    7471              : /* ... */
    7472              : /* ... */
    7473              : /* ... */
    7474              : /* ... */
    7475              : /* ... */
    7476              : /* ... */
    7477              : /* ... */
    7478              : /* ... */
    7479              : /* ... */
    7480              : /* ... */
    7481              : /* ... */
    7482              : /* ... */
    7483              : /* ... */
    7484              : /* ... */
    7485              : /* ... */
    7486              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7487              : /* (content generated from coverage data) */
    7488              : /* ... */
    7489              : /* ... */
    7490              : /* ... */
    7491              : /* ... */
    7492              : /* ... */
    7493              : /* ... */
    7494              : /* ... */
    7495              : /* ... */
    7496              : /* ... */
    7497              : /* ... */
    7498              : /* ... */
    7499              : /* ... */
    7500              : /* ... */
    7501              : /* ... */
    7502              : /* ... */
    7503              : /* ... */
    7504              : /* ... */
    7505              : /* ... */
    7506              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7507              : /* (content generated from coverage data) */
    7508              : /* ... */
    7509              : /* ... */
    7510              : /* ... */
    7511              : /* ... */
    7512              : /* ... */
    7513              : /* ... */
    7514              : /* ... */
    7515              : /* ... */
    7516              : /* ... */
    7517              : /* ... */
    7518              : /* ... */
    7519              : /* ... */
    7520              : /* ... */
    7521              : /* ... */
    7522              : /* ... */
    7523              : /* ... */
    7524              : /* ... */
    7525              : /* ... */
    7526              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7527              : /* (content generated from coverage data) */
    7528              : /* ... */
    7529              : /* ... */
    7530              : /* ... */
    7531              : /* ... */
    7532              : /* ... */
    7533              : /* ... */
    7534              : /* ... */
    7535              : /* ... */
    7536              : /* ... */
    7537              : /* ... */
    7538              : /* ... */
    7539              : /* ... */
    7540              : /* ... */
    7541              : /* ... */
    7542              : /* ... */
    7543              : /* ... */
    7544              : /* ... */
    7545              : /* ... */
    7546              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7547              : /* (content generated from coverage data) */
    7548              : /* ... */
    7549              : /* ... */
    7550              : /* ... */
    7551              : /* ... */
    7552              : /* ... */
    7553              : /* ... */
    7554              : /* ... */
    7555              : /* ... */
    7556              : /* ... */
    7557              : /* ... */
    7558              : /* ... */
    7559              : /* ... */
    7560              : /* ... */
    7561              : /* ... */
    7562              : /* ... */
    7563              : /* ... */
    7564              : /* ... */
    7565              : /* ... */
    7566              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7567              : /* (content generated from coverage data) */
    7568              : /* ... */
    7569              : /* ... */
    7570              : /* ... */
    7571              : /* ... */
    7572              : /* ... */
    7573              : /* ... */
    7574              : /* ... */
    7575              : /* ... */
    7576              : /* ... */
    7577              : /* ... */
    7578              : /* ... */
    7579              : /* ... */
    7580              : /* ... */
    7581              : /* ... */
    7582              : /* ... */
    7583              : /* ... */
    7584              : /* ... */
    7585              : /* ... */
    7586              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7587              : /* (content generated from coverage data) */
    7588              : /* ... */
    7589              : /* ... */
    7590              : /* ... */
    7591              : /* ... */
    7592              : /* ... */
    7593              : /* ... */
    7594              : /* ... */
    7595              : /* ... */
    7596              : /* ... */
    7597              : /* ... */
    7598              : /* ... */
    7599              : /* ... */
    7600              : /* ... */
    7601              : /* ... */
    7602              : /* ... */
    7603              : /* ... */
    7604              : /* ... */
    7605              : /* ... */
    7606              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7607              : /* (content generated from coverage data) */
    7608              : /* ... */
    7609              : /* ... */
    7610              : /* ... */
    7611              : /* ... */
    7612              : /* ... */
    7613              : /* ... */
    7614              : /* ... */
    7615              : /* ... */
    7616              : /* ... */
    7617              : /* ... */
    7618              : /* ... */
    7619              : /* ... */
    7620              : /* ... */
    7621              : /* ... */
    7622              : /* ... */
    7623              : /* ... */
    7624              : /* ... */
    7625              : /* ... */
    7626              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7627              : /* (content generated from coverage data) */
    7628              : /* ... */
    7629              : /* ... */
    7630              : /* ... */
    7631              : /* ... */
    7632              : /* ... */
    7633              : /* ... */
    7634              : /* ... */
    7635              : /* ... */
    7636              : /* ... */
    7637              : /* ... */
    7638              : /* ... */
    7639              : /* ... */
    7640              : /* ... */
    7641              : /* ... */
    7642              : /* ... */
    7643              : /* ... */
    7644              : /* ... */
    7645              : /* ... */
    7646              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7647              : /* (content generated from coverage data) */
    7648              : /* ... */
    7649              : /* ... */
    7650              : /* ... */
    7651              : /* ... */
    7652              : /* ... */
    7653              : /* ... */
    7654              : /* ... */
    7655              : /* ... */
    7656              : /* ... */
    7657              : /* ... */
    7658              : /* ... */
    7659              : /* ... */
    7660              : /* ... */
    7661              : /* ... */
    7662              : /* ... */
    7663              : /* ... */
    7664              : /* ... */
    7665              : /* ... */
    7666              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7667              : /* (content generated from coverage data) */
    7668              : /* ... */
    7669              : /* ... */
    7670              : /* ... */
    7671              : /* ... */
    7672              : /* ... */
    7673              : /* ... */
    7674              : /* ... */
    7675              : /* ... */
    7676              : /* ... */
    7677              : /* ... */
    7678              : /* ... */
    7679              : /* ... */
    7680              : /* ... */
    7681              : /* ... */
    7682              : /* ... */
    7683              : /* ... */
    7684              : /* ... */
    7685              : /* ... */
    7686              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7687              : /* (content generated from coverage data) */
    7688              : /* ... */
    7689              : /* ... */
    7690              : /* ... */
    7691              : /* ... */
    7692              : /* ... */
    7693              : /* ... */
    7694              : /* ... */
    7695              : /* ... */
    7696              : /* ... */
    7697              : /* ... */
    7698              : /* ... */
    7699              : /* ... */
    7700              : /* ... */
    7701              : /* ... */
    7702              : /* ... */
    7703              : /* ... */
    7704              : /* ... */
    7705              : /* ... */
    7706              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7707              : /* (content generated from coverage data) */
    7708              : /* ... */
    7709              : /* ... */
    7710              : /* ... */
    7711              : /* ... */
    7712              : /* ... */
    7713              : /* ... */
    7714              : /* ... */
    7715              : /* ... */
    7716              : /* ... */
    7717              : /* ... */
    7718              : /* ... */
    7719              : /* ... */
    7720              : /* ... */
    7721              : /* ... */
    7722              : /* ... */
    7723              : /* ... */
    7724              : /* ... */
    7725              : /* ... */
    7726              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7727              : /* (content generated from coverage data) */
    7728              : /* ... */
    7729              : /* ... */
    7730              : /* ... */
    7731              : /* ... */
    7732              : /* ... */
    7733              : /* ... */
    7734              : /* ... */
    7735              : /* ... */
    7736              : /* ... */
    7737              : /* ... */
    7738              : /* ... */
    7739              : /* ... */
    7740              : /* ... */
    7741              : /* ... */
    7742              : /* ... */
    7743              : /* ... */
    7744              : /* ... */
    7745              : /* ... */
    7746              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7747            0 : /* (content generated from coverage data) */
    7748            0 : /* ... */
    7749            0 : /* ... */
    7750            0 : /* ... */
    7751              : /* ... */
    7752            0 : /* ... */
    7753              : /* ... */
    7754              : /* ... */
    7755              : /* ... */
    7756              : /* ... */
    7757              : /* ... */
    7758              : /* ... */
    7759              : /* ... */
    7760              : /* ... */
    7761              : /* ... */
    7762              : /* ... */
    7763              : /* ... */
    7764              : /* ... */
    7765              : /* ... */
    7766              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/mmx.md not long enough */
    7767              : /* (content generated from coverage data) */
    7768    441426954 : /* END: function "_Z19get_attr_prefix_rexP8rtx_insn" */
    7769              : /* ... */
    7770    441426954 : /* ... */
    7771              : /* ... */
    7772    441426954 : /* ... */
    7773              : /* ... */
    7774       804918 : /* ... */
    7775       804918 : /* ... */
    7776       804918 : /* ... */
    7777       804918 : /* ... */
    7778       804918 : /* ... */
    7779              : /* ... */
    7780              : /* ... */
    7781              : /* ... */
    7782              : /* ... */
    7783              : /* ... */
    7784       788090 : /* ... */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.