| /** @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); | |
| } | |
| } |