1 /* { dg-options "-O2 -fpack-struct -mstrict-align -fno-stack-protector" } */
2 /* { dg-final { check-function-bodies "**" "" "" } } */
3
4 #include <arm_neon.h>
5
6 /*
7 ** ld2:
8 ** ...
9 ** ld2 .*
10 ** ...
11 ** (
12 ** strb .*
13 ** |
14 ** bl memcpy
15 ** )
16 ** ...
17 */
18 void
19 ld2 (int32x4x2_t *a, int32_t *b)
20 {
21 *a = vld2q_s32 (b);
22 }
23
24 /*
25 ** ld3:
26 ** ...
27 ** ld3 .*
28 ** ...
29 ** (
30 ** strb .*
31 ** |
32 ** bl memcpy
33 ** )
34 ** ...
35 */
36 void
37 ld3 (int32x4x3_t *a, int32_t *b)
38 {
39 *a = vld3q_s32 (b);
40 }
41
42 /*
43 ** ld4:
44 ** ...
45 ** ld4 .*
46 ** ...
47 ** (
48 ** strb .*
49 ** |
50 ** bl memcpy
51 ** )
52 ** ...
53 */
54 void
55 ld4 (int32x4x4_t *a, int32_t *b)
56 {
57 *a = vld4q_s32 (b);
58 }
59
60 /*
61 ** ret:
62 ** ...
63 ** ldp q0, q1, \[x0\]
64 ** ldr q2, \[x0, #?32\]
65 ** ...
66 */
67 int32x4x3_t
68 ret (int32x4_t *ptr)
69 {
70 return (int32x4x3_t) { ptr[0], ptr[1], ptr[2] };
71 }
72
73 /*
74 ** arg:
75 ** ...
76 ** stp d0, d1, \[x0\]
77 ** ...
78 */
79 void
80 arg (int32x2x2_t arg, int32x2_t *ptr)
81 {
82 ptr[0] = arg.val[0];
83 ptr[1] = arg.val[1];
84 }