On Fri, Apr 3, 2020 at 7:30 PM Jakub Jelinek <ja...@redhat.com> wrote:
>
> Hi!
>
> In https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00576.html the builtin
> handling was changed so that OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE
> etc. in i386-builtin.def means we require both mmx and sse, not just one of
> those, and later on for other option combinations very similar rule has
> been clarified, with a few exceptions that ix86_expand_builtin lists
> (SSE | 3DNOW_A, SSE4_2 | CRC32 and FMA | FMA4 are one or the other).
> The above mentioned patch also added OPTION_MASK_ISA_MMX to a few insns
> that in the ISA documents are documented e.g. only requiring SSE2 or SSSE3
> etc. CPUID, but because those builtins take or return V2SI or similar
> MMX-ish arguments, we can't really support those builtins in functions that
> have MMX disabled.
> Now, during the TARGET_MMX_WITH_SSE changes,
> https://gcc.gnu.org/ml/gcc-patches/2019-02/msg01479.html
> and
> https://gcc.gnu.org/ml/gcc-patches/2019-05/msg01084.html
> actually changed this; it added | OPTION_MASK_ISA_SSE2 to builtins
> that were formerly OPTION_MASK_ISA_MMX only, but didn't touch the builtins
> that were already using OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_MMX
> for something different (both options must be enabled).
> This causes e.g. ICE on the following testcase, because the builtins are
> now enabled even with just -mmmx -mno-sse2, even when they (those changed in
> 2017) require SSE2.
> The following patch instead reverts the above two 2019-ish changes (except
> for header/testsuite changes), and instead treats OPTION_MASK_ISA_MMX
> requirement in bdesc/.isa specially, as being satisfied by either
> TARGET_MMX (no changes really needed for that), or by TARGET_MMX_WITH_SSE.
> This achieves what the two 2019-ish patches want to do, that the
> OPTION_MASK_ISA_MMX only builtins are enabled not just with -mmmx, but also
> with -m64 -msse2, and for the other builtins that require MMX and something
> else will either require -mmmx and that some other ISA, or -m64 -msse2 and
> that other ISA, but -mmmx will not enable builtins that need something more
> than OPTION_MASK_ISA_MMX only.
> The i386-builtins.c changes that aren't reversion of the two patches try to
> make sure that in .isa we still record OPTION_MASK_ISA_MMX for builtins that
> have that requirement, so that it is in the end only ix86_expand_builtin
> that decides if the builtin is ok or not and the rest of code just decides
> if it is the right time to declare the builtin already or if it should be
> deferred.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2020-04-03  Jakub Jelinek  <ja...@redhat.com>
>
>         PR target/94461
>         * config/i386/i386-expand.c (ix86_expand_builtin): If
>         TARGET_MMX_WITH_SSE without TARGET_MMX and bisa contains
>         OPTION_MASK_ISA_MMX, clear OPTION_MASK_ISA_MMX and set
>         OPTION_MASK_ISA_SSE2 in bisa.  Revert 2019-05-17 and 2019-05-15
>         changes.
>         * config/i386/i386-builtins.c (def_builtin): If mask includes
>         OPTION_MASK_ISA_MMX and TARGET_MMX_WITH_SSE, consider it satisfied.
>         (ix86_add_new_builtins): For TARGET_64BIT, consider
>         OPTION_MASK_ISA_SSE2 enabled in isa as satisfying OPTION_MASK_ISA_MMX
>         requirement.
>         (ix86_init_tm_builtins): If TARGET_MMX_WITH_SSE consider
>         OPTION_MASK_ISA_MMX as satisfied.
>         (bdesc_tm): Revert 2019-05-15 changes.
>         (ix86_init_mmx_sse_builtins): Likewise.
>         * config/i386/i386-builtin.def: Likewise.
>
>         * gcc.target/i386/pr94461.c: New test.

LGTM (following the logic through the code literally gave me a
headache) since you know .isa recording stuff better than I.

Please note the comment in the testcase.

Thanks,
Uros.

