- Fix codegen for pc relative constant (e.g. JT) in thumb mode:
authorEvan Cheng <evan.cheng@apple.com>
Tue, 30 Jan 2007 20:37:08 +0000 (20:37 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 30 Jan 2007 20:37:08 +0000 (20:37 +0000)
commitc60e76d139a96cc8bb7454929172cdb992e16971
treefe8d8431e2477af5a3c4ab2b2ead8b931904071a
parent5cbf985dcbc89fba3208e7baf8b6f488b06d3ec9
- Fix codegen for pc relative constant (e.g. JT) in thumb mode:
        .set PCRELV0, (LJTI1_0_0-(LPCRELL0+4))
LPCRELL0:
        add r1, pc, #PCRELV0
This is not legal since add r1, pc, #c requires the constant be a multiple of 4.
Do the following instead:
        .set PCRELV0, (LJTI1_0_0-(LPCRELL0+4))
LPCRELL0:
        mov r1, #PCRELV0
        add r1, pc

- In thumb mode, it's not possible to use .set generate a pc relative stub
  address. The stub is ARM code which is in a different section from the thumb
  code. Load the value from a constpool instead.
- Some asm printing clean up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33664 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMAsmPrinter.cpp
lib/Target/ARM/ARMConstantPoolValue.cpp
lib/Target/ARM/ARMConstantPoolValue.h
lib/Target/ARM/ARMISelLowering.cpp
lib/Target/ARM/ARMISelLowering.h
lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMInstrThumb.td