DavidSpickett updated this revision to Diff 549834. DavidSpickett added a comment.
Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D157000/new/ https://reviews.llvm.org/D157000 Files: lldb/test/API/commands/register/register/aarch64_sve_simd_registers/TestSVESIMDRegisters.py lldb/test/API/commands/register/register/aarch64_sve_simd_registers/main.c
Index: lldb/test/API/commands/register/register/aarch64_sve_simd_registers/main.c =================================================================== --- lldb/test/API/commands/register/register/aarch64_sve_simd_registers/main.c +++ lldb/test/API/commands/register/register/aarch64_sve_simd_registers/main.c @@ -40,6 +40,45 @@ WRITE_SIMD(31); } +void write_simd_regs_expr() { +#define WRITE_SIMD(NUM) \ + asm volatile("MOV v" #NUM ".d[0], %0\n\t" \ + "MOV v" #NUM ".d[1], %0\n\t" ::"r"(NUM + 1)) + + WRITE_SIMD(0); + WRITE_SIMD(1); + WRITE_SIMD(2); + WRITE_SIMD(3); + WRITE_SIMD(4); + WRITE_SIMD(5); + WRITE_SIMD(6); + WRITE_SIMD(7); + WRITE_SIMD(8); + WRITE_SIMD(9); + WRITE_SIMD(10); + WRITE_SIMD(11); + WRITE_SIMD(12); + WRITE_SIMD(13); + WRITE_SIMD(14); + WRITE_SIMD(15); + WRITE_SIMD(16); + WRITE_SIMD(17); + WRITE_SIMD(18); + WRITE_SIMD(19); + WRITE_SIMD(20); + WRITE_SIMD(21); + WRITE_SIMD(22); + WRITE_SIMD(23); + WRITE_SIMD(24); + WRITE_SIMD(25); + WRITE_SIMD(26); + WRITE_SIMD(27); + WRITE_SIMD(28); + WRITE_SIMD(29); + WRITE_SIMD(30); + WRITE_SIMD(31); +} + unsigned verify_simd_regs() { uint64_t got_low = 0; uint64_t got_high = 0; Index: lldb/test/API/commands/register/register/aarch64_sve_simd_registers/TestSVESIMDRegisters.py =================================================================== --- lldb/test/API/commands/register/register/aarch64_sve_simd_registers/TestSVESIMDRegisters.py +++ lldb/test/API/commands/register/register/aarch64_sve_simd_registers/TestSVESIMDRegisters.py @@ -1,6 +1,6 @@ """ -Test that LLDB correctly reads and writes AArch64 SIMD registers in SVE, -streaming SVE and normal SIMD modes. +Test that LLDB correctly reads and writes and restores AArch64 SIMD registers +in SVE, streaming SVE and normal SIMD modes. There are a few operating modes and we use different strategies for each: * Without SVE, in SIMD mode - read the SIMD regset. @@ -48,6 +48,13 @@ pad = " ".join(["0x00"] * 7) return "{{0x{:02x} {} 0x{:02x} {}}}".format(n, pad, n, pad) + def check_simd_values(self, value_offset): + # These are 128 bit registers, so getting them from the API as unsigned + # values doesn't work. Check the command output instead. + for i in range(32): + self.expect("register read v{}".format(i), + substrs=[self.make_simd_value(i+value_offset)]) + def sve_simd_registers_impl(self, mode): self.skip_if_needed(mode) @@ -68,12 +75,9 @@ substrs=["stop reason = breakpoint 1."], ) - # These are 128 bit registers, so getting them from the API as unsigned - # values doesn't work. Check the command output instead. - for i in range(32): - self.expect( - "register read v{}".format(i), substrs=[self.make_simd_value(i)] - ) + self.check_simd_values(0) + self.runCmd("expression write_simd_regs_expr()") + self.check_simd_values(0) # Write a new set of values. The kernel will move the program back to # non-streaming mode here. @@ -83,10 +87,7 @@ ) # Should be visible within lldb. - for i in range(32): - self.expect( - "register read v{}".format(i), substrs=[self.make_simd_value(i + 1)] - ) + self.check_simd_values(1) # The program should agree with lldb. self.expect("continue", substrs=["exited with status = 0"])
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits