Parsing mnemonic suffixes
Will Newton
will.newton@imgtec.com
Wed Sep 21 16:10:00 GMT 2005
> > 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.
More information about the Cgen
mailing list