https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=8e83ca675f522d132ca35d847aa35f310951702e

commit 8e83ca675f522d132ca35d847aa35f310951702e
Author:     Corinna Vinschen <[email protected]>
AuthorDate: Tue Dec 20 09:56:39 2022 +0100
Commit:     Corinna Vinschen <[email protected]>
CommitDate: Tue Dec 20 10:13:59 2022 +0100

    Cygwin: add local machine/asm.h header
    
    This header supports including BSD assembler sources.
    
    Signed-off-by: Corinna Vinschen <[email protected]>

Diff:
---
 winsup/cygwin/local_includes/machine/asm.h | 78 ++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/winsup/cygwin/local_includes/machine/asm.h 
b/winsup/cygwin/local_includes/machine/asm.h
new file mode 100644
index 000000000000..12b0285396ff
--- /dev/null
+++ b/winsup/cygwin/local_includes/machine/asm.h
@@ -0,0 +1,78 @@
+#ifndef _MACHINE_ASM_H
+#define _MACHINE_ASM_H
+
+/* Macros for importing FreeBSD/OpenBSD/NetBSD assembler code. */
+
+#ifdef __x86_64__
+
+#define _ALIGN_TEXT            .p2align 4,0x90
+
+/* The NATIVE_ENTRY macro just adds the required gas macros.  It can be
+   used stand-alone if the code is so short that it's better to change the
+   argument registeres rather than adding the code overhead. */
+
+#define NATIVE_ENTRY(__sym)             \
+               .text                   ;\
+               .p2align 4              ;\
+               .globl __sym            ;\
+               .seh_proc __sym         ;\
+       __sym:                           \
+
+/* The ENTRY macros cover the difference in argument passing between
+   MS-ABI and SysV ABI.  Note especially that RSI/RDI are always saved
+   in the stack shadow space defined by the MS_ABI, and restored when
+   calling ret (see the "ret" macro below). */
+
+#define __ENTRY(__sym)                  \
+               NATIVE_ENTRY(__sym)      \
+               movq    %rsi,8(%rsp)    ;\
+               movq    %rdi,16(%rsp)   ;
+
+/* ENTRY1 for functions with 1 arg */
+#define ENTRY1(__sym)                   \
+               __ENTRY(__sym)           \
+               movq    %rcx,%rdi       ;\
+               .seh_endprologue        ;
+
+/* ENTRY2 for functions with 2 args */
+#define ENTRY2(__sym)                   \
+               __ENTRY(__sym)           \
+               movq    %rcx,%rdi       ;\
+               movq    %rdx,%rsi       ;\
+               .seh_endprologue        ;
+
+/* ENTRY3 for functions with 3 args */
+#define ENTRY3(__sym)                   \
+               __ENTRY(__sym)           \
+               movq    %rcx,%rdi       ;\
+               movq    %rdx,%rsi       ;\
+               movq    %r8,%rdx        ;\
+               .seh_endprologue        ;
+
+/* ENTRY4 for functions with 4 args */
+#define ENTRY4(__sym)                   \
+               __ENTRY(__sym)           \
+               movq    %rcx,%rdi       ;\
+               movq    %rdx,%rsi       ;\
+               movq    %r8,%rdx        ;\
+               movq    %r9,%rcx        ;\
+               .seh_endprologue        ;
+
+#define ret                             \
+               movq    8(%rsp),%rsi    ;\
+               movq    16(%rsp),%rdi   ;\
+               retq                    ;\
+
+#define END(__sym)                      \
+               .seh_endproc
+
+#endif /* __x86_64__ */
+
+#define __FBSDID(s)                     \
+               .ident s
+
+#define STRONG_ALIAS(__a,__s)           \
+               .globl  __a             ;\
+               __a = __s               ;
+
+#endif /* _MACHINE_ASM_H */

Reply via email to