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
|