ソースを参照

* refactored syscall types for unified naming,first bits of ARM AROS syscall support

git-svn-id: trunk@34806 -
Károly Balogh 8 年 前
コミット
c7c37f66ed

+ 4 - 4
compiler/i386/n386cal.pas

@@ -68,9 +68,9 @@ implementation
         case target_info.system of
           system_i386_aros:
             begin
-              if (po_syscall_stackbase in tprocdef(procdefinition).procoptions) then
+              if (po_syscall_baselast in tprocdef(procdefinition).procoptions) then
                 begin
-                  current_asmdata.CurrAsmList.concat(tai_comment.create(strpnew('AROS SysCall - StackBase')));
+                  current_asmdata.CurrAsmList.concat(tai_comment.create(strpnew('AROS SysCall - BaseLast on Stack')));
                   { re-read the libbase pushed first on the stack, instead of just trusting the
                     mangledname will work. this is important for example for threadvar libbases.
                     and this way they also don't need to be resolved twice then. (KB) }
@@ -85,9 +85,9 @@ implementation
                   cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_EAX);
                   exit;
                 end;
-             if (po_syscall_eaxbase in tprocdef(procdefinition).procoptions) then
+             if (po_syscall_basereg in tprocdef(procdefinition).procoptions) then
                 begin
-                  current_asmdata.CurrAsmList.concat(tai_comment.create(strpnew('AROS SysCall - EAXBase')));
+                  current_asmdata.CurrAsmList.concat(tai_comment.create(strpnew('AROS SysCall - RegBase in EAX')));
                   { libbase must be in EAX already, so just piggyback that, and dereference it }
                   reference_reset_base(tmpref,NR_EAX,-tprocdef(procdefinition).extnumber,sizeof(pint));
                   current_asmdata.CurrAsmList.concat(taicpu.op_ref(A_CALL,S_NO,tmpref));

+ 3 - 3
compiler/powerpc/nppccal.pas

@@ -90,15 +90,15 @@ implementation
           system_powerpc_amiga:
             begin
               { one syscall convention for AmigaOS/PowerPC
-                which is very similar to basesysv on MorphOS }
+                which is very similar to basesysv (a.k.a basefirst) on MorphOS }
               reference_reset_base(tmpref,NR_R3,tprocdef(procdefinition).extnumber,sizeof(pint));
               do_call_ref(tmpref);
             end;
           system_powerpc_morphos:
             begin
               { all conventions but legacy }
-              if ([po_syscall_basesysv,po_syscall_sysv,
-                   po_syscall_sysvbase,po_syscall_r12base] * tprocdef(procdefinition).procoptions) <> [] then
+              if ([po_syscall_basefirst,po_syscall_basenone,
+                   po_syscall_baselast,po_syscall_basereg] * tprocdef(procdefinition).procoptions) <> [] then
                 begin
                   cg.getcpuregister(current_asmdata.CurrAsmList,NR_R12);
 

+ 6 - 9
compiler/symconst.pas

@@ -136,7 +136,7 @@ const
   paranr_objc_cmd = 6;
 
   { Required to support variations of syscalls on Amiga-likes }
-  paranr_syscall_lib_first   = 9;             { for basesysv on MorphOS/ppc and AmigaOS4/ppc }
+  paranr_syscall_lib_first   = 9;             { for basefirst on MorphOS/ppc and AmigaOS4/ppc }
   paranr_syscall_lib_last    = high(word)-3;  { everything else }
 
   paranr_result_leftright    = high(word)-2;
@@ -340,15 +340,12 @@ type
     po_global,
     { Generic syscall procoption, for systems like Atari, Palm, etc }
     po_syscall,
-    { The different kind of syscalls on AmigaOS and MorphOS, m68k and PPC }
+    { The different kind of syscalls on Amiga-like systems }
     po_syscall_legacy,
-    po_syscall_sysv,
-    po_syscall_basesysv,
-    po_syscall_sysvbase,
-    po_syscall_r12base,
-    { The different kind of syscalls on AROS, i386/x86_64 }
-    po_syscall_stackbase,
-    po_syscall_eaxbase,
+    po_syscall_basenone,
+    po_syscall_basefirst,
+    po_syscall_baselast,
+    po_syscall_basereg,
     { Used to record the fact that a symbol is associated to this syscall }
     po_syscall_has_libsym,
     { Procedure can be inlined }

+ 18 - 15
compiler/syscinfo.pas

@@ -37,16 +37,19 @@ type
   psyscallinfo = ^tsyscallinfo;
 
 const
