This is a reworking of the patches that I posted as V3 at the end of August.

Unlike the last set of patches, I do not use the address mask bits in reg_addr,
but instead, I have a separate function that takes an address and decodes it
into the various different flavors (single register address, D-form 16-bit
address, X-form indexed address, numeric 34-bit offset, local pc-relative
address, etc.).  The caller then decides whether the address matches what they
are looking for.

I have two enumerations that I added to this series:

    1)  insn_form: This is the address format (D, DS, DQ, X, etc.);

    2)  non_prefixed: This is a limited enum that just describes the format of
        the non-prefixed instruction to decide if an address needs to be
        prefixed or not.

Originally, I was trying to re-use the same insn_form enumeration for both the
output and the input to say what the traditional instruction uses, but I
ultimately separated them to make it clearer.

As I said to you at the Caulron, when I replaced some of the predicates, I put
them in a different location in predicates.md, so that it would be clear that
the old version was completely eliminated, and replaced with a new version.

I also removed the two boolean arguments for the pc-relative matching, and
instead the address to insn_form just returns different values (34-bit numeric
offset, 34-bit bit pc-relative reference to a local symbol, 34-bit pc-relative
reference to an external symbol, etc.).

I did collapse the fix for vector extracts into the patches that enable general
prefixed addressing, so we don't have a possibility of bad code being
generated.

Right now, I'm not going to add the PCREL_OPT patches to this set, but I will
do it later, if these patches get applied.  I will rework it to meet the
comments you raised.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797

Reply via email to