On Aug 17, 2020, at 3:32 PM, Norman Wilson <norman(a)oclsc.org> wrote:
The hardest but most-interesting part was optimizing.
lcc does a lot of optimization work by itself, and
initially I'd hoped to dispense with a separate c2
pass entirely, but that turns out not to be feasible
on machines like the VAX or the PDP-11: internally
lcc separates something like
c = *p++;
into two operations
c = *p;
p++;
and makes two distinct calls to the code generator.
To sew them back together from
cvtbl (p),c
incl p
to
cvtbl (p)+,c
requires external help; lcc just can't see that
what it thinks of as two distinct expressions
can be combined.
Didn't lcc use iburg or some such to generate the
code generator, which could do such things?
See the lcc book for details. Read the book anyway;
it's the one case I know of in which the authors
followed strict Literate Programming rules and made
a big success of it. Not only is the compiler well-
documented, but the result is a wonderful tour
through the construction and design decisions of a
large program that does real work.
Agree. They used noweb. Probably with a troff backend?