Mercurial > pub > dyncall > dyncall
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)} \\