8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libsaveargs / tests / testmatch / data.s
blob77a5b30394a2d4cb42b7f4fd2e6c23d416f9c76a
1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
13 * Copyright 2012, Richard Lowe.
16 #define FUNC(x) \
17 .text; \
18 .align 16; \
19 .globl x; \
20 .type x, @function; \
23 #define SET_SIZE(x, x_size) \
24 .size x, [.-x]; \
25 .globl x_size; \
26 .type x_size, @object; \
27 x_size:
30 * Extracted versions of the functional tests
32 * Named of the form <compiler>-<prologue style>-<nature of test>
33 * basic -- A regular function
34 * align -- odd number of arguments needing save-area
35 * alignment
36 * big-struct-ret -- returns a > 16byte structure by value
37 * big-struct-ret-and-spill -- returns a > 16byte structure by value and
38 * spills args to the stack
39 * small-struct-ret -- returns a < 16byte structure by value
40 * small-struct-ret-and-spill -- returns a < 16byte structure by value and
41 * spills args to the stack
42 * stack-spill -- spills arguments to the stack
44 FUNC(gcc_mov_align)
45 pushq %rbp
46 movq %rsp, %rbp
47 movq %rbx, -0x38(%rbp)
48 movq %r8, -0x28(%rbp)
49 movq %rcx, -0x20(%rbp)
50 movq %rdx, -0x18(%rbp)
51 movq %rsi, -0x10(%rbp)
52 movq %rdi, -0x8(%rbp)
53 subq $0x70, %rsp
54 SET_SIZE(gcc_mov_align, gcc_mov_align_end)
56 FUNC(gcc_mov_basic)
57 pushq %rbp
58 movq %rsp, %rbp
59 movq %rbx,-0x28(%rbp)
60 movq %rcx,-0x20(%rbp)
61 movq %rdx,-0x18(%rbp)
62 movq %rsi,-0x10(%rbp)
63 movq %rdi,-0x8(%rbp)
64 subq $0x50,%rsp
65 SET_SIZE(gcc_mov_basic, gcc_mov_basic_end)
67 FUNC(gcc_mov_noorder)
68 pushq %rbp
69 movq %rsp, %rbp
70 movq %rcx,-0x20(%rbp)
71 movq %rbx,-0x28(%rbp)
72 movq %rdi,-0x8(%rbp)
73 movq %rdx,-0x18(%rbp)
74 movq %rsi,-0x10(%rbp)
75 subq $0x50,%rsp
76 SET_SIZE(gcc_mov_noorder, gcc_mov_noorder_end)
78 FUNC(gcc_mov_big_struct_ret)
79 pushq %rbp
80 movq %rsp,%rbp
81 movq %rbx,-0x28(%rbp)
82 movq %r8,-0x20(%rbp)
83 movq %rcx,-0x18(%rbp)
84 movq %rdx,-0x10(%rbp)
85 movq %rsi,-0x8(%rbp)
86 subq $0x50,%rsp
87 SET_SIZE(gcc_mov_big_struct_ret, gcc_mov_big_struct_ret_end)
89 FUNC(gcc_mov_struct_noorder)
90 pushq %rbp
91 movq %rsp,%rbp
92 movq %rcx,-0x18(%rbp)
93 movq %r8,-0x20(%rbp)
94 movq %rsi,-0x8(%rbp)
95 movq %rdx,-0x10(%rbp)
96 movq %rbx,-0x28(%rbp)
97 subq $0x50,%rsp
98 SET_SIZE(gcc_mov_struct_noorder, gcc_mov_struct_noorder_end)
100 FUNC(gcc_mov_big_struct_ret_and_spill)
101 pushq %rbp
102 movq %rsp,%rbp
103 movq %rbx,-0x38(%rbp)
104 movq %r9,-0x28(%rbp)
105 movq %r8,-0x20(%rbp)
106 movq %rcx,-0x18(%rbp)
107 movq %rdx,-0x10(%rbp)
108 movq %rsi,-0x8(%rbp)
109 subq $0x90,%rsp
110 SET_SIZE(gcc_mov_big_struct_ret_and_spill, gcc_mov_big_struct_ret_and_spill_end)
112 FUNC(gcc_mov_small_struct_ret)
113 pushq %rbp
114 movq %rsp,%rbp
115 movq %rbx,-0x28(%rbp)
116 movq %rcx,-0x20(%rbp)
117 movq %rdx,-0x18(%rbp)
118 movq %rsi,-0x10(%rbp)
119 movq %rdi,-0x8(%rbp)
120 subq $0x50,%rsp
121 SET_SIZE(gcc_mov_small_struct_ret, gcc_mov_small_struct_ret_end)
123 FUNC(gcc_mov_small_struct_ret_and_spill)
124 pushq %rbp
125 movq %rsp,%rbp
126 movq %rbx,-0x38(%rbp)
127 movq %r9,-0x30(%rbp)
128 movq %r8,-0x28(%rbp)
129 movq %rcx,-0x20(%rbp)
130 movq %rdx,-0x18(%rbp)
131 movq %rsi,-0x10(%rbp)
132 movq %rdi,-0x8(%rbp)
133 subq $0x90,%rsp
134 SET_SIZE(gcc_mov_small_struct_ret_and_spill, gcc_mov_small_struct_ret_and_spill_end)
136 FUNC(gcc_mov_stack_spill)
137 pushq %rbp
138 movq %rsp,%rbp
139 movq %rbx,-0x38(%rbp)
140 movq %r9,-0x30(%rbp)
141 movq %r8,-0x28(%rbp)
142 movq %rcx,-0x20(%rbp)
143 movq %rdx,-0x18(%rbp)
144 movq %rsi,-0x10(%rbp)
145 movq %rdi,-0x8(%rbp)
146 subq $0x90,%rsp
147 SET_SIZE(gcc_mov_stack_spill, gcc_mov_stack_spill_end)
149 FUNC(gcc_push_align)
150 pushq %rbp
151 movq %rsp,%rbp
152 pushq %rdi
153 pushq %rsi
154 pushq %rdx
155 pushq %rcx
156 pushq %r8
157 subq $0x8,%rsp
158 subq $0x30,%rsp
159 SET_SIZE(gcc_push_align, gcc_push_align_end)
161 FUNC(gcc_push_basic)
162 pushq %rbp
163 movq %rsp,%rbp
164 pushq %rdi
165 pushq %rsi
166 pushq %rdx
167 pushq %rcx
168 subq $0x20,%rsp
169 SET_SIZE(gcc_push_basic, gcc_push_basic_end)
171 FUNC(gcc_push_noorder)
172 pushq %rbp
173 movq %rsp,%rbp
174 pushq %rsi
175 pushq %rdi
176 pushq %rcx
177 pushq %rdx
178 subq $0x20,%rsp
179 SET_SIZE(gcc_push_noorder, gcc_push_noorder_end)
181 FUNC(gcc_push_big_struct_ret)
182 pushq %rbp
183 movq %rsp,%rbp
184 pushq %rsi
185 pushq %rdx
186 pushq %rcx
187 pushq %r8
188 subq $0x30,%rsp
189 SET_SIZE(gcc_push_big_struct_ret, gcc_push_big_struct_ret_end)
191 FUNC(gcc_push_struct_noorder)
192 pushq %rbp
193 movq %rsp,%rbp
194 pushq %rdx
195 pushq %rsi
196 pushq %r8
197 pushq %rcx
198 subq $0x30,%rsp
199 SET_SIZE(gcc_push_struct_noorder, gcc_push_struct_noorder_end)
201 FUNC(gcc_push_big_struct_ret_and_spill)
202 pushq %rbp
203 movq %rsp,%rbp
204 pushq %rsi
205 pushq %rdx
206 pushq %rcx
207 pushq %r8
208 pushq %r9
209 subq $0x8,%rsp
210 subq $0x50,%rsp
211 SET_SIZE(gcc_push_big_struct_ret_and_spill, gcc_push_big_struct_ret_and_spill_end)
213 FUNC(gcc_push_small_struct_ret)
214 pushq %rbp
215 movq %rsp,%rbp
216 pushq %rdi
217 pushq %rsi
218 pushq %rdx
219 pushq %rcx
220 subq $0x20,%rsp
221 SET_SIZE(gcc_push_small_struct_ret, gcc_push_small_struct_ret_end)
223 FUNC(gcc_push_small_struct_ret_and_spill)
224 pushq %rbp
225 movq %rsp,%rbp
226 pushq %rdi
227 pushq %rsi
228 pushq %rdx
229 pushq %rcx
230 pushq %r8
231 pushq %r9
232 subq $0x50,%rsp
233 SET_SIZE(gcc_push_small_struct_ret_and_spill, gcc_push_small_struct_ret_and_spill_end)
235 FUNC(gcc_push_stack_spill)
236 pushq %rbp
237 movq %rsp,%rbp
238 pushq %rdi
239 pushq %rsi
240 pushq %rdx
241 pushq %rcx
242 pushq %r8
243 pushq %r9
244 subq $0x50,%rsp
245 SET_SIZE(gcc_push_stack_spill, gcc_push_stack_spill_end)
247 FUNC(ss_mov_align)
248 pushq %rbp
249 movq %rsp,%rbp
250 subq $0x30,%rsp
251 movq %rdi,-0x8(%rbp)
252 movq %rsi,-0x10(%rbp)
253 movq %rdx,-0x18(%rbp)
254 movq %rcx,-0x20(%rbp)
255 movq %r8,-0x28(%rbp)
256 SET_SIZE(ss_mov_align, ss_mov_align_end)
258 FUNC(ss_mov_basic)
259 pushq %rbp
260 movq %rsp,%rbp
261 subq $0x20,%rsp
262 movq %rdi,-0x8(%rbp)
263 movq %rsi,-0x10(%rbp)
264 movq %rdx,-0x18(%rbp)
265 movq %rcx,-0x20(%rbp)
266 SET_SIZE(ss_mov_basic, ss_mov_basic_end)
268 FUNC(ss_mov_big_struct_ret)
269 pushq %rbp
270 movq %rsp,%rbp
271 subq $0x30,%rsp
272 movq %rdi,-0x8(%rbp)
273 movq %rsi,-0x10(%rbp)
274 movq %rdx,-0x18(%rbp)
275 movq %rcx,-0x20(%rbp)
276 movq %r8,-0x28(%rbp)
277 SET_SIZE(ss_mov_big_struct_ret, ss_mov_big_struct_ret_end)
279 FUNC(ss_mov_big_struct_ret_and_spill)
280 pushq %rbp
281 movq %rsp,%rbp
282 subq $0x50,%rsp
283 movq %rdi,-0x8(%rbp)
284 movq %rsi,-0x10(%rbp)
285 movq %rdx,-0x18(%rbp)
286 movq %rcx,-0x20(%rbp)
287 movq %r8,-0x28(%rbp)
288 movq %r9,-0x30(%rbp)
289 SET_SIZE(ss_mov_big_struct_ret_and_spill, ss_mov_big_struct_ret_and_spill_end)
291 FUNC(ss_mov_small_struct_ret)
292 pushq %rbp
293 movq %rsp,%rbp
294 subq $0x20,%rsp
295 movq %rdi,-0x8(%rbp)
296 movq %rsi,-0x10(%rbp)
297 movq %rdx,-0x18(%rbp)
298 movq %rcx,-0x20(%rbp)
299 SET_SIZE(ss_mov_small_struct_ret, ss_mov_small_struct_ret_end)
301 FUNC(ss_mov_small_struct_ret_and_spill)
302 pushq %rbp
303 movq %rsp,%rbp
304 subq $0x50,%rsp
305 movq %rdi,-0x8(%rbp)
306 movq %rsi,-0x10(%rbp)
307 movq %rdx,-0x18(%rbp)
308 movq %rcx,-0x20(%rbp)
309 movq %r8,-0x28(%rbp)
310 movq %r9,-0x30(%rbp)
311 SET_SIZE(ss_mov_small_struct_ret_and_spill, ss_mov_small_struct_ret_and_spill_end)
313 FUNC(ss_mov_stack_spill)
314 pushq %rbp
315 movq %rsp,%rbp
316 subq $0x50,%rsp
317 movq %rdi,-0x8(%rbp)
318 movq %rsi,-0x10(%rbp)
319 movq %rdx,-0x18(%rbp)
320 movq %rcx,-0x20(%rbp)
321 movq %r8,-0x28(%rbp)
322 movq %r9,-0x30(%rbp)
323 SET_SIZE(ss_mov_stack_spill, ss_mov_stack_spill_end)
325 /* DTrace instrumentation */
326 FUNC(dtrace_instrumented)
327 int $0x3
328 movq %rsp, %rbp
329 movq %rbx,-0x28(%rbp)
330 movq %rcx,-0x20(%rbp)
331 movq %rdx,-0x18(%rbp)
332 movq %rsi,-0x10(%rbp)
333 movq %rdi,-0x8(%rbp)
334 subq $0x50,%rsp
335 SET_SIZE(dtrace_instrumented, dtrace_instrumented_end)
338 * System functions with special characteristics, be they non-initial FP save,
339 * gaps between FP save and argument saving, or gaps between saved arguments.
341 FUNC(kmem_alloc)
342 leaq -0x1(%rdi),%rax
343 pushq %rbp
344 movq %rax,%rdx
345 movq %rsp,%rbp
346 subq $0x30,%rsp
347 shrq $0x3,%rdx
348 movq %r12,-0x28(%rbp)
349 movq %rbx,-0x30(%rbp)
350 cmpq $0x1ff,%rdx
351 movq %r13,-0x20(%rbp)
352 movq %r14,-0x18(%rbp)
353 movq %rsi,-0x10(%rbp)
354 movq %rdi,-0x8(%rbp)
355 movq %rdi,%r12
356 SET_SIZE(kmem_alloc, kmem_alloc_end)
358 FUNC(uts_kill)
359 pushq %rbp
360 movq %rsp,%rbp
361 subq $0x50,%rsp
362 movq %rbx,-0x28(%rbp)
363 leaq -0x50(%rbp),%rbx
364 movq %r12,-0x20(%rbp)
365 movq %r13,-0x18(%rbp)
366 movq %rsi,-0x10(%rbp)
367 movl %edi,%r12d
368 movq %rdi,-0x8(%rbp)
369 SET_SIZE(uts_kill, uts_kill_end)
371 FUNC(av1394_ic_bitreverse)
372 movq %rdi,%rdx
373 movq $0x5555555555555555,%rax
374 movq $0x3333333333333333,%rcx
375 shrq $0x1,%rdx
376 pushq %rbp
377 andq %rax,%rdx
378 andq %rdi,%rax
379 addq %rax,%rax
380 movq %rsp,%rbp
381 subq $0x10,%rsp
382 orq %rdx,%rax
383 movq %rdi,-0x8(%rbp)
384 SET_SIZE(av1394_ic_bitreverse, av1394_ic_bitreverse_end)
386 /* Problematic functions which should not match */
388 FUNC(no_fp) /* No frame pointer */
389 movq %rdi, %rsi
390 movq %rsi, %rdi
391 movq %rbx,-0x28(%rbp)
392 movq %rcx,-0x20(%rbp)
393 movq %rdx,-0x18(%rbp)
394 movq %rsi,-0x10(%rbp)
395 movq %rdi,-0x8(%rbp)
396 subq $0x50,%rsp
397 SET_SIZE(no_fp, no_fp_end)
399 /* Small structure return, but with an SSE type (thus forcing it to the stack) */
400 FUNC(small_struct_ret_w_float)
401 pushq %rbp
402 movq %rsp,%rbp
403 movq %rdi,-0x8(%rbp)
404 subq $0x30,%rsp
405 SET_SIZE(small_struct_ret_w_float, small_struct_ret_w_float_end)
407 /* Big structure return, but with an SSE type */
408 FUNC(big_struct_ret_w_float)
409 pushq %rbp
410 movq %rsp,%rbp
411 movq %rsi,-0x8(%rbp)
412 subq $0x50,%rsp
413 movq %rsi,-0x48(%rbp)
414 movq -0x48(%rbp),%rax
415 movq %rax,%rsi
416 movl $0x400f60,%edi
417 movl $0x0,%eax
418 movl $0x1770,%edi
419 movl $0x0,%eax
420 leave
422 SET_SIZE(big_struct_ret_w_float, big_struct_ret_w_float_end)
424 FUNC(big_struct_arg_by_value)
425 pushq %rbp
426 movq %rsp,%rbp
427 movq %rdi,-0x8(%rbp)
428 subq $0x40,%rsp
429 SET_SIZE(big_struct_arg_by_value, big_struct_arg_by_value_end)
431 FUNC(small_struct_arg_by_value)
432 pushq %rbp
433 movq %rsp,%rbp
434 movq %rdx,-0x18(%rbp)
435 movq %rsi,-0x10(%rbp)
436 movq %rdi,-0x8(%rbp)
437 subq $0x50,%rsp
438 SET_SIZE(small_struct_arg_by_value, small_struct_arg_by_value_end)
440 FUNC(interleaved_argument_saves)
441 pushq %rbp
442 movq %rdi,%rax
443 shlq $0x21,%rax
444 movq %rsp,%rbp
445 shrq $0x29,%rax
446 subq $0x30,%rsp
447 movq %rdi,-0x8(%rbp)
448 movq %rbx,-0x28(%rbp)
449 movzbl %dil,%edi
450 movq %rcx,-0x20(%rbp)
451 movq %rdx,-0x18(%rbp)
452 movq %rsi,-0x10(%rbp)
453 movq 0x0(,%rax,8),%rax
454 SET_SIZE(interleaved_argument_saves, interleaved_argument_saves_end)
456 FUNC(jmp_table)
457 pushq %rbp
458 movq %rsp,%rbp
459 .word 0x9afe
460 .word 0xffff
461 .word 0xffff
462 .word 0xa8ff
463 .word 0xffff
464 .word 0xffff
465 .word 0x7cff
466 .word 0xffff
467 .word 0xffff
468 SET_SIZE(jmp_table, jmp_table_end)