changeset 372:bac52ab8869f

- updated manual platform support overview - added win/ARM64 info to manual cconv reference
author Tassilo Philipp
date Fri, 25 Dec 2020 18:45:57 +0100
parents 451299d50c1a
children 8b331d3382aa
files doc/manual/callconvs/callconv_arm64.tex doc/manual/manual_literature.tex doc/manual/manual_overview.tex
diffstat 3 files changed, 24 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/doc/manual/callconvs/callconv_arm64.tex	Fri Dec 25 18:07:39 2020 +0100
+++ b/doc/manual/callconvs/callconv_arm64.tex	Fri Dec 25 18:45:57 2020 +0100
@@ -1,6 +1,6 @@
 %//////////////////////////////////////////////////////////////////////////////
 %
-% Copyright (c) 2014-2019 Daniel Adler <dadler@uni-goettingen.de>, 
+% Copyright (c) 2014-2020 Daniel Adler <dadler@uni-goettingen.de>, 
 %                         Tassilo Philipp <tphilipp@potion-studios.com>
 %
 % Permission to use, copy, modify, and distribute this software for any
@@ -30,7 +30,7 @@
 
 \paragraph{\product{dyncall} support}
 
-The \product{dyncall} library supports the ARM 64-bit AArch64 PCS ABI, as well as Apple's convention derived from it, for calls and callbacks.
+The \product{dyncall} library supports the ARM 64-bit AArch64 PCS ABI, as well as Apple's and Microsoft's conventions which are derived from it, for both, calls and callbacks.
 
 \subsubsection{AAPCS64 Calling Convention}
 
@@ -122,7 +122,7 @@
 \newpage
 
 
-\subsubsection{Apple's ARM64 Function Calling Conventions}
+\subsubsection{Apple's ARM64 Function Calling Convention}
 
 \paragraph{Overview}
 
@@ -130,7 +130,19 @@
 Only the differences are listed here, for more details, take a look at Apple's official documentation \cite{AppleARM64}.
 
 \begin{itemize}
-\item arguments passed via stack use only the space they need, but are subject to the type alignment requirements (which is 1 byte for char and bool, 2 for short, 4 for int and 8 for every other type)
+\item arguments passed via stack use only the space they need, but are subject to type alignment requirements (which is 1 byte for char and bool, 2 for short, 4 for int and 8 for every other type)
 \item caller is required to sign and zero-extend arguments smaller than 32bits
 \end{itemize}
 
+
+\subsubsection{Microsoft's ARM64 Function Calling Convention}
+
+\paragraph{Overview}
+
+Microsoft's ARM64 calling convention is based on the AAPCS64 standard, however, diverges for variadic functions.
+Only the differences are listed here, for more details, take a look at Microsoft's official documentation \cite{MicrosoftARM64}.
+
+\begin{itemize}
+\item variadic function calls do not use any SIMD or floating point registers (for fixed and variable args), meaning first 8 params are passed via x0-x7, the rest via the stack
+\end{itemize}
+
--- a/doc/manual/manual_literature.tex	Fri Dec 25 18:07:39 2020 +0100
+++ b/doc/manual/manual_literature.tex	Fri Dec 25 18:45:57 2020 +0100
@@ -1,6 +1,6 @@
 %//////////////////////////////////////////////////////////////////////////////
 %
-% Copyright (c) 2007-2019 Daniel Adler <dadler@uni-goettingen.de>, 
+% Copyright (c) 2007-2020 Daniel Adler <dadler@uni-goettingen.de>, 
 %                         Tassilo Philipp <tphilipp@potion-studios.com>
 %
 % Permission to use, copy, modify, and distribute this software for any
@@ -114,6 +114,10 @@
 	ARM64 Function Calling Conventions\\
 	\url{https://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html}
 
+\bibitem{MicrosoftARM64}
+	Overview of ARM64 ABI conventions (Microsoft)\\
+	\url{https://docs.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions}
+
 \bibitem{armeabi}
 	Debian ARM EABI Port Wiki\\
 	\url{http://wiki.debian.org/ArmEabiPort}
--- a/doc/manual/manual_overview.tex	Fri Dec 25 18:07:39 2020 +0100
+++ b/doc/manual/manual_overview.tex	Fri Dec 25 18:45:57 2020 +0100
@@ -153,7 +153,7 @@
 at the time of writing, or that are not taken into account.\\
 Light green cells mark complete feature support, as in dyncall and dyncallback. Dark green means basic support but lacking features (e.g. dyncall support, but not dyncallback).
 Please note that a green cell (even a light-green one) doesn't imply that all existing calling conventions/features/build tools are supported for that platform (but the most
-important). The rightmost column gives a brief info about calling convention support or other notes.
+important).
 For detailed info about a platform's support consult the calling convention appendix.
 
 
@@ -188,8 +188,8 @@
 \hhline{*{1}{|~}*{14}{|-}}%       ^- checked   ^- find@@@   ^- checked   ^- find@@@   ^- find@@@   ^- find@@@   ^- checked   ^- checked   ^- checked   ^- new@@@   ^- checked    ^- checked   ^- checked
                            & EL & \markunkn  & \markcmpl  & \markcmpl  & \markcmpl  & \markcmpl  & \markcmpl  & \marknotx  & \marknotx  & \marknimp  & \marknotx  & \markunkn  & \marknotx  & \markcmpl \\%& \\
 \hline%                           ^- find@@@   ^- dynOS     ^- real      ^- dynOS     ^- dynOS     ^- real/bbb  ^- checked   ^- checked   ^- checked   ^- new@@@   ^- new@@@     ^- checked   ^- checked
-\multirow{2}{*}{ARM64}     & EB & \marknotx  & \markunkn  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx \\%& \multirow{2}{*}{aapcs64, apple} \\
-\hhline{*{1}{|~}*{14}{|-}}%       ^- checked   ^- find@@@   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked
+\multirow{2}{*}{ARM64}     & EB & \markcmpl  & \markunkn  & \markcmpl  & \markunkn  & \markunkn  & \markunkn  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx \\%& \multirow{2}{*}{aapcs64, apple} \\
+\hhline{*{1}{|~}*{14}{|-}}%       ^- checked   ^- find@@@   ^- checked   ^- new@@@    ^- new@@@    ^- new@@@    ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked
                            & EL & \markunkn  & \markcmpl  & \markcmpl  & \markcmpl  & \markunkn  & \markunkn  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx  & \marknotx \\%& \\
 \hline%                           ^- find@@@   ^- find@@@   ^- checked   ^- checked   ^- find@@@   ^- find@@@   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked   ^- checked
 \multirow{2}{*}{MIPS}      & EB & \marknotx  & \markcmpl  & \marknotx  & \markcmpl  & \markunkn  & \marknotx  & \marknotx  & \marknotx  & \marknimp  & \marknotx  & \marknotx  & \marknotx  & \marknotx \\%& \multirow{2}{*}{o32 (hf \& sf), eabi (hf only)} \\