[project @ 2000-06-13 15:35:29 by andre]
authorandre <unknown>
Tue, 13 Jun 2000 15:35:29 +0000 (15:35 +0000)
committerandre <unknown>
Tue, 13 Jun 2000 15:35:29 +0000 (15:35 +0000)
RS6000/AIX patches

ghc/driver/mangler/ghc-asm.lprl

index 0b6ec0c..31d0620 100644 (file)
@@ -483,13 +483,7 @@ 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';
@@ -518,6 +512,10 @@ sub mangle_asm {
             # I guess this is never entered, since all _upds are 
             # either vtbl_'s or ret_'s, caught above. - andre
            $chksymb[$i] = ''; 
+#            if ($TargetPlatform =~ /^powerpc-/) 
+#               { $chksymb[$i] = $symbtmp;}
+#          else { $chksymb[$i] = ''; };
+           
 
        } elsif ( $TargetPlatform =~ /^i386-.*-solaris2/
             &&   /^(_uname|uname|stat|fstat):/ ) {
@@ -579,6 +577,7 @@ sub mangle_asm {
   
     # HPPAs, MIPSen: also start medding at chunk 1
 
+# AIX hack for the moment, to join up multiple identical tocs
     if ($TargetPlatform =~ /^powerpc|^rs6000/) {
        print OUTASM $T_HDR_toc; # yes, we have to put a .toc 
                                 # in the beginning of every file!
@@ -588,9 +587,7 @@ sub mangle_asm {
        $chk[$i] =~ s/\[RW\]//g;
        $chk[$i] =~ s/\[DS\]//g;
        $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/;
@@ -600,11 +597,6 @@ 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 IndUpdRetDir\[TC\],IndUpdRetDir/\.tc IndUpdRetDir\[TC\],\.IndUpdRetDir/;
             $chk[$i] =~ s/\t\.tc (_PRStart_\S+)\[TC\],_PRStart_\S+/\t\.tc \1\[TC\],\.\1/;
 
@@ -665,9 +657,7 @@ 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//g;
-                   $p =~ s/^\tstw? 1,\d+\(1\)\n//g; #mc
-                   $p =~ s/^\tlw?z 0,0\(1\)\n//g;   #mc
+                   $p =~ s/^\tstw? 0,\d+\(1\)\n//;
                    $p =~ s/^\tstw?u 1,-\d+\(1\)\n//; 
                    $p =~ s/^\tstw? \d+,-\d+\(1\)\n//g; 
                    $p =~ s/^\tstfd \d+,-\d+\(1\)\n//g; 
@@ -858,8 +848,7 @@ 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 '' && $chksymb[$i] !~ /ret_[a-z]/ && $chksymb[$i] !~ /djn_[a-z]/) 
-                   if ($chksymb[$i] ne '')
+                   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;}
@@ -868,10 +857,8 @@ sub mangle_asm {
                 };
                &print_doctored($chk[$i], 0);
                 if ($TargetPlatform =~ /^powerpc-|^rs6000-/ && $printDS) { 
-#ok                   if ($chksymb[$i] !~ /\_regMain/) {
-                    print OUTASM "\.csect ${chksymb[$i]}[DS]\n";       
-                    print OUTASM "${p}TOC[tc0], 0\n";
-#ok                   }
+                  print OUTASM "\.csect ${chksymb[$i]}[DS]\n";         
+                  print OUTASM "${p}TOC[tc0], 0\n";
                 }
            }
 
@@ -925,11 +912,6 @@ 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/;
@@ -1023,7 +1005,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);
@@ -1082,11 +1064,7 @@ sub mangle_asm {
            print OUTASM $T_HDR_toc;
             local($j)  = $i;
             while ($chkcat[$j] eq 'toc')
-              { if (   $chk[$j] !~ /\.tc UpdatePAP\[TC\]/ # not needed: always turned into a jump.
-                   ) 
-                {
-                  print OUTASM $chk[$j];
-                }
+              { print OUTASM $chk[$j];
                 $chkcat[$j] = 'DONE ALREADY';
                 $j++;
            }
@@ -1547,8 +1525,6 @@ 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;
     }