Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22002

With gcc inline assembly can you set %r# registers as input constraints? [duplicate]

$
0
0

I have this function:

#include <cstdint>using ::std::intptr_t;struct syscall_param {   syscall_param(intptr_t v) : value(v) { }   syscall_param(void *v) : value(reinterpret_cast<::std::intptr_t>(v)) { }   intptr_t value;};inline intptr_t do_syscall(syscall_param const &callnum,                           syscall_param const &p1,                           syscall_param const &p2,                           syscall_param const &p3,                           syscall_param const &p4,                           syscall_param const &p5,                           syscall_param const &p6){   intptr_t retval;   asm volatile ("movq %5, %%r10\n\t""movq %6, %%r8\n\t""movq %7, %%r9\n\t""syscall\n\t"       :"=a"(retval)       :"a"(callnum.value), "D"(p1.value), "S"(p2.value), "d"(p3.value), "g"(p4.value), "g"(p5.value), "g"(p6.value)       :"%rcx", "%r11", "%r10", "%r8", "%r9"      );   return retval;}

I would really like to get rid of the movq instructions by using contraints. While I can use constraints to get things into the rax, edi, esi, and rdx registers, there don't seem to be any constraints that let me get things into the r10, r8, and r9 registers. It seems like there ought to be a constrain that would allow me to get things into an arbitrary r# register. Am I missing something? Is there a better way to do what I want?


Viewing all articles
Browse latest Browse all 22002

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>