[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