From: Joern Rennecke <renneckej@superh.com>
To: msnyder@redhat.com (Michael Snyder)
Cc: msnyder@redhat.com (Michael Snyder),
gdb-patches@sources.redhat.com, joern.rennecke@superh.com,
andrew.stubbs@superh.com, amylaar@spamcop.net
Subject: Re: [RFA] SH4A contribution for sim
Date: Mon, 15 Dec 2003 19:03:00 -0000 [thread overview]
Message-ID: <200312151444.hBFEiX821417@chloe.uk.w2k.superh.com> (raw)
In-Reply-To: <3FD92A7A.7040206@redhat.com> from "Michael Snyder" at Dec 11, 2003 06:39:54
>
> 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'.
I didn't want to process single bits all the time because that requires
some changes in patterns that recognize binary/letter combinations.
On the other hand, you seem to be doing that right now anyway. 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'.
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.
> > + 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.
next prev parent reply other threads:[~2003-12-15 19:03 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 [this message]
2003-12-17 21:49 ` Michael Snyder
[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=200312151444.hBFEiX821417@chloe.uk.w2k.superh.com \
--to=renneckej@superh.com \
--cc=amylaar@spamcop.net \
--cc=andrew.stubbs@superh.com \
--cc=gdb-patches@sources.redhat.com \
--cc=joern.rennecke@superh.com \
--cc=msnyder@redhat.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