Browse Source

Add arch and abi values for mips cpu

git-svn-id: trunk@22663 -
pierre 13 years ago
parent
commit
305206354a
1 changed files with 66 additions and 3 deletions
  1. 66 3
      compiler/mips/cpuinfo.pas

+ 66 - 3
compiler/mips/cpuinfo.pas

@@ -32,11 +32,29 @@ Type
    { possible supported processors for this target }
    { possible supported processors for this target }
    tcputype =
    tcputype =
       (cpu_none,
       (cpu_none,
-       cpu_mips32
+       cpu_mips_default,
+       cpu_mips1,
+       cpu_mis2,
+       cpu_mips3,
+       cpu_mips4,
+       cpu_mips5,
+       cpu_mips32,
+       cpu_mips32r2
       );
       );
 
 
    tfputype =(fpu_none,fpu_soft,fpu_mips2,fpu_mips3);
    tfputype =(fpu_none,fpu_soft,fpu_mips2,fpu_mips3);
 
 
+   tabitype = 
+     (
+     abi_none,
+     abi_default,
+     abi_o32,
+     abi_n32,
+     abi_o64,
+     abi_n64,
+     abi_eabi
+     );
+
 Const
 Const
    {# Size of native extended floating point type }
    {# Size of native extended floating point type }
    extended_size = 8;
    extended_size = 8;
@@ -58,15 +76,40 @@ Const
      pocall_cppdecl
      pocall_cppdecl
    ];
    ];
 
 
-   cputypestr : array[tcputype] of string[6] = ('',
-     'MIPS32'
+   { cpu strings as accepted by 
+     GNU assembler in -arch=XXX option }
+   cputypestr : array[tcputype] of string[8] = ('',
+     { cpu_mips_default } 'mips2',
+     { cpu_mips1        } 'mips1',
+     { cpu_mips2        } 'mips2',
+     { cpu_mips3        } 'mips3',
+     { cpu_mips4        } 'mips4',
+     { cpu_mips5        } 'mips5',
+     { cpu_mips32       } 'mips32',
+     { cpu_mips32r2     } 'mips32r2'
    );
    );
 
 
+   mips_cpu : tcputype = cpu_mips_default;
+
    fputypestr : array[tfputype] of string[9] = ('',
    fputypestr : array[tfputype] of string[9] = ('',
      'SOFT',
      'SOFT',
      'FPU_MIPS2','FPU_MIPS3'
      'FPU_MIPS2','FPU_MIPS3'
    );
    );
 
 
+   { abi strings as accepted by 
+     GNU assembler in -abi=XXX option }
+   abitypestr : array[tabitype] of string[4] =
+     ({ abi_none    } '',
+      { abi_default } '32',
+      { abi_o32     } '32',
+      { abi_n32     } 'n32',
+      { abi_o64     } 'o64',
+      { abi_n64     } '64',
+      { abi_eabi    } 'eabi'
+     );
+
+   mips_abi : tabitype = abi_default;
+
    { Supported optimizations, only used for information }
    { Supported optimizations, only used for information }
    supported_optimizerswitches = [cs_opt_regvar,cs_opt_loopunroll,cs_opt_nodecse,
    supported_optimizerswitches = [cs_opt_regvar,cs_opt_loopunroll,cs_opt_nodecse,
                                   cs_opt_reorder_fields,cs_opt_fastmath];
                                   cs_opt_reorder_fields,cs_opt_fastmath];
@@ -76,6 +119,26 @@ Const
    level3optimizerswitches = level2optimizerswitches + [cs_opt_loopunroll];
    level3optimizerswitches = level2optimizerswitches + [cs_opt_loopunroll];
    level4optimizerswitches = genericlevel4optimizerswitches + level3optimizerswitches + [];
    level4optimizerswitches = genericlevel4optimizerswitches + level3optimizerswitches + [];
 
 
+function SetMipsABIType(const s : string) : boolean;
+
 Implementation
 Implementation
 
 
+uses
+  cutils;
+
+function SetMipsABIType(const s : string) : boolean;
+
+  var
+    abi : tabitype;
+  begin
+    SetMipsABIType:=false;
+    for abi := low(tabitype) to high(tabitype) do
+      if (lower(s)=abitypestr[abi]) then
+        begin
+          mips_abi:=abi;
+          SetMipsABIType:=true;
+          break;
+        end;
+  end;
+           
 end.
 end.