about summary refs log tree commit diff
path: root/sysdeps/x86_64/multiarch/memmove-evex-unaligned-erms.S
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2021-03-05 06:46:08 -0800
committerH.J. Lu <hjl.tools@gmail.com>2022-01-27 12:47:19 -0800
commit5141ddbe3aace5c713d6e2c4260cd1646e54489b (patch)
tree704d4bbbd732c08513535ac6364ec27d8edbf39a /sysdeps/x86_64/multiarch/memmove-evex-unaligned-erms.S
parenta3a8109999f86bd7f968aa99c3fa7e2d3a7c6de8 (diff)
downloadglibc-5141ddbe3aace5c713d6e2c4260cd1646e54489b.tar.gz
glibc-5141ddbe3aace5c713d6e2c4260cd1646e54489b.tar.xz
glibc-5141ddbe3aace5c713d6e2c4260cd1646e54489b.zip
x86-64: Add memmove family functions with 256-bit EVEX
Update ifunc-memmove.h to select the function optimized with 256-bit EVEX
instructions using YMM16-YMM31 registers to avoid RTM abort with usable
AVX512VL since VZEROUPPER isn't needed at function exit.

(cherry picked from commit 63ad43566f7a25d140dc723598aeb441ad657eed)
Diffstat (limited to 'sysdeps/x86_64/multiarch/memmove-evex-unaligned-erms.S')
-rw-r--r--sysdeps/x86_64/multiarch/memmove-evex-unaligned-erms.S26
1 files changed, 26 insertions, 0 deletions
diff --git a/sysdeps/x86_64/multiarch/memmove-evex-unaligned-erms.S b/sysdeps/x86_64/multiarch/memmove-evex-unaligned-erms.S
new file mode 100644
index 0000000000..b879007e89
--- /dev/null
+++ b/sysdeps/x86_64/multiarch/memmove-evex-unaligned-erms.S
@@ -0,0 +1,26 @@
+#if IS_IN (libc)
+# define VEC_SIZE	32
+# define XMM0		xmm16
+# define XMM1		xmm17
+# define YMM0		ymm16
+# define YMM1		ymm17
+# define VEC0		ymm16
+# define VEC1		ymm17
+# define VEC2		ymm18
+# define VEC3		ymm19
+# define VEC4		ymm20
+# define VEC5		ymm21
+# define VEC6		ymm22
+# define VEC7		ymm23
+# define VEC8		ymm24
+# define VEC(i)		VEC##i
+# define VMOVNT		vmovntdq
+# define VMOVU		vmovdqu64
+# define VMOVA		vmovdqa64
+# define VZEROUPPER
+
+# define SECTION(p)		p##.evex
+# define MEMMOVE_SYMBOL(p,s)	p##_evex_##s
+
+# include "memmove-vec-unaligned-erms.S"
+#endif