summary refs log tree commit diff
path: root/lisc/FP
blob: b24cf40badefb1fb91b9c9a0ea89f723dd802349 (plain) (blame)
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
27
28
29
30
31
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. bcast
 - Convert fp to/from int. ftosi sitof (only signed at first, truncation)
 - Convert single to/from double fconv

Summary:
	Add bcast, 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.

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.
	Note: contrary to large constants, the transformation
	also needs to be run on phi nodes!

	Complete ABI implementation, we should only need the
	movsd instruction to transfer between sse registers and
	memory.