/** @file
  SpeculationBarrier() function for IA32 and x64.
  Copyright (C) 2018 - 2019, Intel Corporation. All rights reserved.
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include 
/**
  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);
  }
}