add FSTD and FSTS
[oota-llvm.git] / lib / Target / ARM / README.txt
1 //===---------------------------------------------------------------------===//
2 // Random ideas for the ARM backend.
3 //===---------------------------------------------------------------------===//
4
5 Consider implementing a select with two conditional moves:
6
7 cmp x, y
8 moveq dst, a
9 movne dst, b
10
11 ----------------------------------------------------------
12
13
14 %tmp1 = shl int %b, ubyte %c
15 %tmp4 = add int %a, %tmp1
16
17 compiles to
18
19 add r0, r0, r1, lsl r2
20
21 but
22
23 %tmp1 = shl int %b, ubyte %c
24 %tmp4 = add int %tmp1, %a
25
26 compiles to
27 mov r1, r1, lsl r2
28 add r0, r1, r0
29
30 ----------------------------------------------------------
31
32 add an offset to FLDS/FLDD/FSTD/FSTS addressing mode
33
34 ----------------------------------------------------------
35
36 the function
37
38 void %f() {
39 entry:
40         call void %g( int 1, int 2, int 3, int 4, int 5 )
41         ret void
42 }
43
44 declare void %g(int, int, int, int, int)
45
46 Only needs 8 bytes of stack space. We currently allocate 16.
47
48 ----------------------------------------------------------
49
50 32 x 32 -> 64 multiplications currently uses two instructions. We
51 should try to declare smull and umull as returning two values.
52
53 ----------------------------------------------------------
54
55 Implement addressing modes 2 (ldrb) and 3 (ldrsb)
56
57 ----------------------------------------------------------