aboutsummaryrefslogtreecommitdiff
path: root/notes/backend.txt
diff options
context:
space:
mode:
authorSamuel Lidén Borell <samuel@kodafritt.se>2025-06-08 21:57:24 +0200
committerSamuel Lidén Borell <samuel@kodafritt.se>2025-06-08 21:57:24 +0200
commitc6f75f73fa52eba4cf945f9a6454fc26af1e69bc (patch)
tree51030ed2eb7258b28be8b0dc9aa90830a0960a6b /notes/backend.txt
parentc7356ef88bde007abe6b0a3deac9a0e6b30f894c (diff)
downloadslul-try2-main.tar.gz
slul-try2-main.tar.bz2
slul-try2-main.zip
Notes: arenas, backend, linear types, interface in .so/.dll, stdlib implHEADmain
Diffstat (limited to 'notes/backend.txt')
-rw-r--r--notes/backend.txt26
1 files changed, 26 insertions, 0 deletions
diff --git a/notes/backend.txt b/notes/backend.txt
new file mode 100644
index 0000000..c93c20e
--- /dev/null
+++ b/notes/backend.txt
@@ -0,0 +1,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