Kaynağa Gözat

+ some basic stuff for mips64el

git-svn-id: trunk@45614 -
florian 5 yıl önce
ebeveyn
işleme
9710b2cbb4

+ 1 - 0
.gitattributes

@@ -660,6 +660,7 @@ compiler/ppcgen/ngppcset.pas svneol=native#text/plain
 compiler/ppcgen/rgcpu.pas svneol=native#text/plain
 compiler/ppcgen/rgcpu.pas svneol=native#text/plain
 compiler/ppcjvm.lpi svneol=native#text/plain
 compiler/ppcjvm.lpi svneol=native#text/plain
 compiler/ppcmips.lpi svneol=native#text/plain
 compiler/ppcmips.lpi svneol=native#text/plain
+compiler/ppcmips64el.lpi svneol=native#text/plain
 compiler/ppcmipsel.lpi svneol=native#text/plain
 compiler/ppcmipsel.lpi svneol=native#text/plain
 compiler/ppcppc.lpi svneol=native#text/plain
 compiler/ppcppc.lpi svneol=native#text/plain
 compiler/ppcppc64.lpi svneol=native#text/plain
 compiler/ppcppc64.lpi svneol=native#text/plain

+ 7 - 1
compiler/fpcdefs.inc

@@ -242,6 +242,10 @@
   {$endif mips}
   {$endif mips}
 {$endif mipsel}
 {$endif mipsel}
 
 
+{$ifdef mips64el}
+  {$define mips}
+  {$define mips64}
+{$endif mipsel}
 
 
 {$ifdef mips}
 {$ifdef mips}
   {$ifndef mips64}
   {$ifndef mips64}
@@ -249,7 +253,9 @@
     {$define cpu32bitalu}
     {$define cpu32bitalu}
     {$define cpu32bitaddr}
     {$define cpu32bitaddr}
   {$else}
   {$else}
-    {$error mips64 not yet supported}
+    {$define cpu64bit}
+    {$define cpu64bitalu}
+    {$define cpu64bitaddr}
   {$endif}
   {$endif}
   {$define cpuflags} { Flags are emulated }
   {$define cpuflags} { Flags are emulated }
   {$define cputargethasfixedstack}
   {$define cputargethasfixedstack}

+ 11 - 1
compiler/mips/cgcpu.pas

@@ -27,7 +27,11 @@ interface
 
 
 uses
 uses
   globtype, parabase,
   globtype, parabase,
-  cgbase, cgutils, cgobj, cg64f32, cpupara,
+  cgbase, cgutils, cgobj,
+{$ifndef mips64}
+  cg64f32,
+{$endif mips64}
+  cpupara,
   aasmbase, aasmtai, aasmcpu, aasmdata,
   aasmbase, aasmtai, aasmcpu, aasmdata,
   cpubase, cpuinfo,
   cpubase, cpuinfo,
   node, symconst, SymType, symdef,
   node, symconst, SymType, symdef,
@@ -88,6 +92,7 @@ type
     procedure g_profilecode(list: TAsmList);override;
     procedure g_profilecode(list: TAsmList);override;
   end;
   end;
 
 
+{$ifndef mips64}
   TCg64MPSel = class(tcg64f32)
   TCg64MPSel = class(tcg64f32)
   public
   public
     procedure a_load64_reg_ref(list: tasmlist; reg: tregister64; const ref: treference); override;
     procedure a_load64_reg_ref(list: tasmlist; reg: tregister64; const ref: treference); override;
@@ -100,6 +105,7 @@ type
     procedure a_op64_const_reg_reg_checkoverflow(list: tasmlist; op: TOpCG; size: tcgsize; Value: int64; regsrc, regdst: tregister64; setflags: boolean; var ovloc: tlocation); override;
     procedure a_op64_const_reg_reg_checkoverflow(list: tasmlist; op: TOpCG; size: tcgsize; Value: int64; regsrc, regdst: tregister64; setflags: boolean; var ovloc: tlocation); override;
     procedure a_op64_reg_reg_reg_checkoverflow(list: tasmlist; op: TOpCG; size: tcgsize; regsrc1, regsrc2, regdst: tregister64; setflags: boolean; var ovloc: tlocation); override;
     procedure a_op64_reg_reg_reg_checkoverflow(list: tasmlist; op: TOpCG; size: tcgsize; regsrc1, regsrc2, regdst: tregister64; setflags: boolean; var ovloc: tlocation); override;
   end;
   end;
