[m-dev.] for review: MLDS back-end: new grades & options
Fergus Henderson
fjh at cs.mu.OZ.AU
Tue Dec 7 06:28:15 AEDT 1999
This change implements the stuff that I discussed in my earlier mail
about new grades and options for the MLDS back-end.
For this change and the change to the standard library,
I plan to wait until after the release of 0.9 before
committing these -- I think the chance of introducing
some last-minute bug is a bit too high otherwise.
The main other changes needed in the standard library are
the ones related to the RTTI support and the unify/index/compare
predicates for builtin types.
----------
Estimated hours taken: 3
Implement new grades and options for the MLDS back-end.
compiler/options.m:
Rename --highlevel-c as --highlevel-code.
Add new option --highlevel-data.
compiler/mercury_compile.m:
scripts/mgnuc.in:
Convert the grade options --highlevel-code,
--highlevel-data, and --gcc-nested-functions
into C flags -DMR_HIGHLEVEL_CODE, -DMR_HIGHLEVEL_DATA,
and -DMR_USE_GCC_NESTED_FUNCTIONS respectively.
compiler/handle_options.m:
scripts/parse_grade_options.sh-subr:
scripts/init_grade_options.sh-subr:
scripts/final_grade_options.sh-subr:
scripts/ml.in:
Add new grades `hl', `hlc', `hl_nest', and `hlc_nest'.
Add code to handle the new options and grades.
scripts/ml.in:
If --high-level-code is set, then don't invoke the
demangler, since it doesn't (yet) understand the new
name mangling scheme.
Workspace: /d-drive/home/hg/fjh/mercury
Index: compiler/handle_options.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/handle_options.m,v
retrieving revision 1.85
diff -u -d -r1.85 handle_options.m
--- compiler/handle_options.m 1999/11/15 00:57:36 1.85
+++ compiler/handle_options.m 1999/12/06 10:06:54
@@ -250,10 +250,14 @@
globals__io_set_option(num_tag_bits, int(NumTagBits)),
- option_implies(highlevel_c, gcc_non_local_gotos, bool(no)),
- option_implies(highlevel_c, gcc_global_registers, bool(no)),
- option_implies(highlevel_c, asm_labels, bool(no)),
+ % --high-level-code disables the use of low-level gcc extensions
+ option_implies(highlevel_code, gcc_non_local_gotos, bool(no)),
+ option_implies(highlevel_code, gcc_global_registers, bool(no)),
+ option_implies(highlevel_code, asm_labels, bool(no)),
+ % --no-gcc-nested-functions implies --no-gcc-local-labels
+ option_neg_implies(gcc_nested_functions, gcc_local_labels, bool(no)),
+
option_implies(verbose_check_termination, check_termination,bool(yes)),
option_implies(check_termination, termination, bool(yes)),
option_implies(check_termination, warn_missing_trans_opt_files,
@@ -574,7 +578,7 @@
% actually matters is for constructing the pathname for the
% grade of the library, etc for linking (and installation).
:- type grade_component
- ---> gcc_ext % gcc extensions -- see grade_component_table
+ ---> gcc_ext % gcc extensions etc. -- see grade_component_table
; par % parallelism / multithreading
; gc % the kind of GC to use
; prof % what profiling options to use
@@ -663,18 +667,76 @@
:- mode grade_component_table(out, out, out) is multi.
% GCC-hack components
-grade_component_table("none", gcc_ext, [asm_labels - bool(no),
- gcc_non_local_gotos - bool(no), gcc_global_registers - bool(no)]).
-grade_component_table("reg", gcc_ext, [asm_labels - bool(no),
- gcc_non_local_gotos - bool(no), gcc_global_registers - bool(yes)]).
-grade_component_table("jump", gcc_ext, [asm_labels - bool(no),
- gcc_non_local_gotos - bool(yes), gcc_global_registers - bool(no)]).
-grade_component_table("asm_jump", gcc_ext, [asm_labels - bool(yes),
- gcc_non_local_gotos - bool(yes), gcc_global_registers - bool(no)]).
-grade_component_table("fast", gcc_ext, [asm_labels - bool(no),
- gcc_non_local_gotos - bool(yes), gcc_global_registers - bool(yes)]).
-grade_component_table("asm_fast", gcc_ext, [asm_labels - bool(yes),
- gcc_non_local_gotos - bool(yes), gcc_global_registers - bool(yes)]).
+grade_component_table("none", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(no),
+ gcc_global_registers - bool(no),
+ highlevel_code - bool(no),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(no)]).
+grade_component_table("reg", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(no),
+ gcc_global_registers - bool(yes),
+ highlevel_code - bool(no),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(no)]).
+grade_component_table("jump", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(yes),
+ gcc_global_registers - bool(no),
+ highlevel_code - bool(no),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(no)]).
+grade_component_table("asm_jump", gcc_ext, [
+ asm_labels - bool(yes),
+ gcc_non_local_gotos - bool(yes),
+ gcc_global_registers - bool(no),
+ highlevel_code - bool(no),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(no)]).
+grade_component_table("fast", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(yes),
+ gcc_global_registers - bool(yes),
+ highlevel_code - bool(no),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(no)]).
+grade_component_table("asm_fast", gcc_ext, [
+ asm_labels - bool(yes),
+ gcc_non_local_gotos - bool(yes),
+ gcc_global_registers - bool(yes),
+ highlevel_code - bool(no),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(no)]).
+grade_component_table("hl", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(no),
+ gcc_global_registers - bool(no),
+ highlevel_code - bool(yes),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(yes)]).
+grade_component_table("hlc", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(no),
+ gcc_global_registers - bool(no),
+ highlevel_code - bool(yes),
+ gcc_nested_functions - bool(no),
+ highlevel_data - bool(no)]).
+grade_component_table("hl_nest", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(no),
+ gcc_global_registers - bool(no),
+ highlevel_code - bool(yes),
+ gcc_nested_functions - bool(yes),
+ highlevel_data - bool(yes)]).
+grade_component_table("hlc_nest", gcc_ext, [
+ asm_labels - bool(no),
+ gcc_non_local_gotos - bool(no),
+ gcc_global_registers - bool(no),
+ highlevel_code - bool(yes),
+ gcc_nested_functions - bool(yes),
+ highlevel_data - bool(no)]).
% Parallelism/multithreading components.
grade_component_table("par", par, [parallel - bool(yes)]).
@@ -736,6 +798,9 @@
grade_start_values(asm_labels - bool(no)).
grade_start_values(gcc_non_local_gotos - bool(no)).
grade_start_values(gcc_global_registers - bool(no)).
+grade_start_values(highlevel_code - bool(no)).
+grade_start_values(highlevel_data - bool(no)).
+grade_start_values(gcc_nested_functions - bool(no)).
grade_start_values(parallel - bool(no)).
grade_start_values(gc - string("none")).
grade_start_values(profile_deep - bool(no)).
Index: compiler/mercury_compile.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/mercury_compile.m,v
retrieving revision 1.144
diff -u -d -r1.144 mercury_compile.m
--- compiler/mercury_compile.m 1999/11/10 16:21:07 1.144
+++ compiler/mercury_compile.m 1999/12/06 09:47:59
@@ -413,7 +413,7 @@
mercury_compile__maybe_output_prof_call_graph(HLDS21,
Verbose, Stats, HLDS25),
mercury_compile__middle_pass(ModuleName, HLDS25, HLDS50), !,
- globals__io_lookup_bool_option(highlevel_c, HighLevelC),
+ globals__io_lookup_bool_option(highlevel_code, HighLevelCode),
globals__io_lookup_bool_option(aditi_only, AditiOnly),
% magic sets can report errors.
@@ -428,7 +428,7 @@
),
( { AditiOnly = yes } ->
[]
- ; { HighLevelC = yes } ->
+ ; { HighLevelCode = yes } ->
mercury_compile__mlds_backend(HLDS50),
globals__io_lookup_bool_option(compile_to_c,
CompileToC),
@@ -2334,6 +2334,24 @@
;
SplitOpt = ""
},
+ globals__io_lookup_bool_option(highlevel_code, HighLevelCode),
+ ( { HighLevelCode = yes } ->
+ { HighLevelCodeOpt = "-DMR_HIGHLEVEL_CODE " }
+ ;
+ { HighLevelCodeOpt = "" }
+ ),
+ globals__io_lookup_bool_option(gcc_nested_functions, GCC_NestedFunctions),
+ ( { GCC_NestedFunctions = yes } ->
+ { NestedFunctionsOpt = "-DMR_USE_GCC_NESTED_FUNCTIONS " }
+ ;
+ { NestedFunctionsOpt = "" }
+ ),
+ globals__io_lookup_bool_option(highlevel_data, HighLevelData),
+ ( { HighLevelData = yes } ->
+ { HighLevelDataOpt = "-DMR_HIGHLEVEL_DATA " }
+ ;
+ { HighLevelDataOpt = "" }
+ ),
globals__io_lookup_bool_option(gcc_global_registers, GCC_Regs),
( { GCC_Regs = yes } ->
globals__io_lookup_string_option(cflags_for_regs,
@@ -2486,6 +2504,7 @@
% Also be careful that each option is separated by spaces.
{ string__append_list([CC, " ", SubDirInclOpt, InclOpt,
SplitOpt, OptimizeOpt,
+ HighLevelCodeOpt, NestedFunctionsOpt, HighLevelDataOpt,
RegOpt, GotoOpt, AsmOpt,
CFLAGS_FOR_REGS, " ", CFLAGS_FOR_GOTOS, " ",
GC_Opt, ProfileCallsOpt, ProfileTimeOpt, ProfileMemoryOpt,
Index: compiler/options.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/options.m,v
retrieving revision 1.274
diff -u -d -r1.274 options.m
--- compiler/options.m 1999/11/15 00:57:38 1.274
+++ compiler/options.m 1999/12/06 08:14:00
@@ -162,7 +162,8 @@
% `--tags high' and doesn't specify
% `--num-tag-bits'.
; args
- ; highlevel_c
+ ; highlevel_code
+ ; highlevel_data
; gcc_nested_functions
; unboxed_float
; sync_term_size % in words
@@ -553,7 +554,8 @@
type_ctor_layout - bool(yes),
type_ctor_functors - bool(yes),
rtti_line_numbers - bool(yes),
- highlevel_c - bool(no),
+ highlevel_code - bool(no),
+ highlevel_data - bool(no),
gcc_nested_functions - bool(no),
unboxed_float - bool(no)
]).
@@ -908,10 +910,14 @@
long_option("type-ctor-layout", type_ctor_layout).
long_option("type-ctor-functors", type_ctor_functors).
long_option("rtti-line-numbers", rtti_line_numbers).
-long_option("highlevel-C", highlevel_c).
-long_option("highlevel-c", highlevel_c).
-long_option("high-level-C", highlevel_c).
-long_option("high-level-c", highlevel_c).
+long_option("highlevel-code", highlevel_code).
+long_option("high-level-code", highlevel_code).
+long_option("highlevel-C", highlevel_code).
+long_option("highlevel-c", highlevel_code).
+long_option("high-level-C", highlevel_code).
+long_option("high-level-c", highlevel_code).
+long_option("highlevel-data", highlevel_data).
+long_option("high-level-data", highlevel_data).
long_option("gcc-nested-functions", gcc_nested_functions).
long_option("unboxed-float", unboxed_float).
@@ -1738,8 +1744,8 @@
"\tSelect the compilation model. The <grade> should be one of",
"\t`none', `reg', `jump', `asm_jump', `fast', `asm_fast',",
% These grades are not yet implemented.
-% The --high-level-c option is not yet documented.
-% "\t`ansi', `nest'",
+% The --high-level-code option is not yet documented.
+% "\t`hl', `hl_nest', `hlc', `hlc_nest'",
"\tor one of those with `.gc', `.prof', `.proftime',",
"\t`.profcalls', `.tr', `.sa', `.debug', and/or `.pic_reg'",
"\tappended (in that order).",
@@ -1751,31 +1757,39 @@
"--no-gcc-global-registers\t(grades: none, jump, asm_jump)",
"\tSpecify whether or not to use GNU C's",
"\tglobal register variables extension.",
-% The --high-level-c option is not yet documented.
-% "\tThis option is ignored if the `--high-level-c' option is enabled.",
+% The --high-level-code option is not yet documented.
+% "\tThis option is ignored if the `--high-level-code' option is enabled.",
"--gcc-non-local-gotos\t\t(grades: jump, fast, asm_jump, asm_fast)",
"--no-gcc-non-local-gotos\t(grades: none, reg)",
"\tSpecify whether or not to use GNU C's",
"\t""labels as values"" extension.",
-% The --high-level-c option is not yet documented.
-% "\tThis option is ignored if the `--high-level-c' option is enabled.",
+% The --high-level-code option is not yet documented.
+% "\tThis option is ignored if the `--high-level-code' option is enabled.",
"--asm-labels\t\t\t(grades: asm_jump, asm_fast)",
"--no-asm-labels\t\t\t(grades: none, reg, jump, fast)",
"\tSpecify whether or not to use GNU C's",
"\tasm extensions for inline assembler labels.",
-% The --high-level-c option is not yet documented.
-% "\tThis option is ignored if the `--high-level-c' option is enabled.",
-% The --high-level-c option is not yet documented,
+% The --high-level-code option is not yet documented.
+% "\tThis option is ignored if the `--high-level-code' option is enabled.",
+% The --high-level-code option is not yet documented,
% because the MLDS back-end is not yet complete enough to be useful.
-% "--high-level-c\t\t\t(grades: ansi, nest)",
+% "--high-level-code\t\t\t(grades: hl, hlc, hl_nest, hlc_nest)",
% "\tUse an alternative back-end that generates high-level C code",
% "\trather than the very low-level C code that is generated by our",
% "\toriginal back-end.",
+% The --high-level-data option is not yet documented,
+% because it is not yet implemented
+% "--high-level-data\t\t\t(grades: hl, hl_nest)",
+% "\tUse an alternative higher-level data representation.",
+% The --high-level option is not yet documented,
+% because --high-level-data is not yet implemented
+% "--high-level\t\t\t(grades: hl, hl_nest)",
+% "\tAn abbreviation for `--high-level-code --high-level-data'.",
% The --gcc-nested-functions option is not yet documented,
-% because it is not yet implemented.
-% "--gcc-nested-functions\t\t(grades: nest)",
+% because the MLDS back-end is not yet complete enough to be useful.
+% "--gcc-nested-functions\t\t(grades: hl_nest, hlc_nest)",
% "\tSpecify whether or not to use GNU C's nested functions extension.",
-% "\tThis option is ignored if the `--high-level-c' option is not enabled.",
+% "\tThis option is ignored if the `--high-level-code' option is not enabled.",
"--gc {none, conservative, accurate}",
"--garbage-collection {none, conservative, accurate}",
"\t\t\t\t(`.gc' grades use `--gc conservative',",
@@ -1954,10 +1968,10 @@
"\tshould be allowed to get. Given as an integer percentage",
"\t(valid range: 1 to 100, default: 90)."
-% This option is not yet documented because the `--high-level-c' MLDS backend
+% This option is not yet documented because the `--high-level-code' MLDS backend
% is still not yet complete.
% "--gcc-local-labels",
-% "\tThis option has no effect unless both the `--high-level-c' option",
+% "\tThis option has no effect unless both the `--high-level-code' option",
% "\tand the `--gcc-nested-functions' options are enabled.",
% "\tIf this option is enabled, the Mercury compiler will generate",
% "\tC code that uses GNU C's local labels extension to allow",
Index: scripts/init_grade_options.sh-subr
===================================================================
RCS file: /home/mercury1/repository/mercury/scripts/init_grade_options.sh-subr,v
retrieving revision 1.9
diff -u -d -r1.9 init_grade_options.sh-subr
--- scripts/init_grade_options.sh-subr 1999/11/09 01:45:42 1.9
+++ scripts/init_grade_options.sh-subr 1999/12/06 09:41:00
@@ -41,7 +41,15 @@
of the Mercury User's Guide."
# --profile-deep is not yet documented because it is not yet implemented
+# --high-level-code is not yet documented because it is not yet stable
+# --gcc-nested-functions is not yet documented because it is not yet stable
+# --high-level-data is not yet documented because it is not yet implemented
+# --high-level is not yet documented because --high-level-data is
+# not yet implemented
+highlevel_code=false
+highlevel_data=false
+gcc_nested_functions=false
asm_labels=true
non_local_gotos=true
global_regs=true
Index: scripts/mgnuc.in
===================================================================
RCS file: /home/mercury1/repository/mercury/scripts/mgnuc.in,v
retrieving revision 1.67
diff -u -d -r1.67 mgnuc.in
--- scripts/mgnuc.in 1999/11/09 01:45:42 1.67
+++ scripts/mgnuc.in 1999/12/06 09:45:46
@@ -219,6 +219,21 @@
# mentioned in runtime/mercury_grade.h.
#
+case $highlevel_code in
+ true) HLC_OPTS="-DMR_HIGHLEVEL_CODE" ;;
+ false) HLC_OPTS="" ;;
+esac
+
+case $highlevel_data in
+ true) HLD_OPTS="-DMR_HIGHLEVEL_DATA" ;;
+ false) HLD_OPTS="" ;;
+esac
+
+case $gcc_nested_functions in
+ true) NEST_OPTS="-DMR_USE_GCC_NESTED_FUNCTIONS" ;;
+ false) NEST_OPTS="" ;;
+esac
+
case $asm_labels in
true) ASM_OPTS="-DUSE_ASM_LABELS" ;;
false) ASM_OPTS="" ;;
@@ -301,12 +316,12 @@
false) TRACE_OPTS="" ;;
esac
-GRADE_OPTS="$ASM_OPTS $GOTO_OPTS $REG_OPTS"
+GCC_OPTS="$NEST_OPTS $ASM_OPTS $GOTO_OPTS $REG_OPTS"
# check that special grades are only used with gcc
case $COMPILER in
gcc) ;;
- *) case "$GRADE_OPTS" in
+ *) case "$GCC_OPTS" in
*USE_GCC*)
echo "$0: For compilers other than GNU C, the only" 1>&2
echo "$0: base grade allowed is \`none'" 1>&2
@@ -316,13 +331,13 @@
# if we're using global registers, add CFLAGS_FOR_REGS
case $global_regs in
- true) GRADE_OPTS="$GRADE_OPTS $CFLAGS_FOR_REGS" ;;
+ true) GCC_OPTS="$GCC_OPTS $CFLAGS_FOR_REGS" ;;
false) ;;
esac
# if we're using non-local gotos, add CFLAGS_FOR_GOTOS
case $non_local_gotos in
- true) GRADE_OPTS="$GRADE_OPTS $CFLAGS_FOR_GOTOS" ;;
+ true) GCC_OPTS="$GCC_OPTS $CFLAGS_FOR_GOTOS" ;;
false) ;;
esac
@@ -443,7 +458,7 @@
ALL_CC_OPTS="$MERC_ALL_C_INCL_DIRS $ANSI_OPTS $CHECK_OPTS $OPT_OPTS \
- $GRADE_OPTS $GC_OPTS $DEFINE_OPTS \
+ $HLC_OPTS $HLD_OPTS $GCC_OPTS $GC_OPTS $DEFINE_OPTS \
$TRACE_OPTS $STACK_TRACE_OPTS $LLDEBUG_OPTS $C_DEBUG_OPTS \
$PROF_TIME_OPTS $PROF_CALLS_OPTS $PROF_MEMORY_OPTS \
$INLINE_ALLOC_OPTS $TRAIL_OPTS $MINIMAL_MODEL_OPTS \
Index: scripts/ml.in
===================================================================
RCS file: /home/mercury1/repository/mercury/scripts/ml.in,v
retrieving revision 1.74
diff -u -d -r1.74 ml.in
--- scripts/ml.in 1999/11/25 09:09:46 1.74
+++ scripts/ml.in 1999/12/06 10:02:58
@@ -359,6 +359,29 @@
true) GRADE="asm_$GRADE" ;;
false) ;;
esac
+case $highlevel_code,$highlevel_data,$GRADE in
+ true,true,none)
+ GRADE="hl" ;;
+ true,false,none)
+ GRADE="hlc" ;;
+ false,false,*)
+ # GRADE was set above
+ ;;
+ false,true,*)
+ echo "\`--high-level-data' requires \`--high-level-code'" 1>&2
+ exit 1
+ ;;
+ *)
+ echo "\`--high-level-code' is incompatible with the use of" 1>&2
+ echo "low-level gcc extensions implied by grade \`$GRADE'" 1>&2
+ exit 1
+ ;;
+esac
+case $gcc_nested_functions,$highlevel_code in
+ true,true) GRADE="${GRADE}_nest" ;;
+ *) ;;
+esac
+
case $thread_safe in
true) GRADE="$GRADE.par" ;;
false) ;;
@@ -558,6 +581,15 @@
case "$MKFIFO" in
none) demangle=false ;;
+esac
+
+#
+# The MLDS (--high-level-code) back-end uses a different
+# name mangling scheme which the current demangler doesn't
+# know how to demangle.
+#
+case "$highlevel_code" in
+ false) demangle=false ;;
esac
case $verbose in
Index: scripts/parse_grade_options.sh-subr
===================================================================
RCS file: /home/mercury1/repository/mercury/scripts/parse_grade_options.sh-subr,v
retrieving revision 1.12
diff -u -d -r1.12 parse_grade_options.sh-subr
--- scripts/parse_grade_options.sh-subr 1999/11/09 01:45:43 1.12
+++ scripts/parse_grade_options.sh-subr 1999/12/06 09:56:44
@@ -19,6 +19,21 @@
#
#---------------------------------------------------------------------------#
+ --high-level-code)
+ high_level_code=true ;;
+ --no-high-level-code)
+ high_level_code=false ;;
+
+ --high-level-data)
+ high_level_data=true ;;
+ --no-high-level-data)
+ high_level_data=false ;;
+
+ --gcc-nested-functions)
+ gcc_nested_functions=true ;;
+ --no-gcc-nested-functions)
+ gcc_nested_functions=false ;;
+
--asm-labels)
asm_labels=true ;;
--no-asm-labels)
@@ -133,6 +148,9 @@
# may also require changes to all the files indicated by
# runtime/mercury_grade.h.
+ high_level_code=false
+ gcc_nested_functions=false
+ high_level_data=false
asm_labels=false
non_local_gotos=false
global_regs=false
@@ -152,35 +170,85 @@
for grade_piece in $grade_pieces
do
case "$grade_piece" in
+ hl)
+ asm_labels=false
+ non_local_gotos=false
+ global_regs=false
+ high_level_code=true
+ gcc_nested_functions=false
+ high_level_data=true
+ ;;
+ hlc)
+ asm_labels=false
+ non_local_gotos=false
+ global_regs=false
+ high_level_code=true
+ gcc_nested_functions=false
+ high_level_data=false
+ ;;
+ hl_nest)
+ asm_labels=false
+ non_local_gotos=false
+ global_regs=false
+ high_level_code=true
+ gcc_nested_functions=true
+ high_level_data=true
+ ;;
+ hlc_nest)
+ asm_labels=false
+ non_local_gotos=false
+ global_regs=false
+ high_level_code=true
+ gcc_nested_functions=true
+ high_level_data=false
+ ;;
asm_fast)
asm_labels=true
non_local_gotos=true
global_regs=true
+ high_level_code=false
+ gcc_nested_functions=false
+ high_level_data=false
;;
asm_jump)
asm_labels=true
non_local_gotos=true
global_regs=false
+ high_level_code=false
+ gcc_nested_functions=false
+ high_level_data=false
;;
fast)
asm_labels=false
non_local_gotos=true
global_regs=true
+ high_level_code=false
+ gcc_nested_functions=false
+ high_level_data=false
;;
jump)
asm_labels=false
non_local_gotos=true
global_regs=false
+ high_level_code=false
+ gcc_nested_functions=false
+ high_level_data=false
;;
reg)
asm_labels=false
non_local_gotos=false
global_regs=true
+ high_level_code=false
+ gcc_nested_functions=false
+ high_level_data=false
;;
none)
asm_labels=false
non_local_gotos=false
global_regs=false
+ high_level_code=false
+ gcc_nested_functions=false
+ high_level_data=false
;;
par)
--
Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh> | of excellence is a lethal habit"
PGP: finger fjh at 128.250.37.3 | -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list