]> Joshua Wise's Git repositories - snipe.git/blob - README
Initial import of l4c
[snipe.git] / README
1 README
2 ------
3
4 This compiler is a big long chain of modules that transform l4 code into
5 x86_64 assembly.
6
7 Here is a breakdown of the modules and changes from l3:
8
9   * The parser.  The parser was mainly brought in from lab 3, and mainly
10     just a straight-forward extension of the l3 parser.  We changed asops,
11     since they now side-effect and need special properties.  We also added
12     dereferences, arrays, other nice things.
13     
14   * AST utilities.  Some of those now exist to make common operations on raw
15     AST structures less painful.
16
17   * The typechecker.  The typechecker was significantly revamped.  A
18     'typeof' function was added that did most of the typechecking work;
19     the rest was relatively trivial compared to typeof.  There were many
20     annoying things other than typeof, but typeof was the most interesting
21     to comment on.
22
23   * The translator was extended with support for sizing up structs.  It now
24     is smarter about translating asops.  A MEMORY thingo was added to the
25     Tree, as was ALLOC.
26
27   * The x86/munch modules were extended with support for multiple operand
28     sizes.  This was done in a fashion of extreme type A, and needs to be
29     blasted before the next lab, for it is worthless, terrible, awful, ... A
30     major falling-down of this compiler is that it passes size information
31     around in no less than 235784 different fashions, and the translation
32     between each has caused us no end of grief.  If we had time to rewrite
33     it instead of firefighting broken tests, uh... we would.  Many of our
34     optimizations from last lab needed to be commented out because of this
35     temporary sizing sadness.
36
37   * The liveness analyzer was mainly unchanged, but for a few rules.
38
39   * The grapher was fully unchanged.  Nice.
40
41   * The color orderer was fully unchanged.  Nice.
42
43   * The coloring module was fully unchanged.  Nice.
44
45   * The solidifier was modified to deal with the fact that certain things
46     could not be accessed directly.  It, too, has become an unmitigated
47     disaster.  It must deal with all 875847384 of the sizes, and I am sad
48     about this.
49
50   * The peepholer lost one form of fail and loss sizing.
51
52   * The stringifier is of no interest to you, for it does real things that
53     interact with the real world, and that is not of interest to people who
54     write in ML.
55
56   * Our internal representation of x86 assembly was changed. In particular,
57     conditional sets and jumps are now SETcc of cc * oper and Jcc of cc *
58     oper, instead of a separate SET or J for each condition code. This
59     simplifies other parts of the code as well.
60
61 We believe that it is fully functional. We generate correct code whenever we
62 are supposed to, and we pass every test that we can lay our hands on
63 (including all of l2, and one of ours that killed the reference compiler).
64 Of course, our last bug was caught by only one failing test, so...
This page took 0.032043 seconds and 4 git commands to generate.