+{$endif mips64}
 
 
   procedure create_codegen;
   procedure create_codegen;
 
 
@@ -1691,6 +1697,7 @@ procedure TCGMIPS.g_adjust_self_value(list:TAsmList;procdef: tprocdef;ioffset: t
   end;
   end;
 
 
 
 
+{$ifndef mips64}
 {****************************************************************************
 {****************************************************************************
                                TCG64_MIPSel
                                TCG64_MIPSel
 ****************************************************************************}
 ****************************************************************************}
@@ -1928,12 +1935,15 @@ begin
     internalerror(200306017);
     internalerror(200306017);
   end;
   end;
 end;
 end;
+{$endif mips64}
 
 
 
 
     procedure create_codegen;
     procedure create_codegen;
       begin
       begin
         cg:=TCGMIPS.Create;
         cg:=TCGMIPS.Create;
+{$ifndef mips64}
         cg64:=TCg64MPSel.Create;
         cg64:=TCg64MPSel.Create;
+{$endif mips64}
       end;
       end;
 
 
 end.
 end.

+ 92 - 0
compiler/ppcmips64el.lpi

@@ -0,0 +1,92 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <PathDelim Value="\"/>
+    <General>
+      <Flags>
+        <MainUnitHasUsesSectionForAllUnits Value="False"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <LRSInOutputDirectory Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="ppcmips64el"/>
+    </General>
+    <BuildModes Count="1">
+      <Item1 Name="default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+        <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+      </local>
+    </RunParams>
+    <RequiredPackages Count="1">
+      <Item1>
+        <PackageName Value="LCL"/>
+        <MinVersion Major="1" Valid="True"/>
+      </Item1>
+    </RequiredPackages>
+    <Units Count="4">
+      <Unit0>
+        <Filename Value="pp.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="pp"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="mips\aasmcpu.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="aasmcpu"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="mips\aoptcpu.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="aoptcpu"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="aopt.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="aopt"/>
+      </Unit3>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <Target>
+      <Filename Value="mips64el\pp"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="mips"/>
+      <OtherUnitFiles Value="mips64;mips;systems"/>
+      <UnitOutputDirectory Value="mips64el\lazbuild"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <CStyleOperator Value="False"/>
+        <AllowLabel Value="False"/>
+        <CPPInline Value="False"/>
+        <UseAnsiStrings Value="False"/>
+      </SyntaxOptions>
+    </Parsing>
+    <Other>
+      <Verbosity>
+        <ShowWarn Value="False"/>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+      </Verbosity>
+      <ConfigFile>
+        <StopAfterErrCount Value="50"/>
+      </ConfigFile>
+      <CustomOptions Value="-dmips64el"/>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+</CONFIG>

+ 1 - 1
utils/fpcm/fpcmmain.pp

@@ -117,7 +117,7 @@ interface
       { This table is kept OS,Cpu because it is easier to maintain (PFV) }
       { This table is kept OS,Cpu because it is easier to maintain (PFV) }
       OSCpuPossible : array[TOS,TCpu] of boolean = (
       OSCpuPossible : array[TOS,TCpu] of boolean = (
         { os          i386    m68k  ppc    sparc  x86_64 arm    ppc64  avr    armeb  armel  mips   mipsel mips64 misp64el jvm    i8086  aarch64 wasm sparc64 riscv32 riscv64 xtensa z80 }
         { os          i386    m68k  ppc    sparc  x86_64 arm    ppc64  avr    armeb  armel  mips   mipsel mips64 misp64el jvm    i8086  aarch64 wasm sparc64 riscv32 riscv64 xtensa z80 }
-        { linux }   ( true,  true,  true,  true,  true,  true,  true,  false, true,  false, true,  true,  false, false,   false, false, true,  false, true,  true,   true,   true,  false),
+        { linux }   ( true,  true,  true,  true,  true,  true,  true,  false, true,  false, true,  true,  false, true,    false, false, true,  false, true,  true,   true,   true,  false),
         { go32v2 }  ( true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false,  false, false),
         { go32v2 }  ( true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false,  false, false),
         { win32 }   ( true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false,  false, false),
         { win32 }   ( true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false,  false, false),
         { os2 }     ( true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false,  false, false),
         { os2 }     ( true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false, false, false, false,  false,  false, false),