about summary refs log tree commit diff
path: root/sysdeps/x86_64/multiarch/x86-avx-rtm-vecs.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-avx-rtm-vecs.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-avx-rtm-vecs.h')
-rw-r--r--sysdeps/x86_64/multiarch/x86-avx-rtm-vecs.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/sysdeps/x86_64/multiarch/x86-avx-rtm-vecs.h b/sysdeps/x86_64/multiarch/x86-avx-rtm-vecs.h
new file mode 100644
index 0000000000..0b326c8a70
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/x86-avx-rtm-vecs.h
@@ -0,0 +1,35 @@
+/* Common config for AVX-RTM 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_RTM_VECS_H
+#define _X86_AVX_RTM_VECS_H			1
+
+#define COND_VZEROUPPER			COND_VZEROUPPER_XTEST
+#define ZERO_UPPER_VEC_REGISTERS_RETURN	\
+	ZERO_UPPER_VEC_REGISTERS_RETURN_XTEST
+
+#define VZEROUPPER_RETURN		jmp L(return_vzeroupper)
+
+#define USE_WITH_RTM			1
+#include "x86-avx-vecs.h"
+
+#undef SECTION
+#define SECTION(p)				p##.avx.rtm
+
+#endif