diff options
author | Noah Goldstein <goldstein.w.n@gmail.com> | 2021-12-03 15:29:25 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2021-12-03 21:14:11 -0800 |
commit | 4df1fa6ddc8925a75f3da644d5da3bb16eb33f02 (patch) | |
tree | d21bb734dffee2cff4502c8d9383f31f8960d58e /sysdeps | |
parent | 23c77f60181eb549f11ec2f913b4270af29eee38 (diff) | |
download | glibc-4df1fa6ddc8925a75f3da644d5da3bb16eb33f02.tar glibc-4df1fa6ddc8925a75f3da644d5da3bb16eb33f02.tar.gz glibc-4df1fa6ddc8925a75f3da644d5da3bb16eb33f02.tar.bz2 glibc-4df1fa6ddc8925a75f3da644d5da3bb16eb33f02.zip |
x86-64: Use notl in EVEX strcmp [BZ #28646]
Must use notl %edi here as lower bits are for CHAR comparisons
potentially out of range thus can be 0 without indicating mismatch.
This fixes BZ #28646.
Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/x86_64/multiarch/strcmp-evex.S | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/sysdeps/x86_64/multiarch/strcmp-evex.S b/sysdeps/x86_64/multiarch/strcmp-evex.S index 0bea318abd..b68e1f7a1e 100644 --- a/sysdeps/x86_64/multiarch/strcmp-evex.S +++ b/sysdeps/x86_64/multiarch/strcmp-evex.S @@ -646,12 +646,13 @@ L(loop_cross_page): in YMM3 and 32 bytes at VEC_SIZE(%rdx, %r10). */ VPCMP $0, VEC_SIZE(%rdx, %r10), %YMM3, %k3{%k4} kmovd %k3, %edi + /* Must use notl %edi here as lower bits are for CHAR + comparisons potentially out of range thus can be 0 without + indicating mismatch. */ + notl %edi # ifdef USE_AS_WCSCMP /* Don't use subl since it is the upper 8 bits of EDI below. */ - notl %edi andl $0xff, %edi -# else - incl %edi # endif # ifdef USE_AS_WCSCMP @@ -733,12 +734,13 @@ L(loop_cross_page_2_vec): in YMM1 and 32 bytes at (VEC_SIZE * 3)(%rdx, %r10). */ VPCMP $0, (VEC_SIZE * 3)(%rdx, %r10), %YMM1, %k3{%k4} kmovd %k3, %edi + /* Must use notl %edi here as lower bits are for CHAR + comparisons potentially out of range thus can be 0 without + indicating mismatch. */ + notl %edi # ifdef USE_AS_WCSCMP /* Don't use subl since it is the upper 8 bits of EDI below. */ - notl %edi andl $0xff, %edi -# else - incl %edi # endif # ifdef USE_AS_WCSCMP |