From: "Mihai Donțu" <mdontu@bitdefender.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xen.org
Subject: Re: [PATCH v3 1/3] x86/emulate: add support for {, v}movq xmm, xmm/m64
Date: Tue, 2 Aug 2016 11:13:36 +0300 [thread overview]
Message-ID: <20160802111336.56ac3f64@bitdefender.com> (raw)
In-Reply-To: <57A0578A020000780010192D@prv-mh.provo.novell.com>
On Tuesday 02 August 2016 00:19:22 Jan Beulich wrote:
> > > > On 02.08.16 at 01:19, <mdontu@bitdefender.com> wrote:
> > > > @@ -4412,6 +4412,7 @@ x86_emulate(
> > > > case 0x7f: /* movq mm,mm/m64 */
> > > > /* {,v}movdq{a,u} xmm,xmm/m128 */
> > > > /* vmovdq{a,u} ymm,ymm/m256 */
> > > > + case 0xd6: /* {,v}movq xmm,xmm/m64 */
> > > > {
> > > > uint8_t *buf = get_stub(stub);
> > > > struct fpu_insn_ctxt fic = { .insn_bytes = 5 };
> > > > @@ -4429,9 +4430,9 @@ x86_emulate(
> > > > case vex_66:
> > > > case vex_f3:
> > > > host_and_vcpu_must_have(sse2);
> > > > - buf[0] = 0x66; /* movdqa */
> > > > + buf[0] = 0x66; /* SSE */
> > >
> > > The comment change here indicates a problem: So far it was indicating
> > > that despite the possible F3 prefix (movdqu) we encode a 66 one
> > > (movdqa). Opcode D6 prefixed with F3, however, is movq2dq, which
> > > you then either don't emulate correctly, or if it happens to be
> > > emulated correctly you should include in the comment accompanying
> > > the case label. And its AVX counterpart should then produce #UD.
> >
> > I fiddled with this for a while and the attached patch (adjusted)
> > appears to be doing the right thing: ie. movq2dq gets emulated
> > correctly too. copy_REX_VEX() does not work OK with movq2dq, but it
> > looked easy to single out this case.
>
> Except that you can't really avoid it (see below). Without you being
> more explicit I also can't tell what it is that doesn't work right in that
> case.
Sorry about that. In x86_emulate(), after buf[0] == 0x66 and
copy_REX_VEX():
f3 0f d6 d1 movq2dq %mm1,%xmm2
becomes:
66 40 0f d6 d1 rex movq %xmm2,%xmm1
Now that I slept over it, I can see it's not really a problem with
copy_REX_VEX().
> > All tests pass, including for {,v}movq xmm/m64 and movq2dq. There does
> > not appear to be an AVX variant for the latter, or I'm not reading the
> > Intel SDM right (or binutils' as is lying to me).
>
> Well, that's what I said earlier on (still visible above), and what you
> still fail to deal with.
>
> > @@ -4469,7 +4471,11 @@ x86_emulate(
> > }
> > if ( !rc )
> > {
> > - copy_REX_VEX(buf, rex_prefix, vex);
> > + /* try to preserve the mandatory prefix for movq2dq */
> > + if ( !rex_prefix && vex.opcx == vex_none && vex.pfx == vex_f3 )
> > + buf[0] = 0xf3;
> > + else
> > + copy_REX_VEX(buf, rex_prefix, vex);
>
> So what about a movq2dq having a REX prefix to encode XMM8..15
> for one or both of its operands? The writing of the F3 prefix really
> needs to go elsewhere - probably the best place is where the 66
> one gets written unconditionally right now. And afaict then
> copy_REX_VEX() will work fine here too.
--
Mihai DONȚU
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
prev parent reply other threads:[~2016-08-02 8:13 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-01 2:52 [PATCH v3 1/3] x86/emulate: add support for {, v}movq xmm, xmm/m64 Mihai Donțu
2016-08-01 2:52 ` [PATCH v3 2/3] x86/emulate: add support of emulating SSE2 instruction {, v}movd mm, r32/m32 and {, v}movq mm, r64 Mihai Donțu
2016-08-01 9:52 ` Andrew Cooper
2016-08-01 12:53 ` Mihai Donțu
2016-08-01 12:56 ` Mihai Donțu
2016-08-01 12:57 ` Andrew Cooper
2016-08-01 12:59 ` Jan Beulich
2016-08-01 13:28 ` Mihai Donțu
2016-08-01 13:43 ` Jan Beulich
2016-08-01 14:48 ` Mihai Donțu
2016-08-01 14:53 ` Andrew Cooper
2016-08-01 15:10 ` Mihai Donțu
2016-08-01 14:55 ` Mihai Donțu
2016-08-01 14:59 ` Jan Beulich
2016-08-01 15:01 ` Andrew Cooper
2016-08-01 14:56 ` Jan Beulich
2016-08-01 13:38 ` Jan Beulich
2016-08-01 2:52 ` [PATCH v3 3/3] x86/emulate: added tests for {, v}movd mm, r32/m32 and {, v}movq xmm, r64/m64 Mihai Donțu
2016-08-01 9:54 ` Andrew Cooper
2016-08-01 12:46 ` Mihai Donțu
2016-08-01 9:18 ` [PATCH v3 1/3] x86/emulate: add support for {, v}movq xmm, xmm/m64 Andrew Cooper
2016-08-01 13:19 ` Jan Beulich
2016-08-01 13:25 ` Mihai Donțu
2016-08-01 23:19 ` Mihai Donțu
2016-08-02 6:19 ` Jan Beulich
2016-08-02 8:13 ` Mihai Donțu [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160802111336.56ac3f64@bitdefender.com \
--to=mdontu@bitdefender.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.