about summary refs log tree commit diff
path: root/sysdeps/x86_64/multiarch/x86-evex-vecs-common.h
diff options
context:
space:
mode:
authorNoah Goldstein <goldstein.w.n@gmail.com>2022-10-14 22:00:25 -0500
committerNoah Goldstein <goldstein.w.n@gmail.com>2022-10-14 21:21:58 -0700
commit52ab7604db35e0421bc3d2468a3af52b2c513a7b (patch)
tree2763b19062339644b3a747ad81ca38d253bd8ce7 /sysdeps/x86_64/multiarch/x86-evex-vecs-common.h
parent2c42257314536b94cc8d52edede86e94e98c1436 (diff)
downloadglibc-52ab7604db35e0421bc3d2468a3af52b2c513a7b.tar.gz
glibc-52ab7604db35e0421bc3d2468a3af52b2c513a7b.tar.xz
glibc-52ab7604db35e0421bc3d2468a3af52b2c513a7b.zip
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
Diffstat (limited to 'sysdeps/x86_64/multiarch/x86-evex-vecs-common.h')
-rw-r--r--sysdeps/x86_64/multiarch/x86-evex-vecs-common.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/sysdeps/x86_64/multiarch/x86-evex-vecs-common.h b/sysdeps/x86_64/multiarch/x86-evex-vecs-common.h
new file mode 100644
index 0000000000..f331e9d8ec
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/x86-evex-vecs-common.h
@@ -0,0 +1,39 @@
+/* Common config for EVEX256 and EVEX512 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_EVEX_VECS_COMMON_H
+#define _X86_EVEX_VECS_COMMON_H			1
+
+#include "x86-vec-macros.h"
+
+/* 6-byte mov instructions with EVEX.  */
+#define MOV_SIZE			6
+/* No vzeroupper needed.  */
+#define RET_SIZE			1
+#define VZEROUPPER
+
+#define VMOVU				vmovdqu64
+#define VMOVA				vmovdqa64
+#define VMOVNT				vmovntdq
+
+#define VMM_128				VMM_hi_xmm
+#define VMM_256				VMM_hi_ymm
+#define VMM_512				VMM_hi_zmm
+
+#endif