summary refs log tree commit diff
path: root/lisc/FP
blob: f4480156e5cb5a4a44e7ff6ad4a70d67e090dac7 (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
32
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.