From 9319fa21f4ee4dcff6b5ccc609eb28e303639529 Mon Sep 17 00:00:00 2001 From: Michael Zolotukhin Date: Thu, 9 Aug 2012 14:35:02 +0000 Subject: [PATCH] adxintrin.h: Remove guarding __ADX__ check. 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 add3_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 | 10 ++++++++++ gcc/config/i386/adxintrin.h | 4 ---- gcc/config/i386/i386.c | 8 ++++---- gcc/config/i386/x86intrin.h | 2 -- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/adx-addcarryx32-3.c | 15 +++++++++++++++ gcc/testsuite/gcc.target/i386/adx-addcarryx64-3.c | 15 +++++++++++++++ 7 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/adx-addcarryx32-3.c create mode 100644 gcc/testsuite/gcc.target/i386/adx-addcarryx64-3.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 618cba07e71..db6dbd5f7cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2012-08-09 Michael Zolotukhin + + * 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 add3_carry in expanding of + IX86_BUILTIN_ADDCARRYX32 and IX86_BUILTIN_ADDCARRYX64. + 2012-08-09 Andrey Belevantsev PR rtl-optimization/53701 diff --git a/gcc/config/i386/adxintrin.h b/gcc/config/i386/adxintrin.h index 2e2a18b62cf..a68566d1a6f 100644 --- a/gcc/config/i386/adxintrin.h +++ b/gcc/config/i386/adxintrin.h @@ -25,10 +25,6 @@ # error "Never use directly; include instead." #endif -#ifndef __ADX__ -# error "Flag-preserving add-carry instructions not enabled" -#endif /* __ADX__ */ - #ifndef _ADXINTRIN_H_INCLUDED #define _ADXINTRIN_H_INCLUDED diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 17d4446b9a6..7a9e1345c77 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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: diff --git a/gcc/config/i386/x86intrin.h b/gcc/config/i386/x86intrin.h index dc5c58eebf8..fae6491c49f 100644 --- a/gcc/config/i386/x86intrin.h +++ b/gcc/config/i386/x86intrin.h @@ -105,8 +105,6 @@ #include #endif -#ifdef __ADX__ #include -#endif #endif /* _X86INTRIN_H_INCLUDED */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1ac24cdb0b8..021ce85fac4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-08-09 Michael Zolotukhin + + * gcc.target/i386/adx-addxcarry32-3.c: New. + * gcc.target/i386/adx-addxcarry64-3.c: New. + 2012-08-09 Andrey Belevantsev 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 index 00000000000..0ed33a9503e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/adx-addcarryx32-3.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-mno-adx -O2" } */ +/* { dg-final { scan-assembler "adcl" } } */ + +#include + +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 index 00000000000..4bbf74bfc2d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/adx-addcarryx64-3.c @@ -0,0 +1,15 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-mno-adx -O2" } */ +/* { dg-final { scan-assembler "adcq" } } */ + +#include + +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); +} -- 2.30.2