Răsfoiți Sursa

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

git-svn-id: trunk@34806 -
Károly Balogh 8 ani în urmă
părinte
comite
c7c37f66ed

+ 4 - 4
compiler/i386/n386cal.pas

@@ -68,9 +68,9 @@ implementation
         case target_info.system of
         case target_info.system of
           system_i386_aros:
           system_i386_aros:
             begin
             begin
-              if (po_syscall_stackbase in tprocdef(procdefinition).procoptions) then
+              if (po_syscall_baselast in tprocdef(procdefinition).procoptions) then
                 begin
                 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
                   { 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.
                     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) }
                     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);
                   cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_EAX);
                   exit;
                   exit;
                 end;
                 end;
-             if (po_syscall_eaxbase in tprocdef(procdefinition).procoptions) then
+             if (po_syscall_basereg in tprocdef(procdefinition).procoptions) then
                 begin
                 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 }
                   { libbase must be in EAX already, so just piggyback that, and dereference it }
                   reference_reset_base(tmpref,NR_EAX,-tprocdef(procdefinition).extnumber,sizeof(pint));
                   reference_reset_base(tmpref,NR_EAX,-tprocdef(procdefinition).extnumber,sizeof(pint));
                   current_asmdata.CurrAsmList.concat(taicpu.op_ref(A_CALL,S_NO,tmpref));
                   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:
           system_powerpc_amiga:
             begin
             begin
               { one syscall convention for AmigaOS/PowerPC
               { 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));
               reference_reset_base(tmpref,NR_R3,tprocdef(procdefinition).extnumber,sizeof(pint));
               do_call_ref(tmpref);
               do_call_ref(tmpref);
             end;
             end;
           system_powerpc_morphos:
           system_powerpc_morphos:
             begin
             begin
               { all conventions but legacy }
               { 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
                 begin
                   cg.getcpuregister(current_asmdata.CurrAsmList,NR_R12);
                   cg.getcpuregister(current_asmdata.CurrAsmList,NR_R12);
 
 

+ 6 - 9
compiler/symconst.pas

@@ -136,7 +136,7 @@ const
   paranr_objc_cmd = 6;
   paranr_objc_cmd = 6;
 
 
   { Required to support variations of syscalls on Amiga-likes }
   { 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_syscall_lib_last    = high(word)-3;  { everything else }
 
 
   paranr_result_leftright    = high(word)-2;
   paranr_result_leftright    = high(word)-2;
@@ -340,15 +340,12 @@ type
     po_global,
     po_global,
     { Generic syscall procoption, for systems like Atari, Palm, etc }
     { Generic syscall procoption, for systems like Atari, Palm, etc }
     po_syscall,
     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_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 }
     { Used to record the fact that a symbol is associated to this syscall }
     po_syscall_has_libsym,
     po_syscall_has_libsym,
     { Procedure can be inlined }
     { Procedure can be inlined }

+ 18 - 15
compiler/syscinfo.pas

@@ -37,16 +37,19 @@ type
   psyscallinfo = ^tsyscallinfo;
   psyscallinfo = ^tsyscallinfo;
 
 
 const
 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: NOTOKEN;    procoption: po_syscall;           validon: [system_m68k_atari] ),
       ( token: _LEGACY;    procoption: po_syscall_legacy;    validon: [system_powerpc_morphos,system_m68k_amiga] ),
       ( 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_token(const token: ttoken): psyscallinfo;
 function get_syscall_by_name(const name: string): psyscallinfo;
 function get_syscall_by_name(const name: string): psyscallinfo;
@@ -59,9 +62,8 @@ uses
   verbose;
   verbose;
 
 
 const
 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
 type
   tsyscalldefaultinfo = record
   tsyscalldefaultinfo = record
@@ -70,13 +72,14 @@ type
   end;
   end;
 
 
 const
 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_atari;      procoption: po_syscall ),
       ( system: system_m68k_amiga;      procoption: po_syscall_legacy ),
       ( 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_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
 var
   default_syscall_convention: tprocoption = po_none;
   default_syscall_convention: tprocoption = po_none;

+ 8 - 4
compiler/tokens.pas

@@ -189,10 +189,10 @@ type
     _SYSTEM,
     _SYSTEM,
     _WINAPI,
     _WINAPI,
     _ASMNAME,
     _ASMNAME,
+    _BASEREG,
     _CPPDECL,
     _CPPDECL,
     _DEFAULT,
     _DEFAULT,
     _DYNAMIC,
     _DYNAMIC,
-    _EAXBASE,
     _EXPORTS,
     _EXPORTS,
     _FINALLY,
     _FINALLY,
     _FORWARD,
     _FORWARD,
@@ -213,6 +213,8 @@ type
     _VIRTUAL,
     _VIRTUAL,
     _ABSOLUTE,
     _ABSOLUTE,
     _ABSTRACT,
     _ABSTRACT,
+    _BASELAST,
+    _BASENONE,
     _BASESYSV,
     _BASESYSV,
     _CONSTREF,
     _CONSTREF,
     _CONTAINS,
     _CONTAINS,
@@ -245,6 +247,7 @@ type
     _SUBTRACT,
     _SUBTRACT,
     _SYSVBASE,
     _SYSVBASE,
     _ASSEMBLER,
     _ASSEMBLER,
+    _BASEFIRST,
     _BITPACKED,
     _BITPACKED,
     _BITWISEOR,
     _BITWISEOR,
     _HARDFLOAT,
     _HARDFLOAT,
@@ -262,7 +265,6 @@ type
     _PUBLISHED,
     _PUBLISHED,
     _REFERENCE,
     _REFERENCE,
     _SOFTFLOAT,
     _SOFTFLOAT,
-    _STACKBASE,
     _THREADVAR,
     _THREADVAR,
     _WRITEONLY,
     _WRITEONLY,
     _BITWISEAND,
     _BITWISEAND,
@@ -512,10 +514,10 @@ const
       (str:'SYSTEM'        ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'SYSTEM'        ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'WINAPI'        ;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:'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:'CPPDECL'       ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'DEFAULT'       ;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:'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:'EXPORTS'       ;special:false;keyword:alllanguagemodes-[m_iso,m_extpas];op:NOTOKEN),
       (str:'FINALLY'       ;special:false;keyword:[m_except];op:NOTOKEN),
       (str:'FINALLY'       ;special:false;keyword:[m_except];op:NOTOKEN),
       (str:'FORWARD'       ;special:false;keyword:[m_none];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:'VIRTUAL'       ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'ABSOLUTE'      ;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:'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:'BASESYSV'      ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on MorphOS }
       (str:'CONSTREF'      ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'CONSTREF'      ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'CONTAINS'      ;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:'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:'SYSVBASE'      ;special:false;keyword:[m_none];op:NOTOKEN),   { Syscall variation on MorphOS }
       (str:'ASSEMBLER'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (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:'BITPACKED'     ;special:false;keyword:alllanguagemodes-[m_iso,m_extpas];op:NOTOKEN),
       (str:'BITWISEOR'     ;special:false;keyword:[m_none];op:NOTOKEN), { delphi operator name }
       (str:'BITWISEOR'     ;special:false;keyword:[m_none];op:NOTOKEN), { delphi operator name }
       (str:'HARDFLOAT'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'HARDFLOAT'     ;special:false;keyword:[m_none];op:NOTOKEN),
@@ -585,7 +590,6 @@ const
       (str:'PUBLISHED'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'PUBLISHED'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'REFERENCE'     ;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:'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:'THREADVAR'     ;special:false;keyword:alllanguagemodes-[m_iso,m_extpas];op:NOTOKEN),
       (str:'WRITEONLY'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'WRITEONLY'     ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'BITWISEAND'    ;special:false;keyword:[m_none];op:NOTOKEN), { delphi operator name }
       (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_global;          str:'Global'),
      (mask:po_syscall;         str:'Syscall'),
      (mask:po_syscall;         str:'Syscall'),
      (mask:po_syscall_legacy;  str:'SyscallLegacy'),
      (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_syscall_has_libsym; str:'Has LibSym'),
      (mask:po_inline;          str:'Inline'),
      (mask:po_inline;          str:'Inline'),
      (mask:po_compilerproc;    str:'CompilerProc'),
      (mask:po_compilerproc;    str:'CompilerProc'),