historical/m0-applesillicon.git/xnu-qemu-arm64-5.1.0/roms/edk2/MdePkg/Library/BaseLib/X86SpeculationBarrier.c
2024-01-16 11:20:27 -06:00

30 lines
618 B
C

/** @file
SpeculationBarrier() function for IA32 and x64.
Copyright (C) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Library/BaseLib.h>
/**
Uses as a barrier to stop speculative execution.
Ensures that no later instruction will execute speculatively, until all prior
instructions have completed.
**/
VOID
EFIAPI
SpeculationBarrier (
VOID
)
{
if (PcdGet8 (PcdSpeculationBarrierType) == 0x01) {
AsmLfence ();
} else if (PcdGet8 (PcdSpeculationBarrierType) == 0x02) {
AsmCpuid (0x01, NULL, NULL, NULL, NULL);
}
}