+ some basic stuff for MIPS64

This commit is contained in:
florian 2022-02-05 23:25:08 +01:00
parent 68b5ca633c
commit e9e8013316
8 changed files with 198 additions and 12 deletions

View File

@ -26,6 +26,9 @@ unit constexp;
interface interface
uses
sfpux80;
type Tconstexprint=record type Tconstexprint=record
overflow:boolean; overflow:boolean;
case signed:boolean of case signed:boolean of
@ -37,6 +40,8 @@ type Tconstexprint=record
errorproc=procedure (i:longint); errorproc=procedure (i:longint);
TConstExprFloat = float128;
{"Uses verbose" gives a dependency on cpuinfo through globals. This leads {"Uses verbose" gives a dependency on cpuinfo through globals. This leads
build trouble when compiling the directory utils, since the cpu directory build trouble when compiling the directory utils, since the cpu directory
isn't searched there. Therefore we use a procvar and make verbose install isn't searched there. Therefore we use a procvar and make verbose install

View File

@ -161,7 +161,9 @@ const
{ 19 } 32 {'riscv32'}, { 19 } 32 {'riscv32'},
{ 20 } 64 {'riscv64'}, { 20 } 64 {'riscv64'},
{ 21 } 32 {'xtensa'}, { 21 } 32 {'xtensa'},
{ 22 } 16 {'z80'} { 22 } 16 {'z80'},
{ 23 } 64 {'mips64'},
{ 24 } 64 {'mips64el'}
); );
CpuAluBitSize : array[tsystemcpu] of longint = CpuAluBitSize : array[tsystemcpu] of longint =
( (
@ -187,7 +189,9 @@ const
{ 19 } 32 {'riscv32'}, { 19 } 32 {'riscv32'},
{ 20 } 64 {'riscv64'}, { 20 } 64 {'riscv64'},
{ 21 } 32 {'xtensa'}, { 21 } 32 {'xtensa'},
{ 22 } 8 {'z80'} { 22 } 8 {'z80'},
{ 23 } 64 {'mips64'},
{ 24 } 64 {'mips64el'}
); );
{$endif generic_cpu} {$endif generic_cpu}

View File

@ -262,14 +262,17 @@
{$ifdef mipsel} {$ifdef mipsel}
{$define mips} {$define mips}
{$define mips32}
{$else not mipsel} {$else not mipsel}
{ Define both mips and mipseb if mipsel is not defined { Define both mips and mipseb if mipsel is not defined
but mips cpu is wanted. } but mips cpu is wanted. }
{$ifdef mipseb} {$ifdef mipseb}
{$define mips} {$define mips}
{$define mips32}
{$endif mipseb} {$endif mipseb}
{$ifdef mips} {$ifdef mips}
{$define mipseb} {$define mipseb}
{$define mips32}
{$endif mips} {$endif mips}
{$endif mipsel} {$endif mipsel}

View File

@ -541,10 +541,17 @@ interface
fputype : fpu_none; fputype : fpu_none;
{$endif avr} {$endif avr}
{$ifdef mips} {$ifdef mips}
{$ifdef mips64}
cputype : cpu_mips3;
optimizecputype : cpu_mips3;
asmcputype : cpu_none;
fputype : fpu_mips3;
{$else mips64}
cputype : cpu_mips2; cputype : cpu_mips2;
optimizecputype : cpu_mips2; optimizecputype : cpu_mips2;
asmcputype : cpu_none; asmcputype : cpu_none;
fputype : fpu_mips2; fputype : fpu_mips2;
{$endif mips64}
{$endif mips} {$endif mips}
{$ifdef jvm} {$ifdef jvm}
cputype : cpu_none; cputype : cpu_none;

View File

@ -56,7 +56,9 @@
cpu_riscv32, { 19 } cpu_riscv32, { 19 }
cpu_riscv64, { 20 } cpu_riscv64, { 20 }
cpu_xtensa, { 21 } cpu_xtensa, { 21 }
cpu_z80 { 22 } cpu_z80, { 22 }
cpu_mips64, { 23 }
cpu_mips64el { 24 }
); );
tasmmode= (asmmode_none tasmmode= (asmmode_none
@ -205,7 +207,9 @@
system_m68k_sinclairql, { 113 } system_m68k_sinclairql, { 113 }
system_wasm32_wasi, { 114 } system_wasm32_wasi, { 114 }
system_aarch64_freebsd, { 115 } system_aarch64_freebsd, { 115 }
system_aarch64_embedded { 116 } system_aarch64_embedded, { 116 }
system_mips64_linux, { 117 }
system_mips64el_linux { 118 }
); );
type type

