This is a new version of my BE patch from a few weeks ago.
This is part 2 and covers all the aarch64 changes.

When combined with the first patch, It fixes up movoi/ci/xi for Big
Endian, so that we end up with the lab of a big-endian integer to be in
the low byte of the highest-numbered register.

This patch requires part 1 and David Sherwood’s patch:
 [AArch64] [BE] [1/2] Make large opaque integer modes endianness-safe.

When tested with David’s patch and [1/2] of this patch, no regressions
were seen when testing aarch64 and x86_64 on make check.


Changelog:
2014-11-14  Alan Hayward  <alan.hayw...@arm.com>

        * config/aarch64/aarch64.c
        (aarch64_classify_address): Allow extra addressing modes for BE.
        (aarch64_print_operand): new operand for printing a q register+1.
        (aarch64_simd_emit_reg_reg_move): replacement for
        aarch64_simd_disambiguate_copy that plants the required mov.
        * config/aarch64/aarch64-protos.h
        (aarch64_simd_emit_reg_reg_move): replacement for
        aarch64_simd_disambiguate_copy.
        * config/aarch64/aarch64-simd.md
        (define_split): Use new aarch64_simd_emit_reg_reg_move.
        (define_expand "mov<mode>"): less restrictive predicates.
        (define_insn "*aarch64_mov<mode>"): Simplify and only allow for LE.
        (define_insn "*aarch64_be_movoi"): New.  BE only.  Plant ldp or
stp.
        (define_insn "*aarch64_be_movci"): New.  BE only.  No instructions.
        (define_insn "*aarch64_be_movxi"): New.  BE only.  No instructions.
        (define_split): OI mov.  Use new aarch64_simd_emit_reg_reg_move.
        (define_split): CI mov.  Use new aarch64_simd_emit_reg_reg_move.
On BE
        plant movs for reg to/from mem case.
        (define_split): XI mov.  Use new aarch64_simd_emit_reg_reg_move.
On BE
        plant movs for reg to/from mem case.

Alan.

Attachment: 0001-BE-fix-load-stores.-Aarch64-code.patch
Description: Binary data

Reply via email to