qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v2 41/60] target-i386: Create gen_lea_v_seg
Date: Thu, 26 Dec 2013 11:31:06 -0800	[thread overview]
Message-ID: <52BC83FA.2070704@twiddle.net> (raw)
In-Reply-To: <CAFEAcA9mhtpgJoc3MDTQd6-ar_-HRB4ZexiV-cn9AJKqdp_dDw@mail.gmail.com>

On 12/26/2013 10:38 AM, Peter Maydell wrote:
> The old MO_16 code for gen_string_movl* doesn't care
> about s->addseg, and always performs an add of a segment.
> This new code might stop without doing the addition.

The only time s->addseg will be false in 16-bit mode is during translation of
LEA.  I do need the addseg check there for LEA cleanup, but this change should
not affect gen_string_movl.

>> +        a0 = cpu_A0;
> 
> This is also pretty confusing -- we have a parameter "a0"
> which isn't the same thing as cpu_A0, and in this case
> statement sometimes cpu_A0 is the result we're calculating
> based on a0, and sometimes we don't touch cpu_A0 at
> all and rely on following code to set it up, and in this case
> we use cpu_A0 as a random temporary and then assign
> it to a0...

While I can agree that a0 vs cpu_A0 might be a tad confusing, a0 is always the
current input address, and cpu_A0 is always the output address.

I disagree with the characterization "random temporary".  Using the output as a
temporary in computing the output is totally sensible, given that our most
popular host platform is 2-address.

> I also find the handling of "ovr_seg < 0" pretty hard to read
> in the new code -- the code for "we don't need to add a
> segment" and "we do need to add a segment" is all mixed
> up together, half the cases in the switch statement return
> early and half fall out to maybe go through the code below,
> and the code below is only for the "adding a segment" part.
> 
> I suspect it would be clearer if it was written:
> 
>    if (ovr_seg < 0 &&
>       (s->aflag == MO_16 || (s->aflag == MO_32 && s->addseg))) {
>       ovr_seg = def_seg;
>    }
>    if (ovr_seg < 0) {
>        /* generate code for no segment add */
>    } else {
>        /* generate code for segment add */
>    }

Really?  I honestly find that harder to read, because that first condition is
so complicated.  Better to have it split out in the swtch statement where we're
already doing special things for M_16, M_32, and M_64.


r~

  reply	other threads:[~2013-12-26 19:31 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-29  2:59 [Qemu-devel] [PATCH v2 00/60] target-i386 improvements Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 01/60] exec: Delay CPU_LOG_TB_CPU until we actually execute a TB Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 02/60] target-i386: Push DisasContext into load/store helpers Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 03/60] target-i386: Stop encoding DisasContext.mem_index Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 04/60] target-i386: Use new tcg_gen_qemu_ld_* helpers Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 05/60] target-i386: Use new tcg_gen_qemu_st_* helpers Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 06/60] target-i386: Replace OT_* constants with MO_* constants Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 07/60] target-i386: Remove gen_op_ld_T0_A0 Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 08/60] target-i386: Remove gen_op_ldu_T0_A0 Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 09/60] target-i386: Remove gen_op_ld_T1_A0 Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 10/60] target-i386: Remove gen_op_lds_T0_A0 Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 11/60] target-i386: Introduce gen_op_st_rm_T0_A0 Richard Henderson
