xref: /llvm-project/lldb/test/Shell/Register/Inputs/arm-gp-read.cpp (revision a59444a35608988e727fe3761e34f1fad6097617)
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