]> Joshua Wise's Git repositories - snipe.git/blame - README
Initial import of l5c
[snipe.git] / README
CommitLineData
0a24e44d
JW
1README
2------
3
5c79bb68 4This compiler is a big long chain of modules that transform L5 code into
0a24e44d
JW
5x86_64 assembly.
6
5c79bb68 7Here is a breakdown of the modules and changes from L5:
6ade8b0a 8
5c79bb68
JW
9 * The parser. The parser was mainly brought in from lab 4, and mainly
10 just a straight-forward extension of the L4 parser to have increments,
11 decrements, conditionals, and hex constants.
1144856b 12
5c79bb68
JW
13 * AST utilities were updated to use the new temp typing system.
14
15 * Temporaries now are the only source of sizing information until we hit
16 the stage at which point instructions are generated. At that point,
17 instructions get sizing info, too, but really, that's about it.
18
19 * The typechecker was mostly unchanged.
20
21 * The translator was changed to use the new sizing system. Of interest,
22 the 'safe' alloc routine and the 'safe' dereference routines have been
23 moved into the IR stage, as opposed to having custom instructions
24 generated for them at the munch stage. This was done with the addition
25 of the 'stmvar' IR function, which is equivalent to the GCC C extension:
26 ({ stm; stm; ... expr })
27 in that it evaluates the statements first, then returns the evaluation
28 of the expression.
29
30 * The munch modules were updated to remove a lot of their suck and make
31 them correct again. Specifically, they were updated to use the new
32 typing system and perform type inference of sorts (i.e. adding a
33 quadword base pointer and a long offset yields a quad, etc.). This is
34 far superior to the previous sizing method, in which we gave some loose
35 (and disgusting) annotations of size and left the final sizing decisions
36 to the stringifier (O.o).
37
38 * The liveness analyzer was mainly unchanged.
6ade8b0a 39
1144856b 40 * The grapher was fully unchanged. Nice.
6ade8b0a 41
5c79bb68 42 * The color orderer was optimized a bit.
6ade8b0a 43
1144856b 44 * The coloring module was fully unchanged. Nice.
6ade8b0a 45
5c79bb68
JW
46 * The solidifier was similarly ripped out and hit by the diqing beam, sent
47 on a flight to Diqing airport, which is in Diqing which is in
48 the Diqing province in China, and subsequently it was diqed. It is now
49 much happier.
50
51 * The peepholer has been moved into the optimization framework.
6ade8b0a 52
5c79bb68
JW
53 * An optimization framework was added, allowing optimizers to be
54 individually turned off from the command line with approximately no work
55 on our part. I'm particularly proud of the simplicity with which it
56 allows one to write optimizations; see optimize/feckful.sml. They need
57 only be hooked in one place (in particular, in a list at the top of
58 top.sml). Individual optimizations will be discussed in the paper to be
59 handed in tomorrow.
0a24e44d 60
0a24e44d
JW
61 * The stringifier is of no interest to you, for it does real things that
62 interact with the real world, and that is not of interest to people who
63 write in ML.
64
6ade8b0a
JW
65We believe that it is fully functional. We generate correct code whenever we
66are supposed to, and we pass every test that we can lay our hands on
5c79bb68
JW
67(including all of the regression suite). There are a number of optimizations
68that we wish to do, especially various interprocedural ones, but we ran out
69of time.
This page took 0.034296 seconds and 4 git commands to generate.