$T_X86_PRE_LLBL = '.L';
$T_X86_BADJMP = '^\tjmp\s+[^\.\*]';
- $T_MOVE_DIRVS = '^(\s*(\.(p2)?align\s+\d+(,\s*0x90)?|\.globl\s+\S+|\.text|\.data|\.section\s+.*|\.type\s+.*|\.Lfe.*\n\s*\.size\s+.*|\.size\s+.*|\.ident.*)\n)';
- $T_COPY_DIRVS = '\.(globl)';
+ $T_MOVE_DIRVS = '^(\s*(\.(p2)?align\s+\d+(,\s*0x90)?|\.globl\s+\S+|\.text|\.data|\.section\s+.*|\.type\s+.*|\.size\s+\S+,\d+|\.ident.*)\n)';
+ $T_COPY_DIRVS = '^\s*\.(globl|type|size)';
if ( $TargetPlatform =~ /freebsd|netbsd/ ) {
$T_hsc_cc_PAT = '\.ascii.*\)(hsc|cc) (.*)\\\\11"\n\t\.ascii\s+"(.*)\\\\0"';
|| ! /^L\$\d+$/ ) ) {
local($thing);
chop($thing = $_);
- print STDERR "Warning: retaining unknown function `$_' in output from C compiler"
+ $thing =~ s/:$//;
+ print STDERR "Warning: retaining unknown function \`$thing' in output from C compiler\n"
unless # $KNOWN_FUNNY_THING{$thing}
/^${T_US}stg_.*${T_POST_LBL}$/o # RTS internals
|| /^${T_US}__stg_.*${T_POST_LBL}$/o # more RTS internals
$p =~ s/^\tpushl\s+\%edi\n//;
$p =~ s/^\tpushl\s+\%esi\n//;
$p =~ s/^\tpushl\s+\%ebx\n//;
+ $p =~ s/^\tmovl\s+\%esi,\s*\d*\(\%esp\)\n//;
+ $p =~ s/^\tmovl\s+\%edi,\s*\d*\(\%esp\)\n//;
$p =~ s/^\tsubl\s+\$\d+,\s*\%esp\n//;
$p =~ s/^\tmovl\s+\$\d+,\s*\%eax\n\tcall\s+__alloca\n// if ($TargetPlatform =~ /^.*-cygwin32/);
# GCC 3.1 is in the habit of adding spurious writes to the
# stack in the prologue. Just to be on the safe side,
# chuck these over the fence into the main code.
- while ($p =~ /^\tmovl\s+(\$\d+|\%edi),\s*\d*\(\%esp\)\n/) {
+ while ($p =~ /^\tmovl\s+\$\d+,\s*\d*\(\%esp\)\n/) {
# print "Spurious instruction: $&";
$p = $` . $';
$r = $& . $r;