TODO 2.15 KB
Newer Older
Matthias Braun's avatar
Matthias Braun committed
1
2
amd64 backend TODO:
Correctness:
Matthias Braun's avatar
Matthias Braun committed
3
4
5
6
7
8
- SSE Division is not commutative and we have no neg-add style workaround like
  for the Sub node. So maybe we need finally need a must_be_same constraint.
- stdarg.h/varargs va_start
- compound return calling convention
- Implement more builtins (libgcc lacks several of them that gcc provides
  natively on amd64 so cparser/libfirm when linking to the compilerlib fallback)
Matthias Braun's avatar
Matthias Braun committed
9
10
11
12
- Builtins not implemented: clz, ctz, ffs, parity, popcount
- Bitcast not implemented
- Thread local storage not implemented
- support for setjmp
Matthias Braun's avatar
Matthias Braun committed
13
- Support ASM node
Matthias Braun's avatar
Matthias Braun committed
14
- fail on long double
Matthias Braun's avatar
Matthias Braun committed
15
- (Support 80bit long double with x87 instructions)
16
17
18
- Finish PIC code implementation. This is mostly done now, usual accesses to
  functions and variables including address mode matching looks fine now.
  Jumptables are not accessed correctly in PIC yet and
Matthias Braun's avatar
Matthias Braun committed
19

Matthias Braun's avatar
Matthias Braun committed
20
21
Improve Quality:
- Immediate32 matching could be better and match SymConst, Add(SymConst, Const)
22
  combinations where possible.
Tobias Rapp's avatar
Tobias Rapp committed
23
- Support Destination Address Mode
Matthias Braun's avatar
Matthias Braun committed
24
25
26
27
28
29
30
31
32
33
- Match Immediate + Address mode for Cmp
- Support Read-Modify-Store operations (aka destination address mode)
- Leave out labels that are not jumped at (improves assembly readability, see
  ia32 backend output)
- Align certain labels if beneficial (see ia32 backend, compare with clang/gcc)
- Implement CMov/Set and announce this in mux_allowed callback
- We always Spill/Reload 64bit, we should improve the spiller to allow smaller
  spills where possible.
- Perform some benchmark comparison with clang/gcc and distill more issues to
  put on this list.
Matthias Braun's avatar
Matthias Braun committed
34
35
36
37
38
- Support folding reloads into nodes (amd64_irn_ops: possible_memory_operand()
   perform_memory_operand())
- Report instruction costs (amd64_irn_ops: get_op_estimated_cost())
- Transform IncSP+Store/Load to Push/Pop peephole pass
- Use stack red zone where possible to avoid IncSP at begin/end of function
Matthias Braun's avatar
Matthias Braun committed
39
40
41
- Compare node inputs can be swapped if we remember this in the compare node
  attributes, this allows us to think of them as associative operations and
  for example swap inputs to enable load folding, or immediates.
Tobias Rapp's avatar
Tobias Rapp committed
42
- Lea needs to support all address modes (base, index +shifts, symconsts)
Matthias Braun's avatar
Matthias Braun committed
43
- Match RCPxx SSE instruction