From: Celeste <cielesti@protonmail.com>
Date: Mon, 2 Sep 2024 02:54:17 +0000
Subject: [PATCH] libphobos: add riscv64 and loongarch64 support

Add musl support for these 2 architectures based on fenv.h and signal.h from:

https://git.musl-libc.org/cgit/musl/tree/arch/riscv64/bits?h=v1.2.5

https://git.musl-libc.org/cgit/musl/tree/arch/loongarch64/bits?h=v1.2.5
---
 libphobos/libdruntime/core/stdc/fenv.d        | 13 +++++++++++++
 libphobos/libdruntime/core/sys/posix/signal.d | 10 ++++++++++
 2 files changed, 23 insertions(+)

diff --git a/libphobos/libdruntime/core/stdc/fenv.d b/libphobos/libdruntime/core/stdc/fenv.d
index a7364c0a..5b327e4a 100644
--- a/libphobos/libdruntime/core/stdc/fenv.d
+++ b/libphobos/libdruntime/core/stdc/fenv.d
@@ -436,20 +436,33 @@ else version (CRuntime_Musl)
             ushort __cs_selector;
             ushort __opcode;
             uint   __data_offset;
             ushort __data_selector;
             ushort __unused5;
             version (X86_64)
                 uint __mxcsr;
         }
         alias ushort fexcept_t;
     }
+    else version (RISCV64)
+    {
+        alias uint fenv_t;
+        alias uint fexcept_t;
+    }
+    else version (LoongArch64)
+    {
+        struct fenv_t
+        {
+            uint __cw;
+        }
+        alias uint fexcept_t;
+    }
     else
     {
         static assert(false, "Architecture not supported.");
     }
 }
 else version (CRuntime_Newlib)
 {
     version (AArch64)
     {
         alias fenv_t = ulong;
diff --git a/libphobos/libdruntime/core/sys/posix/signal.d b/libphobos/libdruntime/core/sys/posix/signal.d
index a8b7f751..78d8b3cd 100644
--- a/libphobos/libdruntime/core/sys/posix/signal.d
+++ b/libphobos/libdruntime/core/sys/posix/signal.d
@@ -2751,20 +2751,30 @@ else version (CRuntime_Musl)
     else version (PPC_Any)
     {
         enum MINSIGSTKSZ = 4096;
         enum SIGSTKSZ    = 10240;
     }
     else version (X86_Any)
     {
         enum MINSIGSTKSZ = 2048;
         enum SIGSTKSZ    = 8192;
     }
+    else version (RISCV64)
+    {
+        enum MINSIGSTKSZ = 2048;
+        enum SIGSTKSZ    = 8192;
+    }
+    else version (LoongArch64)
+    {
+        enum MINSIGSTKSZ = 4096;
+        enum SIGSTKSZ    = 16384;
+    }
     else
         static assert(0, "unimplemented");
 
     //ucontext_t (defined in core.sys.posix.ucontext)
     //mcontext_t (defined in core.sys.posix.ucontext)
 
     version (MIPS_Any)
     {
         struct stack_t
         {