summaryrefslogtreecommitdiff
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