mgorny created this revision.
mgorny added reviewers: labath, emaste, krytarowski, mstorsjo.
Herald added subscribers: danielkiss, kristof.beyls.
mgorny requested review of this revision.

Extend the general-purpose/vector register test for AArch64 to test
all regular registers rather than just the first eight.  While this
might seem redundant, we've historically had a bug in reading a single
registers due to a typo.

While at it, use a single array of values for the test.  I have
permitted myself to use a different values that were relatively easy
to generate via the following script:

  for x in range(32):
      print('    { ', end='')
      for y in range(2):
          print('0x', end='')
          for z in range(8):
              print('%02X' % (x+(1-y)*8+z), end='')
          if y == 0:
              print(', ', end='')
      print(' },')

x8 is used as the special register to hold the data pointer, as this
is what clang is forcing on my system (and it should use it anyway since
it's the only register not in the clobber list), so it is overwritten
last.  x29 (fp) is backed up on the stack.  The stack pointer (x31)
is tested via pushing the respective value to the stack and then reading
it rather than modifying it directly.


https://reviews.llvm.org/D101563

Files:
  lldb/test/Shell/Register/Inputs/aarch64-gp-read.cpp
  lldb/test/Shell/Register/aarch64-gp-read.test

Index: lldb/test/Shell/Register/aarch64-gp-read.test
===================================================================
--- lldb/test/Shell/Register/aarch64-gp-read.test
+++ lldb/test/Shell/Register/aarch64-gp-read.test
@@ -4,21 +4,102 @@
 process launch
 
 register read --all
-# CHECK-DAG: x0 = 0x0001020304050607
-# CHECK-DAG: x1 = 0x1011121314151617
-# CHECK-DAG: x2 = 0x2021222324252627
-# CHECK-DAG: x3 = 0x3031323334353637
-# CHECK-DAG: x4 = 0x4041424344454647
-# CHECK-DAG: x5 = 0x5051525354555657
-# CHECK-DAG: x6 = 0x6061626364656667
-# CHECK-DAG: x7 = 0x7071727374757677
-# CHECK-DAG: w0 = 0x04050607
+# CHECK-DAG:        x0 = 0x08090a0b0c0d0e0f
+# CHECK-DAG:        x1 = 0x0001020304050607
+# CHECK-DAG:        x2 = 0x090a0b0c0d0e0f10
+# CHECK-DAG:        x3 = 0x0102030405060708
+# CHECK-DAG:        x4 = 0x0a0b0c0d0e0f1011
+# CHECK-DAG:        x5 = 0x0203040506070809
+# CHECK-DAG:        x6 = 0x0b0c0d0e0f101112
+# CHECK-DAG:        x7 = 0x030405060708090a
+# CHECK-DAG:        x8 = 0x0c0d0e0f10111213
+# CHECK-DAG:        x9 = 0x0405060708090a0b
+# CHECK-DAG:       x10 = 0x0d0e0f1011121314
+# CHECK-DAG:       x11 = 0x05060708090a0b0c
+# CHECK-DAG:       x12 = 0x0e0f101112131415
+# CHECK-DAG:       x13 = 0x060708090a0b0c0d
+# CHECK-DAG:       x14 = 0x0f10111213141516
+# CHECK-DAG:       x15 = 0x0708090a0b0c0d0e
+# CHECK-DAG:       x16 = 0x1011121314151617
+# CHECK-DAG:       x17 = 0x08090a0b0c0d0e0f
+# CHECK-DAG:       x18 = 0x1112131415161718
+# CHECK-DAG:       x19 = 0x090a0b0c0d0e0f10
+# CHECK-DAG:       x20 = 0x1213141516171819
+# CHECK-DAG:       x21 = 0x0a0b0c0d0e0f1011
+# CHECK-DAG:       x22 = 0x131415161718191a
+# CHECK-DAG:       x23 = 0x0b0c0d0e0f101112
+# CHECK-DAG:       x24 = 0x1415161718191a1b
+# CHECK-DAG:       x25 = 0x0c0d0e0f10111213
+# CHECK-DAG:       x26 = 0x15161718191a1b1c
+# CHECK-DAG:       x27 = 0x0d0e0f1011121314
+# CHECK-DAG:       x28 = 0x161718191a1b1c1d
+# CHECK-DAG:        fp = 0x0e0f101112131415
+# CHECK-DAG:        lr = 0x1718191a1b1c1d1e
 
-# CHECK-DAG: v0 = {0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17}
-# CHECK-DAG: v1 = {0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18}
-# CHECK-DAG: v2 = {0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19}
-# CHECK-DAG: v3 = {0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a}
-# CHECK-DAG: v4 = {0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b}
-# CHECK-DAG: v5 = {0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c}
-# CHECK-DAG: v6 = {0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d}
-# CHECK-DAG: v7 = {0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e}
+# CHECK-DAG:        pc = 0x{{[0-9a-f]+}}  aarch64-gp-read.test.tmp`main
+
+# CHECK-DAG:        w0 = 0x0c0d0e0f
+# CHECK-DAG:        w1 = 0x04050607
+# CHECK-DAG:        w2 = 0x0d0e0f10
+# CHECK-DAG:        w3 = 0x05060708
+# CHECK-DAG:        w4 = 0x0e0f1011
+# CHECK-DAG:        w5 = 0x06070809
+# CHECK-DAG:        w6 = 0x0f101112
+# CHECK-DAG:        w7 = 0x0708090a
+# CHECK-DAG:        w8 = 0x10111213
+# CHECK-DAG:        w9 = 0x08090a0b
+# CHECK-DAG:       w10 = 0x11121314
+# CHECK-DAG:       w11 = 0x090a0b0c
+# CHECK-DAG:       w12 = 0x12131415
+# CHECK-DAG:       w13 = 0x0a0b0c0d
+# CHECK-DAG:       w14 = 0x13141516
+# CHECK-DAG:       w15 = 0x0b0c0d0e
+# CHECK-DAG:       w16 = 0x14151617
+# CHECK-DAG:       w17 = 0x0c0d0e0f
+# CHECK-DAG:       w18 = 0x15161718
+# CHECK-DAG:       w19 = 0x0d0e0f10
+# CHECK-DAG:       w20 = 0x16171819
+# CHECK-DAG:       w21 = 0x0e0f1011
+# CHECK-DAG:       w22 = 0x1718191a
+# CHECK-DAG:       w23 = 0x0f101112
+# CHECK-DAG:       w24 = 0x18191a1b
+# CHECK-DAG:       w25 = 0x10111213
+# CHECK-DAG:       w26 = 0x191a1b1c
+# CHECK-DAG:       w27 = 0x11121314
+# CHECK-DAG:       w28 = 0x1a1b1c1d
+#
+# CHECK-DAG:        v0 = {0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07 0x06 0x05 0x04 0x03 0x02 0x01 0x00}
+# CHECK-DAG:        v1 = {0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07 0x06 0x05 0x04 0x03 0x02 0x01}
+# CHECK-DAG:        v2 = {0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07 0x06 0x05 0x04 0x03 0x02}
+# CHECK-DAG:        v3 = {0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07 0x06 0x05 0x04 0x03}
+# CHECK-DAG:        v4 = {0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07 0x06 0x05 0x04}
+# CHECK-DAG:        v5 = {0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07 0x06 0x05}
+# CHECK-DAG:        v6 = {0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07 0x06}
+# CHECK-DAG:        v7 = {0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08 0x07}
+# CHECK-DAG:        v8 = {0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09 0x08}
+# CHECK-DAG:        v9 = {0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a 0x09}
+# CHECK-DAG:       v10 = {0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b 0x0a}
+# CHECK-DAG:       v11 = {0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c 0x0b}
+# CHECK-DAG:       v12 = {0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d 0x0c}
+# CHECK-DAG:       v13 = {0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e 0x0d}
+# CHECK-DAG:       v14 = {0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f 0x0e}
+# CHECK-DAG:       v15 = {0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10 0x0f}
+# CHECK-DAG:       v16 = {0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11 0x10}
+# CHECK-DAG:       v17 = {0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12 0x11}
+# CHECK-DAG:       v18 = {0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13 0x12}
+# CHECK-DAG:       v19 = {0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14 0x13}
+# CHECK-DAG:       v20 = {0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15 0x14}
+# CHECK-DAG:       v21 = {0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16 0x15}
+# CHECK-DAG:       v22 = {0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17 0x16}
+# CHECK-DAG:       v23 = {0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18 0x17}
+# CHECK-DAG:       v24 = {0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19 0x18}
+# CHECK-DAG:       v25 = {0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a 0x19}
+# CHECK-DAG:       v26 = {0x29 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b 0x1a}
+# CHECK-DAG:       v27 = {0x2a 0x29 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c 0x1b}
+# CHECK-DAG:       v28 = {0x2b 0x2a 0x29 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d 0x1c}
+# CHECK-DAG:       v29 = {0x2c 0x2b 0x2a 0x29 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e 0x1d}
+# CHECK-DAG:       v30 = {0x2d 0x2c 0x2b 0x2a 0x29 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f 0x1e}
+# CHECK-DAG:       v31 = {0x2e 0x2d 0x2c 0x2b 0x2a 0x29 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x20 0x1f}
+
+expression -f hex -- *(uint64_t*)($sp-8)
+# CHECK: (uint64_t) $0 = 0x0f10111213141516
Index: lldb/test/Shell/Register/Inputs/aarch64-gp-read.cpp
===================================================================
--- lldb/test/Shell/Register/Inputs/aarch64-gp-read.cpp
+++ lldb/test/Shell/Register/Inputs/aarch64-gp-read.cpp
@@ -5,42 +5,88 @@
 };
 
 int main() {
-  constexpr uint64_t gprs[] = {
-    0x0001020304050607,
-    0x1011121314151617,
-    0x2021222324252627,
-    0x3031323334353637,
-    0x4041424344454647,
-    0x5051525354555657,
-    0x6061626364656667,
-    0x7071727374757677,
-  };
-
   constexpr vec_t vecs[] = {
-    { 0x0F0E0D0C0B0A0908, 0x1716151413121110, },
-    { 0x100F0E0D0C0B0A09, 0x1817161514131211, },
-    { 0x11100F0E0D0C0B0A, 0x1918171615141312, },
-    { 0x1211100F0E0D0C0B, 0x1A19181716151413, },
-    { 0x131211100F0E0D0C, 0x1B1A191817161514, },
-    { 0x14131211100F0E0D, 0x1C1B1A1918171615, },
-    { 0x1514131211100F0E, 0x1D1C1B1A19181716, },
-    { 0x161514131211100F, 0x1E1D1C1B1A191817, },
+    { 0x08090A0B0C0D0E0F, 0x0001020304050607 },
+    { 0x090A0B0C0D0E0F10, 0x0102030405060708 },
+    { 0x0A0B0C0D0E0F1011, 0x0203040506070809 },
+    { 0x0B0C0D0E0F101112, 0x030405060708090A },
+    { 0x0C0D0E0F10111213, 0x0405060708090A0B },
+    { 0x0D0E0F1011121314, 0x05060708090A0B0C },
+    { 0x0E0F101112131415, 0x060708090A0B0C0D },
+    { 0x0F10111213141516, 0x0708090A0B0C0D0E },
+    { 0x1011121314151617, 0x08090A0B0C0D0E0F },
+    { 0x1112131415161718, 0x090A0B0C0D0E0F10 },
+    { 0x1213141516171819, 0x0A0B0C0D0E0F1011 },
+    { 0x131415161718191A, 0x0B0C0D0E0F101112 },
+    { 0x1415161718191A1B, 0x0C0D0E0F10111213 },
+    { 0x15161718191A1B1C, 0x0D0E0F1011121314 },
+    { 0x161718191A1B1C1D, 0x0E0F101112131415 },
+    { 0x1718191A1B1C1D1E, 0x0F10111213141516 },
+    { 0x18191A1B1C1D1E1F, 0x1011121314151617 },
+    { 0x191A1B1C1D1E1F20, 0x1112131415161718 },
+    { 0x1A1B1C1D1E1F2021, 0x1213141516171819 },
+    { 0x1B1C1D1E1F202122, 0x131415161718191A },
+    { 0x1C1D1E1F20212223, 0x1415161718191A1B },
+    { 0x1D1E1F2021222324, 0x15161718191A1B1C },
+    { 0x1E1F202122232425, 0x161718191A1B1C1D },
+    { 0x1F20212223242526, 0x1718191A1B1C1D1E },
+    { 0x2021222324252627, 0x18191A1B1C1D1E1F },
+    { 0x2122232425262728, 0x191A1B1C1D1E1F20 },
+    { 0x2223242526272829, 0x1A1B1C1D1E1F2021 },
+    { 0x232425262728292A, 0x1B1C1D1E1F202122 },
+    { 0x2425262728292A2B, 0x1C1D1E1F20212223 },
+    { 0x25262728292A2B2C, 0x1D1E1F2021222324 },
+    { 0x262728292A2B2C2D, 0x1E1F202122232425 },
+    { 0x2728292A2B2C2D2E, 0x1F20212223242526 },
   };
 
   asm volatile(
+    "ld1      {v0.2d,  v1.2d,  v2.2d,  v3.2d},  [%0], #64\n\t"
+    "ld1      {v4.2d,  v5.2d,  v6.2d,  v7.2d},  [%0], #64\n\t"
+    "ld1      {v8.2d,  v9.2d,  v10.2d, v11.2d}, [%0], #64\n\t"
+    "ld1      {v12.2d, v13.2d, v14.2d, v15.2d}, [%0], #64\n\t"
+    "ld1      {v16.2d, v17.2d, v18.2d, v19.2d}, [%0], #64\n\t"
+    "ld1      {v20.2d, v21.2d, v22.2d, v23.2d}, [%0], #64\n\t"
+    "ld1      {v24.2d, v25.2d, v26.2d, v27.2d}, [%0], #64\n\t"
+    "ld1      {v28.2d, v29.2d, v30.2d, v31.2d}, [%0], #64\n\t"
+    "sub      %0, %0, #512\n\t"
+    "\n\t"
+    // we can't easily overwrite sp, so put the value on stack instead,
+    // and back x29 up while at it
+    "ldr      x0,       [%0, #248]\n\t"
+    "stp      x29, x0,  [sp, #-16]\n\t"
+    "\n\t"
     "ldp      x0,  x1,  [%0]\n\t"
     "ldp      x2,  x3,  [%0, #16]\n\t"
     "ldp      x4,  x5,  [%0, #32]\n\t"
     "ldp      x6,  x7,  [%0, #48]\n\t"
-    "\n\t"
-    "ld1      {v0.2d, v1.2d, v2.2d, v3.2d}, [%1], #64\n\t"
-    "ld1      {v4.2d, v5.2d, v6.2d, v7.2d}, [%1], #64\n\t"
+    "ldp      x10, x11, [%0, #80]\n\t"
+    "ldp      x12, x13, [%0, #96]\n\t"
+    "ldp      x14, x15, [%0, #112]\n\t"
+    "ldp      x16, x17, [%0, #128]\n\t"
+    "ldp      x18, x19, [%0, #144]\n\t"
+    "ldp      x20, x21, [%0, #160]\n\t"
+    "ldp      x22, x23, [%0, #176]\n\t"
+    "ldp      x24, x25, [%0, #192]\n\t"
+    "ldp      x26, x27, [%0, #208]\n\t"
+    "ldp      x28, x29, [%0, #224]\n\t"
+    "ldr      x30,      [%0, #240]\n\t"
+    "ldp      x8,  x9,  [%0, #64]\n\t"
     "\n\t"
     "brk      #0\n\t"
+    "\n\t"
+    // restore x29, discard the other value
+    "ldp      x29, xzr, [sp, #-16]\n\t"
     :
-    : "r"(gprs), "r"(vecs)
+    : "r"(vecs)
     : "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7",
-      "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7"
+      "x9", "x10", "x11", "x12", "x13", "x14", "x15",
+      "x16", "x17", "x18", "x19", "x20", "x21", "x22",
+      "x23", "x24", "x25", "x26", "x27", "x28", "x30",
+      "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
+      "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15",
+      "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
+      "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"
   );
 
   return 0;
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to