View File

@ -479,7 +479,7 @@ interface
('','i386','m68k','alpha','powerpc','sparc','vm','ia64','x86_64', ('','i386','m68k','alpha','powerpc','sparc','vm','ia64','x86_64',
'mips','arm', 'powerpc64', 'avr', 'mipsel','jvm', 'i8086', 'mips','arm', 'powerpc64', 'avr', 'mipsel','jvm', 'i8086',
'aarch64', 'wasm32', 'sparc64', 'riscv32', 'riscv64', 'xtensa', 'aarch64', 'wasm32', 'sparc64', 'riscv32', 'riscv64', 'xtensa',
'z80'); 'z80', 'mips64', 'mips64el');
abiinfo : array[tabi] of tabiinfo = ( abiinfo : array[tabi] of tabiinfo = (
(name: 'DEFAULT'; supported: true), (name: 'DEFAULT'; supported: true),
@ -1123,7 +1123,7 @@ begin
default_target(system_avr_embedded); default_target(system_avr_embedded);
{$endif avr} {$endif avr}
{$ifdef mips} {$ifdef mips32}
{$ifdef mipsel} {$ifdef mipsel}
{$ifdef cpumipsel} {$ifdef cpumipsel}
default_target(source_info.system); default_target(source_info.system);
@ -1133,7 +1133,7 @@ begin
{$else mipsel} {$else mipsel}
default_target(system_mipseb_linux); default_target(system_mipseb_linux);
{$endif mipsel} {$endif mipsel}
{$endif mips} {$endif mips32}
{$ifdef jvm} {$ifdef jvm}
default_target(system_jvm_java32); default_target(system_jvm_java32);
@ -1204,6 +1204,13 @@ begin
{$endif ndef default_target_set} {$endif ndef default_target_set}
{$endif xtensa} {$endif xtensa}
{$ifdef mips64}
default_target(system_mips64_linux);
{$endif mips64}
{$ifdef mips64el}
default_target(system_mips64el_linux);
{$endif mips64el}
end; end;

View File

@ -964,7 +964,7 @@ unit i_linux;
system_mipseb_linux_info : tsysteminfo = system_mipseb_linux_info : tsysteminfo =
( (
system : system_mipseb_LINUX; system : system_mipseb_linux;
name : 'Linux for MIPSEB'; name : 'Linux for MIPSEB';
shortname : 'Linux'; shortname : 'Linux';
flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive, flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
@ -1034,7 +1034,7 @@ unit i_linux;
system_mipsel_linux_info : tsysteminfo = system_mipsel_linux_info : tsysteminfo =
( (
system : system_mipsel_LINUX; system : system_mipsel_linux;
name : 'Linux for MIPSEL'; name : 'Linux for MIPSEL';
shortname : 'Linux'; shortname : 'Linux';
flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive, flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
@ -1102,6 +1102,146 @@ unit i_linux;
llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64'; llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
); );
system_mips64_linux_info : tsysteminfo =
(
system : system_mips64_linux;
name : 'Linux for MIPS64';
shortname : 'Linux';
flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
tf_requires_proper_alignment,tf_library_needs_pic,
tf_pic_uses_got,tf_safecall_exceptions,
tf_smartlink_sections,tf_has_winlike_resources,tf_supports_hidden_symbols];
cpu : cpu_mips64;
unit_env : 'LINUXUNITS';
extradefines : 'UNIX;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
importlibprefix : 'libimp';
importlibext : '.a';
// p_ext_support : false;
Cprefix : '';
newline : #10;
dirsep : '/';
assem : as_gas;
assemextern : as_gas;
link : ld_none;
linkextern : ld_linux;
ar : ar_gnu_ar;
res : res_elf;
dbg : dbg_stabs;
script : script_unix;
endian : endian_big;
alignment :
(
procalign : 4;
loopalign : 4;
jumpalign : 0;
jumpalignskipmax : 0;
coalescealign : 0;
coalescealignskipmax: 0;
constalignmin : 0;
constalignmax : 8;
varalignmin : 0;
varalignmax : 8;
localalignmin : 4;
localalignmax : 8;
recordalignmin : 0;
recordalignmax : 8;
maxCrecordalign : 8
);
first_parm_offset : 0;
stacksize : 32*1024*1024;
stackalign : 8;
abi : abi_default;
llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
);
system_mips64el_linux_info : tsysteminfo =
(
system : system_mips64el_linux;
name : 'Linux for MIPS64EL';
shortname : 'Linux';
flags : [tf_needs_symbol_size,tf_needs_symbol_type,tf_files_case_sensitive,
tf_requires_proper_alignment,tf_library_needs_pic,
tf_pic_uses_got,tf_safecall_exceptions,
tf_smartlink_sections,tf_has_winlike_resources,tf_supports_hidden_symbols];
cpu : cpu_mips64el;
unit_env : 'LINUXUNITS';
extradefines : 'UNIX;HASUNIX';
exeext : '';
defext : '.def';
scriptext : '.sh';
smartext : '.sl';
unitext : '.ppu';
unitlibext : '.ppl';
asmext : '.s';
objext : '.o';
resext : '.res';
resobjext : '.or';
sharedlibext : '.so';
staticlibext : '.a';
staticlibprefix : 'libp';
sharedlibprefix : 'lib';
sharedClibext : '.so';
staticClibext : '.a';
staticClibprefix : 'lib';
sharedClibprefix : 'lib';
importlibprefix : 'libimp';
importlibext : '.a';
// p_ext_support : false;
Cprefix : '';
newline : #10;
dirsep : '/';
assem : as_gas;
assemextern : as_gas;
link : ld_none;
linkextern : ld_linux;
ar : ar_gnu_ar;
res : res_elf;
dbg : dbg_dwarf4;
script : script_unix;
endian : endian_little;
alignment :
(
procalign : 4;
loopalign : 4;
jumpalign : 0;
jumpalignskipmax : 0;
coalescealign : 0;
coalescealignskipmax: 0;
constalignmin : 0;
constalignmax : 8;
varalignmin : 0;
varalignmax : 8;
localalignmin : 4;
localalignmax : 8;
recordalignmin : 0;
recordalignmax : 8;
maxCrecordalign : 8
);
first_parm_offset : 0;
stacksize : 32*1024*1024;
stackalign : 8;
abi : abi_default;
llvmdatalayout : 'e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32-S64';
);
system_riscv32_linux_info : tsysteminfo = system_riscv32_linux_info : tsysteminfo =
( (
system : system_riscv32_linux; system : system_riscv32_linux;
@ -1394,5 +1534,15 @@ initialization
set_source_info(system_xtensa_linux_info); set_source_info(system_xtensa_linux_info);
{$endif linux} {$endif linux}
{$endif CPUXTENSA} {$endif CPUXTENSA}
{$ifdef CPUMIPS64EB}
{$ifdef linux}
set_source_info(system_mips64_linux_info);
{$endif linux}
{$endif CPUMIPS64EB}
{$ifdef CPUMIPS64EL}
{$ifdef linux}
set_source_info(system_mips64el_linux_info);
{$endif linux}
{$endif CPUMIPS64EL}
end. end.

View File

@ -87,7 +87,9 @@ const
{ 19 } 'riscv32', { 19 } 'riscv32',
{ 20 } 'riscv64', { 20 } 'riscv64',
{ 21 } 'xtensa', { 21 } 'xtensa',
{ 22 } 'z80' { 22 } 'z80',
{ 23 } 'mips64',
{ 24 } 'mips64el'
); );
CpuHasController : array[tsystemcpu] of boolean = CpuHasController : array[tsystemcpu] of boolean =
@ -114,7 +116,9 @@ const
{ 19 } false {'riscv32'}, { 19 } false {'riscv32'},
{ 20 } false {'riscv64'}, { 20 } false {'riscv64'},
{ 21 } true {'xtensa'}, { 21 } true {'xtensa'},
{ 22 } true {'z80'} { 22 } true {'z80'},
{ 23 } false {'mips64'},
{ 24 } false {'mips64el'}
); );
{ List of all supported system-cpu couples } { List of all supported system-cpu couples }
@ -236,7 +240,9 @@ const
{ 113 } 'SinclairQL-m68k', { 113 } 'SinclairQL-m68k',
{ 114 } 'WASI-WASM32', { 114 } 'WASI-WASM32',
{ 115 } 'FreeBSD-AArch64', { 115 } 'FreeBSD-AArch64',
{ 116 } 'Embedded-aarch64' { 116 } 'Embedded-aarch64',
{ 117 } 'Linux-MIPS64',
{ 118 } 'Linux-MIPS64el'
); );
const const