diff options
author | Richard Earnshaw <rearnsha@arm.com> | 2022-06-15 16:07:20 +0100 |
---|---|---|
committer | Richard Earnshaw <rearnsha@arm.com> | 2022-06-15 16:09:01 +0100 |
commit | 8aaa948059a8b5f0a62ad010d0aa6346b7ac9cd3 (patch) | |
tree | ef1385bb8f226204f411e4f2c159e53171a41764 /libphobos/libdruntime/gcc | |
parent | 052d89537a4c09e1e1437042e2d1ea215656325f (diff) | |
download | gcc-8aaa948059a8b5f0a62ad010d0aa6346b7ac9cd3.zip gcc-8aaa948059a8b5f0a62ad010d0aa6346b7ac9cd3.tar.gz gcc-8aaa948059a8b5f0a62ad010d0aa6346b7ac9cd3.tar.bz2 |
arm: big-endian issue in gen_cpymem_ldrd_strd [PR105981]
The code in gen_cpymem_ldrd_strd has been incorrect for big-endian
since r230663. The problem is that we use gen_lowpart, etc. to split
the 64-bit quantity, but fail to account for the fact that these
routines are really dealing with 64-bit /values/ and in big-endian the
ordering of the sub-registers changes.
To fix this, I've renamed the conceptually misnamed low_reg and hi_reg
as first_reg and second_reg, and then used different logic for
big-endian targets to initialize these values. This makes the logic
clearer than trying to think about high bits and low bits.
gcc/ChangeLog:
PR target/105981
* config/arm/arm.cc (gen_cpymem_ldrd_strd): Rename low_reg and hi_reg
to first_reg and second_reg respectively. Initialize them correctly
when generating big-endian code.
Diffstat (limited to 'libphobos/libdruntime/gcc')
0 files changed, 0 insertions, 0 deletions