diff --git a/headers/os/support/TLS.h b/headers/os/support/TLS.h index f9e92b15bb..9f2d494959 100644 --- a/headers/os/support/TLS.h +++ b/headers/os/support/TLS.h @@ -30,8 +30,8 @@ tls_get(int32 index) { void *ret; __asm__ __volatile__ ( - "movl %%fs:(,%%edx, 4), %%eax \n\t" - : "=a"(ret) : "d"(index) ); + "movl %%fs:(, %1, 4), %0" + : "=r" (ret) : "r" (index)); return ret; } @@ -40,9 +40,9 @@ tls_address(int32 index) { void **ret; __asm__ __volatile__ ( - "movl %%fs:0, %%eax \n\t" - "leal (%%eax, %%edx, 4), %%eax \n\t" - : "=a"(ret) : "d"(index) ); + "movl %%fs:0, %0\n\t" + "leal (%0, %1, 4), %0\n\t" + : "=&r" (ret) : "r" (index)); return ret; } @@ -50,8 +50,8 @@ static inline void tls_set(int32 index, void *value) { __asm__ __volatile__ ( - "movl %%eax, %%fs:(,%%edx, 4) \n\t" - : : "d"(index), "a"(value) ); + "movl %1, %%fs:(, %0, 4)" + : : "r" (index), "r" (value)); } #else diff --git a/src/system/libroot/os/arch/x86/tls.c b/src/system/libroot/os/arch/x86/tls.c index d121ce23a9..be36829640 100644 --- a/src/system/libroot/os/arch/x86/tls.c +++ b/src/system/libroot/os/arch/x86/tls.c @@ -32,8 +32,8 @@ tls_get(int32 index) { void *ret; __asm__ __volatile__ ( - "movl %%fs:(,%%edx, 4), %%eax \n\t" - : "=a"(ret) : "d"(index) ); + "movl %%fs:(, %1, 4), %0" + : "=r" (ret) : "r" (index)); return ret; } @@ -43,9 +43,9 @@ tls_address(int32 index) { void **ret; __asm__ __volatile__ ( - "movl %%fs:0, %%eax \n\t" - "leal (%%eax, %%edx, 4), %%eax \n\t" - : "=a"(ret) : "d"(index) ); + "movl %%fs:0, %0\n\t" + "leal (%0, %1, 4), %0\n\t" + : "=&r" (ret) : "r" (index)); return ret; } @@ -54,7 +54,7 @@ void tls_set(int32 index, void *value) { __asm__ __volatile__ ( - "movl %%eax, %%fs:(,%%edx, 4) \n\t" - : : "d"(index), "a"(value) ); + "movl %1, %%fs:(, %0, 4)" + : : "r" (index), "r" (value)); } diff --git a/src/system/libroot/os/arch/x86_64/tls.cpp b/src/system/libroot/os/arch/x86_64/tls.cpp index 733dc7b2e3..0cab26d198 100644 --- a/src/system/libroot/os/arch/x86_64/tls.cpp +++ b/src/system/libroot/os/arch/x86_64/tls.cpp @@ -35,8 +35,8 @@ tls_get(int32 _index) void* ret; __asm__ __volatile__ ( - "movq %%fs:(, %%rdi, 8), %%rax" - : "=a" (ret) : "D" (index)); + "movq %%fs:(, %1, 8), %0" + : "=r" (ret) : "r" (index)); return ret; } @@ -48,9 +48,9 @@ tls_address(int32 _index) void** ret; __asm__ __volatile__ ( - "movq %%fs:0, %%rax\n\t" - "leaq (%%rax, %%rdi, 8), %%rax\n\t" - : "=a" (ret) : "D" (index)); + "movq %%fs:0, %0\n\t" + "leaq (%0, %1, 8), %0\n\t" + : "=&r" (ret) : "r" (index)); return ret; } @@ -60,6 +60,6 @@ tls_set(int32 _index, void* value) { int64 index = _index; __asm__ __volatile__ ( - "movq %%rsi, %%fs:(, %%rdi, 8)" - : : "D" (index), "S" (value)); + "movq %1, %%fs:(, %0, 8)" + : : "r" (index), "r" (value)); }