alder_lake_bios/Intel/AlderLake/ClientOneSiliconPkg/Library/BaseCacheAsRamLib/Ia32/Cpu.nasm

57 lines
1.6 KiB
NASM

;; @file
; Assembly code of Cpu
;
;@copyright
; INTEL CONFIDENTIAL
; Copyright (c) 2017 - 2018 Intel Corporation. All rights reserved.
; This program and the accompanying materials
; are licensed and made available under the terms and conditions of the BSD License
; which accompanies this distribution. The full text of the license may be found at
; http://opensource.org/licenses/bsd-license.php.
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
;;
IA32_CR4_OSFXSR equ 200h
IA32_CR4_OSXMMEXCPT equ 400h
IA32_CR0_MP equ 2h
IA32_CPUID_SSE2 equ 02000000h
IA32_CPUID_SSE2_B equ 26
SECTION .text
;------------------------------------------------------------------------------
; Set up flags in CR4 for XMM instruction enabling
;------------------------------------------------------------------------------
global ASM_PFX(InitXmm)
ASM_PFX(InitXmm):
push ebx
; Check whether SSE2 is supported
mov eax, 1
cpuid
bt edx, IA32_CPUID_SSE2_B
jnc .skipxmm
; Enable XMM
mov eax, cr0
or eax, IA32_CR0_MP
mov cr0, eax
mov eax, cr4
or eax, IA32_CR4_OSFXSR
or eax, IA32_CR4_OSXMMEXCPT
mov cr4, eax
.skipxmm:
pop ebx
ret
;------------------------------------------------------------------------------
; Invalidate cache
;------------------------------------------------------------------------------
global ASM_PFX(CacheInvd)
ASM_PFX(CacheInvd):
invd
ret