about summary refs log tree commit diff
path: root/sysdeps/x86_64/wcslen.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/x86_64/wcslen.S')
-rw-r--r--sysdeps/x86_64/wcslen.S73
1 files changed, 73 insertions, 0 deletions
diff --git a/sysdeps/x86_64/wcslen.S b/sysdeps/x86_64/wcslen.S
index 5927352437..a7d944ff75 100644
--- a/sysdeps/x86_64/wcslen.S
+++ b/sysdeps/x86_64/wcslen.S
@@ -21,20 +21,45 @@
 
 	.text
 ENTRY (__wcslen)
+#ifdef __CHKP__
+	bndcl	(%rdi), %bnd0
+	bndcu	(%rdi), %bnd0
+#endif
 	cmpl	$0, (%rdi)
 	jz	L(exit_tail0)
+#ifdef __CHKP__
+	bndcu	4(%rdi), %bnd0
+#endif
 	cmpl	$0, 4(%rdi)
 	jz	L(exit_tail1)
+#ifdef __CHKP__
+	bndcu	8(%rdi), %bnd0
+#endif
 	cmpl	$0, 8(%rdi)
 	jz	L(exit_tail2)
+#ifdef __CHKP__
+	bndcu	12(%rdi), %bnd0
+#endif
 	cmpl	$0, 12(%rdi)
 	jz	L(exit_tail3)
+#ifdef __CHKP__
+	bndcu	16(%rdi), %bnd0
+#endif
 	cmpl	$0, 16(%rdi)
 	jz	L(exit_tail4)
+#ifdef __CHKP__
+	bndcu	20(%rdi), %bnd0
+#endif
 	cmpl	$0, 20(%rdi)
 	jz	L(exit_tail5)
+#ifdef __CHKP__
+	bndcu	24(%rdi), %bnd0
+#endif
 	cmpl	$0, 24(%rdi)
 	jz	L(exit_tail6)
+#ifdef __CHKP__
+	bndcu	28(%rdi), %bnd0
+#endif
 	cmpl	$0, 28(%rdi)
 	jz	L(exit_tail7)
 
@@ -44,6 +69,9 @@ ENTRY (__wcslen)
 	lea	16(%rdi), %rcx
 	and	$-16, %rax
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm0
 	pmovmskb %xmm0, %edx
 	pxor	%xmm1, %xmm1
@@ -51,6 +79,9 @@ ENTRY (__wcslen)
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm1
 	pmovmskb %xmm1, %edx
 	pxor	%xmm2, %xmm2
@@ -58,6 +89,9 @@ ENTRY (__wcslen)
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm2
 	pmovmskb %xmm2, %edx
 	pxor	%xmm3, %xmm3
@@ -65,54 +99,81 @@ ENTRY (__wcslen)
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm3
 	pmovmskb %xmm3, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm0
 	pmovmskb %xmm0, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm1
 	pmovmskb %xmm1, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm2
 	pmovmskb %xmm2, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm3
 	pmovmskb %xmm3, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm0
 	pmovmskb %xmm0, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm1
 	pmovmskb %xmm1, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm2
 	pmovmskb %xmm2, %edx
 	test	%edx, %edx
 	lea	16(%rax), %rax
 	jnz	L(exit)
 
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	pcmpeqd	(%rax), %xmm3
 	pmovmskb %xmm3, %edx
 	test	%edx, %edx
@@ -123,6 +184,9 @@ ENTRY (__wcslen)
 
 	.p2align 4
 L(aligned_64_loop):
+#ifdef __CHKP__
+	bndcu	(%rax), %bnd0
+#endif
 	movaps	(%rax), %xmm0
 	movaps	16(%rax), %xmm1
 	movaps	32(%rax), %xmm2
@@ -173,6 +237,9 @@ L(exit):
 	mov	%dl, %cl
 	and	$15, %cl
 	jz	L(exit_1)
+#ifdef __CHKP__
+	bndcu	-1(%rdi, %rax, 4), %bnd0
+#endif
 	ret
 
 	.p2align 4
@@ -181,11 +248,17 @@ L(exit_high):
 	and	$15, %ch
 	jz	L(exit_3)
 	add	$2, %rax
+#ifdef __CHKP__
+	bndcu	-1(%rdi, %rax, 4), %bnd0
+#endif
 	ret
 
 	.p2align 4
 L(exit_1):
 	add	$1, %rax
+#ifdef __CHKP__
+	bndcu	-1(%rdi, %rax, 4), %bnd0
+#endif
 	ret
 
 	.p2align 4