1#include "asm-i386.h"
2	TEXT()
3	ALIGN(2)
4	P2ALIGN(2,3)
5	DECLARE_FUNCTION(callback_receiver)
6FUNBEGIN(callback_receiver)
7	INSN1(push,l	,R(ebp))
8	INSN2(mov,l	,R(esp), R(ebp))
9	INSN1(push,l	,R(edi))
10	INSN1(push,l	,R(esi))
11	INSN2(lea,l	,X4 MEM_DISP(ebp,8), R(edx))
12	INSN2(sub,l	,NUM(56), R(esp))
13	INSN2(mov,l	,R(edx),X4 MEM_DISP(ebp,-40))
14	INSN2(lea,l	,X4 MEM_DISP(ebp,-56), R(edx))
15	INSN2(mov,l	,NUM(0),X4 MEM_DISP(ebp,-56))
16	INSN2(mov,l	,NUM(0),X4 MEM_DISP(ebp,-36))
17	INSN2(mov,l	,NUM(0),X4 MEM_DISP(ebp,-32))
18	INSN2(mov,l	,R(ebx),X4 MEM_DISP(ebp,-24))
19	INSN1(push,l	,R(edx))
20	INSN1(push,l	,X4 MEM_DISP(ecx,4))
21	INSN1(call,_	,INDIR(X4 MEM(ecx)))
22	INSN2(mov,l	,X4 MEM_DISP(ebp,-32), R(esi))
23	INSN2(add,l	,NUM(16), R(esp))
24	INSN2(test,l	,R(esi), R(esi))
25	INSN1(je,_	,L(43))
26	INSN2(cmp,l	,NUM(1), R(esi))
27	INSN1(je,_	,L(44))
28	INSN2(cmp,l	,NUM(2), R(esi))
29	INSN1(je,_	,L(44))
30	INSN2(cmp,l	,NUM(3), R(esi))
31	INSN1(je,_	,L(49))
32	INSN2(cmp,l	,NUM(4), R(esi))
33	INSN1(je,_	,L(50))
34	INSN2(cmp,l	,NUM(5), R(esi))
35	INSN1(je,_	,L(51))
36	INSN2(cmp,l	,NUM(6), R(esi))
37	INSN1(je,_	,L(48))
38	INSN2(cmp,l	,NUM(7), R(esi))
39	INSN1(je,_	,L(48))
40	INSN2(cmp,l	,NUM(8), R(esi))
41	INSN1(je,_	,L(48))
42	INSN2(cmp,l	,NUM(9), R(esi))
43	INSN1(je,_	,L(48))
44	INSN2(lea,l	,X4 MEM_DISP(esi,-10), R(edx))
45	INSN2(cmp,l	,NUM(1), R(edx))
46	INSN1(ja,_	,L(22))
47	INSN2(mov,l	,X4 MEM_DISP(ebp,-48), R(eax))
48	INSN2(mov,l	,X4 MEM_DISP(ebp,-44),R(edx))
49L(33):
50	P2ALIGN(2,3)
51L(43):
52	INSN2(mov,l	,X4 MEM_DISP(ebp,-56), R(esi))
53L(3):
54	INSN2(and,l	,NUM(512), R(esi))
55	INSN1(je,_	,L(1))
56	INSN2(mov,l	,X4 MEM_DISP(ebp,0),R(ecx))
57	INSN2(mov,l	,X4 MEM_DISP(ebp,-40), R(esp))
58	INSN1(jmp,_	,INDIR(R(ecx)))
59L(1):
60	INSN2(lea,l	,X4 MEM_DISP(ebp,-8), R(esp))
61	INSN1(pop,l	,R(esi))
62	INSN1(pop,l	,R(edi))
63	leave
64	ret
65L(22):
66	INSN2(cmp,l	,NUM(12), R(esi))
67	INSN1(je,_	,L(52))
68	INSN2(cmp,l	,NUM(13), R(esi))
69	INSN1(je,_	,L(53))
70	INSN2(cmp,l	,NUM(14), R(esi))
71	INSN1(je,_	,L(48))
72	INSN2(cmp,l	,NUM(15), R(esi))
73	INSN1(jne,_	,L(43))
74	INSN2(mov,l	,X4 MEM_DISP(ebp,-56), R(esi))
75	INSN2(test,l	,NUM(1024), R(esi))
76	INSN2(mov,l	,R(esi), R(edi))
77	INSN1(je,_	,L(31))
78	INSN2(mov,l	,X4 MEM_DISP(ebp,-28), R(edx))
79	INSN2(cmp,l	,NUM(1), R(edx))
80	INSN1(je,_	,L(54))
81	INSN2(cmp,l	,NUM(2), R(edx))
82	INSN1(je,_	,L(55))
83	INSN2(cmp,l	,NUM(4), R(edx))
84	INSN1(je,_	,L(56))
85	INSN2(cmp,l	,NUM(8), R(edx))
86	INSN1(je,_	,L(57))
87L(31):
88	INSN2(and,l	,NUM(16), R(edi))
89	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(eax))
90	INSN1(jne,_	,L(3))
91	INSN2(lea,l	,X4 MEM_DISP(ebp,-8), R(esp))
92	INSN1(pop,l	,R(esi))
93	INSN1(pop,l	,R(edi))
94	leave
95	ret NUM(4)
96	INSN1(jmp,_	,L(3))
97L(57):
98	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
99	INSN2(mov,l	,X4 MEM(edx), R(eax))
100	INSN2(mov,l	,X4 MEM_DISP(edx,4),R(edx))
101	INSN1(jmp,_	,L(3))
102L(56):
103	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
104	INSN2(mov,l	,X4 MEM(edx), R(eax))
105	INSN1(jmp,_	,L(3))
106L(55):
107	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
108	INSN2MOVXL(movz,w,X2 MEM(edx), R(eax))
109	INSN1(jmp,_	,L(3))
110L(54):
111	INSN2(mov,l	,X4 MEM_DISP(ebp,-36), R(edx))
112	INSN2MOVXL(movz,b,X1 MEM(edx), R(eax))
113	INSN1(jmp,_	,L(3))
114	P2ALIGN(2,3)
115L(48):
116	INSN2(mov,l	,X4 MEM_DISP(ebp,-48), R(eax))
117	INSN1(jmp,_	,L(43))
118L(53):
119	INSN1(fld,l	,X8 MEM_DISP(ebp,-48))
120	INSN1(jmp,_	,L(43))
121L(52):
122	INSN1(fld,s	,X4 MEM_DISP(ebp,-48))
123	INSN1(jmp,_	,L(43))
124	P2ALIGN(2,3)
125L(51):
126	INSN2MOVXL(movz,w,X2 MEM_DISP(ebp,-48), R(eax))
127	INSN1(jmp,_	,L(43))
128L(50):
129	INSN2MOVXL(movs,w,X2 MEM_DISP(ebp,-48),R(eax))
130	INSN1(jmp,_	,L(43))
131L(49):
132	INSN2MOVXL(movz,b,X1 MEM_DISP(ebp,-48), R(eax))
133	INSN1(jmp,_	,L(43))
134	P2ALIGN(2,3)
135L(44):
136	INSN2MOVXL(movs,b,X1 MEM_DISP(ebp,-48),R(eax))
137	INSN1(jmp,_	,L(43))
138L(fe1):
139	FUNEND(callback_receiver,L(fe1)-callback_receiver)
140	ALIGN(2)
141	P2ALIGN(2,3)
142GLOBL(C(callback_get_receiver))
143	DECLARE_FUNCTION(callback_get_receiver)
144FUNBEGIN(callback_get_receiver)
145	INSN1(push,l	,R(ebp))
146	INSN2(mov,l	,R(esp), R(ebp))
147	INSN1(push,l	,R(ebx))
148	INSN1(call,_	,L(59))
149L(59):
150	INSN1(pop,l	,R(ebx))
151#ifdef __ELF__
152	INSN2(add,l	,NUM()_GLOBAL_OFFSET_TABLE_+[.-L(59)],R(ebx))
153#endif
154#ifdef __ELF__
155	INSN2(lea,l	,callback_receiver@MEM_DISP(ebx,GOTOFF), R(eax))
156#else
157	INSN2(lea,l	,C(callback_receiver)-L(59)MEM(ebx), R(eax))
158#endif
159	INSN2(mov,l	,X4 MEM(esp), R(ebx))
160	leave
161	ret
162L(fe2):
163	FUNEND(callback_get_receiver,L(fe2)-callback_get_receiver)
164
165#if defined __linux__ || defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __DragonFly__
166	.section .note.GNU-stack,"",@progbits
167#endif
168