1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 .file "gcc_386.S"
6
7 /*
8 * Windows still insists on underscore prefixes for C function names.
9 */
10 #if defined(_WIN32)
11 #define EXT(s) _##s
12 #else
13 #define EXT(s) s
14 #endif
15
16 /*
17 * void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g)
18 *
19 * Calling into the gc tool chain, where all registers are caller save.
20 * Called from standard x86 ABI, where %ebp, %ebx, %esi,
21 * and %edi are callee-save, so they must be saved explicitly.
22 */
23 .globl EXT(crosscall1)
24 EXT(crosscall1):
25 pushl %ebp
26 movl %esp, %ebp
27 pushl %ebx
28 pushl %esi
29 pushl %edi
30
31 movl 16(%ebp), %eax /* g */
32 pushl %eax
33 movl 12(%ebp), %eax /* setg_gcc */
34 call *%eax
35 popl %eax
36
37 movl 8(%ebp), %eax /* fn */
38 call *%eax
39
40 popl %edi
41 popl %esi
42 popl %ebx
43 popl %ebp
44 ret
45
46 #ifdef __ELF__
47 .section .note.GNU-stack,"",@progbits
48 #endif
49
View as plain text