mgorny created this revision.
mgorny added reviewers: krytarowski, labath.

Fix mistake that mapped mm* registers into the space for xmm* registers,
rather than the one shared with st* registers.  In other words,
'register read mmN' now correctly shows the mmN register rather than
part of xmmN.

Includes a minimal lit regression test.


https://reviews.llvm.org/D60325

Files:
  lldb/lit/Register/Inputs/x86-mm-xmm-read.s
  lldb/lit/Register/x86-mm-xmm-read.test
  lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp

Index: lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp
===================================================================
--- lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp
+++ lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp
@@ -406,7 +406,7 @@
   case lldb_mm5_x86_64:
   case lldb_mm6_x86_64:
   case lldb_mm7_x86_64:
-    reg_value.SetBytes(&m_fpr_x86_64.fxstate.fx_xmm[reg - lldb_mm0_x86_64],
+    reg_value.SetBytes(&m_fpr_x86_64.fxstate.fx_87_ac[reg - lldb_mm0_x86_64],
                        reg_info->byte_size, endian::InlHostByteOrder());
     break;
   case lldb_xmm0_x86_64:
@@ -602,7 +602,7 @@
   case lldb_mm5_x86_64:
   case lldb_mm6_x86_64:
   case lldb_mm7_x86_64:
-    ::memcpy(&m_fpr_x86_64.fxstate.fx_xmm[reg - lldb_mm0_x86_64],
+    ::memcpy(&m_fpr_x86_64.fxstate.fx_87_ac[reg - lldb_mm0_x86_64],
              reg_value.GetBytes(), reg_value.GetByteSize());
     break;
   case lldb_xmm0_x86_64:
Index: lldb/lit/Register/x86-mm-xmm-read.test
===================================================================
--- /dev/null
+++ lldb/lit/Register/x86-mm-xmm-read.test
@@ -0,0 +1,22 @@
+# REQUIRES: x86
+# RUN: %clang %p/Inputs/x86-mm-xmm-read.s -o %t
+# RUN: %lldb -b -s %s %t | FileCheck %s
+process launch
+
+register read --all
+# CHECK: mm0 = 0x0102030405060708
+# CHECK-NEXT: mm1 = 0x1112131415161718
+# CHECK-NEXT: mm2 = 0x2122232425262728
+# CHECK-NEXT: mm3 = 0x3132333435363738
+# CHECK-NEXT: mm4 = 0x4142434445464748
+# CHECK-NEXT: mm5 = 0x5152535455565758
+# CHECK-NEXT: mm6 = 0x6162636465666768
+# CHECK-NEXT: mm7 = 0x7172737475767778
+# CHECK-NEXT: xmm0 = {0x01 0x0e 0x0c 0x0a 0x08 0x06 0x04 0x02 0x00 0x0f 0x0d 0x0b 0x09 0x07 0x05 0x03}
+# CHECK-NEXT: xmm1 = {0x11 0x1e 0x1c 0x1a 0x18 0x16 0x14 0x12 0x10 0x1f 0x1d 0x1b 0x19 0x17 0x15 0x13}
+# CHECK-NEXT: xmm2 = {0x21 0x2e 0x2c 0x2a 0x28 0x26 0x24 0x22 0x20 0x2f 0x2d 0x2b 0x29 0x27 0x25 0x23}
+# CHECK-NEXT: xmm3 = {0x31 0x3e 0x3c 0x3a 0x38 0x36 0x34 0x32 0x30 0x3f 0x3d 0x3b 0x39 0x37 0x35 0x33}
+# CHECK-NEXT: xmm4 = {0x41 0x4e 0x4c 0x4a 0x48 0x46 0x44 0x42 0x40 0x4f 0x4d 0x4b 0x49 0x47 0x45 0x43}
+# CHECK-NEXT: xmm5 = {0x51 0x5e 0x5c 0x5a 0x58 0x56 0x54 0x52 0x50 0x5f 0x5d 0x5b 0x59 0x57 0x55 0x53}
+# CHECK-NEXT: xmm6 = {0x61 0x6e 0x6c 0x6a 0x68 0x66 0x64 0x62 0x60 0x6f 0x6d 0x6b 0x69 0x67 0x65 0x63}
+# CHECK-NEXT: xmm7 = {0x71 0x7e 0x7c 0x7a 0x78 0x76 0x74 0x72 0x70 0x7f 0x7d 0x7b 0x79 0x77 0x75 0x73}
Index: lldb/lit/Register/Inputs/x86-mm-xmm-read.s
===================================================================
--- /dev/null
+++ lldb/lit/Register/Inputs/x86-mm-xmm-read.s
@@ -0,0 +1,63 @@
+    .text
+    .globl  main
+    .type   main, @function
+main:
+    movq    .MM0, %mm0
+    movq    .MM1, %mm1
+    movq    .MM2, %mm2
+    movq    .MM3, %mm3
+    movq    .MM4, %mm4
+    movq    .MM5, %mm5
+    movq    .MM6, %mm6
+    movq    .MM7, %mm7
+
+    movaps  .XMM0, %xmm0
+    movaps  .XMM1, %xmm1
+    movaps  .XMM2, %xmm2
+    movaps  .XMM3, %xmm3
+    movaps  .XMM4, %xmm4
+    movaps  .XMM5, %xmm5
+    movaps  .XMM6, %xmm6
+    movaps  .XMM7, %xmm7
+
+    int3
+
+    movl    $0, %eax
+    ret
+    .size   main, .-main
+
+    .balign 8
+.MM0:
+    .quad   0x0102030405060708
+.MM1:
+    .quad   0x1112131415161718
+.MM2:
+    .quad   0x2122232425262728
+.MM3:
+    .quad   0x3132333435363738
+.MM4:
+    .quad   0x4142434445464748
+.MM5:
+    .quad   0x5152535455565758
+.MM6:
+    .quad   0x6162636465666768
+.MM7:
+    .quad   0x7172737475767778
+
+    .balign 16
+.XMM0:
+    .quad   0x020406080A0C0E01,0x030507090B0D0F00
+.XMM1:
+    .quad   0x121416181A1C1E11,0x131517191B1D1F10
+.XMM2:
+    .quad   0x222426282A2C2E21,0x232527292B2D2F20
+.XMM3:
+    .quad   0x323436383A3C3E31,0x333537393B3D3F30
+.XMM4:
+    .quad   0x424446484A4C4E41,0x434547494B4D4F40
+.XMM5:
+    .quad   0x525456585A5C5E51,0x535557595B5D5F50
+.XMM6:
+    .quad   0x626466686A6C6E61,0x636567696B6D6F60
+.XMM7:
+    .quad   0x727476787A7C7E71,0x737577797B7D7F70
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to