unix/gccollect.c: Make Clang workaround apply only to it. Unbreaks gcc builds.
This commit is contained in:
parent
168a9ce863
commit
1d567592b1
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user