[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to transl
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to translate_insn |
Date: |
Fri, 7 Jul 2017 05:46:19 -1000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
On 07/07/2017 01:18 AM, Lluís Vilanova wrote:
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index 9c870f6d07..586a01a2de 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -11244,6 +11244,9 @@ static void
aarch64_trblock_init_disas_context(DisasContextBase *dcbase,
dc-> is_ldex = false;
dc-> ss_same_el = (arm_debug_target_el(env) == dc->current_el);
+ dc->next_page_start =
+ (dc->base.pc_first & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
I think a better solution for a fixed-length ISA is to adjust max_insns. Perhaps
the init_disas_context hook should be able to modify it?
ARM has the thumb instructions, so it really isn't a fixed-length ISA.
From the filename above we're talking about AArch64 here.
Whcih is most definitely a fixed-width ISA.
That said, even for AArch32 we know by the TB flags whether or not we're going
to be generating arm or thumb code. I think that these hooks will allow arm
and thumb mode to finally be split apart cleanly, instead of the tangle that
they are now.
I see arm's gen_intermediate_code eventually looking like
const TranslatorOps *ops = &arm_translator_ops;
if (ARM_TBFLAG_THUMB(tb->flags)) {
ops = &thumb_translator_ops;
}
#ifdef TARGET_AARCH64
if (ARM_TBFLAG_AARCH64_STATE(tb->flags)) {
ops = &aarch64_translator_ops;
}
#endif
translator_loop(ops, &dc.base, cpu, tb);
There would certainly be some amount of shared code, but it would also allow
quite a few of the existing dc->thumb checks to be eliminated.
And, while I'm thinking of it -- why is the init_globals hook separate? There's
nothing in between the two hook calls, and the more modern target front ends
won't need it.
You mean merging init_disas_context and init_globals? I wanted to keep
semantically different code on separate hooks, but I can pull the init_globals
code into init_disas_context (hoping that as targets get modernized, they won't
initialize any global there).
I suppose you can leave the two hooks separate for now. It doesn't hurt, and
it's kind of a reminder of things that need cleaning up.
I do wonder if we should provide a generic empty hook, so that a target that
does not need a particular hook need not define an empty function. It could
just put e.g. "translator_noop" into the structure. Ok, maybe a better name
than that...
r~
- Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to translate_insn, Richard Henderson, 2017/07/01
- Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to translate_insn, Lluís Vilanova, 2017/07/07
- Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to translate_insn,
Richard Henderson <=
- Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to translate_insn, Lluís Vilanova, 2017/07/07
- Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to translate_insn, Richard Henderson, 2017/07/07
- Re: [Qemu-devel] [PATCH v11 24/29] target/arm: [tcg, a64] Port to translate_insn, Lluís Vilanova, 2017/07/11