From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 2/3] KVM: x86 emulator: move string instruction completion check into separate function Date: Tue, 24 Aug 2010 16:24:16 +0300 Message-ID: <4C73C800.3050808@redhat.com> References: <1282649455-9463-1-git-send-email-gleb@redhat.com> <1282649455-9463-2-git-send-email-gleb@redhat.com> <4C73C4F8.9030809@redhat.com> <20100824132033.GB10499@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: mtosatti@redhat.com, kvm@vger.kernel.org To: Gleb Natapov Return-path: Received: from mx1.redhat.com ([209.132.183.28]:43704 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753138Ab0HXNYS (ORCPT ); Tue, 24 Aug 2010 09:24:18 -0400 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o7ODOI4x006912 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 24 Aug 2010 09:24:18 -0400 Received: from cleopatra.tlv.redhat.com (cleopatra.tlv.redhat.com [10.35.255.11]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o7ODOHxI000303 for ; Tue, 24 Aug 2010 09:24:17 -0400 In-Reply-To: <20100824132033.GB10499@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 08/24/2010 04:20 PM, Gleb Natapov wrote: >> >>> +{ >>> + struct decode_cache *c =3D&ctxt->decode; >>> + >>> + /* All REP prefixes have the same first termination condition */ >>> + if (address_mask(c, c->regs[VCPU_REGS_RCX]) =3D=3D 0) >>> + return true; >> This is checked during the beginning of the instruction, not after >> completion. Why is it here? it will just be duplicated. >> > SDM describes REP instruction algorithm this way: > > WHILE CountReg =E2=89=A0 0 > DO > Service pending interrupts (if any); > Execute associated string instruction; > CountReg =E2=86=90 (CountReg =E2=80=93 1); > IF CountReg =3D 0 > THEN exit WHILE loop; FI; > IF (Repeat prefix is REPZ or REPE) and (ZF =3D 0) > or (Repeat prefix is REPNZ or REPNE) and (ZF =3D 1) > THEN exit WHILE loop; FI; > OD; > > So CountReg is checked at the beginning and after each iteration. The second check is meaningless (and ZF checks should be qualified with= =20 the actual instruction). > Practically it will save us one return to a guest and exit back > to emulator at the end of rep instruction (not a big deal). Not even that - if we reenter to the beginning of the rep instruction=20 the cpu will skip over it without exiting (unless in big real mode with= =20 eigs=3D1). --=20 error compiling committee.c: too many arguments to function