2013-11-29  2:59 ` [Qemu-devel] [PATCH v2 12/60] target-i386: Remove gen_op_st_T0_A0 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 13/60] target-i386: Remove gen_op_st_T1_A0 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 14/60] target-i386: Fix typo in gen_push_T1 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 15/60] target-i386: Tidy mov[sz][bw] Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 16/60] target-i386: Tidy movsl Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 17/60] target-i386: Remove unused arguments to gen_lea_modrm Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 18/60] target-i386: Use MO_BE for movbe Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 19/60] target-i386: Tidy gen_op_mov_TN_reg+tcg_gen_trunc_tl_i32 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 20/60] target-i386: Tidy load + truncate Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 21/60] target-i386: Tidy extend + store Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 22/60] target-i386: Tidy extend + move Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 23/60] target-i386: Remove gen_op_movl_T0_0 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 24/60] target-i386: Remove gen_op_movl_T0_im* Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 25/60] " Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 26/60] target-i386: Remove gen_op_mov*_A0_im Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 27/60] target-i386: Remove gen_movtl_T*_im Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 28/60] target-i386: Remove gen_op_andl_T0_ffff Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 29/60] target-i386: Remove gen_op_andl_T0_im Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 30/60] target-i386: Remove gen_op_movl_T0_T1 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 31/60] target-i386: Remove gen_op_andl_A0_ffff Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 32/60] target-i386: Use TCGMemOp for 'ot' variables Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 33/60] target-i386: Change gen_op_add_reg_* size parameter to TCGMemOp Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 34/60] target-i386: Change gen_op_j*z_ecx " Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 35/60] target-i386: Change aflag " Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 36/60] target-i386: Change gen_op_mov_reg_A0 size parameter " Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 37/60] target-i386: Change dflag " Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 38/60] target-i386: Tidy addr16 code in gen_lea_modrm Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 39/60] target-i386: Combine gen_push_T* into gen_push_v Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 40/60] target_i386: Clean up gen_pop_T0 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 41/60] target-i386: Create gen_lea_v_seg Richard Henderson
2013-12-26 18:38   ` Peter Maydell
2013-12-26 19:31     ` Richard Henderson [this message]
2013-12-26 21:27       ` Peter Maydell
2013-12-26 21:31         ` Peter Maydell
2013-12-27 14:49         ` Richard Henderson
2013-12-27 16:06           ` Peter Maydell
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 42/60] target-i386: Use gen_lea_v_seg in gen_lea_modrm Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 43/60] target-i386: Use gen_lea_v_seg in stack subroutines Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 44/60] target-i386: Tidy cpu_regs initialization Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 45/60] target-i386: Access segs via TCG registers Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 46/60] target-i386: Use gen_lea_v_seg in pusha/popa Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 47/60] target-i386: Rewrite gen_enter inline Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 48/60] target-i386: Introduce mo_stacksize Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 49/60] target-i386: Rewrite leave Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 50/60] target-i386: Remove gen_op_mov_reg_T0 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 51/60] target-i386: Remove gen_op_mov_reg_T1 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 52/60] target-i386: Remove gen_op_addl_T0_T1 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 53/60] target-i386: Remove gen_op_mov_TN_reg Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 54/60] target-i386: Remove gen_op_mov_reg_A0 Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 55/60] target-i386: Remove gen_op_movl_A0_reg Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 56/60] target-i386: Tidy gen_add_A0_im Richard Henderson
2013-12-26 18:58   ` Peter Maydell
2013-12-26 19:10     ` Richard Henderson
2013-12-26 22:34       ` Peter Maydell
2013-12-27 15:17         ` Richard Henderson
2013-12-27 15:32           ` Peter Maydell
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 57/60] target-i386: Tidy some size computation Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 58/60] target-i386: Rename gen_op_jmp_T0 to gen_op_jmp_v Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 59/60] target-i386: Tidy ljmp Richard Henderson
2013-11-29  3:00 ` [Qemu-devel] [PATCH v2 60/60] target-i386: Deconstruct the cpu_T array Richard Henderson
2013-12-23 20:15 ` [Qemu-devel] [PATCH v2 00/60] target-i386 improvements Richard Henderson
2013-12-23 22:54   ` Peter Maydell
2013-12-26 19:03     ` Peter Maydell

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=52BC83FA.2070704@twiddle.net \
    --to=rth@twiddle.net \
    --cc=peter.maydell@linaro.org \
    --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).