mirror of
https://github.com/0Nera/BMOSP.git
synced 2024-12-23 06:16:53 +03:00
Модуль SIMD вынесен в ядро
This commit is contained in:
parent
c41fe4a8a5
commit
cce42f26e6
@ -19,9 +19,6 @@ TERM_WALLPAPER=boot:///mod/boot.jpg
|
|||||||
MODULE_PATH=boot:///mod/pci_vendors.txt
|
MODULE_PATH=boot:///mod/pci_vendors.txt
|
||||||
MODULE_CMDLINE=[PCI][DATA][VENDORS]
|
MODULE_CMDLINE=[PCI][DATA][VENDORS]
|
||||||
|
|
||||||
MODULE_PATH=boot:///mod/simd.ko
|
|
||||||
MODULE_CMDLINE=[MOD]simd.ko
|
|
||||||
|
|
||||||
MODULE_PATH=boot:///mod/pci_data.ko
|
MODULE_PATH=boot:///mod/pci_data.ko
|
||||||
MODULE_CMDLINE=[MOD]pci_data.ko
|
MODULE_CMDLINE=[MOD]pci_data.ko
|
||||||
|
|
||||||
|
@ -142,4 +142,25 @@ void cpu_init( ) {
|
|||||||
if ((edx >> 5) & 1) { LOG("Программный терморегулятор (STC) поддерживается!\n"); }
|
if ((edx >> 5) & 1) { LOG("Программный терморегулятор (STC) поддерживается!\n"); }
|
||||||
|
|
||||||
brandname( );
|
brandname( );
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t eax, ebx, ecx, edx;
|
||||||
|
cpuid(1, &eax, &ebx, &ecx, &edx);
|
||||||
|
|
||||||
|
if ((edx >> 0) & 1) {
|
||||||
|
asm volatile("finit");
|
||||||
|
LOG("FPU(x87) поддерживается!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((edx >> 23) & 1) { LOG("MMX поддерживается!\n"); }
|
||||||
|
|
||||||
|
if ((edx >> 25) & 1) {
|
||||||
|
LOG("SSE2 поддерживается!\n");
|
||||||
|
LOG("Адрес региона fxsave 0x%x\n", &fxsave_region);
|
||||||
|
asm volatile(" fxsave %0 " ::"m"(fxsave_region));
|
||||||
|
uint32_t sse_version = (ecx >> 25) & 0x7;
|
||||||
|
LOG("SSE%u включен\n", sse_version);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ecx >> 28) & 1) { LOG("AVX поддерживается!\n"); }
|
||||||
}
|
}
|
@ -1,17 +0,0 @@
|
|||||||
#/bin/sh
|
|
||||||
echo "Название: SIMD"
|
|
||||||
echo "Лицензия: Публичное достояние"
|
|
||||||
|
|
||||||
CC=${CC:-gcc}
|
|
||||||
ARCH_FLAGS="-fno-stack-protector -ffreestanding -O0 -g -fPIC -static -nostdlib "
|
|
||||||
|
|
||||||
if [ -d "../../sdk" ]; then
|
|
||||||
CC="../../sdk/bin/x86_64-elf-gcc"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
$CC $ARCH_FLAGS -I../../modlib -finput-charset=UTF-8 -fexec-charset=cp1251 -c main.c -o simd.o
|
|
||||||
$CC $ARCH_FLAGS -Wl,--entry=init,--build-id=none -T ../link.ld simd.o -L../../modlib/lib/ -lmod -o simd.ko
|
|
||||||
|
|
||||||
cp simd.ko ../bin/
|
|
||||||
echo "Сборка завершена, файл: simd.ko"
|
|
@ -1,43 +0,0 @@
|
|||||||
#include <system.h>
|
|
||||||
|
|
||||||
static char fxsave_region[512] __attribute__((aligned(16)));
|
|
||||||
|
|
||||||
static inline void cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) {
|
|
||||||
asm volatile("cpuid" : "=a"(*eax), "=b"(*ebx), "=c"(*ecx), "=d"(*edx) : "a"(leaf));
|
|
||||||
}
|
|
||||||
|
|
||||||
module_info_t __attribute__((section(".minit"))) init(env_t *env) {
|
|
||||||
init_env(env);
|
|
||||||
|
|
||||||
uint32_t eax, ebx, ecx, edx;
|
|
||||||
cpuid(1, &eax, &ebx, &ecx, &edx);
|
|
||||||
|
|
||||||
if ((edx >> 0) & 1) {
|
|
||||||
asm volatile("finit");
|
|
||||||
log_printf("FPU(x87) поддерживается!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((edx >> 23) & 1) { log_printf("MMX поддерживается!\n"); }
|
|
||||||
|
|
||||||
if ((edx >> 25) & 1) {
|
|
||||||
log_printf("SSE2 поддерживается!\n");
|
|
||||||
log_printf("Адрес региона fxsave 0x%x\n", &fxsave_region);
|
|
||||||
asm volatile(" fxsave %0 " ::"m"(fxsave_region));
|
|
||||||
uint32_t sse_version = (ecx >> 25) & 0x7;
|
|
||||||
log_printf("SSE%u включен\n", sse_version);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ecx >> 28) & 1) { log_printf("AVX поддерживается!\n"); }
|
|
||||||
|
|
||||||
return (module_info_t){ .name = (char *)"SIMD",
|
|
||||||
.message = (char *)"SIMD инструкции",
|
|
||||||
.type = 0,
|
|
||||||
.data_size = 0,
|
|
||||||
.data = (void *)0,
|
|
||||||
.err_code = 0,
|
|
||||||
.module_id = 0,
|
|
||||||
.irq = 0,
|
|
||||||
.irq_handler = 0,
|
|
||||||
.get_func = 0,
|
|
||||||
.after_init = 0 };
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user