diff --git a/components/codetools/codetree.pas b/components/codetools/codetree.pas index c484d39d5e..8fcfa4683c 100644 --- a/components/codetools/codetree.pas +++ b/components/codetools/codetree.pas @@ -262,6 +262,7 @@ type psLibrary, psEnumerator, psVarargs, + psVectorCall, psEdgedBracket ); TAllProcedureSpecifiers = set of TProcedureSpecifier; @@ -273,7 +274,7 @@ const 'EXTERNAL', 'FORWARD', 'PASCAL', 'ASSEMBLER', 'SAVEREGISTERS', 'FAR', 'NEAR', 'FINAL', 'STATIC', 'MWPASCAL', 'NOSTACKFRAME', 'DEPRECATED', 'DISPID', 'PLATFORM', 'SAFECALL', 'UNIMPLEMENTED', - 'EXPERIMENTAL', 'LIBRARY', 'ENUMERATOR', 'VARARGS', + 'EXPERIMENTAL', 'LIBRARY', 'ENUMERATOR', 'VARARGS', 'VECTORCALL', '[' ); diff --git a/components/codetools/keywordfunclists.pas b/components/codetools/keywordfunclists.pas index 79e030d9cb..9d509a5546 100644 --- a/components/codetools/keywordfunclists.pas +++ b/components/codetools/keywordfunclists.pas @@ -897,6 +897,7 @@ begin Add('FINAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('ENUMERATOR' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('VARARGS' ,{$ifdef FPC}@{$endif}AllwaysTrue); + Add('VECTORCALL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('EXTERNAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); //jvm end; @@ -937,6 +938,7 @@ begin Add('SYSCALL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('UNIMPLEMENTED',{$ifdef FPC}@{$endif}AllwaysTrue); Add('VARARGS' ,{$ifdef FPC}@{$endif}AllwaysTrue); // kylix + Add('VECTORCALL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('WEAKEXTERNAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('[' ,{$ifdef FPC}@{$endif}AllwaysTrue); end; @@ -959,6 +961,7 @@ begin Add('SAFECALL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('UNIMPLEMENTED',{$ifdef FPC}@{$endif}AllwaysTrue); Add('VARARGS' ,{$ifdef FPC}@{$endif}AllwaysTrue); + Add('VECTORCALL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('EXPERIMENTAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('LIBRARY' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('IS' ,{$ifdef FPC}@{$endif}AllwaysTrue); @@ -973,6 +976,7 @@ begin Add('EXTDECL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('MWPASCAL' ,{$ifdef FPC}@{$endif}AllwaysTrue); Add('POPSTACK' ,{$ifdef FPC}@{$endif}AllwaysTrue); + Add('VECTORCALL' ,{$ifdef FPC}@{$endif}AllwaysTrue); // Note: 'inline' and 'is nested' are not a calling specifiers end; diff --git a/components/codetools/ppuparser.pas b/components/codetools/ppuparser.pas index 0100925ab8..31bfd041d8 100644 --- a/components/codetools/ppuparser.pas +++ b/components/codetools/ppuparser.pas @@ -279,7 +279,9 @@ type pocall_softfloat, { Metrowerks Pascal. Special case on Mac OS (X): passes all } { constant records by reference. } - pocall_mwpascal + pocall_mwpascal, + { for x86-64: Microsoft's "vectorcall" ABI } + pocall_vectorcall ); tproccalloptions = set of tproccalloption; @@ -414,7 +416,8 @@ const 'SafeCall', 'StdCall', 'SoftFloat', - 'MWPascal' + 'MWPascal', + 'VectorCall' ); proctypeoptionNames : array[tproctypeoption] of string[20]=( 'none',