1 #ifdef _MSC_VER
2 #include "vacall_r.h"
3 #endif
4 #include "asm-i386.h"
5 	TEXT()
6 	ALIGN(2)
7 	P2ALIGN(2,3)
DECLARE_FUNCTION(callback_receiver)8 	DECLARE_FUNCTION(callback_receiver)
9 FUNBEGIN(callback_receiver)
10 	INSN1(push,l	,R(ebp))
11 	INSN2(mov,l	,R(esp), R(ebp))
12 	INSN1(push,l	,R(edi))
13 	INSN1(push,l	,R(esi))
14 	INSN2(lea,l	,X4 MEM_DISP(ebp,8), R(edx))
15 	INSN2(sub,l	,NUM(56), R(esp))
16 	INSN2(mov,l	,R(edx),X4 MEM_DISP(ebp,-40))
17 	INSN2(lea,l	,X4 MEM_DISP(ebp,-56), R(edx))
18 	INSN2(mov,l	,NUM(0),X4 MEM_DISP(ebp,-56))
19 	INSN2(mov,l	,NUM(0),X4 MEM_DISP(ebp,-36))
20 	INSN2(mov,l	,NUM(0),X4 MEM_DISP(ebp,-32))
21 	INSN2(mov,l	,R(ebx),X4 MEM_DISP(ebp,-24))
22 	INSN1(push,l	,R(edx))
23 	INSN1(push,l	,X4 MEM_DISP(ecx,4))
24 	INSN1(call,_	,INDIR(X4 MEM(ecx)))
25 	INSN2(mov,l	,X4 MEM_DISP(ebp,-32), R(esi))
26 	INSN2(add,l	,NUM(16), R(esp))
27 	INSN2(test,l	,R(esi), R(esi))
28 	INSN1(je,_	,L(43))
29 	INSN2(cmp,l	,NUM(1), R(esi))
30 	INSN1(je,_	,L(44))
31 	INSN2(cmp,l	,NUM(2), R(esi))
32 	INSN1(je,_	,L(44))
33 	INSN2(cmp,l	,NUM(3), R(esi))
34 	INSN1(je,_	,L(49))
35 	INSN2(cmp,l	,NUM(4), R(esi))
36 	INSN1(je,_	,L(50))
37 	INSN2(cmp,l	,NUM(5), R(esi))
38 	INSN1(je,_	,L(51))
39 	INSN2(cmp,l	,NUM(6), R(esi))
40 	INSN1(je,_	,L(48))
41 	INSN2(cmp,l	,NUM(7), R(esi))
42 	INSN1(je,_	,L(48))
43 	INSN2(cmp,l	,NUM(8), R(esi))
44 	INSN1(je,_	,L(48))
45 	INSN2(cmp,l	,NUM(9), R(esi))
46 	INSN1(je,_	,L(48))
47 	INSN2(lea,l	,X4 MEM_DISP(esi,-10), R(edx))
48 	INSN2(cmp,l	,NUM(1), R(edx))
49 	INSN1(ja,_	,L(22))
50 	INSN2(mov,l	,X4 MEM_DISP(ebp,-48), R(eax))
51 	INSN2(mov,l	,X4 MEM_DISP(ebp,-44),R(edx))
52 L(33):
53 	P2ALIGN(2,3)
54 L(43):
55 	INSN2(mov,l	,X4 MEM_DISP(ebp,-56), R(esi))
56 L(3):
57 	INSN2(and,l	,NUM(512), R(esi))
58 	INSN1(je,_	,L(1))
59 	INSN2(mov,l	,X4 MEM_DISP(ebp,0),R(ecx))
60 	INSN2(mov,l	,X4 MEM_DISP(ebp,-40), R(esp))
61 	INSN1(jmp,_	,INDIR(R(ecx)))
62 L(1):
63 	INSN2(lea,l	,X4 MEM_DISP(ebp,-8), R(esp))
64 	INSN1(pop,l	,R(esi))
65 	INSN1(pop,l	,R(edi))
66 	leave
67 	ret
68 L(22):
69 	INSN2(cmp,l	,NUM(12), R(esi))
70 	INSN1(je,_	,L(52))
71 	INSN2(cmp,l	,NUM(13), R(esi))
72 	INSN1(je,_	,L(53))
73 	INSN2(cmp,l	,NUM(14), R(esi))
74 	INSN1(je,_	,L(48))
75 	INSN2(cmp,l	,NUM(15), R(esi))
76 	INSN1(jne,_	,L(43))
77 	INSN2(mov,l	,X4 MEM_DISP(ebp,-56), R(esi))
78 	INSN2(test,l	,NUM(1024), R(esi))
79 	INSN2(mov,l	,R(esi), R(edi))
80 	INSN1(je,_	,L(31))
81 	INSN2(mov,l	,X4 MEM_DISP(ebp,-28), R(edx))
82 	INSN2(cmp,l	,NUM(1), R(edx))
83 	INSN1(je,_	,L(54))
84 	INSN2(cmp,l	,NUM(2), R(edx))
85 	INSN1(je,_	,L(55))
86 	INSN2(cmp,l	,NUM(4), R(edx))
87 	INSN1(je,_	,L(56))
88 	INSN2(cmp,l	,NUM(8), R(edx))
89 	INSN1(je,_	,L(57))
90 L(31):
91 	INSN2(and,l	,NUM(16), R(edi))
92 	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(eax))
93 	INSN1(jne,_	,L(3))
94 	INSN2(lea,l	,X4 MEM_DISP(ebp,-8), R(esp))
95 	INSN1(pop,l	,R(esi))
96 	INSN1(pop,l	,R(edi))
97 	leave
98 	ret NUM(4)
99 	INSN1(jmp,_	,L(3))
100 L(57):
101 	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
102 	INSN2(mov,l	,X4 MEM(edx), R(eax))
103 	INSN2(mov,l	,X4 MEM_DISP(edx,4),R(edx))
104 	INSN1(jmp,_	,L(3))
105 L(56):
106 	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
107 	INSN2(mov,l	,X4 MEM(edx), R(eax))
108 	INSN1(jmp,_	,L(3))
109 L(55):
110 	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
111 	INSN2MOVXL(movz,w,X2 MEM(edx), R(eax))
112 	INSN1(jmp,_	,L(3))
113 L(54):
114 	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
115 	INSN2MOVXL(movz,b,X1 MEM(edx), R(eax))
116 	INSN1(jmp,_	,L(3))
117 	P2ALIGN(2,3)
118 L(48):
119 	INSN2(mov,l	,X4 MEM_DISP(ebp,-48), R(eax))
120 	INSN1(jmp,_	,L(43))
121 L(53):
122 	INSN1(fld,l	,X8 MEM_DISP(ebp,-48))
123 	INSN1(jmp,_	,L(43))
124 L(52):
125 	INSN1(fld,s	,X4 MEM_DISP(ebp,-48))
126 	INSN1(jmp,_	,L(43))
127 	P2ALIGN(2,3)
128 L(51):
129 	INSN2MOVXL(movz,w,X2 MEM_DISP(ebp,-48), R(eax))
130 	INSN1(jmp,_	,L(43))
131 L(50):
132 	INSN2MOVXL(movs,w,X2 MEM_DISP(ebp,-48),R(eax))
133 	INSN1(jmp,_	,L(43))
134 L(49):
135 	INSN2MOVXL(movz,b,X1 MEM_DISP(ebp,-48), R(eax))
136 	INSN1(jmp,_	,L(43))
137 	P2ALIGN(2,3)
138 L(44):
139 	INSN2MOVXL(movs,b,X1 MEM_DISP(ebp,-48),R(eax))
140 	INSN1(jmp,_	,L(43))
141 L(fe1):
142 	FUNEND(callback_receiver,L(fe1)-callback_receiver)
143 /* Implementation of callback_get_receiver */
144 
145 /*
146  * Copyright 2017 Bruno Haible <bruno@clisp.org>
147  *
148  * This program is free software: you can redistribute it and/or modify
149  * it under the terms of the GNU General Public License as published by
150  * the Free Software Foundation; either version 2 of the License, or
151  * (at your option) any later version.
152  *
153  * This program is distributed in the hope that it will be useful,
154  * but WITHOUT ANY WARRANTY; without even the implied warranty of
155  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
156  * GNU General Public License for more details.
157  *
158  * You should have received a copy of the GNU General Public License
159  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
160  */
161 
162 __vacall_r_t
163 callback_get_receiver (void)
164 {
165   return (__vacall_r_t)(void*)&callback_receiver;
166 }
167