This is the mail archive of the cgen@sourceware.org mailing list for the CGEN project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]