unix/gccollect.c: Make Clang workaround apply only to it. Unbreaks gcc builds.

This commit is contained in:
Paul Sokolovsky 2014-05-28 15:37:22 +03:00
parent 168a9ce863
commit 1d567592b1

View File

@ -43,17 +43,25 @@ typedef machine_uint_t regs_t[6];
void gc_helper_get_regs(regs_t arr) {
register long rbx asm ("rbx");
asm("" : "=r"(rbx));
register long rbp asm ("rbp");
asm("" : "=r"(rbp));
register long r12 asm ("r12");
asm("" : "=r"(r12));
register long r13 asm ("r13");
asm("" : "=r"(r13));
register long r14 asm ("r14");
asm("" : "=r"(r14));
register long r15 asm ("r15");
#ifdef __clang__
// TODO:
// This is dirty workaround for Clang. It tries to get around
// uncompliant (wrt to GCC) behavior of handling register variables.
// Application of this patch here is random, and done only to unbreak
// MacOS build. Better, cross-arch ways to deal with Clang issues should
// be found.
asm("" : "=r"(rbx));
asm("" : "=r"(rbp));
asm("" : "=r"(r12));
asm("" : "=r"(r13));
asm("" : "=r"(r14));
asm("" : "=r"(r15));
#endif
arr[0] = rbx;
arr[1] = rbp;
arr[2] = r12;