> --- gcc/config/i386/i386-expand.c.jj    2020-04-03 15:41:29.246722608 +0200
> +++ gcc/config/i386/i386-expand.c       2020-04-03 15:42:17.588002941 +0200
> @@ -10968,8 +10968,9 @@ ix86_expand_builtin (tree exp, rtx targe
>       OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_3DNOW_A
>       OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_CRC32
>       OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_FMA4
> -     where for each this pair it is sufficient if either of the ISAs is
> -     enabled, plus if it is ored with other options also those others.  */
> +     where for each such pair it is sufficient if either of the ISAs is
> +     enabled, plus if it is ored with other options also those others.
> +     OPTION_MASK_ISA_MMX in bisa is satisfied also if TARGET_MMX_WITH_SSE.  
> */
>    if (((bisa & (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_3DNOW_A))
>         == (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_3DNOW_A))
>        && (isa & (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_3DNOW_A)) != 0)
> @@ -10982,24 +10983,10 @@ ix86_expand_builtin (tree exp, rtx targe
>         == (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_FMA4))
>        && (isa & (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_FMA4)) != 0)
>      isa |= (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_FMA4);
> -  /* Use SSE/SSE2/SSSE3 to emulate MMX intrinsics in 64-bit mode when
> -     MMX is disabled.  NB: Since MMX intrinsics are marked with
> -     SSE/SSE2/SSSE3, enable them without SSE/SSE2/SSSE3 if MMX is
> -     enabled.  */
> -  if (TARGET_MMX || TARGET_MMX_WITH_SSE)
> +  if ((bisa & OPTION_MASK_ISA_MMX) && !TARGET_MMX && TARGET_MMX_WITH_SSE)
>      {
> -      if (((bisa & (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_MMX))
> -          == (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_MMX))
> -         && (isa & (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_MMX)) != 0)
> -       isa |= (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_MMX);
> -      if (((bisa & (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_MMX))
> -          == (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_MMX))
> -         && (isa & (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_MMX)) != 0)
> -       isa |= (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_MMX);
> -      if (((bisa & (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX))
> -          == (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX))
> -         && (isa & (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX)) != 0)
> -       isa |= (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX);
> +      bisa &= ~OPTION_MASK_ISA_MMX;
> +      bisa |= OPTION_MASK_ISA_SSE2;
>      }
>    if ((bisa & isa) != bisa || (bisa2 & isa2) != bisa2)
>      {
> --- gcc/config/i386/i386-builtins.c.jj  2020-04-03 15:41:29.244722638 +0200
> +++ gcc/config/i386/i386-builtins.c     2020-04-03 15:42:17.591002896 +0200
> @@ -274,6 +274,7 @@ def_builtin (HOST_WIDE_INT mask, HOST_WI
>
>        if (((mask2 == 0 || (mask2 & ix86_isa_flags2) != 0)
>            && (mask == 0 || (mask & ix86_isa_flags) != 0))
> +         || ((mask & OPTION_MASK_ISA_MMX) != 0 && TARGET_MMX_WITH_SSE)
>           || (lang_hooks.builtin_function
>               == lang_hooks.builtin_function_ext_scope))
>         {
> @@ -341,12 +342,16 @@ ix86_add_new_builtins (HOST_WIDE_INT isa
>    isa &= ~OPTION_MASK_ISA_64BIT;
>
>    if ((isa & deferred_isa_values) == 0
> -      && (isa2 & deferred_isa_values2) == 0)
> +      && (isa2 & deferred_isa_values2) == 0
> +      && ((deferred_isa_values & OPTION_MASK_ISA_MMX) == 0
> +         || !(TARGET_64BIT && (isa & OPTION_MASK_ISA_SSE2) != 0)))
>      return;
>
>    /* Bits in ISA value can be removed from potential isa values.  */
>    deferred_isa_values &= ~isa;
>    deferred_isa_values2 &= ~isa2;
> +  if (TARGET_64BIT && (isa & OPTION_MASK_ISA_SSE2) != 0)
> +    deferred_isa_values &= ~OPTION_MASK_ISA_MMX;
>
>    int i;
>    tree saved_current_target_pragma = current_target_pragma;
> @@ -355,7 +360,10 @@ ix86_add_new_builtins (HOST_WIDE_INT isa
>    for (i = 0; i < (int)IX86_BUILTIN_MAX; i++)
>      {
>        if (((ix86_builtins_isa[i].isa & isa) != 0
> -          || (ix86_builtins_isa[i].isa2 & isa2) != 0)
> +          || (ix86_builtins_isa[i].isa2 & isa2) != 0
> +          || ((ix86_builtins_isa[i].isa & OPTION_MASK_ISA_MMX) != 0
> +              && TARGET_64BIT
> +              && (isa & OPTION_MASK_ISA_SSE2) != 0))
>           && ix86_builtins_isa[i].set_and_not_built_p)
>         {
>           tree decl, type;
> @@ -383,13 +391,13 @@ ix86_add_new_builtins (HOST_WIDE_INT isa
>     we're lazy.  Add casts to make them fit.  */
>  static const struct builtin_description bdesc_tm[] =
>  {
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_WM64", (enum ix86_builtins) BUILT_IN_TM_STORE_M64, UNKNOWN, 
> VOID_FTYPE_PV2SI_V2SI },
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_WaRM64", (enum ix86_builtins) BUILT_IN_TM_STORE_WAR_M64, 
> UNKNOWN, VOID_FTYPE_PV2SI_V2SI },
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_WaWM64", (enum ix86_builtins) BUILT_IN_TM_STORE_WAW_M64, 
> UNKNOWN, VOID_FTYPE_PV2SI_V2SI },
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_RM64", (enum ix86_builtins) BUILT_IN_TM_LOAD_M64, UNKNOWN, 
> V2SI_FTYPE_PCV2SI },
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_RaRM64", (enum ix86_builtins) BUILT_IN_TM_LOAD_RAR_M64, 
> UNKNOWN, V2SI_FTYPE_PCV2SI },
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_RaWM64", (enum ix86_builtins) BUILT_IN_TM_LOAD_RAW_M64, 
> UNKNOWN, V2SI_FTYPE_PCV2SI },
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_RfWM64", (enum ix86_builtins) BUILT_IN_TM_LOAD_RFW_M64, 
> UNKNOWN, V2SI_FTYPE_PCV2SI },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_WM64", (enum 
> ix86_builtins) BUILT_IN_TM_STORE_M64, UNKNOWN, VOID_FTYPE_PV2SI_V2SI },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_WaRM64", (enum 
> ix86_builtins) BUILT_IN_TM_STORE_WAR_M64, UNKNOWN, VOID_FTYPE_PV2SI_V2SI },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_WaWM64", (enum 
> ix86_builtins) BUILT_IN_TM_STORE_WAW_M64, UNKNOWN, VOID_FTYPE_PV2SI_V2SI },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_RM64", (enum 
> ix86_builtins) BUILT_IN_TM_LOAD_M64, UNKNOWN, V2SI_FTYPE_PCV2SI },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_RaRM64", (enum 
> ix86_builtins) BUILT_IN_TM_LOAD_RAR_M64, UNKNOWN, V2SI_FTYPE_PCV2SI },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_RaWM64", (enum 
> ix86_builtins) BUILT_IN_TM_LOAD_RAW_M64, UNKNOWN, V2SI_FTYPE_PCV2SI },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_RfWM64", (enum 
> ix86_builtins) BUILT_IN_TM_LOAD_RFW_M64, UNKNOWN, V2SI_FTYPE_PCV2SI },
>
>    { OPTION_MASK_ISA_SSE, 0, CODE_FOR_nothing, "__builtin__ITM_WM128", (enum 
> ix86_builtins) BUILT_IN_TM_STORE_M128, UNKNOWN, VOID_FTYPE_PV4SF_V4SF },
>    { OPTION_MASK_ISA_SSE, 0, CODE_FOR_nothing, "__builtin__ITM_WaRM128", 
> (enum ix86_builtins) BUILT_IN_TM_STORE_WAR_M128, UNKNOWN, 
> VOID_FTYPE_PV4SF_V4SF },
> @@ -407,7 +415,7 @@ static const struct builtin_description
>    { OPTION_MASK_ISA_AVX, 0, CODE_FOR_nothing, "__builtin__ITM_RaWM256", 
> (enum ix86_builtins) BUILT_IN_TM_LOAD_RAW_M256, UNKNOWN, V8SF_FTYPE_PCV8SF },
>    { OPTION_MASK_ISA_AVX, 0, CODE_FOR_nothing, "__builtin__ITM_RfWM256", 
> (enum ix86_builtins) BUILT_IN_TM_LOAD_RFW_M256, UNKNOWN, V8SF_FTYPE_PCV8SF },
>
> -  { OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_nothing, 
> "__builtin__ITM_LM64", (enum ix86_builtins) BUILT_IN_TM_LOG_M64, UNKNOWN, 
> VOID_FTYPE_PCVOID },
> +  { OPTION_MASK_ISA_MMX, 0, CODE_FOR_nothing, "__builtin__ITM_LM64", (enum 
> ix86_builtins) BUILT_IN_TM_LOG_M64, UNKNOWN, VOID_FTYPE_PCVOID },
>    { OPTION_MASK_ISA_SSE, 0, CODE_FOR_nothing, "__builtin__ITM_LM128", (enum 
> ix86_builtins) BUILT_IN_TM_LOG_M128, UNKNOWN, VOID_FTYPE_PCVOID },
>    { OPTION_MASK_ISA_AVX, 0, CODE_FOR_nothing, "__builtin__ITM_LM256", (enum 
> ix86_builtins) BUILT_IN_TM_LOG_M256, UNKNOWN, VOID_FTYPE_PCVOID },
>  };
> @@ -450,6 +458,7 @@ ix86_init_tm_builtins (void)
>         i++, d++)
>      {
>        if ((d->mask & ix86_isa_flags) != 0
> +         || ((d->mask & OPTION_MASK_ISA_MMX) != 0 && TARGET_MMX_WITH_SSE)
>           || (lang_hooks.builtin_function
>               == lang_hooks.builtin_function_ext_scope))
>         {
> @@ -1057,16 +1066,16 @@ ix86_init_mmx_sse_builtins (void)
>                VOID_FTYPE_UNSIGNED, IX86_BUILTIN_XABORT);
>
>    /* MMX access to the vec_init patterns.  */
> -  def_builtin_const (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0,
> +  def_builtin_const (OPTION_MASK_ISA_MMX, 0,
>                      "__builtin_ia32_vec_init_v2si",
>                      V2SI_FTYPE_INT_INT, IX86_BUILTIN_VEC_INIT_V2SI);
>
> -  def_builtin_const (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0,
> +  def_builtin_const (OPTION_MASK_ISA_MMX, 0,
>                      "__builtin_ia32_vec_init_v4hi",
>                      V4HI_FTYPE_HI_HI_HI_HI,
>                      IX86_BUILTIN_VEC_INIT_V4HI);
>
> -  def_builtin_const (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0,
> +  def_builtin_const (OPTION_MASK_ISA_MMX, 0,
>                      "__builtin_ia32_vec_init_v8qi",
>                      V8QI_FTYPE_QI_QI_QI_QI_QI_QI_QI_QI,
>                      IX86_BUILTIN_VEC_INIT_V8QI);
> @@ -1089,7 +1098,7 @@ ix86_init_mmx_sse_builtins (void)
>                      "__builtin_ia32_vec_ext_v4hi",
>                      HI_FTYPE_V4HI_INT, IX86_BUILTIN_VEC_EXT_V4HI);
>
> -  def_builtin_const (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0,
> +  def_builtin_const (OPTION_MASK_ISA_MMX, 0,
>                      "__builtin_ia32_vec_ext_v2si",
>                      SI_FTYPE_V2SI_INT, IX86_BUILTIN_VEC_EXT_V2SI);
>
> --- gcc/config/i386/i386-builtin.def.jj 2020-04-03 15:41:29.244722638 +0200
> +++ gcc/config/i386/i386-builtin.def    2020-04-03 15:42:17.592002881 +0200
> @@ -100,7 +100,7 @@ BDESC (0, 0, CODE_FOR_fnstsw, "__builtin
>  BDESC (0, 0, CODE_FOR_fnclex, "__builtin_ia32_fnclex", IX86_BUILTIN_FNCLEX, 
> UNKNOWN, (int) VOID_FTYPE_VOID)
>
>  /* MMX */
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_emms, 
> "__builtin_ia32_emms", IX86_BUILTIN_EMMS, UNKNOWN, (int) VOID_FTYPE_VOID)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_emms, "__builtin_ia32_emms", 
> IX86_BUILTIN_EMMS, UNKNOWN, (int) VOID_FTYPE_VOID)
>
>  /* 3DNow! */
>  BDESC (OPTION_MASK_ISA_3DNOW, 0, CODE_FOR_mmx_femms, "__builtin_ia32_femms", 
> IX86_BUILTIN_FEMMS, UNKNOWN, (int) VOID_FTYPE_VOID)
> @@ -458,68 +458,68 @@ BDESC (0, 0, CODE_FOR_rotrqi3, "__builti
>  BDESC (0, 0, CODE_FOR_rotrhi3, "__builtin_ia32_rorhi", IX86_BUILTIN_RORHI, 
> UNKNOWN, (int) UINT16_FTYPE_UINT16_INT)
>
>  /* MMX */
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_addv8qi3, 
> "__builtin_ia32_paddb", IX86_BUILTIN_PADDB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_addv4hi3, 
> "__builtin_ia32_paddw", IX86_BUILTIN_PADDW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_addv2si3, 
> "__builtin_ia32_paddd", IX86_BUILTIN_PADDD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_subv8qi3, 
> "__builtin_ia32_psubb", IX86_BUILTIN_PSUBB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_subv4hi3, 
> "__builtin_ia32_psubw", IX86_BUILTIN_PSUBW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_subv2si3, 
> "__builtin_ia32_psubd", IX86_BUILTIN_PSUBD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ssaddv8qi3, "__builtin_ia32_paddsb", IX86_BUILTIN_PADDSB, 
> UNKNOWN, (int) V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ssaddv4hi3, "__builtin_ia32_paddsw", IX86_BUILTIN_PADDSW, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_sssubv8qi3, "__builtin_ia32_psubsb", IX86_BUILTIN_PSUBSB, 
> UNKNOWN, (int) V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_sssubv4hi3, "__builtin_ia32_psubsw", IX86_BUILTIN_PSUBSW, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_usaddv8qi3, "__builtin_ia32_paddusb", IX86_BUILTIN_PADDUSB, 
> UNKNOWN, (int) V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_usaddv4hi3, "__builtin_ia32_paddusw", IX86_BUILTIN_PADDUSW, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ussubv8qi3, "__builtin_ia32_psubusb", IX86_BUILTIN_PSUBUSB, 
> UNKNOWN, (int) V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ussubv4hi3, "__builtin_ia32_psubusw", IX86_BUILTIN_PSUBUSW, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_mulv4hi3, 
> "__builtin_ia32_pmullw", IX86_BUILTIN_PMULLW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_smulv4hi3_highpart, "__builtin_ia32_pmulhw", 
> IX86_BUILTIN_PMULHW, UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_andv2si3, 
> "__builtin_ia32_pand", IX86_BUILTIN_PAND, UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_andnotv2si3, "__builtin_ia32_pandn", IX86_BUILTIN_PANDN, 
> UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_iorv2si3, 
> "__builtin_ia32_por", IX86_BUILTIN_POR, UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_xorv2si3, 
> "__builtin_ia32_pxor", IX86_BUILTIN_PXOR, UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_eqv8qi3, 
> "__builtin_ia32_pcmpeqb", IX86_BUILTIN_PCMPEQB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_eqv4hi3, 
> "__builtin_ia32_pcmpeqw", IX86_BUILTIN_PCMPEQW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_eqv2si3, 
> "__builtin_ia32_pcmpeqd", IX86_BUILTIN_PCMPEQD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_gtv8qi3, 
> "__builtin_ia32_pcmpgtb", IX86_BUILTIN_PCMPGTB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_gtv4hi3, 
> "__builtin_ia32_pcmpgtw", IX86_BUILTIN_PCMPGTW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_gtv2si3, 
> "__builtin_ia32_pcmpgtd", IX86_BUILTIN_PCMPGTD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_punpckhbw, "__builtin_ia32_punpckhbw", IX86_BUILTIN_PUNPCKHBW, 
> UNKNOWN, (int) V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_punpckhwd, "__builtin_ia32_punpckhwd", IX86_BUILTIN_PUNPCKHWD, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_punpckhdq, "__builtin_ia32_punpckhdq", IX86_BUILTIN_PUNPCKHDQ, 
> UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_punpcklbw, "__builtin_ia32_punpcklbw", IX86_BUILTIN_PUNPCKLBW, 
> UNKNOWN, (int) V8QI_FTYPE_V8QI_V8QI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_punpcklwd, "__builtin_ia32_punpcklwd", IX86_BUILTIN_PUNPCKLWD, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_punpckldq, "__builtin_ia32_punpckldq", IX86_BUILTIN_PUNPCKLDQ, 
> UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_packsswb, 
> "__builtin_ia32_packsswb", IX86_BUILTIN_PACKSSWB, UNKNOWN, (int) 
> V8QI_FTYPE_V4HI_V4HI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_packssdw, 
> "__builtin_ia32_packssdw", IX86_BUILTIN_PACKSSDW, UNKNOWN, (int) 
> V4HI_FTYPE_V2SI_V2SI)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_packuswb, 
> "__builtin_ia32_packuswb", IX86_BUILTIN_PACKUSWB, UNKNOWN, (int) 
> V8QI_FTYPE_V4HI_V4HI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, CODE_FOR_mmx_pmaddwd, 
> "__builtin_ia32_pmaddwd", IX86_BUILTIN_PMADDWD, UNKNOWN, (int) 
> V2SI_FTYPE_V4HI_V4HI)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashlv4hi3, "__builtin_ia32_psllwi", IX86_BUILTIN_PSLLWI, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashlv2si3, "__builtin_ia32_pslldi", IX86_BUILTIN_PSLLDI, 
> UNKNOWN, (int) V2SI_FTYPE_V2SI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashlv1di3, "__builtin_ia32_psllqi", IX86_BUILTIN_PSLLQI, 
> UNKNOWN, (int) V1DI_FTYPE_V1DI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashlv4hi3, "__builtin_ia32_psllw", IX86_BUILTIN_PSLLW, UNKNOWN, 
> (int) V4HI_FTYPE_V4HI_V4HI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashlv2si3, "__builtin_ia32_pslld", IX86_BUILTIN_PSLLD, UNKNOWN, 
> (int) V2SI_FTYPE_V2SI_V2SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashlv1di3, "__builtin_ia32_psllq", IX86_BUILTIN_PSLLQ, UNKNOWN, 
> (int) V1DI_FTYPE_V1DI_V1DI_COUNT)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_lshrv4hi3, "__builtin_ia32_psrlwi", IX86_BUILTIN_PSRLWI, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_lshrv2si3, "__builtin_ia32_psrldi", IX86_BUILTIN_PSRLDI, 
> UNKNOWN, (int) V2SI_FTYPE_V2SI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_lshrv1di3, "__builtin_ia32_psrlqi", IX86_BUILTIN_PSRLQI, 
> UNKNOWN, (int) V1DI_FTYPE_V1DI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_lshrv4hi3, "__builtin_ia32_psrlw", IX86_BUILTIN_PSRLW, UNKNOWN, 
> (int) V4HI_FTYPE_V4HI_V4HI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_lshrv2si3, "__builtin_ia32_psrld", IX86_BUILTIN_PSRLD, UNKNOWN, 
> (int) V2SI_FTYPE_V2SI_V2SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_lshrv1di3, "__builtin_ia32_psrlq", IX86_BUILTIN_PSRLQ, UNKNOWN, 
> (int) V1DI_FTYPE_V1DI_V1DI_COUNT)
> -
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashrv4hi3, "__builtin_ia32_psrawi", IX86_BUILTIN_PSRAWI, 
> UNKNOWN, (int) V4HI_FTYPE_V4HI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashrv2si3, "__builtin_ia32_psradi", IX86_BUILTIN_PSRADI, 
> UNKNOWN, (int) V2SI_FTYPE_V2SI_SI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashrv4hi3, "__builtin_ia32_psraw", IX86_BUILTIN_PSRAW, UNKNOWN, 
> (int) V4HI_FTYPE_V4HI_V4HI_COUNT)
> -BDESC (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE2, 0, 
> CODE_FOR_mmx_ashrv2si3, "__builtin_ia32_psrad", IX86_BUILTIN_PSRAD, UNKNOWN, 
> (int) V2SI_FTYPE_V2SI_V2SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_addv8qi3, 
> "__builtin_ia32_paddb", IX86_BUILTIN_PADDB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_addv4hi3, 
> "__builtin_ia32_paddw", IX86_BUILTIN_PADDW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_addv2si3, 
> "__builtin_ia32_paddd", IX86_BUILTIN_PADDD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_subv8qi3, 
> "__builtin_ia32_psubb", IX86_BUILTIN_PSUBB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_subv4hi3, 
> "__builtin_ia32_psubw", IX86_BUILTIN_PSUBW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_subv2si3, 
> "__builtin_ia32_psubd", IX86_BUILTIN_PSUBD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ssaddv8qi3, 
> "__builtin_ia32_paddsb", IX86_BUILTIN_PADDSB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ssaddv4hi3, 
> "__builtin_ia32_paddsw", IX86_BUILTIN_PADDSW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_sssubv8qi3, 
> "__builtin_ia32_psubsb", IX86_BUILTIN_PSUBSB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_sssubv4hi3, 
> "__builtin_ia32_psubsw", IX86_BUILTIN_PSUBSW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_usaddv8qi3, 
> "__builtin_ia32_paddusb", IX86_BUILTIN_PADDUSB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_usaddv4hi3, 
> "__builtin_ia32_paddusw", IX86_BUILTIN_PADDUSW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ussubv8qi3, 
> "__builtin_ia32_psubusb", IX86_BUILTIN_PSUBUSB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ussubv4hi3, 
> "__builtin_ia32_psubusw", IX86_BUILTIN_PSUBUSW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_mulv4hi3, 
> "__builtin_ia32_pmullw", IX86_BUILTIN_PMULLW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_smulv4hi3_highpart, 
> "__builtin_ia32_pmulhw", IX86_BUILTIN_PMULHW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_andv2si3, "__builtin_ia32_pand", 
> IX86_BUILTIN_PAND, UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_andnotv2si3, 
> "__builtin_ia32_pandn", IX86_BUILTIN_PANDN, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_iorv2si3, "__builtin_ia32_por", 
> IX86_BUILTIN_POR, UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_xorv2si3, "__builtin_ia32_pxor", 
> IX86_BUILTIN_PXOR, UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_eqv8qi3, 
> "__builtin_ia32_pcmpeqb", IX86_BUILTIN_PCMPEQB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_eqv4hi3, 
> "__builtin_ia32_pcmpeqw", IX86_BUILTIN_PCMPEQW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_eqv2si3, 
> "__builtin_ia32_pcmpeqd", IX86_BUILTIN_PCMPEQD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_gtv8qi3, 
> "__builtin_ia32_pcmpgtb", IX86_BUILTIN_PCMPGTB, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_gtv4hi3, 
> "__builtin_ia32_pcmpgtw", IX86_BUILTIN_PCMPGTW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_gtv2si3, 
> "__builtin_ia32_pcmpgtd", IX86_BUILTIN_PCMPGTD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_punpckhbw, 
> "__builtin_ia32_punpckhbw", IX86_BUILTIN_PUNPCKHBW, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_punpckhwd, 
> "__builtin_ia32_punpckhwd", IX86_BUILTIN_PUNPCKHWD, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_punpckhdq, 
> "__builtin_ia32_punpckhdq", IX86_BUILTIN_PUNPCKHDQ, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_punpcklbw, 
> "__builtin_ia32_punpcklbw", IX86_BUILTIN_PUNPCKLBW, UNKNOWN, (int) 
> V8QI_FTYPE_V8QI_V8QI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_punpcklwd, 
> "__builtin_ia32_punpcklwd", IX86_BUILTIN_PUNPCKLWD, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_punpckldq, 
> "__builtin_ia32_punpckldq", IX86_BUILTIN_PUNPCKLDQ, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_packsswb, 
> "__builtin_ia32_packsswb", IX86_BUILTIN_PACKSSWB, UNKNOWN, (int) 
> V8QI_FTYPE_V4HI_V4HI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_packssdw, 
> "__builtin_ia32_packssdw", IX86_BUILTIN_PACKSSDW, UNKNOWN, (int) 
> V4HI_FTYPE_V2SI_V2SI)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_packuswb, 
> "__builtin_ia32_packuswb", IX86_BUILTIN_PACKUSWB, UNKNOWN, (int) 
> V8QI_FTYPE_V4HI_V4HI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_pmaddwd, 
> "__builtin_ia32_pmaddwd", IX86_BUILTIN_PMADDWD, UNKNOWN, (int) 
> V2SI_FTYPE_V4HI_V4HI)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashlv4hi3, 
> "__builtin_ia32_psllwi", IX86_BUILTIN_PSLLWI, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashlv2si3, 
> "__builtin_ia32_pslldi", IX86_BUILTIN_PSLLDI, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashlv1di3, 
> "__builtin_ia32_psllqi", IX86_BUILTIN_PSLLQI, UNKNOWN, (int) 
> V1DI_FTYPE_V1DI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashlv4hi3, 
> "__builtin_ia32_psllw", IX86_BUILTIN_PSLLW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashlv2si3, 
> "__builtin_ia32_pslld", IX86_BUILTIN_PSLLD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashlv1di3, 
> "__builtin_ia32_psllq", IX86_BUILTIN_PSLLQ, UNKNOWN, (int) 
> V1DI_FTYPE_V1DI_V1DI_COUNT)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_lshrv4hi3, 
> "__builtin_ia32_psrlwi", IX86_BUILTIN_PSRLWI, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_lshrv2si3, 
> "__builtin_ia32_psrldi", IX86_BUILTIN_PSRLDI, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_lshrv1di3, 
> "__builtin_ia32_psrlqi", IX86_BUILTIN_PSRLQI, UNKNOWN, (int) 
> V1DI_FTYPE_V1DI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_lshrv4hi3, 
> "__builtin_ia32_psrlw", IX86_BUILTIN_PSRLW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_lshrv2si3, 
> "__builtin_ia32_psrld", IX86_BUILTIN_PSRLD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_lshrv1di3, 
> "__builtin_ia32_psrlq", IX86_BUILTIN_PSRLQ, UNKNOWN, (int) 
> V1DI_FTYPE_V1DI_V1DI_COUNT)
> +
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashrv4hi3, 
> "__builtin_ia32_psrawi", IX86_BUILTIN_PSRAWI, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashrv2si3, 
> "__builtin_ia32_psradi", IX86_BUILTIN_PSRADI, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_SI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashrv4hi3, 
> "__builtin_ia32_psraw", IX86_BUILTIN_PSRAW, UNKNOWN, (int) 
> V4HI_FTYPE_V4HI_V4HI_COUNT)
> +BDESC (OPTION_MASK_ISA_MMX, 0, CODE_FOR_mmx_ashrv2si3, 
> "__builtin_ia32_psrad", IX86_BUILTIN_PSRAD, UNKNOWN, (int) 
> V2SI_FTYPE_V2SI_V2SI_COUNT)
>
>  /* 3DNow! */
>  BDESC (OPTION_MASK_ISA_3DNOW, 0, CODE_FOR_mmx_pf2id, "__builtin_ia32_pf2id", 
> IX86_BUILTIN_PF2ID, UNKNOWN, (int) V2SI_FTYPE_V2SF)
> --- gcc/testsuite/gcc.target/i386/pr94461.c.jj  2020-04-03 15:53:03.816385710 
> +0200
> +++ gcc/testsuite/gcc.target/i386/pr94461.c     2020-04-03 15:52:34.600820434 
> +0200
> @@ -0,0 +1,11 @@
> +/* PR target/94461 */
> +/* { dg-do compile { target lp64 } } */

There is no need for the target selector, the testcase also fails with
-m32 for me. Maybe you need to add -msse option to avoid "SSE register
return with SSE disabled" error?

> +/* { dg-options "-mmmx -mno-sse2" } */
> +
> +typedef int __v2si __attribute__ ((__vector_size__ (8)));
> +
> +__v2si
> +foo (__v2si a)
> +{
> +  return (__v2si) __builtin_ia32_pmuludq (a, a);       /* { dg-error "needs 
> isa option" } */
> +}
>
>         Jakub
>

Reply via email to