1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

ADR was added with the wrong encoding for inst{24-21}, and the ARM decoder was fooled.

Set the encoding bits to {0,?,?,0}, not 0.  Plus delegate the disassembly of ADR to
the more generic ADDri/SUBri instructions, and add a test case for that.

llvm-svn: 128234
This commit is contained in:
Johnny Chen 2011-03-24 20:42:48 +00:00
parent 4909f41ec5
commit ae5d27987a
3 changed files with 8 additions and 1 deletions

View File

@ -1253,7 +1253,7 @@ let neverHasSideEffects = 1, isReMaterializable = 1 in
// The 'adr' mnemonic encodes differently if the label is before or after
// the instruction. The {24-21} opcode bits are set by the fixup, as we don't
// know until then which form of the instruction will be used.
def ADR : AI1<0, (outs GPR:$Rd), (ins adrlabel:$label),
def ADR : AI1<{0,?,?,0}, (outs GPR:$Rd), (ins adrlabel:$label),
MiscFrm, IIC_iALUi, "adr", "\t$Rd, #$label", []> {
bits<4> Rd;
bits<12> label;

View File

@ -1,5 +1,8 @@
# RUN: llvm-mc --disassemble %s -triple=arm-apple-darwin9 | FileCheck %s
# CHECK: addpl r4, pc, #19, 8
0x4c 0x45 0x8f 0x52
# CHECK: b #0
0x00 0x00 0x00 0xea

View File

@ -1584,6 +1584,10 @@ ARMDEBackend::populateInstruction(const CodeGenInstruction &CGI,
Name == "MOVr_TC")
return false;
// Delegate ADR disassembly to the more generic ADDri/SUBri instructions.
if (Name == "ADR")
return false;
//
// The following special cases are for conflict resolutions.
//