diff --git a/compiler/i386/n386cal.pas b/compiler/i386/n386cal.pas index 52ee97e026..77cdfd6fa7 100644 --- a/compiler/i386/n386cal.pas +++ b/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)); diff --git a/compiler/powerpc/nppccal.pas b/compiler/powerpc/nppccal.pas index 7e89eba664..7e6298f779 100644 --- a/compiler/powerpc/nppccal.pas +++ b/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); diff --git a/compiler/symconst.pas b/compiler/symconst.pas index c7349429d5..0200b64984 100644 --- a/compiler/symconst.pas +++ b/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 } diff --git a/compiler/syscinfo.pas b/compiler/syscinfo.pas index 03ad447422..e147329c69 100644 --- a/compiler/syscinfo.pas +++ b/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; diff --git a/compiler/tokens.pas b/compiler/tokens.pas index bb1d1ebf1b..41c459df25 100644 --- a/compiler/tokens.pas +++ b/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 } diff --git a/compiler/utils/ppuutils/ppudump.pp b/compiler/utils/ppuutils/ppudump.pp index 1a58437617..d6530287e2 100644 --- a/compiler/utils/ppuutils/ppudump.pp +++ b/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'),