Commit 1d567592 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

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

parent 168a9ce8
......@@ -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;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment