summary refs log tree commit diff
path: root/lisc/FP
diff options
context:
space:
mode:
Diffstat (limited to 'lisc/FP')
-rw-r--r--lisc/FP33
1 files changed, 33 insertions, 0 deletions
diff --git a/lisc/FP b/lisc/FP
new file mode 100644
index 0000000..f448015
--- /dev/null
+++ b/lisc/FP
@@ -0,0 +1,33 @@
+Instructions classification:
+FP    : add, sub, mul, sdiv, copy, par, arg
+Maybe : and, or, xor, cmp(6)
+Non FP: udiv, srem, urem, store(4), load(7),
+        ext(7), alloc(5), parc, argc, call
+
+15 bits for operations  32768
+-1 bit for s,d          16384
+
+New conversion instructions:
+ - Bitcast conversion between fp and ints. cast
+ - Convert fp to/from int. ftosi sitof (only signed at first, truncation)
+ - Convert single to/from double fconv
+
+Summary:
+	Add cast, ftosi sitof, fconv
+	Add a 'floating point' bit to instructions
+	Conversions from/to unsigned types are hard!
+	I need to find a reference for that.
+
+Problem with "cls" field: for comparisons, this field is
+for the argument of the instruction, but, in the case of
+Load (for example), it is about the result.
+
+Roadmap in isel.
+	Make sure all floating point immediates are accessed
+	through a memory load.  The load can be fused in some
+	instructions (add, sub, mul, div).  This should be
+	handled similarly to the large integer constants.
+
+	Complete ABI implementation, we should only need the
+	movsd instruction to transfer between sse registers and
+	memory.