This is the mail archive of the
cgen@sourceware.org
mailing list for the CGEN project.
RE: Constraints between operands
- From: "Will Newton" <will dot newton at imgtec dot com>
- To: "Frank Ch. Eigler" <fche at redhat dot com>
- Cc: <cgen at sources dot redhat dot com>
- Date: Fri, 9 Sep 2005 10:08:17 +0100
- Subject: RE: Constraints between operands
> > [...]
> > I'm using cgen to write a binutils port for a processor. I've come
> > across a problem I haven't been able to solve yet with expressing a
> > constraint between a number of fields in an instruction.
> > [...]
> > ADD D0.1,D0.2 ; Data unit 0 for both regs, OK ADD D0.1,D1.2 ; Data
> > unit mismatch, error!
> > [...]
>
> One way may be to write a custom operand parser for the
> second D slot, which would enforce this constraint. It would
> signal a parse error.
I could not see an easy way to reference a previous field. The prototype
of parse handlers is like:
static const char *
parse_hi16 (cd, strp, opindex, valuep)
CGEN_CPU_DESC cd; /* CPU description */
const char **strp; /* Current position in input
text */
int opindex; /* ??? */
unsigned long *valuep; /* Result */
In order to find what the previous operand's data unit was the only way
I can see is to rewind strp and parse the input text, which may or may
not work and seems quite nasty. Or is there an easier way?