aboutsummaryrefslogtreecommitdiff
path: root/notes/backend.txt
blob: c93c20eaf5a53b0e0ec1a0f5a1b7eb81f4d6d000 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

* safe&portable IR vs low-level IR
    - lots of common stuff across ISAs.
    - calling conventions (e.g. struct passing) can be complex and
      it would be good to be able to re-use things that are common.
    - some optimizations might be easier to do on the low-level IR
      (and vice versa).
* register alloc can be tricky:
    - division on x86 is AFAIK limited to specific regs (eax,edx?)
    - loop instructions on x86
    - apparently r0 is unavailable in some insns on sh4?
    - on x86_64, some regs require prefix bytes
    - types:
        - byte/short/int that can use parts of a reg on x86
        - int/long distinction on aarch64
        - floating point regs
        - multi-reg types, typically on 32 bit arches:
            - 64 bit int on i386
            - 64 bit double on MIPS?
        - "special-purpose general-purpose" regs
            - as above, reg for division, looping, etc.
        - CHERI and pointers
* floating point
    - differences across architectures?
    - calling conventions
    - alignment, corner cases, etc.
    - also, see reg alloc