This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[committed, PATCH] Force 32-bit displacement in memset-vec-unaligned-erms.S
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Tue, 5 Apr 2016 05:22:58 -0700
- Subject: [committed, PATCH] Force 32-bit displacement in memset-vec-unaligned-erms.S
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
* sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S: Force
32-bit displacement to avoid long nop between instructions.
---
sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S b/sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
index 9383517..fe0f745 100644
--- a/sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
+++ b/sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
@@ -159,10 +159,23 @@ L(return):
.p2align 4
L(loop_start):
leaq (VEC_SIZE * 4)(%rdi), %rcx
+# if VEC_SIZE == 32 || VEC_SIZE == 64
+ /* Force 32-bit displacement to avoid long nop between
+ instructions. */
+ VMOVU.d32 %VEC(0), (%rdi)
+# else
VMOVU %VEC(0), (%rdi)
+# endif
andq $-(VEC_SIZE * 4), %rcx
+# if VEC_SIZE == 32
+ /* Force 32-bit displacement to avoid long nop between
+ instructions. */
+ VMOVU.d32 %VEC(0), -VEC_SIZE(%rdi,%rdx)
+ VMOVU.d32 %VEC(0), VEC_SIZE(%rdi)
+# else
VMOVU %VEC(0), -VEC_SIZE(%rdi,%rdx)
VMOVU %VEC(0), VEC_SIZE(%rdi)
+# endif
VMOVU %VEC(0), -(VEC_SIZE * 2)(%rdi,%rdx)
VMOVU %VEC(0), (VEC_SIZE * 2)(%rdi)
VMOVU %VEC(0), -(VEC_SIZE * 3)(%rdi,%rdx)
--
2.5.5