[Lldb-commits] [lldb] r359978 - [lldb] [lit] Simplify general-purpose register tests
Michal Gorny via lldb-commits
lldb-commits at lists.llvm.org
Sun May 5 05:06:32 PDT 2019
Author: mgorny
Date: Sun May 5 05:06:32 2019
New Revision: 359978
URL: http://llvm.org/viewvc/llvm-project?rev=359978&view=rev
Log:
[lldb] [lit] Simplify general-purpose register tests
Use output constraints for specific general-purpose registers in order
to simplify the tests. They save us from having to manually put
the values in correct registers, and reduce the number of registers
needed as a result.
Modified:
lldb/trunk/lit/Register/Inputs/x86-64-gp-read.cpp
lldb/trunk/lit/Register/Inputs/x86-64-gp-write.cpp
lldb/trunk/lit/Register/Inputs/x86-gp-read.cpp
lldb/trunk/lit/Register/Inputs/x86-gp-write.cpp
Modified: lldb/trunk/lit/Register/Inputs/x86-64-gp-read.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Register/Inputs/x86-64-gp-read.cpp?rev=359978&r1=359977&r2=359978&view=diff
==============================================================================
--- lldb/trunk/lit/Register/Inputs/x86-64-gp-read.cpp (original)
+++ lldb/trunk/lit/Register/Inputs/x86-64-gp-read.cpp Sun May 5 05:06:32 2019
@@ -15,14 +15,8 @@ int main() {
"movq %%rsp, %%r8\n\t"
"movq %%rbp, %%r9\n\t"
"\n\t"
- "movq %0, %%rax\n\t"
- "movq %1, %%rbx\n\t"
- "movq %2, %%rcx\n\t"
- "movq %3, %%rdx\n\t"
"movq %4, %%rsp\n\t"
"movq %5, %%rbp\n\t"
- "movq %6, %%rsi\n\t"
- "movq %7, %%rdi\n\t"
"\n\t"
"int3\n\t"
"\n\t"
@@ -30,10 +24,9 @@ int main() {
"movq %%r8, %%rsp\n\t"
"movq %%r9, %%rbp"
:
- : "i"(rax), "i"(rbx), "i"(rcx), "i"(rdx), "i"(rsp), "i"(rbp), "i"(rsi),
- "i"(rdi)
- : "%rax", "%rbx", "%rcx", "%rdx", "%rsp", "%rbp", "%rsi", "%rdi", "%r8",
- "%r9"
+ : "a"(rax), "b"(rbx), "c"(rcx), "d"(rdx), "i"(rsp), "i"(rbp), "S"(rsi),
+ "D"(rdi)
+ : "%r8", "%r9"
);
return 0;
Modified: lldb/trunk/lit/Register/Inputs/x86-64-gp-write.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Register/Inputs/x86-64-gp-write.cpp?rev=359978&r1=359977&r2=359978&view=diff
==============================================================================
--- lldb/trunk/lit/Register/Inputs/x86-64-gp-write.cpp (original)
+++ lldb/trunk/lit/Register/Inputs/x86-64-gp-write.cpp Sun May 5 05:06:32 2019
@@ -9,8 +9,8 @@ int main() {
asm volatile(
// save rsp & rbp
- "movq %%rsp, %%mm0\n\t"
- "movq %%rbp, %%mm1\n\t"
+ "movq %%rsp, %4\n\t"
+ "movq %%rbp, %5\n\t"
"\n\t"
"movq %8, %%rax\n\t"
"movq %8, %%rbx\n\t"
@@ -23,23 +23,13 @@ int main() {
"\n\t"
"int3\n\t"
"\n\t"
- "movq %%rax, %0\n\t"
- "movq %%rbx, %1\n\t"
- "movq %%rcx, %2\n\t"
- "movq %%rdx, %3\n\t"
- "movq %%rsp, %4\n\t"
- "movq %%rbp, %5\n\t"
- "movq %%rsi, %6\n\t"
- "movq %%rdi, %7\n\t"
- "\n\t"
- // restore rsp & rbp
- "movq %%mm0, %%rsp\n\t"
- "movq %%mm1, %%rbp\n\t"
- : "=r"(rax), "=r"(rbx), "=r"(rcx), "=r"(rdx), "=r"(rsp), "=r"(rbp),
- "=r"(rsi), "=r"(rdi)
+ // swap saved & current rsp & rbp
+ "xchgq %%rsp, %4\n\t"
+ "xchgq %%rbp, %5\n\t"
+ : "=a"(rax), "=b"(rbx), "=c"(rcx), "=d"(rdx), "=r"(rsp), "=r"(rbp),
+ "=S"(rsi), "=D"(rdi)
: "g"(fill)
- : "%rax", "%rbx", "%rcx", "%rdx", "%rsp", "%rbp", "%rsi", "%rdi", "%mm0",
- "%mm1"
+ :
);
printf("rax = 0x%016" PRIx64 "\n", rax);
Modified: lldb/trunk/lit/Register/Inputs/x86-gp-read.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Register/Inputs/x86-gp-read.cpp?rev=359978&r1=359977&r2=359978&view=diff
==============================================================================
--- lldb/trunk/lit/Register/Inputs/x86-gp-read.cpp (original)
+++ lldb/trunk/lit/Register/Inputs/x86-gp-read.cpp Sun May 5 05:06:32 2019
@@ -15,14 +15,8 @@ int main() {
"movd %%esp, %%mm0\n\t"
"movd %%ebp, %%mm1\n\t"
"\n\t"
- "movl %0, %%eax\n\t"
- "movl %1, %%ebx\n\t"
- "movl %2, %%ecx\n\t"
- "movl %3, %%edx\n\t"
"movl %4, %%esp\n\t"
"movl %5, %%ebp\n\t"
- "movl %6, %%esi\n\t"
- "movl %7, %%edi\n\t"
"\n\t"
"int3\n\t"
"\n\t"
@@ -30,10 +24,9 @@ int main() {
"movd %%mm0, %%esp\n\t"
"movd %%mm1, %%ebp\n\t"
:
- : "i"(eax), "i"(ebx), "i"(ecx), "i"(edx), "i"(esp), "i"(ebp), "i"(esi),
- "i"(edi)
- : "%eax", "%ebx", "%ecx", "%edx", "%esp", "%ebp", "%esi", "%edi", "%mm0",
- "%mm1"
+ : "a"(eax), "b"(ebx), "c"(ecx), "d"(edx), "i"(esp), "i"(ebp), "S"(esi),
+ "D"(edi)
+ : "%mm0", "%mm1"
);
return 0;
Modified: lldb/trunk/lit/Register/Inputs/x86-gp-write.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Register/Inputs/x86-gp-write.cpp?rev=359978&r1=359977&r2=359978&view=diff
==============================================================================
--- lldb/trunk/lit/Register/Inputs/x86-gp-write.cpp (original)
+++ lldb/trunk/lit/Register/Inputs/x86-gp-write.cpp Sun May 5 05:06:32 2019
@@ -5,7 +5,10 @@
int main() {
constexpr uint32_t fill = 0x0F0F0F0F;
- uint32_t eax, ebx, ecx, edx, esp, ebp, esi, edi;
+ uint32_t eax, ebx, ecx, edx, esi, edi;
+ // need to use 64-bit types due to bug in clang
+ // https://bugs.llvm.org/show_bug.cgi?id=41748
+ uint64_t esp, ebp;
asm volatile(
// save esp & ebp
@@ -23,37 +26,24 @@ int main() {
"\n\t"
"int3\n\t"
"\n\t"
- // first save new esp & ebp, and restore their original values, so that
- // we can output values via memory
- "movd %%esp, %%mm2\n\t"
- "movd %%ebp, %%mm3\n\t"
+ // copy new values of esp & ebp
+ "movd %%esp, %4\n\t"
+ "movd %%ebp, %5\n\t"
+ // restore saved esp & ebp
"movd %%mm0, %%esp\n\t"
"movd %%mm1, %%ebp\n\t"
- "\n\t"
- // output values via memory
- "movl %%eax, %0\n\t"
- "movl %%ebx, %1\n\t"
- "movl %%ecx, %2\n\t"
- "movl %%edx, %3\n\t"
- "movl %%esi, %6\n\t"
- "movl %%edi, %7\n\t"
- "\n\t"
- // output saved esp & ebp
- "movd %%mm2, %4\n\t"
- "movd %%mm3, %5\n\t"
- : "=m"(eax), "=m"(ebx), "=m"(ecx), "=m"(edx), "=a"(esp), "=b"(ebp),
- "=m"(esi), "=m"(edi)
+ : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx), "=y"(esp), "=y"(ebp),
+ "=S"(esi), "=D"(edi)
: "i"(fill)
- : "%ecx", "%edx", "%esp", "%ebp", "%esi", "%edi", "%mm0", "%mm1", "%mm2",
- "%mm3"
+ : "%mm0", "%mm1"
);
printf("eax = 0x%08" PRIx32 "\n", eax);
printf("ebx = 0x%08" PRIx32 "\n", ebx);
printf("ecx = 0x%08" PRIx32 "\n", ecx);
printf("edx = 0x%08" PRIx32 "\n", edx);
- printf("esp = 0x%08" PRIx32 "\n", esp);
- printf("ebp = 0x%08" PRIx32 "\n", ebp);
+ printf("esp = 0x%08" PRIx32 "\n", static_cast<uint32_t>(esp));
+ printf("ebp = 0x%08" PRIx32 "\n", static_cast<uint32_t>(ebp));
printf("esi = 0x%08" PRIx32 "\n", esi);
printf("edi = 0x%08" PRIx32 "\n", edi);
More information about the lldb-commits
mailing list