//++
// Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
// 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
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// Module Name:
//
// Abstract:
// Assemble routine to flush cache lines
//
// Revision History:
//
//--
#include <IpfMacro.i>
//
// Internal worker function to invalidate a range of instruction cache lines
// in the cache coherency domain of the calling CPU.
//
// Internal worker function to invalidate the instruction cache lines specified
// by Address and Length. If Address is not aligned on a cache line boundary,
// then entire instruction cache line containing Address is invalidated. If
// Address + Length is not aligned on a cache line boundary, then the entire
// instruction cache line containing Address + Length -1 is invalidated. This
// function may choose to invalidate the entire instruction cache if that is more
// efficient than invalidating the specified range. If Length is 0, the no instruction
// cache lines are invalidated. Address is returned.
// This function is only available on IPF.
//
// @param Address The base address of the instruction cache lines to
// invalidate. If the CPU is in a physical addressing mode, then
// Address is a physical address. If the CPU is in a virtual
// addressing mode, then Address is a virtual address.
//
// @param Length The number of bytes to invalidate from the instruction cache.
//
// @return Address
//
// VOID *
// EFIAPI
// InternalFlushCacheRange (
// IN VOID *Address,
// IN UINTN Length
// );
//
// the br.cloop will first execute one time
sync.i;;
srlz.i;;