-  syscall_conventions: array[1..8] of tsyscallinfo = (
+  syscall_conventions: array[1..10] of tsyscallinfo = (
       ( token: NOTOKEN;    procoption: po_syscall;           validon: [system_m68k_atari] ),
       ( token: _LEGACY;    procoption: po_syscall_legacy;    validon: [system_powerpc_morphos,system_m68k_amiga] ),
-      ( token: _SYSV;      procoption: po_syscall_sysv;      validon: [system_powerpc_morphos] ),
-      ( token: _SYSVBASE;  procoption: po_syscall_sysvbase;  validon: [system_powerpc_morphos] ),
-      ( token: _BASESYSV;  procoption: po_syscall_basesysv;  validon: [system_powerpc_morphos,system_powerpc_amiga] ),
-      ( token: _R12BASE;   procoption: po_syscall_r12base;   validon: [system_powerpc_morphos] ),
-      ( token: _STACKBASE; procoption: po_syscall_stackbase; validon: [system_i386_aros,system_x86_64_aros] ),
-      ( token: _EAXBASE;   procoption: po_syscall_eaxbase;   validon: [system_i386_aros,system_x86_64_aros] ));
-
+      // old sysv naming, for compatibility only (on MorphOS/OS4)
+      ( token: _SYSV;      procoption: po_syscall_basenone;  validon: [system_powerpc_morphos] ),
+      ( token: _SYSVBASE;  procoption: po_syscall_baselast;  validon: [system_powerpc_morphos] ),
+      ( token: _BASESYSV;  procoption: po_syscall_basefirst; validon: [system_powerpc_morphos,system_powerpc_amiga] ),
+      ( token: _R12BASE;   procoption: po_syscall_basereg;   validon: [system_powerpc_morphos] ),
+      // new base naming, which should cover all "next-gen" Amiga-like systems
+      ( token: _BASENONE;  procoption: po_syscall_basenone;  validon: [system_powerpc_morphos] ),
+      ( token: _BASEFIRST; procoption: po_syscall_basefirst; validon: [system_powerpc_morphos,system_powerpc_amiga] ),
+      ( token: _BASELAST;  procoption: po_syscall_baselast;  validon: [system_powerpc_morphos,system_i386_aros,system_x86_64_aros,system_arm_aros] ),
+      ( token: _BASEREG;   procoption: po_syscall_basereg;   validon: [system_powerpc_morphos,system_i386_aros,system_x86_64_aros] ));
 
 function get_syscall_by_token(const token: ttoken): psyscallinfo;
 function get_syscall_by_name(const name: string): psyscallinfo;
@@ -59,9 +62,8 @@ uses
   verbose;
 
 const
-  syscall_conventions_po = [ po_syscall, po_syscall_legacy, po_syscall_sysv,
-                             po_syscall_sysvbase, po_syscall_basesysv, po_syscall_r12base,
-                             po_syscall_stackbase, po_syscall_eaxbase ];
+  syscall_conventions_po = [ po_syscall, po_syscall_legacy, po_syscall_basenone,
+                             po_syscall_baselast, po_syscall_basefirst, po_syscall_basereg ];
 
 type
   tsyscalldefaultinfo = record
@@ -70,13 +72,14 @@ type
   end;
 
 const
-  default_syscall_conventions: array[0..5] of tsyscalldefaultinfo = (
+  default_syscall_conventions: array[0..6] of tsyscalldefaultinfo = (
       ( system: system_m68k_atari;      procoption: po_syscall ),
       ( system: system_m68k_amiga;      procoption: po_syscall_legacy ),
-      ( system: system_powerpc_amiga;   procoption: po_syscall_basesysv ),
+      ( system: system_powerpc_amiga;   procoption: po_syscall_basefirst ),
       ( system: system_powerpc_morphos; procoption: po_syscall_legacy ),
-      ( system: system_i386_aros;       procoption: po_syscall_stackbase ),
-      ( system: system_x86_64_aros;     procoption: po_syscall_stackbase ));
+      ( system: system_arm_aros;        procoption: po_syscall_baselast ),
+      ( system: system_i386_aros;       procoption: po_syscall_baselast ),
+      ( system: system_x86_64_aros;     procoption: po_syscall_baselast ));
 
 var
   default_syscall_convention: tprocoption = po_none;

+ 8 - 4
compiler/tokens.pas

@@ -189,10 +189,10 @@ type
     _SYSTEM,
     _WINAPI,
     _ASMNAME,
+    _BASEREG,
     _CPPDECL,
     _DEFAULT,
     _DYNAMIC,
-    _EAXBASE,
     _EXPORTS,
     _FINALLY,
     _FORWARD,
