1#include "asm-arm64.h"
2	.cpu generic+fp+simd
3	.text
4	.align	2
5	.p2align 3,,7
6	DECLARE_FUNCTION(callback_receiver)
7FUNBEGIN(callback_receiver)
8	stp	x29, x30, [sp, -256]!
9	add	x29, sp, 0
10	ldr	x10, [x18]
11	add	x11, x29, 256
12	stp	s0, s1, [x29, 156]
13	stp	s2, s3, [x29, 164]
14	stp	x0, x1, [x29, 88]
15	stp	s4, s5, [x29, 172]
16	stp	x11, xzr, [x29, 40]
17	stp	s6, s7, [x29, 180]
18	str	x8, [x29, 72]
19	stp	d0, d1, [x29, 192]
20	stp	x2, x3, [x29, 104]
21	stp	d2, d3, [x29, 208]
22	stp	x4, x5, [x29, 120]
23	stp	d4, d5, [x29, 224]
24	stp	x6, x7, [x29, 136]
25	stp	d6, d7, [x29, 240]
26	str	wzr, [x29, 24]
27	add	x1, x29, 24
28	str	wzr, [x29, 56]
29	ldr	x0, [x18, 8]
30	str	wzr, [x29, 80]
31	str	wzr, [x29, 152]
32	blr	x10
33	ldr	w9, [x29, 56]
34	cbz	w9, L(1)
35	cmp	w9, 1
36	beq	L(25)
37	cmp	w9, 2
38	beq	L(29)
39	cmp	w9, 3
40	beq	L(25)
41	cmp	w9, 4
42	beq	L(30)
43	cmp	w9, 5
44	beq	L(31)
45	cmp	w9, 6
46	beq	L(32)
47	cmp	w9, 7
48	beq	L(33)
49	and	w10, w9, -3
50	cmp	w10, 8
51	beq	L(27)
52	cmp	w10, 9
53	beq	L(27)
54	cmp	w9, 12
55	beq	L(34)
56	cmp	w9, 13
57	beq	L(35)
58	cmp	w9, 14
59	beq	L(27)
60	cmp	w9, 15
61	bne	L(1)
62	ldr	w9, [x29, 24]
63	tbz	x9, 10, L(1)
64	ldr	x9, [x29, 64]
65	sub	x10, x9, $1
66	cmp	x10, 15
67	bhi	L(1)
68	ldr	x11, [x29, 48]
69	cmp	x9, 8
70	and	x10, x11, 7
71	and	x11, x11, -8
72	add	x9, x9, x10
73	bhi	L(15)
74	cmp	x9, 8
75	lsl	w9, w9, 3
76	bhi	L(16)
77	mov	x12, 2
78	sub	w9, w9, $1
79	lsl	x9, x12, x9
80	ldr	x11, [x11]
81	sub	x9, x9, $1
82	lsl	w10, w10, 3
83	and	x9, x9, x11
84	asr	x0, x9, x10
85L(1):
86	ldp	x29, x30, [sp], 256
87	ret
88	.p2align 3
89L(25):
90	ldrb	w0, [x29, 32]
91	ldp	x29, x30, [sp], 256
92	ret
93	.p2align 3
94L(27):
95	ldr	x0, [x29, 32]
96	b	L(1)
97	.p2align 3
98L(29):
99	ldrsb	x0, [x29, 32]
100	b	L(1)
101	.p2align 3
102L(30):
103	ldrsh	x0, [x29, 32]
104	b	L(1)
105	.p2align 3
106L(31):
107	ldrh	w0, [x29, 32]
108	b	L(1)
109	.p2align 3
110L(32):
111	ldrsw	x0, [x29, 32]
112	b	L(1)
113	.p2align 3
114L(33):
115	ldr	w0, [x29, 32]
116	b	L(1)
117L(34):
118	ldr	s0, [x29, 32]
119	b	L(1)
120L(35):
121	ldr	d0, [x29, 32]
122	b	L(1)
123L(15):
124	cmp	x9, 16
125	lsl	w9, w9, 3
126	bls	L(36)
127	mov	x13, 2
128	sub	w9, w9, $129
129	ldp	x14, x12, [x11, 8]
130	lsl	x9, x13, x9
131	lsl	w15, w10, 3
132	sub	x9, x9, $1
133	neg	w10, w10, lsl 3
134	ldr	x11, [x11]
135	add	w10, w10, 64
136	and	x9, x9, x12
137	lsl	x16, x14, x10
138	asr	x11, x11, x15
139	asr	x14, x14, x15
140	lsl	x10, x9, x10
141	orr	x0, x11, x16
142	orr	x1, x10, x14
143	b	L(1)
144L(16):
145	mov	w13, -8
146	mov	x14, 2
147	sub	w9, w9, $65
148	lsl	w15, w10, 3
149	ldr	x12, [x11, 8]
150	lsl	x9, x14, x9
151	mul	w10, w13, w10
152	sub	x9, x9, $1
153	ldr	x11, [x11]
154	add	w10, w10, 64
155	and	x9, x9, x12
156	asr	x11, x11, x15
157	lsl	x9, x9, x10
158	orr	x0, x9, x11
159	b	L(1)
160L(36):
161	mov	w13, -4
162	mov	x14, 2
163	sub	w9, w9, $65
164	lsl	w15, w10, 3
165	ldr	x12, [x11, 8]
166	lsl	x9, x14, x9
167	mul	w10, w13, w10
168	sub	x9, x9, $1
169	ldr	x11, [x11]
170	add	w10, w10, 32
171	and	x9, x9, x12
172	asr	x1, x9, x15
173	lsl	x9, x9, x10
174	asr	x11, x11, x15
175	lsl	x9, x9, x10
176	orr	x0, x11, x9
177	b	L(1)
178	FUNEND(callback_receiver)
179	.align	2
180	.p2align 3,,7
181	.global C(callback_get_receiver)
182	DECLARE_FUNCTION(callback_get_receiver)
183FUNBEGIN(callback_get_receiver)
184	adrp	x9, PAGE(C(callback_receiver))
185	add	x0, x9, PAGEOFF(C(callback_receiver))
186	ret
187	FUNEND(callback_get_receiver)
188#if defined __linux__ || defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __DragonFly__
189	.section .note.GNU-stack,"",%progbits
190#endif
191