Skip to content

Commit ce9a14f

Browse files
committed
[major] C++ Migration completed
1 parent dff586c commit ce9a14f

4 files changed

Lines changed: 61 additions & 94 deletions

File tree

src/include/arch/sse.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#ifndef SSE_H
2+
#define SSE_H
3+
4+
namespace SSE {
5+
bool __attribute__((naked)) enable();
6+
bool test();
7+
}
8+
9+
#endif

src/kernel/arch/sse.cxx

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <arch/sse.h>
2+
3+
bool __attribute__((naked)) SSE::enable() {
4+
__asm__ __volatile__(
5+
"mov %cs, %ax\n"
6+
"and $3, %ax\n"
7+
"cmp $0, %ax\n"
8+
"jne fl\n"
9+
10+
"mov $1, %eax\n"
11+
"cpuid\n"
12+
"bt $25, %edx\n"
13+
"jnc fl\n"
14+
15+
"test $1, %ecx\n"
16+
"jz fl\n"
17+
"mov %ecx, %ebx\n"
18+
"test $(1 << 19), %ebx\n"
19+
"jz fl\n"
20+
"test $(1 << 20), %ebx\n"
21+
"jz fl\n"
22+
23+
"mov %cr0, %rax\n"
24+
"and $~(1<<2), %rax\n"
25+
"or $(1<<1), %rax\n"
26+
"mov %rax, %cr0\n"
27+
28+
"mov %cr4, %rax\n"
29+
"or $((1<<9) | (1<<10)), %rax\n"
30+
"mov %rax, %cr4\n"
31+
"xor %eax, %eax\n"
32+
"mov $1, %al\n"
33+
"ret\n"
34+
35+
36+
"fl:\n"
37+
"xor %eax, %eax\n"
38+
"ret\n"
39+
);
40+
}
41+
42+
bool SSE::test() {
43+
unsigned int eax, ebx, ecx, edx;
44+
__asm__ __volatile__("cpuid" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(1));
45+
return edx & (1 << 25);
46+
}

src/kernel/arch/sse.s

Lines changed: 0 additions & 82 deletions
This file was deleted.

src/kernel/kern.cxx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,19 @@
1818

1919
#include <drivers/fb_gfx.h>
2020

21-
const char *SSE_EXT_MSG_TABLE[5] = {
22-
"Unsupported",
23-
"SSE",
24-
"SSE3, SSE4.1, SSE4.2",
25-
"SSE2",
26-
"XOP (SSE5)",
27-
};
28-
extern "C" {
29-
extern bool __enable_sse_ext();
30-
extern bool __test_sse();
21+
22+
namespace SSE {
23+
u8 enable();
24+
bool test();
3125
}
3226
void _kernel_pre_setup() {
3327
UART::init();
3428
boot_ctx.gather();
3529
Mem::Frame::init();
3630
Mem::Paging::init(); Log::success("Memory mapped"); Log::success("Paging initialized");
3731
Err::Handler::init_symbols(); Log::success("Kernel symbols mapped");
38-
bool sse_ext = __enable_sse_ext();
39-
if (sse_ext && __test_sse()) Log::success("SSE extensions enabled up to %s", SSE_EXT_MSG_TABLE[sse_ext]);
32+
33+
if (SSE::enable() && SSE::test()) Log::success("SSE extensions enabled");
4034
else Log::critical("Failed to enable SSE");
4135
}
4236

0 commit comments

Comments
 (0)