@@ -213,6 +213,8 @@ type
     _VIRTUAL,
     _ABSOLUTE,
     _ABSTRACT,
+    _BASELAST,
+    _BASENONE,
     _BASESYSV,
     _CONSTREF,
     _CONTAINS,
@@ -245,6 +247,7 @@ type
     _SUBTRACT,
     _SYSVBASE,
     _ASSEMBLER,
+    _BASEFIRST,
     _BITPACKED,
     _BITWISEOR,
     _HARDFLOAT,
@@ -262,7 +265,6 @@ type
     _PUBLISHED,
     _REFERENCE,
     _SOFTFLOAT,
-    _STACKBASE,
     _THREADVAR,
     _WRITEONLY,
     _BITWISEAND,
@@ -512,10 +514,10 @@ const
       (str:'SYSTEM'        ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'WINAPI'        ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'ASMNAME'       ;special:false;keyword:[m_none];op:NOTOKEN),
+      (str:'BASEREG'       ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on Amiga-likes }
       (str:'CPPDECL'       ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'DEFAULT'       ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'DYNAMIC'       ;special:false;keyword:[m_none];op:NOTOKEN),
-      (str:'EAXBASE'       ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on AROS }
       (str:'EXPORTS'       ;special:false;keyword:alllanguagemodes-[m_iso,m_extpas];op:NOTOKEN),
       (str:'FINALLY'       ;special:false;keyword:[m_except];op:NOTOKEN),
       (str:'FORWARD'       ;special:false;keyword:[m_none];op:NOTOKEN),
@@ -536,6 +538,8 @@ const
       (str:'VIRTUAL'       ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'ABSOLUTE'      ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'ABSTRACT'      ;special:false;keyword:[m_none];op:NOTOKEN),
+      (str:'BASELAST'      ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on Amiga-likes }
+      (str:'BASENONE'      ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on Amiga-likes }
       (str:'BASESYSV'      ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on MorphOS }
       (str:'CONSTREF'      ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'CONTAINS'      ;special:false;keyword:[m_none];op:NOTOKEN),
@@ -568,6 +572,7 @@ const
       (str:'SUBTRACT'      ;special:false;keyword:[m_none];op:NOTOKEN), { delphi operator name }
       (str:'SYSVBASE'      ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on MorphOS }
       (str:'ASSEMBLER'     ;special:false;keyword:[m_none];op:NOTOKEN),
+      (str:'BASEFIRST'     ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on Amiga-likes }
       (str:'BITPACKED'     ;special:false;keyword:alllanguagemodes-[m_iso,m_extpas];op:NOTOKEN),
       (str:'BITWISEOR'     ;special:false;keyword:[m_none];op:NOTOKEN), { delphi operator name }
       (str:'HARDFLOAT'     ;special:false;keyword:[m_none];op:NOTOKEN),
@@ -585,7 +590,6 @@ const
       (str:'PUBLISHED'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'REFERENCE'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'SOFTFLOAT'     ;special:false;keyword:[m_none];op:NOTOKEN),
-      (str:'STACKBASE'     ;special:false;keyword:[m_none];op:NOTOKEN), { Syscall variation on AROS }
       (str:'THREADVAR'     ;special:false;keyword:alllanguagemodes-[m_iso,m_extpas];op:NOTOKEN),
       (str:'WRITEONLY'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'BITWISEAND'    ;special:false;keyword:[m_none];op:NOTOKEN), { delphi operator name }

+ 4 - 6
compiler/utils/ppuutils/ppudump.pp

@@ -1933,12 +1933,10 @@ const
      (mask:po_global;          str:'Global'),
      (mask:po_syscall;         str:'Syscall'),
      (mask:po_syscall_legacy;  str:'SyscallLegacy'),
-     (mask:po_syscall_sysv;    str:'SyscallSysV'),
-     (mask:po_syscall_basesysv;str:'SyscallBaseSysV'),
-     (mask:po_syscall_sysvbase;str:'SyscallSysVBase'),
-     (mask:po_syscall_r12base; str:'SyscallR12Base'),
-     (mask:po_syscall_stackbase;str:'SyscallStackBase'),
-     (mask:po_syscall_eaxbase; str:'SyscallEAXBase'),
+     (mask:po_syscall_basenone;str:'SyscallBaseNone');
+     (mask:po_syscall_basefirst;str:'SyscallBaseFirst'),
+     (mask:po_syscall_baselast;str:'SyscallBaseLast'),
+     (mask:po_syscall_basereg; str:'SyscallBaseReg'),
      (mask:po_syscall_has_libsym; str:'Has LibSym'),
      (mask:po_inline;          str:'Inline'),
      (mask:po_compilerproc;    str:'CompilerProc'),