Bladeren bron

m68k: added a simple VASM writer frontend for the GNU AS writer (as VASM has a compatiblity mode)

git-svn-id: trunk@33847 -
Károly Balogh 9 jaren geleden
bovenliggende
commit
a756609a27
3 gewijzigde bestanden met toevoegingen van 117 en 0 verwijderingen
  1. 1 0
      .gitattributes
  2. 115 0
      compiler/m68k/ag68kvasm.pas
  3. 1 0
      compiler/m68k/cputarg.pas

+ 1 - 0
.gitattributes

@@ -358,6 +358,7 @@ compiler/llvm/symllvm.pas svneol=native#text/plain
 compiler/llvm/tgllvm.pas svneol=native#text/plain
 compiler/m68k/aasmcpu.pas svneol=native#text/plain
 compiler/m68k/ag68kgas.pas svneol=native#text/plain
+compiler/m68k/ag68kvasm.pas svneol=native#text/plain
 compiler/m68k/aoptcpu.pas svneol=native#text/plain
 compiler/m68k/aoptcpub.pas svneol=native#text/plain
 compiler/m68k/aoptcpud.pas svneol=native#text/plain

+ 115 - 0
compiler/m68k/ag68kvasm.pas

@@ -0,0 +1,115 @@
+{
+    Copyright (c) 2016 by the Free Pascal development team
+
+    This unit is the VASM assembler writer for 68k
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************
+}
+
+unit ag68kvasm;
+
+{$i fpcdefs.inc}
+
+  interface
+
+    uses
+       aasmbase,systems,
+       aasmtai,aasmdata,
+       aggas,ag68kgas,
+       cpubase,cgutils,
+       globtype;
+
+  type
+    tm68kvasm = class(Tm68kGNUassembler)
+      constructor create(info: pasminfo; smart: boolean); override;
+      function MakeCmdLine: TCmdStr; override;
+    end;
+
+  implementation
+
+    uses
+       cutils,cfileutl,globals,verbose,
+       cgbase,
+       assemble,script,
+       itcpugas,cpuinfo,
+       aasmcpu;
+
+
+{****************************************************************************}
+{                         VASM m68k Assembler writer                         }
+{****************************************************************************}
+
+
+    constructor tm68kvasm.create(info: pasminfo; smart: boolean);
+      begin
+        inherited;
+        InstrWriter := Tm68kInstrWriter.create(self);
+      end;
+
+    function tm68kvasm.MakeCmdLine: TCmdStr;
+      var
+        objtype: string;
+      begin
+        result:=asminfo^.asmcmd;
+
+        case target_info.system of
+          system_m68k_amiga: objtype:='-Fhunk';
+          system_m68k_atari: objtype:='-Fvobj'; // fix me?
+          system_m68k_linux: objtype:='-Felf';
+        else
+          internalerror(2016052601);
+        end;
+
+        if (target_info.system = system_m68k_amiga) then 
+          begin
+            Replace(result,'$ASM',maybequoted(ScriptFixFileName(Unix2AmigaPath(AsmFileName))));
+            Replace(result,'$OBJ',maybequoted(ScriptFixFileName(Unix2AmigaPath(ObjFileName))));
+          end
+        else
+          begin
+            Replace(result,'$ASM',maybequoted(ScriptFixFileName(AsmFileName)));
+            Replace(result,'$OBJ',maybequoted(ScriptFixFileName(ObjFileName)));
+          end;
+        Replace(result,'$ARCH','-m'+GasCpuTypeStr[current_settings.cputype]);
+        Replace(result,'$OTYPE',objtype);
+        Replace(result,'$EXTRAOPT',asmextraopt);
+      end;
+
+
+
+{*****************************************************************************
+                                  Initialize
+*****************************************************************************}
+
+  const
+    as_m68k_vasm_info : tasminfo =
+       (
+         id     : as_m68k_vasm;
+
+         idtxt  : 'VASM';
+         asmbin : 'vasmm68k_std';
+         asmcmd:  '-quiet -elfregs -gas $OTYPE $ARCH -o $OBJ $EXTRAOPT $ASM';
+         supported_targets : [system_m68k_amiga,system_m68k_atari,system_m68k_linux];
+         flags : [af_needar,af_smartlink_sections];
+         labelprefix : '.L';
+         comment : '# ';
+         dollarsign: '$';
+       );
+
+begin
+  RegisterAssembler(as_m68k_vasm_info,tm68kvasm);
+end.

+ 1 - 0
compiler/m68k/cputarg.pas

@@ -59,6 +59,7 @@ implementation
 **************************************}
 
       ,ag68kgas
+      ,ag68kvasm
 
 {**************************************
              Debuginfo