On 3/26/19 8:35 AM, Maxim Kuvyrkov wrote:
I don't follow. Do you mean that in the below testcase it's not guaranteed
that casp will get its first two arguments in x0 and x1? (If so, why?)
Sorry for not to be clear. With my first patch only, it was not
guaranteed for some complicated code cases. With the additional patch
it is guaranteed as it was before.
===
void *a;
long b, c;
void d(void) {
typeof(0) e=0;
register long x0 asm ("x0") = b;
register long x1 asm ("x1") = c;
asm(" casp\t%[old1], %[old2], %[new1], %[new2], %[v]\n"
: [old1] "+&r"(b), [old2] "+&r"(c), [v] "+Q"(a)
: [new1] "r"(d), [new2] "r"(e));
}