From bfe6f13837a464d0792017516aa9234168d5873b Mon Sep 17 00:00:00 2001 From: Martin Johansen Date: Mon, 11 Sep 2023 15:01:46 +0200 Subject: [PATCH 1/3] Added suppport for AVX --- src/init/cpu.asm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/init/cpu.asm b/src/init/cpu.asm index 4e2241b..3b7930f 100644 --- a/src/init/cpu.asm +++ b/src/init/cpu.asm @@ -87,6 +87,16 @@ init_cpu: ; Enable Math Co-processor finit +; Enable AVX + mov rax, cr4 + bts rax, 18 ; Set Operating System Support for OSXSAVE and OSXSTOR instructions (Bit 18) + mov cr4, rax + + xor rcx, rcx + xgetbv ; Load XCR0 register + or eax, 7 ; Set AVX, SSE, X87 bits + xsetbv ; Save back to XCR0 + ; Enable and Configure Local APIC mov rsi, [os_LocalAPICAddress] test rsi, rsi From 337f21c5f76d5ed99f14d1905cab5105bc05feb8 Mon Sep 17 00:00:00 2001 From: Martin Johansen Date: Mon, 11 Sep 2023 15:13:32 +0200 Subject: [PATCH 2/3] Added suppport for AVX --- src/init/cpu.asm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/init/cpu.asm b/src/init/cpu.asm index 3b7930f..e83e2b4 100644 --- a/src/init/cpu.asm +++ b/src/init/cpu.asm @@ -89,13 +89,15 @@ init_cpu: ; Enable AVX mov rax, cr4 - bts rax, 18 ; Set Operating System Support for OSXSAVE and OSXSTOR instructions (Bit 18) + bts rax, 18 ; Enable OSXSAVE (Bit 18) mov cr4, rax - xor rcx, rcx + mov rcx, 0 ; Set load XCR Nr. 0 xgetbv ; Load XCR0 register - or eax, 7 ; Set AVX, SSE, X87 bits - xsetbv ; Save back to XCR0 + bts rax, 0 ; Set X87 enable (Bit 0) + bts rax, 1 ; Set SSE enable (Bit 1) + bts rax, 2 ; Set AVX enable (Bit 2) + xsetbv ; Save XCR0 register ; Enable and Configure Local APIC mov rsi, [os_LocalAPICAddress] From 154e82554a2b6a773c3b637f5b15e21494005863 Mon Sep 17 00:00:00 2001 From: Martin Johansen Date: Mon, 11 Sep 2023 15:28:24 +0200 Subject: [PATCH 3/3] Added suppport for AVX --- src/init/cpu.asm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/init/cpu.asm b/src/init/cpu.asm index e83e2b4..6105e94 100644 --- a/src/init/cpu.asm +++ b/src/init/cpu.asm @@ -88,6 +88,13 @@ init_cpu: finit ; Enable AVX + mov eax, 1 ; CPUID Feature information 1 + cpuid ; Sets info in eax and ecx + bt ecx, 28 ; AVX is supported if bit 28 is set in ecx + jnc avx_not_supported ; Skip activating AVX if not supported + +avx_supported: + mov rax, cr4 bts rax, 18 ; Enable OSXSAVE (Bit 18) mov cr4, rax @@ -98,6 +105,7 @@ init_cpu: bts rax, 1 ; Set SSE enable (Bit 1) bts rax, 2 ; Set AVX enable (Bit 2) xsetbv ; Save XCR0 register +avx_not_supported: ; Enable and Configure Local APIC mov rsi, [os_LocalAPICAddress]