user: implement mlibc as the libc, finally.

It's finally done..

Signed-off-by: kaguya <vpshinomiya@protonmail.com>
This commit is contained in:
kaguya
2026-05-02 03:31:49 -04:00
parent 2fa39ad85a
commit 9a9b91c940
2387 changed files with 152741 additions and 315 deletions
@@ -0,0 +1,57 @@
#ifdef __riscv_flen
.global feclearexcept
.type feclearexcept, %function
feclearexcept:
csrc fflags, a0
li a0, 0
ret
.global feraiseexcept
.type feraiseexcept, %function
feraiseexcept:
csrs fflags, a0
li a0, 0
ret
.global fetestexcept
.type fetestexcept, %function
fetestexcept:
frflags t0
and a0, t0, a0
ret
.global fegetround
.type fegetround, %function
fegetround:
frrm a0
ret
.global __fesetround
.type __fesetround, %function
__fesetround:
fsrm t0, a0
li a0, 0
ret
.global fegetenv
.type fegetenv, %function
fegetenv:
frcsr t0
sw t0, 0(a0)
li a0, 0
ret
.global fesetenv
.type fesetenv, %function
fesetenv:
li t2, -1
li t1, 0
beq a0, t2, 1f
lw t1, 0(a0)
1: fscsr t1
li a0, 0
ret
#endif
@@ -0,0 +1,18 @@
#include <abi-bits/errno.h>
#include <bits/ensure.h>
#include <mlibc/internal-sysdeps.hpp>
#include <sys/hwprobe.h>
int __riscv_hwprobe(struct riscv_hwprobe *pairs, size_t pair_count, size_t cpusetsize, cpu_set_t *cpus, unsigned int flags) {
if (!mlibc::sys_riscv_hwprobe) {
MLIBC_MISSING_SYSDEP();
return -ENOSYS;
}
int ret = mlibc::sys_riscv_hwprobe(pairs, pair_count, cpusetsize, cpus, flags);
if (ret)
return -ret;
return 0;
}
@@ -0,0 +1,77 @@
.global setjmp
.type setjmp, "function"
.global _setjmp
.type _setjmp, "function"
setjmp:
_setjmp:
sd ra, 0(a0)
sd s0, 8(a0)
sd s1, 16(a0)
sd s2, 24(a0)
sd s3, 32(a0)
sd s4, 40(a0)
sd s5, 48(a0)
sd s6, 56(a0)
sd s7, 64(a0)
sd s8, 72(a0)
sd s9, 80(a0)
sd s10, 88(a0)
sd s11, 96(a0)
sd sp, 104(a0)
fsd fs0, 112(a0)
fsd fs1, 120(a0)
fsd fs2, 128(a0)
fsd fs3, 136(a0)
fsd fs4, 144(a0)
fsd fs5, 152(a0)
fsd fs6, 160(a0)
fsd fs7, 168(a0)
fsd fs8, 176(a0)
fsd fs9, 184(a0)
fsd fs10, 192(a0)
fsd fs11, 200(a0)
li a0, 0
ret
.global sigsetjmp
.type sigsetjmp, "function"
sigsetjmp:
unimp // TODO
.global longjmp
.type longjmp, "function"
.global _longjmp
.type _longjmp, "function"
longjmp:
_longjmp:
ld ra,0(a0)
ld s0,8(a0)
ld s1,16(a0)
ld s2,24(a0)
ld s3,32(a0)
ld s4,40(a0)
ld s5,48(a0)
ld s6,56(a0)
ld s7,64(a0)
ld s8,72(a0)
ld s9,80(a0)
ld s10,88(a0)
ld s11,96(a0)
ld sp,104(a0)
fld fs0,112(a0)
fld fs1,120(a0)
fld fs2,128(a0)
fld fs3,136(a0)
fld fs4,144(a0)
fld fs5,152(a0)
fld fs6,160(a0)
fld fs7,168(a0)
fld fs8,176(a0)
fld fs9,184(a0)
fld fs10,192(a0)
fld fs11,200(a0)
seqz a0,a1
add a0,a0,a1
ret
.section .note.GNU-stack,"",%progbits