Files
KirkOS/user/include/mlibc/options/internal/loongarch64-include/mlibc/thread.hpp
T
kaguya 9a9b91c940 user: implement mlibc as the libc, finally.
It's finally done..

Signed-off-by: kaguya <vpshinomiya@protonmail.com>
2026-05-02 03:31:49 -04:00

24 lines
475 B
C++

#pragma once
#include <stdint.h>
#include <mlibc/tcb.hpp>
#include <bits/ensure.h>
namespace mlibc {
inline Tcb *get_current_tcb() {
// On LoongArch, the TCB is below the thread pointer.
uintptr_t tp = (uintptr_t)__builtin_thread_pointer();
auto tcb = reinterpret_cast<Tcb *>(tp - sizeof(Tcb));
__ensure(tcb == tcb->selfPointer);
return tcb;
}
inline uintptr_t get_sp() {
uintptr_t sp;
asm volatile ("move %0, $sp" : "=r"(sp));
return sp;
}
} // namespace mlibc