On Mon, Mar 17, 2014 at 4:53 AM, Kirill Yukhin <kirill.yuk...@gmail.com> wrote: > Hello, > Patch in the bottom allows to use ymmXX and zmmXX > register names in inline asm statements as well as > in `register` variables definitions. > > New tests pass. > Bootstrap pass. > > Is it ok for trunk? > Do we need to backport it to 4.8? > > gcc/ > * config/i386/i386.h (ADDITIONAL_REGISTER_NAMES): Add > ymm and zmm register names. > > testsuite/ > * gcc.target/i386/avx-additional-reg-names.c: New. > * gcc.target/i386/avx512f-additional-reg-names.c: Ditto. > > -- > Thanks, K > > commit c3884af93c105115bc1e4d02fa824d24420c5bbf > Author: Kirill Yukhin <kirill.yuk...@intel.com> > Date: Mon Mar 17 14:56:06 2014 +0400 > > [AVX, AVX-512]. Extend ADDITIONAL_REGISTER_NAMES to Ymms and Zmms. > --- > gcc/config/i386/i386.h | 28 > +++++++++++++++++----- > .../gcc.target/i386/avx-additional-reg-names.c | 9 +++++++ > .../gcc.target/i386/avx512f-additional-reg-names.c | 9 +++++++ > 3 files changed, 40 insertions(+), 6 deletions(-) > > diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h > index c80878b..c5c1d58 100644 > --- a/gcc/config/i386/i386.h > +++ b/gcc/config/i386/i386.h > @@ -2016,12 +2016,28 @@ do { > \ > /* Table of additional register names to use in user input. */ > > #define ADDITIONAL_REGISTER_NAMES \ > -{ { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 }, \ > - { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 }, \ > - { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 }, \ > - { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 }, \ > - { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 }, \ > - { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 } } > +{ { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 }, \ > + { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 }, \ > + { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 }, \ > + { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 }, \ > + { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 }, \ > + { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 }, \ > + { "ymm0", 21}, { "ymm1", 22}, { "ymm2", 23}, { "ymm3", 24}, \ > + { "ymm4", 25}, { "ymm5", 26}, { "ymm6", 27}, { "ymm7", 28}, \ > + { "ymm8", 45}, { "ymm9", 46}, { "ymm10", 47}, { "ymm11", 48}, > \ > + { "ymm12", 49}, { "ymm13", 50}, { "ymm14", 51}, { "ymm15", 52}, \ > + { "ymm16", 53}, { "ymm17", 54}, { "ymm18", 55}, { "ymm19", 56}, \ > + { "ymm20", 57}, { "ymm21", 58}, { "ymm22", 59}, { "ymm23", 60}, \ > + { "ymm24", 61}, { "ymm25", 62}, { "ymm26", 63}, { "ymm27", 64}, \ > + { "ymm28", 65}, { "ymm29", 66}, { "ymm30", 67}, { "ymm31", 68}, \ > + { "zmm0", 21}, { "zmm1", 22}, { "zmm2", 23}, { "zmm3", 24}, \ > + { "zmm4", 25}, { "zmm5", 26}, { "zmm6", 27}, { "zmm7", 28}, \ > + { "zmm8", 45}, { "zmm9", 46}, { "zmm10", 47}, { "zmm11", 48}, > \ > + { "zmm12", 49}, { "zmm13", 50}, { "zmm14", 51}, { "zmm15", 52}, \ > + { "zmm16", 53}, { "zmm17", 54}, { "zmm18", 55}, { "zmm19", 56}, \ > + { "zmm20", 57}, { "zmm21", 58}, { "zmm22", 59}, { "zmm23", 60}, \ > + { "zmm24", 61}, { "zmm25", 62}, { "zmm26", 63}, { "zmm27", 64}, \ > + { "zmm28", 65}, { "zmm29", 66}, { "zmm30", 67}, { "zmm31", 68} } > > /* Note we are omitting these since currently I don't know how > to get gcc to use these, since they want the same but different > diff --git a/gcc/testsuite/gcc.target/i386/avx-additional-reg-names.c > b/gcc/testsuite/gcc.target/i386/avx-additional-reg-names.c > new file mode 100644 > index 0000000..d984bff > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/avx-additional-reg-names.c > @@ -0,0 +1,9 @@ > +/* { dg-do compile } */ > +/* { dg-options "-mavx" } */ > + > +void foo () > +{ > + register int ymm_var asm ("ymm4"); > + > + __asm__ __volatile__("vxorpd %%ymm0, %%ymm0, %%ymm7\n" : : : "ymm7" ); > +}
Doesn't GCC generate the same code with xmm? > diff --git a/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c > b/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c > new file mode 100644 > index 0000000..1bd428a > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/avx512f-additional-reg-names.c > @@ -0,0 +1,9 @@ > +/* { dg-do compile } */ > +/* { dg-options "-mavx512f" } */ > + > +void foo () > +{ > + register int zmm_var asm ("zmm9"); > + > + __asm__ __volatile__("vxorpd %%zmm0, %%zmm0, %%zmm7\n" : : : "zmm7" ); > +} Doesn't GCC generate the same code with xmm? -- H.J.