1*a59444a3SMartin Storsjo #include <cstdint>
2*a59444a3SMartin Storsjo
3*a59444a3SMartin Storsjo struct alignas(16) vec_t {
4*a59444a3SMartin Storsjo uint64_t a, b;
5*a59444a3SMartin Storsjo };
6*a59444a3SMartin Storsjo
main()7*a59444a3SMartin Storsjo int main() {
8*a59444a3SMartin Storsjo constexpr uint32_t gprs[] = {
9*a59444a3SMartin Storsjo 0x00010203,
10*a59444a3SMartin Storsjo 0x10111213,
11*a59444a3SMartin Storsjo 0x20212223,
12*a59444a3SMartin Storsjo 0x30313233,
13*a59444a3SMartin Storsjo 0x40414243,
14*a59444a3SMartin Storsjo 0x50515253,
15*a59444a3SMartin Storsjo 0x60616263,
16*a59444a3SMartin Storsjo 0x70717273,
17*a59444a3SMartin Storsjo };
18*a59444a3SMartin Storsjo
19*a59444a3SMartin Storsjo constexpr vec_t vecs[] = {
20*a59444a3SMartin Storsjo { 0x0F0E0D0C0B0A0908, 0x1716151413121110, },
21*a59444a3SMartin Storsjo { 0x100F0E0D0C0B0A09, 0x1817161514131211, },
22*a59444a3SMartin Storsjo { 0x11100F0E0D0C0B0A, 0x1918171615141312, },
23*a59444a3SMartin Storsjo { 0x1211100F0E0D0C0B, 0x1A19181716151413, },
24*a59444a3SMartin Storsjo };
25*a59444a3SMartin Storsjo const vec_t *vec_ptr = vecs;
26*a59444a3SMartin Storsjo
27*a59444a3SMartin Storsjo asm volatile(
28*a59444a3SMartin Storsjo "ldrd r0, r1, [%1]\n\t"
29*a59444a3SMartin Storsjo "ldrd r2, r3, [%1, #8]\n\t"
30*a59444a3SMartin Storsjo "ldrd r4, r5, [%1, #16]\n\t"
31*a59444a3SMartin Storsjo "ldrd r6, r7, [%1, #24]\n\t"
32*a59444a3SMartin Storsjo "\n\t"
33*a59444a3SMartin Storsjo "vld1.64 {q0, q1}, [%0]!\n\t"
34*a59444a3SMartin Storsjo "vld1.64 {q2, q3}, [%0]!\n\t"
35*a59444a3SMartin Storsjo "\n\t"
36*a59444a3SMartin Storsjo "bkpt #0\n\t"
37*a59444a3SMartin Storsjo : "+r"(vec_ptr)
38*a59444a3SMartin Storsjo : "r"(gprs)
39*a59444a3SMartin Storsjo : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
40*a59444a3SMartin Storsjo "q0", "q1", "q2", "q3"
41*a59444a3SMartin Storsjo );
42*a59444a3SMartin Storsjo
43*a59444a3SMartin Storsjo return 0;
44*a59444a3SMartin Storsjo }
45