qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: Aurelien Jarno <aurelien@aurel32.net>,
	Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] tcg-i386: Use MOVBE if available
Date: Sun, 22 Dec 2013 08:38:40 -0800	[thread overview]
Message-ID: <52B71590.2020509@twiddle.net> (raw)
In-Reply-To: <20131222122450.GB4326@ohm.rr44.fr>

On 12/22/2013 04:24 AM, Aurelien Jarno wrote:
> On Sat, Dec 21, 2013 at 03:08:21PM +0100, Paolo Bonzini wrote:
>> Il 21/12/2013 00:00, Richard Henderson ha scritto:
>>> +        if (real_bswap && have_movbe) {
>>> +            tcg_out_modrm_offset(s, OPC_MOVBE_GyMy + P_DATA16 + seg,
>>> +                                 datalo, base, ofs);
>>> +            tcg_out_ext16u(s, datalo, datalo);
>>
>> Do partial register stalls still exist on Atom and Haswell?  I don't
>> remember exactly what you had to do to prevent them, but IIRC you first
>> moved zero to the register and then overwrote the the low 16 bits.
> 
> Note that for unsigned 16-bit load you can do either movzw + bswap or 
> movbe + movzw.

>From the July 2013 Intel Opt Ref Manual,

"Delay of partial register stall is small in ... Intel Core and NetBurst
microarchitectures".  And for Atom "partial register access does not cause
additional delay".

While I agree with Paulo that xor + movbe is probably technically the best, one
has to check for output register overlap and have a fallback.  Thus I think we
can just discard that idea.

As for movzw + bswap, that forces a partial register stall on subsequent 32-bit
access to the value, while movbe + movzw does not.  In the later case we refer
to the unmerged portion of the register in the movzw.

But the optimization note suggests that it shouldn't matter much either way.


r~

  parent reply	other threads:[~2013-12-22 16:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-20 23:00 [Qemu-devel] [PATCH] tcg-i386: Use MOVBE if available Richard Henderson
2013-12-21 14:08 ` Paolo Bonzini
2013-12-22 12:24   ` Aurelien Jarno
2013-12-22 13:39     ` Paolo Bonzini
2013-12-22 16:38     ` Richard Henderson [this message]
2013-12-22 20:03 ` Aurelien Jarno

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=52B71590.2020509@twiddle.net \
    --to=rth@twiddle.net \
    --cc=aurelien@aurel32.net \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).