glibc/sysdeps/x86_64/multiarch/x86-avx-vecs.h
Noah Goldstein 52ab7604db x86: Update VEC macros to complete API for evex/evex512 impls
1) Copy so that backport will be easier.
2) Make section only define if there is not a previous definition
3) Add `VEC_lo` definition for proper reg-width but in the
   ymm/zmm0-15 range.
4) Add macros for accessing GPRs based on VEC_SIZE
        This is to make it easier to do think like:
        ```
            vpcmpb %VEC(0), %VEC(1), %k0
            kmov{d|q} %k0, %{eax|rax}
            test %{eax|rax}
        ```
        It adds macro s.t any GPR can get the proper width with:
            `V{upcase_GPR_name}`

        and any mask insn can get the proper width with:
            `{upcase_mask_insn_without_postfix}`

This commit does not change libc.so

Tested build on x86-64
2022-10-14 21:21:58 -07:00

48 lines
1.4 KiB
C

/* Common config for AVX VECs
All versions must be listed in ifunc-impl-list.c.
Copyright (C) 2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _X86_AVX_VECS_H
#define _X86_AVX_VECS_H 1
#ifdef VEC_SIZE
# error "Multiple VEC configs included!"
#endif
#define VEC_SIZE 32
#include "x86-vec-macros.h"
#define USE_WITH_AVX 1
#define SECTION(p) p##.avx
/* 4-byte mov instructions with AVX2. */
#define MOV_SIZE 4
/* 1 (ret) + 3 (vzeroupper). */
#define RET_SIZE 4
#define VZEROUPPER vzeroupper
#define VMOVU vmovdqu
#define VMOVA vmovdqa
#define VMOVNT vmovntdq
/* Often need to access xmm portion. */
#define VMM_128 VMM_any_xmm
#define VMM VMM_any_ymm
#endif