summaryrefslogtreecommitdiff
path: root/lib/Target/ARM/README-Thumb.txt
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2009-07-11 06:43:01 +0000
committerEvan Cheng <evan.cheng@apple.com>2009-07-11 06:43:01 +0000
commit446c428bf394b7113b0f18cbacb5e87b4efd1e14 (patch)
treef63ecf8675aa5b58199fdf72834a495672403c8a /lib/Target/ARM/README-Thumb.txt
parentdd6f63209cba0003e67470938830de2cb6917336 (diff)
downloadllvm-446c428bf394b7113b0f18cbacb5e87b4efd1e14.tar.gz
llvm-446c428bf394b7113b0f18cbacb5e87b4efd1e14.tar.bz2
llvm-446c428bf394b7113b0f18cbacb5e87b4efd1e14.tar.xz
Major changes to Thumb (not Thumb2). Many 16-bit instructions either modifies CPSR when they are outside the IT blocks, or they can predicated when in Thumb2. Move the implicit def of CPSR to an optional def which defaults CPSR. This allows the 's' bit to be toggled dynamically.
A side-effect of this change is asm printer is now using unified assembly. There are some minor clean ups and fixes as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75359 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/README-Thumb.txt')
-rw-r--r--lib/Target/ARM/README-Thumb.txt15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Target/ARM/README-Thumb.txt b/lib/Target/ARM/README-Thumb.txt
index eed3c54372..8ffe0b17a5 100644
--- a/lib/Target/ARM/README-Thumb.txt
+++ b/lib/Target/ARM/README-Thumb.txt
@@ -238,3 +238,18 @@ to avoid extra work when we convert Thumb2 instructions to Thumb1 instructions.
We need to make (some of the) Thumb1 instructions predicable. That will allow
shrinking of predicated Thumb2 instructions. To allow this, we need to be able
to toggle the 's' bit since they do not set CPSR when they are inside IT blocks.
+
+//===---------------------------------------------------------------------===//
+
+Make use of hi register variants of cmp: tCMPhir / tCMPZhir.
+
+//===---------------------------------------------------------------------===//
+
+Rather than generating ldrsb, sometimes it's better to select to ldrb + sxtb.
+The problem is ldrsb addressing mode [r, r] means the zero offset requires an
+extra move. e.g. ldr_ext.ll test3:
+ movs r1, #0
+ ldrsb r0, [r0, r1]
+=>
+ ldrb r0, [r0, #0]
+ sxtb r0, r0