| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | {    Copyright (c) 2016 by the Free Pascal development team    This unit is the VASM assembler writer for PowerPC    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 agppcvasm;{$i fpcdefs.inc}  interface    uses       aasmbase,systems,       aasmtai,aasmdata,       assemble,aggas,agppcgas,       cpubase,cgutils,       globtype;  type    tppcvasm = class(TPPCGNUassembler)    protected      function sectionattrs(atype:TAsmSectiontype):string; override;    public      constructor CreateWithWriter(info: pasminfo; wr: TExternalAssemblerOutputFile; freewriter, smart: boolean); override;      function MakeCmdLine: TCmdStr; override;      procedure WriteExtraHeader; override;    end;  implementation    uses       cutils,cfileutl,globals,verbose,       cgbase,       cscript,       itcpugas,cpuinfo,       aasmcpu;{****************************************************************************}{                         VASM PPC Assembler writer                          }{****************************************************************************}    constructor tppcvasm.CreateWithWriter(info: pasminfo; wr: TExternalAssemblerOutputFile; freewriter, smart: boolean);      begin        inherited;        InstrWriter := TPPCInstrWriter.create(self);      end;    function tppcvasm.sectionattrs(atype:TAsmSectiontype):string;      begin        case atype of          sec_code, sec_fpc, sec_init, sec_fini:            result:='acrx';          sec_data:            result:='adrw';          sec_rodata, sec_rodata_norel:            result:='adr';          sec_bss, sec_threadvar:            result:='aurw';          sec_stab, sec_stabstr:            result:='dr';          else            result:='';        end;      end;    function tppcvasm.MakeCmdLine: TCmdStr;      var        objtype: string;      begin        result:=asminfo^.asmcmd;        objtype:='-Felf';        if (target_info.system in [system_powerpc_amiga, system_powerpc_morphos]) 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,'$OTYPE',objtype);        Replace(result,'$EXTRAOPT',asmextraopt);      end;    procedure tppcvasm.WriteExtraHeader;      begin        { no-op, compared to the PPC GAS writer, because vasm defines          the register symbols by default, so lets not redefine them }      end;{*****************************************************************************                                  Initialize*****************************************************************************}  const    as_powerpc_vasm_info : tasminfo =       (         id     : as_powerpc_vasm;         idtxt  : 'VASM';         asmbin : 'vasmppc_std';         asmcmd:  '-quiet $OTYPE -o $OBJ $EXTRAOPT $ASM';         supported_targets : [system_powerpc_amiga,system_powerpc_morphos,system_powerpc_linux];         flags : [af_needar,af_smartlink_sections];         labelprefix : '.L';         labelmaxlen : -1;         comment : '# ';         dollarsign: '$';       );begin  RegisterAssembler(as_powerpc_vasm_info,tppcvasm);end.
 |