From: Thiemo Seufer <ths@networkno.de>
To: Dirk Behme <dirk.behme@googlemail.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] MIPS instruction set configuration
Date: Mon, 3 Jul 2006 18:02:35 +0100 [thread overview]
Message-ID: <20060703170235.GB6625@networkno.de> (raw)
In-Reply-To: <44A927BD.4010206@gmail.com>
Dirk Behme wrote:
> Thiemo Seufer wrote:
> >Dirk Behme wrote:
> >>- As I understand it, MIPS III is an extension of MIPS II,
> >>MIPS IV is an extension of MIPS III etc. Therefore I used
> >>definitions for ISAx which include the smaller ones as well.
> >
> >Unfortunately it is not that simple. We have the upward-compatible ISAs:
>
> Mmph ;) What do you think about this: Looking at the recent
> MIPS code, we have a #define MIPS_USES_R4K_EXT and a #define
> MIPS_USES_FPU, nothing else. No splitting of the different
> ISAs and FPU instructions at all. And, looking at your
> explanation, it seems to be really tricky to do this
> splitting.
Somewhat complicated, but not really tricky. The OPCODE_IS_MEMBER
macro in binutils is IMHO roughly what we want to have in qemu at
some point (FPU instructions are already covered by the CP1 enabled
test). At least as long as that test doesn't slow down things too
much, for qemu this might be more relevant than for binutils.
> So I'll remove the MIPS_FEATURE_ISAx definitions
> from the patch (as mentioned, they were unused and only
> example), this will change nothing compared to the existing
> code.
>
> I'd prefer to make changes and improvements in small
> readable pieces without changing too much. One small
> improvement after the other, not a big 'perfect', but
> unreadable, patch. So the splitting of the ISA levels is
> something for an other patch.
I recommend to go for a sufficiently flexible interface first, and then
introduce it gradually in all appropriate places. A macro like:
MIPS_OPC(ISA, ASE, CPU)
which compares the arguments with the currently selected CPU emulation
and throws an RI exception if the feature doesn't exist:
...
case OPC_LD:
MIPS_OPC(MIPS-III, 0, 0);
...
break;
...
> improvement of this patch is to convert the compile time
> switches MIPS_USES_R4K_EXT, MIPS_USES_FPU to compile *and*
> runtime switches and to make machine runtime selectable (and
> introduce MIPS_FEATURE_NEC_xxx).
My point is those MIPS_USES_*/MIPS_FEATURE_* should be abstracted
better, that is, they should move in the implementation of the
MIPS_OPC macro.
This is not meant as an objection, I'm just drawing from experience
with binutils, where it took some iterations (and wasted effort) to
get it sufficiently right.
[snip]
> >>+void cpu_mips_set_model(CPUMIPSState *env, uint32_t id)
> >>+{
> >>+ env->CP0_PRid = id;
> >>+ env->features = 0;
> >>+ switch (id) {
> >>+ case MIPS_R4Kc:
> >>+ set_feature(env, MIPS_FEATURE_ISA3);
> >>+ set_feature(env, MIPS_FEATURE_R4K_EXT);
> >>+ set_feature(env, MIPS_FEATURE_FPU);
> >>+ break;
> >
> >
> >What's the meaning of "R4Kc" here?
> >- R4000: We don't have 64bit (ISA III) support.
> >- 4kc: This one has neither ISA III nor FPU.
>
> That's easy: I don't know ;) If you look at existing
> mips-defs.h it is the name of the only hardcoded machine we
> have at the moment. It enables R4K extensions and FPU. It
> was my goal to change no functionality, only to make first
> step to runtime selection. lI'll remove the ISA option.
Well, there is no CPU named "R4Kc". What qemu emulates today resembles
mostly a 4kc, that is a MIPS32R1 CPU which has no FPU support.
I figure you are going for emulation of a vr5400, a MIPS-IV CPU with
FPU and some additional multiply-add instructions.
What I hope to get done is support for MIPS32R2 including FPU, this is
close to a 24kf.
Thiemo
next prev parent reply other threads:[~2006-07-03 17:02 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-25 16:12 [Qemu-devel] Pending MIPS patches Dirk Behme
2006-06-25 16:39 ` Fabrice Bellard
2006-06-26 9:35 ` Marius Groeger
2006-06-26 15:35 ` Dirk Behme
2006-06-26 20:17 ` Fabrice Bellard
2006-06-27 15:45 ` MIPS instruction set configuration, was: " Dirk Behme
2006-06-27 15:55 ` [Qemu-devel] Re: MIPS instruction set configuration Marius Groeger
2006-06-27 20:57 ` Fabrice Bellard
2006-07-02 16:27 ` [Qemu-devel] [PATCH] " Dirk Behme
2006-07-02 23:16 ` Thiemo Seufer
2006-07-03 8:32 ` Fabrice Bellard
2006-07-03 9:50 ` Thiemo Seufer
2006-07-03 14:32 ` Dirk Behme
2006-07-03 14:53 ` Fabrice Bellard
2006-07-08 6:15 ` Dirk Behme
2006-07-03 14:20 ` Dirk Behme
2006-07-03 17:02 ` Thiemo Seufer [this message]
2006-07-03 18:41 ` Stefan Weil
2006-07-03 19:58 ` Thiemo Seufer
2006-07-08 6:19 ` Dirk Behme
2006-07-08 12:47 ` Thiemo Seufer
[not found] ` <44A001C7.8040303@gmail.com>
2006-06-26 17:27 ` [Qemu-devel] Pending MIPS patches Raphaël Rigo
2006-06-27 21:08 ` Fabrice Bellard
2006-06-27 21:15 ` Fabrice Bellard
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=20060703170235.GB6625@networkno.de \
--to=ths@networkno.de \
--cc=dirk.behme@googlemail.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).