Implement AMD64 RunThread with inline assembly
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 40s
Builds / ExectOS (i686, debug) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Successful in 32s

This commit is contained in:
2026-06-16 12:00:56 +02:00
parent 1c90218042
commit 8597e37650

View File

@@ -145,8 +145,36 @@ KE::KThread::InitializeThreadContext(IN PKTHREAD Thread,
* *
* @since XT 1.0 * @since XT 1.0
*/ */
XTASSEMBLY
XTAPI XTAPI
VOID VOID
KE::KThread::RunThread(VOID) KE::KThread::RunThread(VOID)
{ {
/* Initialize execution context, adjust runlevel and dispatch the thread */
__asm__ volatile("xorq %%rbx, %%rbx\n"
"xorq %%r10, %%r10\n"
"xorq %%r11, %%r11\n"
"xorq %%r12, %%r12\n"
"xorq %%r13, %%r13\n"
"xorq %%r14, %%r14\n"
"xorq %%r15, %%r15\n"
"xorq %%rbp, %%rbp\n"
"xorq %%rdi, %%rdi\n"
"xorq %%rsi, %%rsi\n"
"subq $32, %%rsp\n"
"movb $%c[RunLevel], %%cl\n"
"callq %P[LowerRunLevel]\n"
"addq $32, %%rsp\n"
"movq 8(%%rsp), %%rcx\n"
"movq 0(%%rsp), %%rdx\n"
"movq 24(%%rsp), %%rax\n"
"subq $32, %%rsp\n"
"callq *%%rax\n"
"addq $32, %%rsp\n"
"addq $40, %%rsp\n"
"ret\n"
:
: [RunLevel] "i" (APC_LEVEL),
[LowerRunLevel] "i" (KE::RunLevel::LowerRunLevel)
: "memory");
} }