This is the mail archive of the
cgen@sourceware.org
mailing list for the CGEN project.
RE: Parsing mnemonic suffixes
- From: "Will Newton" <will dot newton at imgtec dot com>
- To: "Doug Evans" <dje at transmeta dot com>
- Cc: <cgen at sources dot redhat dot com>
- Date: Wed, 21 Sep 2005 17:09:42 +0100
- Subject: RE: Parsing mnemonic suffixes
> > I'm having a little trouble with getting a cgen generated
> assembler to > parse multiple suffixes on a mnemonic. The
> instruction is specified like > this:
> >
> > "add$sc$cond $reg,$reg,$reg"
> >
> > The operand "sc" can have a value of "S" or "" depending
> on whether this > instruction sets condition flags.
> > The operand "cond" can have one of a number of values
> ("Z", "EQ", "NE", > "", etc.) depending on whether this
> instruction is conditional or not.
> >
> > When either $sc or $cond is used in isolation (e.g.
> "ADDS", "ADDEQ") the > mnemonic is parsed correctly, when
> the two are used together (e.g.
> > "ADDSEQ") the parse fails. Is it possible to parse an
> instruction like > this with a cgen description?
>
> I would expect this to work. I'll look into it.
Cgen/cpu/arm7.cpu does this, but I have no idea if it works. It seems
that what happens is that the mnemonic is parsed, and the trailing
suffixes as one big block are passed to cgen_parse_keyword with the
keyword table for the first suffix, e.g.:
ADDSNE -> cgen_parse_keyword is called with "SNE" and keyword table for
$sc ("", "S").
Cgen_parse_keyword then calls cgen_keyword_lookup_name with the keyword
table, which does a hash lookup of "SNE" in the keyword table. This
fails and returns the null keyword as you would expect.
Cgen_parse_keyword is then called again with "SNE" and the keyword table
for $cond ("NE", ...) which doesn't match either.
My current plan is to write a custom parse handler that doesn't use a
hash table and parses as greedily as possible.