From 7d2360eb0ce4a20a4b6758903ccd58689dc03997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1roly=20Balogh?= Date: Sat, 24 Dec 2016 21:11:06 +0000 Subject: [PATCH] m68k: Test68000/Test68881 support boilerplate and special support for Amiga git-svn-id: trunk@35194 - --- rtl/amicommon/sysos.inc | 10 ++++++++-- rtl/amiga/m68k/m68kamiga.inc | 27 +++++++++++++++++++++++++-- rtl/amiga/system.pp | 6 +++--- rtl/m68k/m68k.inc | 18 ++++++++++++++++-- 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/rtl/amicommon/sysos.inc b/rtl/amicommon/sysos.inc index 5254402e39..894d3ab370 100644 --- a/rtl/amicommon/sysos.inc +++ b/rtl/amicommon/sysos.inc @@ -28,12 +28,18 @@ AmigaOS functions *****************************************************************************} -{ exec.library functions } - {$include execf.inc} {$include doslibf.inc} +{***************************************************************************** + CPU specific +*****************************************************************************} + +{$ifdef cpum68k} +{$include m68kamiga.inc} +{$endif} + {***************************************************************************** System Dependent Structures/Consts *****************************************************************************} diff --git a/rtl/amiga/m68k/m68kamiga.inc b/rtl/amiga/m68k/m68kamiga.inc index aa0b4ed748..24905dc66b 100644 --- a/rtl/amiga/m68k/m68kamiga.inc +++ b/rtl/amiga/m68k/m68kamiga.inc @@ -1,9 +1,9 @@ { This file is part of the Free Pascal run time library. - Copyright (c) 2015 by Karoly Balogh, + Copyright (c) 2015-2016 by Karoly Balogh, member of the Free Pascal development team. - m68k/Amiga atomic operations implementation + Amiga specific m68k functions See the file COPYING.FPC, included in this distribution, for details about the copyright. @@ -20,6 +20,7 @@ the ops themselves. It of course won't be hardware-atomic, but should be safe for multithreading. (KB) } +{$DEFINE FPC_SYSTEM_HAS_INTERLOCKEDFUNCS} function InterLockedDecrement (var Target: longint) : longint; begin Forbid; @@ -64,3 +65,25 @@ function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comp Target := NewValue; Permit; end; + + +{ AmigaOS tells us what CPU we run on, so just use that } +{$DEFINE FPC_SYSTEM_HAS_TEST68K} +procedure Test68k(var CPU: byte; var FPU: byte); + var + flags: DWord; + begin + flags:=PExecBase(AOS_ExecBase)^.AttnFlags; + + CPU:=0; + if (flags and AFF_68010) > 0 then CPU:=1; + if (flags and AFF_68020) > 0 then CPU:=2; + if (flags and AFF_68030) > 0 then CPU:=3; + if (flags and AFF_68040) > 0 then CPU:=4; + if (flags and AFF_68060) > 0 then CPU:=6; + + FPU:=0; + if (flags and AFF_68881) > 0 then FPU:=1; + if (flags and AFF_68882) > 0 then FPU:=2; + if (flags and AFF_FPU40) > 0 then FPU:=CPU; // 040 or 060 with FPU + end; diff --git a/rtl/amiga/system.pp b/rtl/amiga/system.pp index 37337802fe..cfec78cff8 100644 --- a/rtl/amiga/system.pp +++ b/rtl/amiga/system.pp @@ -115,9 +115,6 @@ implementation {$I system.inc} {$I osdebug.inc} -{$ifdef cpum68k} -{$I m68kamiga.inc} -{$endif} {$IFDEF AMIGAOS4} // Required to allow opening of utility library interface... @@ -318,6 +315,9 @@ begin { Setup heap } InitHeap; SysInitExceptions; +{$ifdef cpum68k} + fpc_cpucodeinit; +{$endif} initunicodestringmanager; { Setup stdin, stdout and stderr } SysInitStdIO; diff --git a/rtl/m68k/m68k.inc b/rtl/m68k/m68k.inc index 00c23cbeaf..c4cce4fa82 100644 --- a/rtl/m68k/m68k.inc +++ b/rtl/m68k/m68k.inc @@ -371,7 +371,7 @@ asm end; {$endif} -{$IFNDEF HASAMIGA} +{$IFNDEF FPC_SYSTEM_HAS_INTERLOCKEDFUNCS} function InterLockedDecrement (var Target: longint) : longint; begin {$warning FIX ME} @@ -411,7 +411,16 @@ function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comp if Target = Comperand then Target := NewValue; end; -{$ENDIF HASAMIGA} +{$ENDIF FPC_SYSTEM_HAS_INTERLOCKEDFUNCS} + +{$ifndef FPC_SYSTEM_HAS_TEST68K} +procedure Test68k(var CPU: byte; var FPU: byte); +begin + {$warning Implement me!} + CPU:=0; + FPU:=0; +end; +{$endif} {$if defined(CPUM68K_HAS_BYTEREV) or defined(CPUM68K_HAS_ROLROR)} { Disabled for now, because not all cases below were tested. (KB) } @@ -585,3 +594,8 @@ asm {$endif} end; {$endif FPC_SYSTEM_HAS_SWAPENDIAN} + +procedure fpc_cpucodeinit; + begin + Test68k(Test68000,Test68881); + end;