You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.6 KiB
42 lines
1.6 KiB
//===---------------------------------------------------------------------===//
|
|
// MSP430 backend.
|
|
//===---------------------------------------------------------------------===//
|
|
|
|
DISCLAIMER: This backend should be considered as highly experimental. I never
|
|
seen nor worked with this MCU, all information was gathered from datasheet
|
|
only. The original intention of making this backend was to write documentation
|
|
of form "How to write backend for dummies" :) Thes notes hopefully will be
|
|
available pretty soon.
|
|
|
|
Some things are incomplete / not implemented yet (this list surely is not
|
|
complete as well):
|
|
|
|
1. Verify, how stuff is handling implicit zext with 8 bit operands (this might
|
|
be modelled currently in improper way - should we need to mark the superreg as
|
|
def for every 8 bit instruction?).
|
|
|
|
2. Libcalls: multiplication, division, remainder. Note, that calling convention
|
|
for libcalls is incomptible with calling convention of libcalls of msp430-gcc
|
|
(these cannot be used though due to license restriction).
|
|
|
|
3. Implement multiplication / division by constant (dag combiner hook?).
|
|
|
|
4. Implement non-constant shifts.
|
|
|
|
5. Implement varargs stuff.
|
|
|
|
6. Verify and fix (if needed) how's stuff playing with i32 / i64.
|
|
|
|
7. Implement floating point stuff (softfp?)
|
|
|
|
8. Implement instruction encoding for (possible) direct code emission in the
|
|
future.
|
|
|
|
9. Since almost all instructions set flags - implement brcond / select in better
|
|
way (currently they emit explicit comparison).
|
|
|
|
10. Handle imm in comparisons in better way (see comment in MSP430InstrInfo.td)
|
|
|
|
11. Implement hooks for better memory op folding, etc.
|
|
|