adxintrin.h: Remove guarding __ADX__ check.
authorMichael Zolotukhin <michael.v.zolotukhin@intel.com>
Thu, 9 Aug 2012 14:35:02 +0000 (14:35 +0000)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Thu, 9 Aug 2012 14:35:02 +0000 (14:35 +0000)
Changelog
        * config/i386/adxintrin.h: Remove guarding __ADX__ check.
        * config/i386/x86intrin.h: Likewise.
        * config/i386/i386.c (ix86_init_mmx_sse_builtins): Remove
        OPTION_MASK_ISA_ADX from needed options for
        __builtin_ia32_addcarryx_u32 and __builtin_ia32_addcarryx_u64.
        (ix86_expand_builtin): Use add<mode>3_carry in expanding of
        IX86_BUILTIN_ADDCARRYX32 and IX86_BUILTIN_ADDCARRYX64.

testsuite/Changelog
        * gcc.target/i386/adx-addxcarry32-3.c: New.
        * gcc.target/i386/adx-addxcarry64-3.c: New.

From-SVN: r190254

gcc/ChangeLog
gcc/config/i386/adxintrin.h
gcc/config/i386/i386.c
gcc/config/i386/x86intrin.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/adx-addcarryx32-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/adx-addcarryx64-3.c [new file with mode: 0644]

index 618cba07e7152bbea88cb6bca1f377fe59413db4..db6dbd5f7cd90ad9843e37c53f77fccf9c040c01 100644 (file)
@@ -1,3 +1,13 @@
+2012-08-09  Michael Zolotukhin  <michael.v.zolotukhin@intel.com>
+
+       * config/i386/adxintrin.h: Remove guarding __ADX__ check.
+       * config/i386/x86intrin.h: Likewise.
+       * config/i386/i386.c (ix86_init_mmx_sse_builtins): Remove
+       OPTION_MASK_ISA_ADX from needed options for
+       __builtin_ia32_addcarryx_u32 and __builtin_ia32_addcarryx_u64.
+       (ix86_expand_builtin): Use add<mode>3_carry in expanding of
+       IX86_BUILTIN_ADDCARRYX32 and IX86_BUILTIN_ADDCARRYX64.
+
 2012-08-09  Andrey Belevantsev  <abel@ispras.ru>
 
        PR rtl-optimization/53701
index 2e2a18b62cf5f3f460d9cb19ab8c252055aa4e98..a68566d1a6f58000e0fae751485cbb2c70b36405 100644 (file)
 # error "Never use <adxintrin.h> directly; include <x86intrin.h> instead."
 #endif
 
-#ifndef __ADX__
-# error "Flag-preserving add-carry instructions not enabled"
-#endif /* __ADX__ */
-
 #ifndef _ADXINTRIN_H_INCLUDED
 #define _ADXINTRIN_H_INCLUDED
 
index 17d4446b9a6c60b1e149d32a6cabcc1670f295a4..7a9e1345c77e852a22cadd58227f2461215f5c69 100644 (file)
@@ -27968,9 +27968,9 @@ ix86_init_mmx_sse_builtins (void)
               INT_FTYPE_PULONGLONG, IX86_BUILTIN_RDSEED64_STEP);
 
   /* ADCX */
-  def_builtin (OPTION_MASK_ISA_ADX, "__builtin_ia32_addcarryx_u32",
+  def_builtin (0, "__builtin_ia32_addcarryx_u32",
               UCHAR_FTYPE_UCHAR_UINT_UINT_PUNSIGNED, IX86_BUILTIN_ADDCARRYX32);
-  def_builtin (OPTION_MASK_ISA_ADX && OPTION_MASK_ISA_64BIT,
+  def_builtin (OPTION_MASK_ISA_64BIT,
               "__builtin_ia32_addcarryx_u64",
               UCHAR_FTYPE_UCHAR_ULONGLONG_ULONGLONG_PULONGLONG,
               IX86_BUILTIN_ADDCARRYX64);
@@ -30343,12 +30343,12 @@ rdseed_step:
       return target;
 
     case IX86_BUILTIN_ADDCARRYX32:
-      icode = CODE_FOR_adcxsi3;
+      icode = TARGET_ADX ? CODE_FOR_adcxsi3 : CODE_FOR_addsi3_carry;
       mode0 = SImode;
       goto addcarryx;
 
     case IX86_BUILTIN_ADDCARRYX64:
-      icode = CODE_FOR_adcxdi3;
+      icode = TARGET_ADX ? CODE_FOR_adcxdi3 : CODE_FOR_adddi3_carry;
       mode0 = DImode;
 
 addcarryx:
index dc5c58eebf8af8c412cf54fa8e20b2e6ec90ad6c..fae6491c49f7a834080a693652b74e59b0cc68a6 100644 (file)
 #include <prfchwintrin.h>
 #endif
 
-#ifdef __ADX__
 #include <adxintrin.h>
-#endif
 
 #endif /* _X86INTRIN_H_INCLUDED */
index 1ac24cdb0b81f6fbc5f7a7871abe5ff7a7e68c10..021ce85fac4f0eb513aab8a6e2f04490327559dd 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-09  Michael Zolotukhin  <michael.v.zolotukhin@intel.com>
+
+       * gcc.target/i386/adx-addxcarry32-3.c: New.
+       * gcc.target/i386/adx-addxcarry64-3.c: New.
+
 2012-08-09  Andrey Belevantsev  <abel@ispras.ru>
 
        PR rtl-optimization/53701
diff --git a/gcc/testsuite/gcc.target/i386/adx-addcarryx32-3.c b/gcc/testsuite/gcc.target/i386/adx-addcarryx32-3.c
new file mode 100644 (file)
index 0000000..0ed33a9
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-mno-adx -O2" } */
+/* { dg-final { scan-assembler "adcl" } } */
+
+#include <x86intrin.h>
+
+volatile unsigned char c;
+volatile unsigned int x, y;
+unsigned int *sum;
+
+void extern
+adx_test (void)
+{
+    c = _addcarryx_u32 (c, x, y, sum);
+}
diff --git a/gcc/testsuite/gcc.target/i386/adx-addcarryx64-3.c b/gcc/testsuite/gcc.target/i386/adx-addcarryx64-3.c
new file mode 100644 (file)
index 0000000..4bbf74b
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-mno-adx -O2" } */
+/* { dg-final { scan-assembler "adcq" } } */
+
+#include <x86intrin.h>
+
+volatile unsigned char c;
+volatile unsigned long long x, y;
+unsigned long long *sum;
+
+void extern
+adx_test (void)
+{
+    c = _addcarryx_u64 (c, x, y, sum);
+}