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); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits