[m-dev.] for review: lcc compile the compiler
Peter Ross
petdr at cs.mu.OZ.AU
Tue Oct 27 15:09:07 AEDT 1998
On 26-Oct-1998, Fergus Henderson <fjh at cs.mu.OZ.AU> wrote:
> On 26-Oct-1998, Peter Ross <petdr at cs.mu.OZ.AU> wrote:
> >
> > Fergus could you please review this.
> > It seems that the change from (const Word *) to (Word *), hasn't caused
> > a huge number of problems. Seeing that the change is so simple, I
> > thought that it would be better to try and incorporate the output of
> > consts in the correct places in a seperate change.
>
> Fine.
>
> > This bootchecks using lcc on kryten, and I am currently bootchecking
> > using cc on kryten. cc on murlibobo barfs because the runtime contains
> > lines like
> >
> > #ifdef XXX
> > #define YYY /* causes the barf */
> > #endif
>
> On murlibobo, `cc' defaults to K&R C.
> Try `cc -std1'.
>
Done. Bootchecked.
> (For portability testing, you could also try `cc -std1 -migrate'
> on murlibobo -- that gives you a different C compiler.)
>
> > +++ options.m 1998/10/23 00:04:38
> > @@ -152,6 +152,7 @@
> > ; unboxed_float
> > ; sync_term_size % in words
> > ; type_layout
> > + ; max_jump_table_size
> > % Options for internal use only
> > % (the values of these options are implied by the
> > % settings of other options)
> > @@ -449,6 +450,8 @@
> > % of writing) - will usually be over-
> > % ridden by a value from configure.
> > type_layout - bool(yes),
> > + max_jump_table_size - int(0),
> > + % 0 indicates any size.
>
> That comment is a bit ambiguous.
> I suggest the following instead:
>
> The special value 0 indicates that there is no limit on the
> jump table size.
>
> > + "--max-jump-table-size",
> > + "\tThe maximum number of entries a jump table can have.",
> > + "\t0 indicates any size",
>
> Likewise.
>
> Also I think it would be good to explain the purpose of this option:
>
> This option can be useful to avoid exceeding fixed limits
> imposed by some C compilers.
>
> Also don't forget to document this option in doc/user_guide.texi too.
>
Done. A revised diff is coming.
> > +transform_llds(LLDS0, LLDS) -->
> > + globals__io_lookup_int_option(max_jump_table_size, Size),
> > + (
> > + { Size = 0 }
> > + ->
> > + { LLDS = LLDS0 }
> > + ;
> > + globals__io_lookup_bool_option(split_c_files, SplitFiles),
> > + ( { SplitFiles = yes } ->
> > + { LLDS0 = c_file(ModuleName, C_HeaderInfo,
> > + C_Modules0) },
> > + transform_c_modules(C_Modules0, ModuleName,
> > + C_HeaderInfo, C_Modules),
> > + { LLDS = c_file(ModuleName, C_HeaderInfo, C_Modules) }
> > + ;
> > + transform_c_file(LLDS0, LLDS)
> > + )
> > + ).
>
> I don't understand why it needs to do different things depending
> on the setting of --split-c-files. A comment here would be helpful.
>
> > +++ mercury_trace_internal.c 1998/10/24 01:30:37
> > @@ -1393,7 +1393,7 @@
> > }
> >
> > this_frame = MR_saved_sp(saved_regs);
> > - MR_saved_succip(saved_regs) = MR_based_stackvar(this_frame,
> > + MR_saved_succip(saved_regs) = (Word *) MR_based_stackvar(this_frame,
>
> This line is >= 80 columns.
>
Fixed. (ts=4 problem)
> > + %
> > + % proc_label(Is, P)
> > + %
> > + % Find the proc_label, P, which is to be used for local labels
> > + % in the list of instructions, Is.
> > + % XXX Fergus, I am sure there is a better way to do this. Any
> > + % suggestions?
> > + %
>
> Well, you could take note of the pred_proc_id stored in the c_procedure
> in transform_c_procedure, and use code_util__make_proc_label using
> this pred_proc_id. But that requires you to pass down the HLDS module_info.
>
> Or you could define proc_label using opt_util__get_prologue,
> e.g. as
>
> proc_label(Instructions, ProcLabel) :-
> opt_util__get_prologue(Instructions, ProcLabel, _, _, _).
>
> opt_util__get_prologue works in a similar manner to your implementation
> of proc_label.
>
Thanks.
Pete.
More information about the developers
mailing list