From: Michael Snyder <msnyder@redhat.com>
To: Joern Rennecke <renneckej@superh.com>
Cc: gdb-patches@sources.redhat.com, joern.rennecke@superh.com,
andrew.stubbs@superh.com, amylaar@spamcop.net
Subject: Re: [RFA] SH4A contribution for sim
Date: Wed, 17 Dec 2003 21:49:00 -0000 [thread overview]
Message-ID: <3FE0CF66.30901@redhat.com> (raw)
In-Reply-To: <200312151444.hBFEiX821417@chloe.uk.w2k.superh.com>
Joern Rennecke wrote:
>>Michael Snyder wrote:
>>
>>>Here are my changes to support simulation of the sh4a.
>>
>>J"oern? Any comment?
>
>
>>> {
>>> int m, mv;
>>>
>>>+ /* J"orn Rennecke: "Allow variable length n / m fields".
>>>+ I'm not sure if I understand these two lines. MVS */
>>> if (s[1] - '0' > 1U || !s[2] || ! s[3])
>>> expand_opcode (shift - 1, val + s[0] - '0', i, s + 1);
>>>+
>
>
> The code above handles a single binary digit if it appears as
> one of the last three characters, or in front of a non-binary character
> (e.g. the 'i' in 'i8*1....'). This is because handling the three 'n's in
> 'nnn0' leaves one extra binary digit. E.g. for fsca, after 'nnn', the
> nibbles 0111 and 1110 are processed, leaving '1'.
Ah, thanks, I see. So you're basically solving the same problem here
that I did by introducing the "ddd0" pattern.
Wouldn't it be safer to handle the extra '0' immediately?
What if you had a pattern that was like "nnn0GGGG", (for instance)?
You'd wind up parsing it as "nnn" plus "0GGG" plus "G".
> I didn't want to process single bits all the time because that requires
> some changes in patterns that recognize binary/letter combinations.
Yeah, that could be ugly.
>
> On the other hand, you seem to be doing that right now anyway.
Processing single bits? Not that I'm aware....
> And
> expanding these combinations is making this code ever harder to maintain.
> I think the only sane way forward is to handle variable-length binary fields
> - i.e. make a loop to see how much we got and build up the number as we go.
> The position dependent template fragments where the 'xx' and 'yy' for
> movx/movy, which you changed to 'xy' and 'yx'.
As a less extreme measure, what if we break some combinations
into two-byte fields instead of four? I'm still thinking it
through, but I'm thinking that, for instance, "01NN" could be
handled in two passes: take the "01" first, then recurse and
let the "NN" be handled in the outer switch statement. This
might also apply to 01xy and XY01.
> We can use this chage to xy/yx to make the detection position-independent,
> or check the shift parameter. rather, that should be a count
> of bits that remain to be processed - subtracting 4 at the start doesn't
> make much sense if you don't process nibbles all the time.
>
>
>>>+ /* 01xy -- 4 way fork across xy. */
>>>+ else if (s[2] == 'x' && s[3] == 'y')
>>>+ for (j = 0; j < 4; j++)
>>>+ expand_opcode (shift - 4, val | m | (j << shift), i, s + 4);
>>>+ /* 01xx -- 2x32 fork across x0 and nopy. */
>
>
> This does not just go across nopy (that would be pointless), but across
> nopy and movy.
> By replacing all the 'xx' in movx templates with 'xy' and doing a vanilla
> expansion for 'xy' above, you disable generation of case labels for
> movx/movy combinations. Then you made tons of other changes to compensate
> for this. I see not point in these changes.
Please say more. I found this part of the work difficult,
and I'm by no means sure that my solution was optimal.
Unfortunately I did the work several months ago, and my
memory is not fresh (appologies for not getting around to
submitting it sooner).
>>>+ case 'd':
>>>+ /* Double register dr0-dr14 (even numbers only). */
>>>+ /* ddd0 -- 8 way fork. */
>>>+ val |= bton (s) << shift;
>>>+ for (j = 0; j < 15; j += 2)
>>>+ expand_opcode (shift - 4, val | (j << shift), i, s + 4);
>>>+ break;
>
>
> What is that for? I don't see why we should have a separate ddd0 pattern,
> where nnn0 works just fine and also makes it much clearer where the number
> ends up. It's also more efficient when the simulator doesn't do any
> unnecessary runtime checks on the opcodes. The even-numbered registers
> generate legal instruction encodings. The odd-numbered ones are left
> over for the default case. If you want to make sure that they raise a
> SIGILL exception, you can do this by initializing table accordingly.
OK, but there's precident -- MMMM, ssss, and GGGG all stand for
specific subsets of register numbers. I'm willing to go with your
way, but consider that if we do use ddd0, then the problem of
handling a single nybble goes away. The nnnn / mmmm code becomes
simpler again.
next prev parent reply other threads:[~2003-12-17 21:49 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-05 2:38 Michael Snyder
2003-12-12 2:40 ` Michael Snyder
2003-12-15 19:03 ` Joern Rennecke
2003-12-17 21:49 ` Michael Snyder [this message]
[not found] <200312180144.hBI1iosK001449@meolyon.local>
2003-12-18 2:37 ` Michael Snyder
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=3FE0CF66.30901@redhat.com \
--to=msnyder@redhat.com \
--cc=amylaar@spamcop.net \
--cc=andrew.stubbs@superh.com \
--cc=gdb-patches@sources.redhat.com \
--cc=joern.rennecke@superh.com \
--cc=renneckej@superh.com \
/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