On Fri, Feb 17, 2017 at 7:34 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > -m3dnowa is an undocumented option that always errors out. > The following patch fixes it and makes it do the obvious thing. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2017-02-17 Jakub Jelinek <ja...@redhat.com> > > PR target/79569 > * config/i386/i386.opt (m3dnowa): Replace Undocumented with Report. > * common/config/i386/i386-common.c (OPTION_MASK_ISA_3DNOW_A_SET): > Define. > (ix86_handle_option): Handle OPT_m3dnowa. > * doc/invoke.texi (-m3dnowa): Document. > * doc/extend.texi (__builtin_ia32_pmulhuw, __builtin_ia32_pf2iw): Use > -m3dnowa instead of -m3dnow -march=athlon. > > * gcc.target/i386/3dnowA-3.c: New test.
OK for trunk and (at your opinion) gcc-6 branch. Thanks, Uros. > --- gcc/config/i386/i386.opt.jj 2017-01-16 12:28:35.000000000 +0100 > +++ gcc/config/i386/i386.opt 2017-02-17 11:23:06.674671212 +0100 > @@ -614,7 +614,7 @@ Target Report Mask(ISA_3DNOW) Var(ix86_i > Support 3DNow! built-in functions. > > m3dnowa > -Target Undocumented Mask(ISA_3DNOW_A) Var(ix86_isa_flags) Save > +Target Report Mask(ISA_3DNOW_A) Var(ix86_isa_flags) Save > Support Athlon 3Dnow! built-in functions. > > msse > --- gcc/common/config/i386/i386-common.c.jj 2017-01-12 22:29:00.000000000 > +0100 > +++ gcc/common/config/i386/i386-common.c 2017-02-17 10:55:20.023152107 > +0100 > @@ -35,6 +35,8 @@ along with GCC; see the file COPYING3. > #define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX > #define OPTION_MASK_ISA_3DNOW_SET \ > (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET) > +#define OPTION_MASK_ISA_3DNOW_A_SET \ > + (OPTION_MASK_ISA_3DNOW_A | OPTION_MASK_ISA_3DNOW_SET) > > #define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE > #define OPTION_MASK_ISA_SSE2_SET \ > @@ -291,7 +293,17 @@ ix86_handle_option (struct gcc_options * > return true; > > case OPT_m3dnowa: > - return false; > + if (value) > + { > + opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_A_SET; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_SET; > + } > + else > + { > + opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_A_UNSET; > + opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_A_UNSET; > + } > + return true; > > case OPT_msse: > if (value) > --- gcc/doc/invoke.texi.jj 2017-02-16 12:00:36.000000000 +0100 > +++ gcc/doc/invoke.texi 2017-02-17 11:31:38.772731527 +0100 > @@ -1188,9 +1188,9 @@ See RS/6000 and PowerPC Options. > -mavx512bw -mavx512dq -mavx512ifma -mavx512vbmi -msha -maes @gol > -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma @gol > -mprefetchwt1 -mclflushopt -mxsavec -mxsaves @gol > --msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt @gol > --mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx @gol > --mclzero -mpku -mthreads @gol > +-msse4a -m3dnow -m3dnowa -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop @gol > +-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx @gol > +-mmwaitx -mclzero -mpku -mthreads @gol > -mms-bitfields -mno-align-stringops -minline-all-stringops @gol > -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol > -mmemcpy-strategy=@var{strategy} -mmemset-strategy=@var{strategy} @gol > @@ -25004,6 +25004,9 @@ preferred alignment to @option{-mpreferr > @itemx -m3dnow > @opindex m3dnow > @need 200 > +@itemx -m3dnowa > +@opindex m3dnowa > +@need 200 > @itemx -mpopcnt > @opindex mpopcnt > @need 200 > @@ -25053,7 +25056,7 @@ These switches enable the use of instruc > SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, > SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, > AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA AVX512VBMI, BMI, BMI2, FXSR, > -XSAVE, XSAVEOPT, LZCNT, RTM, MPX, MWAITX, PKU or 3DNow!@: > +XSAVE, XSAVEOPT, LZCNT, RTM, MPX, MWAITX, PKU, 3DNow!@: or enhanced 3DNow!@: > extended instruction sets. Each has a corresponding @option{-mno-} option > to disable use of these instructions. > > --- gcc/doc/extend.texi.jj 2017-02-13 12:20:51.000000000 +0100 > +++ gcc/doc/extend.texi 2017-02-17 12:02:22.195884349 +0100 > @@ -19513,9 +19513,8 @@ v2si __builtin_ia32_psradi (v2si, int) > @end smallexample > > The following built-in functions are made available either with > -@option{-msse}, or with a combination of @option{-m3dnow} and > -@option{-march=athlon}. All of them generate the machine > -instruction that is part of the name. > +@option{-msse}, or with @option{-m3dnowa}. All of them generate > +the machine instruction that is part of the name. > > @smallexample > v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) > @@ -20615,9 +20614,8 @@ v2sf __builtin_ia32_pi2fd (v2si) > v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) > @end smallexample > > -The following built-in functions are available when both @option{-m3dnow} > -and @option{-march=athlon} are used. All of them generate the machine > -instruction that is part of the name. > +The following built-in functions are available when @option{-m3dnowa} is > used. > +All of them generate the machine instruction that is part of the name. > > @smallexample > v2si __builtin_ia32_pf2iw (v2sf) > --- gcc/testsuite/gcc.target/i386/3dnowA-3.c.jj 2017-02-17 11:36:17.772950662 > +0100 > +++ gcc/testsuite/gcc.target/i386/3dnowA-3.c 2017-02-17 11:36:07.987083275 > +0100 > @@ -0,0 +1,10 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O0 -Werror-implicit-function-declaration -m3dnowa" } */ > + > +#include <mm3dnow.h> > + > +__m64 > +foo (__m64 x, __m64 y) > +{ > + return _m_pfnacc (x, y); > +} > > Jakub