From 3c819146751bedbca46f5f089a786d7b5595baa8 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 2 Mar 2022 16:30:33 -0800 Subject: [PATCH] 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 (cherry picked from commit 4df1fa6ddc8925a75f3da644d5da3bb16eb33f02) --- sysdeps/x86_64/multiarch/strcmp-evex.S | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sysdeps/x86_64/multiarch/strcmp-evex.S b/sysdeps/x86_64/multiarch/strcmp-evex.S index 82f12ac8..6f5c4bf9 100644 --- a/sysdeps/x86_64/multiarch/strcmp-evex.S +++ b/sysdeps/x86_64/multiarch/strcmp-evex.S @@ -656,12 +656,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 @@ -743,12 +744,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 -- GitLab