From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38798) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlZkp-0000o6-6x for qemu-devel@nongnu.org; Mon, 12 Oct 2015 05:50:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZlZkl-0004ng-68 for qemu-devel@nongnu.org; Mon, 12 Oct 2015 05:50:51 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42898) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlZkl-0004nY-11 for qemu-devel@nongnu.org; Mon, 12 Oct 2015 05:50:47 -0400 From: Paolo Bonzini Date: Mon, 12 Oct 2015 11:50:42 +0200 Message-Id: <1444643442-8487-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH] target-i386: fix pcmpxstrx equal-ordered (strstr) mode List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: fweimer@redhat.com, Eduardo Habkost , Richard Henderson In this mode, referring an invalid element of the source forces the result to false (table 4-7, last column) but referring an invalid element of the destination forces the result to true, so the outer loop should still be run even if some elements of the destination will be invalid. They will be culled in the inner loop, which correctly bounds "i" to validd. This fix tst_strstr in glibc 2.17. Reported-by: Florian Weimer Cc: Richard Henderson Cc: Eduardo Habkost Signed-off-by: Paolo Bonzini --- target-i386/ops_sse.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target-i386/ops_sse.h b/target-i386/ops_sse.h index 7aa693a..268f3e1 100644 --- a/target-i386/ops_sse.h +++ b/target-i386/ops_sse.h @@ -2037,7 +2037,7 @@ static inline unsigned pcmpxstrx(CPUX86State *env, Reg *d, Reg *s, } break; case 3: - for (j = valids - validd; j >= 0; j--) { + for (j = valids; j >= 0; j--) { res <<= 1; v = 1; for (i = MIN(upper - j, validd); i >= 0; i--) { -- 2.5.0