]> Joshua Wise's Git repositories - snipe.git/blame - README
Initial import of l4c
[snipe.git] / README
CommitLineData
0a24e44d
JW
1README
2------
3
1144856b 4This compiler is a big long chain of modules that transform l4 code into
0a24e44d
JW
5x86_64 assembly.
6
1144856b 7Here is a breakdown of the modules and changes from l3:
6ade8b0a 8
1144856b
JW
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.
6ade8b0a 16
1144856b
JW
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.
6ade8b0a 22
1144856b
JW
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.
6ade8b0a 26
1144856b
JW
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.
6ade8b0a 36
1144856b 37 * The liveness analyzer was mainly unchanged, but for a few rules.
6ade8b0a 38
1144856b 39 * The grapher was fully unchanged. Nice.
6ade8b0a 40
1144856b 41 * The color orderer was fully unchanged. Nice.
6ade8b0a 42
1144856b 43 * The coloring module was fully unchanged. Nice.
6ade8b0a 44
1144856b
JW
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.
6ade8b0a 49
1144856b 50 * The peepholer lost one form of fail and loss sizing.
0a24e44d 51
0a24e44d
JW
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
6ade8b0a
JW
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
61We believe that it is fully functional. We generate correct code whenever we
62are 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).
64Of course, our last bug was caught by only one failing test, so...
This page took 0.063889 seconds and 4 git commands to generate.