- Aug 01, 2009
-
-
Evan Cheng authored
llvm-svn: 77781
-
Evan Cheng authored
llvm-svn: 77764
-
Evan Cheng authored
instructions for calls since BL and BLX are always 32-bit long and BX is always 16-bit long. Also, we should be using BLX to call external function stubs. llvm-svn: 77756
-
Evan Cheng authored
llvm-svn: 77743
-
- Jul 30, 2009
-
-
David Goodwin authored
llvm-svn: 77627
-
David Goodwin authored
llvm-svn: 77625
-
David Goodwin authored
llvm-svn: 77611
-
- Jul 29, 2009
-
-
Evan Cheng authored
llvm-svn: 77507
-
Evan Cheng authored
- Darwin Thumb2 call clobbers r9. llvm-svn: 77500
-
Evan Cheng authored
llvm-svn: 77422
-
- Jul 28, 2009
-
-
Evan Cheng authored
In thumb2 mode, add pc is unpredictable. Use add + mov pc instead (that is until more optimization goes in). llvm-svn: 77364
-
-
-
David Goodwin authored
llvm-svn: 77329
-
Evan Cheng authored
- This change also makes it possible to switch between ARM / Thumb on a per-function basis. - Fixed thumb2 routine which expand reg + arbitrary immediate. It was using using ARM so_imm logic. - Use movw and movt to do reg + imm when profitable. - Other code clean ups and minor optimizations. llvm-svn: 77300
-
David Goodwin authored
llvm-svn: 77275
-
- Jul 27, 2009
-
-
David Goodwin authored
llvm-svn: 77201
-
David Goodwin authored
llvm-svn: 77199
-
- Jul 25, 2009
-
-
Evan Cheng authored
Before: adr r12, #LJTI3_0_0 ldr pc, [r12, +r0, lsl #2] LJTI3_0_0: .long LBB3_24 .long LBB3_30 .long LBB3_31 .long LBB3_32 After: adr r12, #LJTI3_0_0 add pc, r12, +r0, lsl #2 LJTI3_0_0: b.w LBB3_24 b.w LBB3_30 b.w LBB3_31 b.w LBB3_32 This has several advantages. 1. This will make it easier to optimize this to a TBB / TBH instruction + (smaller) table. 2. This eliminate the need for ugly asm printer hack to force the address into thumb addresses (bit 0 is one). 3. Same codegen for pic and non-pic. 4. This eliminate the need to align the table so constantpool island pass won't have to over-estimate the size. Based on my calculation, the later is probably slightly faster as well since ldr pc with shifter address is very slow. That is, it should be a win as long as the HW implementation can do a reasonable job of branch predict the second branch. llvm-svn: 77024
-
- Jul 24, 2009
-
-
Evan Cheng authored
llvm-svn: 77004
-
Evan Cheng authored
llvm-svn: 76986
-
David Goodwin authored
Correctly handle the Thumb-2 imm8 addrmode. Specialize frame index elimination more exactly for Thumb-2 to get better code gen. llvm-svn: 76919
-
Evan Cheng authored
llvm-svn: 76909
-
- Jul 23, 2009
-
-
Evan Cheng authored
Since we have moved unified assembly, switch to ADR instruction instead of a the difficult-to-read .set + add syntax to materialize pc-relative address. Turns out this also fixed a poor code selection on Thumb1. I have no idea why we were using a mov + add to do the same thing as ADR before. llvm-svn: 76889
-
David Goodwin authored
Fix frame index elimination to correctly handle thumb-2 addressing modes that don't allow negative offsets. During frame elimination convert *i12 opcode to a *i8 when necessary due to a negative offset. llvm-svn: 76883
-
Evan Cheng authored
llvm-svn: 76803
-
- Jul 22, 2009
-
-
Evan Cheng authored
llvm-svn: 76729
-
- Jul 21, 2009
-
-
David Goodwin authored
llvm-svn: 76489
-
- Jul 11, 2009
-
-
Evan Cheng authored
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. llvm-svn: 75359
-
- Jul 10, 2009
-
-
Evan Cheng authored
llvm-svn: 75218
-
Evan Cheng authored
llvm-svn: 75188
-
Evan Cheng authored
Fix ldrd / strd address mode matching code. It allows for +/- 8 bit offset. Also change the printer to make the scale 4 explicit. Note, we are not yet generating these instructions. llvm-svn: 75181
-
- Jul 09, 2009
-
-
Evan Cheng authored
llvm-svn: 75172
-
David Goodwin authored
llvm-svn: 75067
-
- Jul 08, 2009
-
-
Evan Cheng authored
Change how so_imm and t2_so_imm are handled. At instruction selection time, the immediates are no longer encoded in the imm8 + rot format, that are left as it is. The encoding is now done in ams printing and code emission time instead. llvm-svn: 75048
-
David Goodwin authored
llvm-svn: 75036
-
David Goodwin authored
Checkpoint Thumb2 Instr info work. Generalized base code so that it can be shared between ARM and Thumb2. Not yet activated because register information must be generalized first. llvm-svn: 75010
-
- Jul 07, 2009
-
-
Evan Cheng authored
llvm-svn: 74946
-
Evan Cheng authored
llvm-svn: 74895
-
Evan Cheng authored
llvm-svn: 74889
-