aboutsummaryrefslogtreecommitdiff
path: root/libphobos/libdruntime/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2022-06-15 16:07:20 +0100
committerRichard Earnshaw <rearnsha@arm.com>2022-06-15 16:09:01 +0100
commit8aaa948059a8b5f0a62ad010d0aa6346b7ac9cd3 (patch)
treeef1385bb8f226204f411e4f2c159e53171a41764 /libphobos/libdruntime/gcc
parent052d89537a4c09e1e1437042e2d1ea215656325f (diff)
downloadgcc-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