mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
Use the new IsAligned fixup flag to improve fixup encodings for Thumb2 branches. This is still not perfect,
but it gets many more of them correct than it did previously. llvm-svn: 121414
This commit is contained in:
parent
f7bba0cfe3
commit
4be3b6db5c
@ -101,6 +101,7 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
|
||||
case ARM::fixup_arm_ldst_pcrel_12:
|
||||
// ARM PC-relative values are offset by 8.
|
||||
Value -= 4;
|
||||
// FALLTHROUGH
|
||||
case ARM::fixup_t2_ldst_pcrel_12: {
|
||||
// Offset by 4, adjusted by two due to the half-word ordering of thumb.
|
||||
Value -= 4;
|
||||
@ -140,7 +141,7 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
|
||||
// Offset by 8 just as above.
|
||||
return 0xffffff & ((Value - 8) >> 2);
|
||||
case ARM::fixup_t2_branch: {
|
||||
Value = Value - 8;
|
||||
Value = Value - 6;
|
||||
Value >>= 1; // Low bit is not encoded.
|
||||
|
||||
uint64_t out = 0;
|
||||
|
@ -53,7 +53,8 @@ public:
|
||||
{ "fixup_t2_pcrel_10", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_adr_pcrel_12", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_branch", 1, 24, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_branch", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_t2_branch", 0, 32, MCFixupKindInfo::FKF_IsPCRel |
|
||||
MCFixupKindInfo::FKF_IsAligned},
|
||||
{ "fixup_arm_thumb_bl", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_blx", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
|
||||
{ "fixup_arm_thumb_cb", 0, 16, MCFixupKindInfo::FKF_IsPCRel },
|
||||
|
Loading…
Reference in New Issue
Block a user