init_stuff = mkModuleInit fe_binders mod_name imported_modules
cost_centre_info
- abstractC = mkAbstractCs [ init_stuff,
+ abstractC = mkAbstractCs [ maybe_split,
+ init_stuff,
code_stuff,
datatype_stuff]
-- Put datatype_stuff after code_stuff, because the
$chkcat[$i] = 'literal';
$chksymb[$i] = $1;
- } elsif ( /^$TUS[@]?__stg_split_marker(\d+)$TPOSTLBL[@]?$/o ) {
+ } elsif ( /^$TUS[@]?__stg_split_marker(\d*)$TPOSTLBL[@]?$/o ) {
$chk[++$i] = $_;
$chkcat[$i] = 'splitmarker';
$chksymb[$i] = $1;
# HWL HACK: dont die, just print a warning
#print stderr "HWL: this should die! Epilogue junk?: $e\n" if $e =~ /^\t[^\.]/
# && $TargetPlatform !~ /^powerpc-/; #ToDo: remove test
- die "Epilogue junk?: $e\n" if $e =~ /^\t[^\.]/
+ die "Epilogue junk?: $e\n" if $e =~ /^\t[^\.\n]/
&& $TargetPlatform !~ /^powerpc-/; #ToDo: remove test
# glue together what's left
%************************************************************************
\begin{code}
-sub inject_split_markers {
- local($hc_file) = @_;
-
- unlink("$Tmp_prefix.unmkd");
- local($to_do) = "$Cp $hc_file $Tmp_prefix.unmkd";
- &run_something($to_do, 'Prepare to number split markers');
-
- open(TMPI, "< $Tmp_prefix.unmkd") || &tidy_up_and_die(1,"$Pgm: failed to open `$Tmp_prefix.unmkd' (to read)\n");
- open(TMPO, "> $hc_file") || &tidy_up_and_die(1,"$Pgm: failed to open `$hc_file' (to write)\n");
-
- local($marker_no) = 1;
-
- # make sure there is a split marker before any "real" code
- $_ = <TMPI>;
- while ( $_ ne '' && ( /^$/ || /^#/ ) ) {
- print TMPO $_;
- $_ = <TMPI>;
- }
- print TMPO "__STG_SPLIT_MARKER(1)\n";
- print TMPO $_ if ! /^\s*\/\* SPLIT \*\/\s*$/;
-
- # Have to be a bit careful detecting /* SPLIT */ comments
- # since a progam may use a string containing "/* SPLIT */"
- # We check that there is nothing else on the line
-
- while (<TMPI>) {
- if (/^\s*\/\* SPLIT \*\/\s*$/) {
- $marker_no++;
- print TMPO "__STG_SPLIT_MARKER($marker_no)\n";
- next;
- }
- print TMPO $_;
- }
-
- close(TMPI) || &tidy_up_and_die(1,"Failed reading $Tmp_prefix.unmkd\n");
- close(TMPO) || &tidy_up_and_die(1,"Failed writing $hc_file\n");
-}
-\end{code}
-
-\begin{code}
sub split_asm_file {
local($asm_file) = @_;
\begin{code}
sub setupOptFlags {
$Oopt_MaxSimplifierIterations = '-fmax-simplifier-iterations4';
- $Oopt_PedanticBottoms = '-fpedantic-bottoms'; # ON by default
$Oopt_FinalStgProfilingMassage = '';
$Oopt_StgStats = '';
$Oopt_DoSpecialise = '-fspecialise';
'-fcase-of-case',
'-fcase-merge',
'-flet-to-case',
- $Oopt_PedanticBottoms,
# initial simplify: mk specialiser happy: minimum effort please
# ( ($OptLevel != 2)
# ? ''
-# : "-fliberate-case -fsimplify [ $Oopt_FB_Support -ffloat-lets-exposing-whnf -ffloat-primops-ok -fcase-of-case -fdo-case-elim -fcase-merge -fdo-lambda-eta-expansion -freuse-con -flet-to-case $Oopt_PedanticBottoms $Oopt_MaxSimplifierIterations $Oopt_ShowSimplifierProgress ]" ),
+# : "-fliberate-case -fsimplify [ $Oopt_FB_Support -ffloat-lets-exposing-whnf -ffloat-primops-ok -fcase-of-case -fdo-case-elim -fcase-merge -fdo-lambda-eta-expansion -freuse-con -flet-to-case $Oopt_MaxSimplifierIterations $Oopt_ShowSimplifierProgress ]" ),
# '-fliberate-case',
}
- # if we're going to split up object files,
- # we inject split markers into the .hc file now
- if ( $HscLang eq 'C' && $SplitObjFiles ) {
- &inject_split_markers ( $hsc_out );
- }
-
# save a copy of the .hc file, even if we are carrying on...
if ($HscLang eq 'C' && $do_cc && $Keep_hc_file_too) {
&saveIntermediate($ifile_root , "hc" , $hsc_out);
&& do { $Oopt_MaxSimplifierIterations = $1 . &grab_arg_arg(*Args,$1, $2);
next arg; };
- /^-fno-pedantic-bottoms$/
- && do { $Oopt_PedanticBottoms = ''; next arg; };
-
/^-fno-pre-inlining$/
&& do { push(@HsC_flags, $_); next arg };
/* -----------------------------------------------------------------------------
- * $Id: StgMacros.h,v 1.25 2000/05/08 15:05:36 simonmar Exp $
+ * $Id: StgMacros.h,v 1.26 2000/06/08 12:54:29 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
-------------------------------------------------------------------------- */
#if defined(USE_SPLIT_MARKERS)
-#define __STG_SPLIT_MARKER(n) FN_(__stg_split_marker##n) { }
+#define __STG_SPLIT_MARKER __asm__("\n__stg_split_marker:");
#else
-#define __STG_SPLIT_MARKER(n) /* nothing */
+#define __STG_SPLIT_MARKER /* nothing */
#endif
/* -----------------------------------------------------------------------------