Kaynağa Gözat

m68k: inherit the aout assembler writer instead of the normal one for amiga and atari. this allows to remove some of the previously added hacks in the generic writer

git-svn-id: trunk@35114 -
Károly Balogh 8 yıl önce
ebeveyn
işleme
2dc1d681c2
1 değiştirilmiş dosya ile 35 ekleme ve 7 silme
  1. 35 7
      compiler/m68k/ag68kgas.pas

+ 35 - 7
compiler/m68k/ag68kgas.pas

@@ -36,6 +36,13 @@ interface
         function MakeCmdLine : TCmdStr; override;
       end;
 
+    type
+      Tm68kAoutGNUAssembler=class(TAoutGNUAssembler)
+        constructor CreateWithWriter(info: pasminfo; wr: TExternalAssemblerOutputFile; freewriter, smart: boolean); override;
+        function MakeCmdLine : TCmdStr; override;
+      end;
+
+
     type
       Tm68kInstrWriter=class(TCPUInstrWriter)
         procedure WriteInstruction(hp: tai);override;
@@ -54,6 +61,13 @@ interface
       verbose,itcpugas;
 
 
+    function GasMachineArg: string;
+      const
+        MachineArgNewOld: array[boolean] of string = ('-march=','-m');
+      begin
+        result:=MachineArgNewOld[target_info.system in [system_m68k_amiga]]+GasCpuTypeStr[current_settings.cputype];
+      end;
+
  {****************************************************************************}
  {                         GNU m68k Assembler writer                          }
  {****************************************************************************}
@@ -67,13 +81,27 @@ interface
  function Tm68kGNUAssembler.MakeCmdLine: TCmdStr;
    begin
      result:=inherited MakeCmdLine;
-     // Use old -m option for Amiga system
-     if target_info.system=system_m68k_amiga then
-       Replace(result,'$ARCH','-m'+GasCpuTypeStr[current_settings.cputype])
-     else
-       Replace(result,'$ARCH','-march='+GasCpuTypeStr[current_settings.cputype]);
+     Replace(result,'$ARCH',GasMachineArg);
+   end;
+
+
+ {****************************************************************************}
+ {                         GNU m68k Aout Assembler writer                     }
+ {****************************************************************************}
+
+ constructor Tm68kAoutGNUAssembler.CreateWithWriter(info: pasminfo; wr: TExternalAssemblerOutputFile; freewriter, smart: boolean);
+   begin
+     inherited;
+     InstrWriter := Tm68kInstrWriter.create(self);
+   end;
+
+ function Tm68kAoutGNUAssembler.MakeCmdLine: TCmdStr;
+   begin
+     result:=inherited MakeCmdLine;
+     Replace(result,'$ARCH',GasMachineArg);
    end;
 
+
     function getreferencestring(var ref : treference) : string;
       var
          s,basestr,indexstr : string;
@@ -330,7 +358,7 @@ interface
        as_m68k_as_aout_info : tasminfo =
           (
             id     : as_m68k_as_aout;
-            idtxt  : 'AS';
+            idtxt  : 'AS-AOUT';
             asmbin : 'as';
             asmcmd : '$ARCH -o $OBJ $EXTRAOPT $ASM';
             supported_targets : [system_m68k_Amiga,system_m68k_Atari];
@@ -344,5 +372,5 @@ interface
 
 initialization
   RegisterAssembler(as_m68k_as_info,Tm68kGNUAssembler);
-  RegisterAssembler(as_m68k_as_aout_info,Tm68kGNUAssembler);
+  RegisterAssembler(as_m68k_as_aout_info,Tm68kAoutGNUAssembler);
 end.