Как правило, вы хотите сделать что-то вроде
void *x;
asm(".. code that writes to register %0" : "=r"(x) : ...
int r = some_function(x);
asm(".. code that uses the result..." : ... : "r"(r), ...
То есть вы вообще не хотите выполнять вызов функции во встроенном ассемблере. Таким образом, вам не нужно беспокоиться о деталях соглашений о вызовах или об управлении кадрами стека.