Skip to content
Snippets Groups Projects
Commit 17d74e64 authored by André Santos's avatar André Santos
Browse files

[project @ 2000-06-13 15:35:29 by andre]

Parallel 2.04 patches
parent a7b34ca3
No related merge requests found
......@@ -483,7 +483,13 @@ sub mangle_asm {
$chk[++$i] = $_;
$chkcat[$i] = 'toc';
$chksymb[$i] = $1;
} elsif ( $TargetPlatform =~ /^powerpc-|^rs6000-/ && /^CC_.*$/ ) {
# all CC_ symbols go in the data section...
$chk[++$i] = $_;
$chkcat[$i] = 'data';
$chksymb[$i] = '';
} elsif ( /^($TUS[@]?(ret_|djn_)[A-Za-z0-9_]+)/o ) {
$chk[++$i] = $_;
$chkcat[$i] = 'misc';
......@@ -584,6 +590,7 @@ sub mangle_asm {
$chk[$i] =~ s/^\.csect .*\[DS\]$//g;
if ( $chkcat[$i] eq 'toc' && $chk[$i] !~ /\.byte/ )
#ToDo: instead of all these changes, just fix mangle_powerpc_tailjump and delete/ignore these tocs?
{ $chk[$i] =~ s/$T_MOVE_DIRVS//g;
$chk[$i] =~ s/\t\.tc (\S+)\[TC\],(\S+_fast\d+)/\t\.tc \1\[TC\],\.\2/;
$chk[$i] =~ s/\t\.tc (\S+)\[TC\],(\S+_entry)\n/\t\.tc \1\[TC\],\.\2\n/;
......@@ -593,6 +600,12 @@ sub mangle_asm {
$chk[$i] =~ s/\t\.tc (\S+)\[TC\],ErrorIO_innards/\t\.tc \1\[TC\],\.ErrorIO_innards/;
$chk[$i] =~ s/\t\.tc (\S+)\[TC\],startStgWorld/\t\.tc \1\[TC\],\.startStgWorld/;
$chk[$i] =~ s/\.tc UpdatePAP\[TC\],UpdatePAP/\.tc UpdatePAP\[TC\],\.UpdatePAP/;
$chk[$i] =~ s/\.tc _regMain\[TC\],_regMain/\.tc _regMain\[TC\],\._regMain/; #PROF
$chk[$i] =~ s/\.tc resumeThread\[TC\],resumeThread/\.tc resumeThread\[TC\],\.resumeThread/; #CONC
$chk[$i] =~ s/\.tc EnterNodeCode\[TC\],EnterNodeCode/\.tc EnterNodeCode\[TC\],\.EnterNodeCode/; #CONC
$chk[$i] =~ s/\.tc StackUnderflowEnterNode\[TC\],StackUnderflowEnterNode/\.tc StackUnderflowEnterNode\[TC\],\.StackUnderflowEnterNode/; #CONC
$chk[$i] =~ s/\.tc stopThreadDirectReturn\[TC\],stopThreadDirectReturn/\.tc stopThreadDirectReturn\[TC\],\.stopThreadDirectReturn/; #CONC
$chk[$i] =~ s/\.tc CommonUnderflow\[TC\],CommonUnderflow/\.tc CommonUnderflow\[TC\],\.CommonUnderflow/; #PAR
$chk[$i] =~ s/\.tc IndUpdRetDir\[TC\],IndUpdRetDir/\.tc IndUpdRetDir\[TC\],\.IndUpdRetDir/;
$chk[$i] =~ s/\t\.tc (_PRStart_\S+)\[TC\],_PRStart_\S+/\t\.tc \1\[TC\],\.\1/;
......@@ -653,7 +666,9 @@ sub mangle_asm {
} elsif ($TargetPlatform =~ /^powerpc-|^rs6000/) {
$p =~ s/^\tmflr 0\n//;
$p =~ s/^\tstm \d+,-\d+\(1\)\n//;
$p =~ s/^\tstw? 0,\d+\(1\)\n//;
$p =~ s/^\tstw? 0,\d+\(1\)\n//g;
$p =~ s/^\tstw? 1,\d+\(1\)\n//g; #mc
$p =~ s/^\tlw?z 0,0\(1\)\n//g; #mc
$p =~ s/^\tstw?u 1,-\d+\(1\)\n//;
$p =~ s/^\tstw? \d+,-\d+\(1\)\n//g;
$p =~ s/^\tstfd \d+,-\d+\(1\)\n//g;
......@@ -844,7 +859,8 @@ sub mangle_asm {
#new if ($chksymb[$i] =~ /ret.*upd/ || $KNOWN_FUNNY_THING{$chksymb[$i]}
#new || $chksymb[$i] =~ /^$.{T_US}_(PRIn|PRStart).*${T_POST_LBL}$/o )
#new { print OUTASM "\t\.globl $chksymb[$i]\n"; }
if ($chksymb[$i] ne '')
# if ($chksymb[$i] ne '' && $chksymb[$i] !~ /ret_[a-z]/ && $chksymb[$i] !~ /djn_[a-z]/)
if ($chksymb[$i] ne '')
{ print OUTASM "\t\.globl \.$chksymb[$i]\n"; };
if ($chk[$i] =~ /TOC\[tc0\], 0\n/)
{ ($p, $r) = split(/TOC\[tc0\], 0\n/, $chk[$i]); $printDS = 1;}
......@@ -853,8 +869,10 @@ sub mangle_asm {
};
&print_doctored($chk[$i], 0);
if ($TargetPlatform =~ /^powerpc-|^rs6000-/ && $printDS) {
print OUTASM "\.csect ${chksymb[$i]}[DS]\n";
print OUTASM "${p}TOC[tc0], 0\n";
#ok if ($chksymb[$i] !~ /\_regMain/) {
print OUTASM "\.csect ${chksymb[$i]}[DS]\n";
print OUTASM "${p}TOC[tc0], 0\n";
#ok }
}
}
......@@ -908,6 +926,11 @@ sub mangle_asm {
print OUTASM $T_HDR_info;
if ($TargetPlatform =~ /^powerpc-|^rs6000-/) {
if ( !defined($slowchk{$symb}) && defined($fastchk{$symb}) ) {
$fastname = $chk[$fastchk{$symb}];
$fastname =~ s/([_A-Za-z]*_fast\d+):.*(.*\n)*/\1/;
$chk[$infochk{$symb}] =~ s/\.long StdErrorCode/\.long $fastname/;
}
$chk[$infochk{$symb}] =~ s/\.long ([_A-Za-z]\S+_entry)/\.long \.\1/;
$chk[$infochk{$symb}] =~ s/\.long ([A-Za-z]\S+_upd)/\.long \.\1/;
$chk[$infochk{$symb}] =~ s/\.long (IndUpdRet\S+)/\.long \.\1/;
......@@ -1001,7 +1024,7 @@ sub mangle_asm {
if ( $fullname =~ /^[A-Z]/)
{ print OUTASM "\t\.globl \.${fullname}\n";
} else {
print OUTASM "\t\.lglobl \.${fullname}\n"; #todo: rm - andre
# print OUTASM "\t\.lglobl \.${fullname}\n"; #todo: rm - andre
};
$c =~ s/((.*\n)*)\t.long \S+, TOC\[tc0\], 0\n\.csect \.text\[PR\]\n((.*\n)*)/\1\3/;
$c = &mangle_powerpc_tailjump($c);
......@@ -1060,7 +1083,11 @@ sub mangle_asm {
print OUTASM $T_HDR_toc;
local($j) = $i;
while ($chkcat[$j] eq 'toc')
{ print OUTASM $chk[$j];
{ if ( $chk[$j] !~ /\.tc UpdatePAP\[TC\]/ # not needed: always turned into a jump.
)
{
print OUTASM $chk[$j];
}
$chkcat[$j] = 'DONE ALREADY';
$j++;
}
......@@ -1521,6 +1548,8 @@ sub mini_mangle_asm_powerpc {
s/long _PRMarking_MarkNextCAF\[DS\]/long ._PRMarking_MarkNextCAF/;
s/long _PRMarking_MarkNextAStack\[DS\]/long ._PRMarking_MarkNextAStack/;
s/long _PRMarking_MarkNextBStack\[DS\]/long ._PRMarking_MarkNextBStack/;
s/\.tc EnterNodeCode\[TC]\,EnterNodeCode\[DS\]/\.tc EnterNodeCode\[TC]\,.EnterNodeCode/; # CONC
s/\.tc CheckHeapCode\[TC]\,CheckHeapCode\[DS\]/\.tc CheckHeapCode\[TC]\,.CheckHeapCode/; # CONC
print OUTASM;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment