mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-17 16:31:02 +00:00
[compiler-rt] Fix build errors when using gcc on LoongArch
- GCC does not recognize $fcsr0, uses $r0 instead. - GCC does not implement __builtin_thread_pointer, which can be obtained directly through $tp. Reviewed By: SixWeining Differential Revision: https://reviews.llvm.org/D140545
This commit is contained in:
parent
2f6aef52f2
commit
2b15c63fb7
@ -20,7 +20,11 @@
|
||||
CRT_FE_ROUND_MODE __fe_getround(void) {
|
||||
#if __loongarch_frlen != 0
|
||||
int fcsr;
|
||||
# ifdef __clang__
|
||||
__asm__ __volatile__("movfcsr2gr %0, $fcsr0" : "=r" (fcsr));
|
||||
# else
|
||||
__asm__ __volatile__("movfcsr2gr %0, $r0" : "=r" (fcsr));
|
||||
# endif
|
||||
fcsr &= LOONGARCH_RMODE_MASK;
|
||||
switch (fcsr) {
|
||||
case LOONGARCH_TOWARDZERO:
|
||||
@ -41,9 +45,15 @@ CRT_FE_ROUND_MODE __fe_getround(void) {
|
||||
int __fe_raise_inexact(void) {
|
||||
#if __loongarch_frlen != 0
|
||||
int fcsr;
|
||||
# ifdef __clang__
|
||||
__asm__ __volatile__("movfcsr2gr %0, $fcsr0" : "=r" (fcsr));
|
||||
__asm__ __volatile__(
|
||||
"movgr2fcsr $fcsr0, %0" :: "r" (fcsr | LOONGARCH_INEXACT));
|
||||
# else
|
||||
__asm__ __volatile__("movfcsr2gr %0, $r0" : "=r" (fcsr));
|
||||
__asm__ __volatile__(
|
||||
"movgr2fcsr $r0, %0" :: "r" (fcsr | LOONGARCH_INEXACT));
|
||||
# endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
@ -507,8 +507,13 @@ static void GetTls(uptr *addr, uptr *size) {
|
||||
ThreadDescriptorSize();
|
||||
*size = g_tls_size + ThreadDescriptorSize();
|
||||
#elif SANITIZER_GLIBC && defined(__loongarch__)
|
||||
# ifdef __clang__
|
||||
*addr = reinterpret_cast<uptr>(__builtin_thread_pointer()) -
|
||||
ThreadDescriptorSize();
|
||||
# else
|
||||
asm("or %0,$tp,$zero" : "=r"(*addr));
|
||||
*addr -= ThreadDescriptorSize();
|
||||
# endif
|
||||
*size = g_tls_size + ThreadDescriptorSize();
|
||||
#elif SANITIZER_GLIBC && defined(__powerpc64__)
|
||||
// Workaround for glibc<2.25(?). 2.27 is known to not need this.
|
||||
|
Loading…
x
Reference in New Issue
Block a user