diff options
Diffstat (limited to 'sysdeps/x86_64/wcslen.S')
-rw-r--r-- | sysdeps/x86_64/wcslen.S | 73 |
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 |