mirror of https://github.com/acidanthera/audk.git
1. Simplify the implementation of AsmReadApplicationRegister() & AsmReadControlRegister() for IPF architecture.
2. Add AsmReadMsr() & AsmWriteMsr() for IPF architecture 3. update AsmCpuMisc.s to only support GCC tool chain to avoid symbol collision. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7034 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
43a99f081e
commit
59e0bb0cbd
|
@ -4897,6 +4897,50 @@ AsmReadApplicationRegister (
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads the current value of a Machine Specific Register (MSR).
|
||||||
|
|
||||||
|
Reads and returns the current value of the Machine Specific Register specified by Index. No
|
||||||
|
parameter checking is performed on Index, and if the Index value is beyond the implemented MSR
|
||||||
|
register range, a Reserved Register/Field fault may occur. The caller must either guarantee that
|
||||||
|
Index is valid, or the caller must set up fault handlers to catch the faults. This function is
|
||||||
|
only available on IPF.
|
||||||
|
|
||||||
|
@param Index The 8-bit Machine Specific Register index to read.
|
||||||
|
|
||||||
|
@return The current value of the Machine Specific Register specified by Index.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT64
|
||||||
|
EFIAPI
|
||||||
|
AsmReadMsr (
|
||||||
|
IN UINT8 Index
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Writes the current value of a Machine Specific Register (MSR).
|
||||||
|
|
||||||
|
Writes Value to the Machine Specific Register specified by Index. Value is returned. No
|
||||||
|
parameter checking is performed on Index, and if the Index value is beyond the implemented MSR
|
||||||
|
register range, a Reserved Register/Field fault may occur. The caller must either guarantee that
|
||||||
|
Index is valid, or the caller must set up fault handlers to catch the faults. This function is
|
||||||
|
only available on IPF.
|
||||||
|
|
||||||
|
@param Index The 8-bit Machine Specific Register index to write.
|
||||||
|
@param Value The 64-bit value to write to the Machine Specific Register.
|
||||||
|
|
||||||
|
@return The 64-bit value to write to the Machine Specific Register.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT64
|
||||||
|
EFIAPI
|
||||||
|
AsmWriteMsr (
|
||||||
|
IN UINT8 Index,
|
||||||
|
IN UINT64 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Determines if the CPU is currently executing in virtual, physical, or mixed mode.
|
Determines if the CPU is currently executing in virtual, physical, or mixed mode.
|
||||||
|
|
||||||
|
|
|
@ -575,7 +575,6 @@
|
||||||
ChkStkGcc.c | GCC
|
ChkStkGcc.c | GCC
|
||||||
|
|
||||||
[Sources.IPF]
|
[Sources.IPF]
|
||||||
Ipf/AsmCpuMisc.s
|
|
||||||
Ipf/AccessGp.s
|
Ipf/AccessGp.s
|
||||||
Ipf/ReadCpuid.s
|
Ipf/ReadCpuid.s
|
||||||
Ipf/ExecFc.s
|
Ipf/ExecFc.s
|
||||||
|
@ -586,6 +585,7 @@
|
||||||
Ipf/AccessGcr.s
|
Ipf/AccessGcr.s
|
||||||
Ipf/AccessEicr.s
|
Ipf/AccessEicr.s
|
||||||
Ipf/AccessDbr.s
|
Ipf/AccessDbr.s
|
||||||
|
Ipf/AccessMsr.s | INTEL
|
||||||
Ipf/FlushCacheRange.s
|
Ipf/FlushCacheRange.s
|
||||||
Ipf/InternalSwitchStack.c
|
Ipf/InternalSwitchStack.c
|
||||||
Ipf/GetInterruptState.s
|
Ipf/GetInterruptState.s
|
||||||
|
@ -595,14 +595,13 @@
|
||||||
Ipf/InterlockedCompareExchange32.s
|
Ipf/InterlockedCompareExchange32.s
|
||||||
Ipf/CpuBreakpoint.c | INTEL
|
Ipf/CpuBreakpoint.c | INTEL
|
||||||
Ipf/CpuBreakpointMsc.c | MSFT
|
Ipf/CpuBreakpointMsc.c | MSFT
|
||||||
|
Ipf/AsmCpuMisc.s | GCC
|
||||||
Ipf/Unaligned.c
|
Ipf/Unaligned.c
|
||||||
Ipf/SwitchStack.s
|
Ipf/SwitchStack.s
|
||||||
Ipf/LongJmp.s
|
Ipf/LongJmp.s
|
||||||
Ipf/SetJmp.s
|
Ipf/SetJmp.s
|
||||||
Ipf/ReadCr.s
|
Ipf/ReadCr.s
|
||||||
Ipf/ReadControlRegister.c
|
|
||||||
Ipf/ReadAr.s
|
Ipf/ReadAr.s
|
||||||
Ipf/ReadApplicationRegister.c
|
|
||||||
Ipf/Ia64gen.h
|
Ipf/Ia64gen.h
|
||||||
Ipf/Asm.h
|
Ipf/Asm.h
|
||||||
Math64.c
|
Math64.c
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
/// @file
|
||||||
|
/// IPF specific Machine Specific Registers accessing functions.
|
||||||
|
///
|
||||||
|
/// Copyright (c) 2008, 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.
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
//++
|
||||||
|
// AsmReadMsr
|
||||||
|
//
|
||||||
|
// Reads the current value of a Machine Specific Register (MSR).
|
||||||
|
//
|
||||||
|
// Reads and returns the current value of the Machine Specific Register specified by Index. No
|
||||||
|
// parameter checking is performed on Index, and if the Index value is beyond the implemented MSR
|
||||||
|
// register range, a Reserved Register/Field fault may occur. The caller must either guarantee that
|
||||||
|
// Index is valid, or the caller must set up fault handlers to catch the faults. This function is
|
||||||
|
// only available on IPF.
|
||||||
|
//
|
||||||
|
// Arguments :
|
||||||
|
//
|
||||||
|
// On Entry : The 8-bit Machine Specific Register index to read.
|
||||||
|
//
|
||||||
|
// Return Value: The current value of the Machine Specific Register specified by Index.
|
||||||
|
//
|
||||||
|
//--
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
.text
|
||||||
|
.type AsmReadMsr, @function
|
||||||
|
.proc AsmReadMsr
|
||||||
|
.regstk 1, 0, 0, 0
|
||||||
|
|
||||||
|
AsmReadMsr::
|
||||||
|
mov r8=msr[in0];;
|
||||||
|
br.ret.sptk b0;;
|
||||||
|
.endp AsmReadMsr
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
//++
|
||||||
|
// AsmWriteMsr
|
||||||
|
//
|
||||||
|
// Writes the current value of a Machine Specific Register (MSR).
|
||||||
|
//
|
||||||
|
// Writes Value to the Machine Specific Register specified by Index. Value is returned. No
|
||||||
|
// parameter checking is performed on Index, and if the Index value is beyond the implemented MSR
|
||||||
|
// register range, a Reserved Register/Field fault may occur. The caller must either guarantee that
|
||||||
|
// Index is valid, or the caller must set up fault handlers to catch the faults. This function is
|
||||||
|
// only available on IPF.
|
||||||
|
//
|
||||||
|
// Arguments :
|
||||||
|
//
|
||||||
|
// On Entry : The 8-bit Machine Specific Register index to write.
|
||||||
|
// The 64-bit value to write to the Machine Specific Register.
|
||||||
|
//
|
||||||
|
// Return Value: The 64-bit value to write to the Machine Specific Register.
|
||||||
|
//
|
||||||
|
//--
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
.text
|
||||||
|
.type AsmWriteMsr, @function
|
||||||
|
.proc AsmWriteMsr
|
||||||
|
.regstk 2, 0, 0, 0
|
||||||
|
|
||||||
|
AsmWriteMsr::
|
||||||
|
mov msr[in0] = in1
|
||||||
|
mov r8 = in1;;
|
||||||
|
srlz.d;;
|
||||||
|
br.ret.sptk b0;;
|
||||||
|
.endp AsmWriteMsr
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
/** @file
|
|
||||||
Implementation of Application Register reading functions on Itanium platform.
|
|
||||||
|
|
||||||
Copyright (c) 2008, Intel Corporation<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "BaseLibInternals.h"
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Loop up table for Index and corresponding application register access routines.
|
|
||||||
//
|
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED REGISTER_ENTRY mApplicationRegisterAccessEntries[] = {
|
|
||||||
{IPF_APPLICATION_REGISTER_K0, AsmReadApplicationRegisterK0},
|
|
||||||
{IPF_APPLICATION_REGISTER_K1, AsmReadApplicationRegisterK1},
|
|
||||||
{IPF_APPLICATION_REGISTER_K2, AsmReadApplicationRegisterK2},
|
|
||||||
{IPF_APPLICATION_REGISTER_K3, AsmReadApplicationRegisterK3},
|
|
||||||
{IPF_APPLICATION_REGISTER_K4, AsmReadApplicationRegisterK4},
|
|
||||||
{IPF_APPLICATION_REGISTER_K5, AsmReadApplicationRegisterK5},
|
|
||||||
{IPF_APPLICATION_REGISTER_K6, AsmReadApplicationRegisterK6},
|
|
||||||
{IPF_APPLICATION_REGISTER_K7, AsmReadApplicationRegisterK7},
|
|
||||||
{IPF_APPLICATION_REGISTER_RSC, AsmReadApplicationRegisterRsc},
|
|
||||||
{IPF_APPLICATION_REGISTER_BSP, AsmReadApplicationRegisterBsp},
|
|
||||||
{IPF_APPLICATION_REGISTER_BSPSTORE, AsmReadApplicationRegisterBspstore},
|
|
||||||
{IPF_APPLICATION_REGISTER_RNAT, AsmReadApplicationRegisterRnat},
|
|
||||||
{IPF_APPLICATION_REGISTER_FCR, AsmReadApplicationRegisterFcr},
|
|
||||||
{IPF_APPLICATION_REGISTER_EFLAG, AsmReadApplicationRegisterEflag},
|
|
||||||
{IPF_APPLICATION_REGISTER_CSD, AsmReadApplicationRegisterCsd},
|
|
||||||
{IPF_APPLICATION_REGISTER_SSD, AsmReadApplicationRegisterSsd},
|
|
||||||
{IPF_APPLICATION_REGISTER_CFLG, AsmReadApplicationRegisterCflg},
|
|
||||||
{IPF_APPLICATION_REGISTER_FSR, AsmReadApplicationRegisterFsr},
|
|
||||||
{IPF_APPLICATION_REGISTER_FIR, AsmReadApplicationRegisterFir},
|
|
||||||
{IPF_APPLICATION_REGISTER_FDR, AsmReadApplicationRegisterFdr},
|
|
||||||
{IPF_APPLICATION_REGISTER_CCV, AsmReadApplicationRegisterCcv},
|
|
||||||
{IPF_APPLICATION_REGISTER_UNAT, AsmReadApplicationRegisterUnat},
|
|
||||||
{IPF_APPLICATION_REGISTER_FPSR, AsmReadApplicationRegisterFpsr},
|
|
||||||
{IPF_APPLICATION_REGISTER_ITC, AsmReadApplicationRegisterItc},
|
|
||||||
{IPF_APPLICATION_REGISTER_PFS, AsmReadApplicationRegisterPfs},
|
|
||||||
{IPF_APPLICATION_REGISTER_LC, AsmReadApplicationRegisterLc},
|
|
||||||
{IPF_APPLICATION_REGISTER_EC, AsmReadApplicationRegisterEc}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Reads a 64-bit application register.
|
|
||||||
|
|
||||||
Reads and returns the application register specified by Index. The valid Index valued are defined
|
|
||||||
above in "Related Definitions".
|
|
||||||
If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.
|
|
||||||
|
|
||||||
@param Index The index of the application register to read.
|
|
||||||
|
|
||||||
@return The application register specified by Index.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT64
|
|
||||||
EFIAPI
|
|
||||||
AsmReadApplicationRegister (
|
|
||||||
IN UINT64 Index
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINTN Item;
|
|
||||||
|
|
||||||
for (Item = 0; Item < sizeof (mApplicationRegisterAccessEntries) / sizeof (mApplicationRegisterAccessEntries[0]); Item++) {
|
|
||||||
if (mApplicationRegisterAccessEntries[Item].Index == Index) {
|
|
||||||
return mApplicationRegisterAccessEntries[Item].Function ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0xFFFFFFFFFFFFFFFF;
|
|
||||||
}
|
|
|
@ -15,487 +15,95 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
//++
|
||||||
|
// AsmReadApplicationRegister
|
||||||
|
//
|
||||||
|
// Reads a 64-bit application register.
|
||||||
|
//
|
||||||
|
// Reads and returns the application register specified by Index.
|
||||||
|
// If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.
|
||||||
|
//
|
||||||
|
// Arguments :
|
||||||
|
//
|
||||||
|
// On Entry : The index of the application register to read.
|
||||||
|
//
|
||||||
|
// Return Value: The application register specified by Index.
|
||||||
|
//
|
||||||
|
//--
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
.text
|
.text
|
||||||
.type AsmReadApplicationRegisterK0, @function
|
.type AsmReadApplicationRegister, @function
|
||||||
.proc AsmReadApplicationRegisterK0
|
.proc AsmReadApplicationRegister
|
||||||
//
|
.regstk 1, 0, 0, 0
|
||||||
// Reads appplication register K0.
|
|
||||||
//
|
AsmReadApplicationRegister::
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
//
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K0
|
// ARs are defined in the ranges 0-44 and 64-66 (with some holes).
|
||||||
//
|
// Compact this list by subtracting 16 from the top range.
|
||||||
// @return The 64-bit application register K0.
|
// 0-44, 64-66 -> 0-44, 48-50
|
||||||
//
|
//
|
||||||
AsmReadApplicationRegisterK0::
|
mov r15=2
|
||||||
mov r8 = ar.k0;;
|
mov r14=pr // save predicates
|
||||||
br.ret.dpnt b0;;
|
cmp.leu p6,p7=64,in0 // p6 = AR# >= 64
|
||||||
.endp AsmReadApplicationRegisterK0
|
;;
|
||||||
|
(p7) cmp.leu p7,p0=48,in0 // p7 = 32 <= AR# < 64
|
||||||
|
(p6) add in0=-16,in0 // if (AR >= 64) AR# -= 16
|
||||||
|
;;
|
||||||
.text
|
(p7) mov r15=0 // if bad range (48-63)
|
||||||
.type AsmReadApplicationRegisterK1, @function
|
;;
|
||||||
.proc AsmReadApplicationRegisterK1
|
mov ret0=-1 // in case of illegal AR #
|
||||||
//
|
shl r15=r15,in0 // r15 = 0x2 << AR#
|
||||||
// Reads appplication register K1.
|
;;
|
||||||
//
|
mov pr=r15,-1
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
;;
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K1
|
//
|
||||||
//
|
// At this point the predicates contain a bit field of the
|
||||||
// @return The 64-bit application register K1.
|
// AR desired. (The bit is the AR+1, since pr0 is always 1.)
|
||||||
//
|
//
|
||||||
AsmReadApplicationRegisterK1::
|
.pred.rel "mutex",p1,p2,p3,p4,p5,p6,p7,p8,p17,p18,p19,p20,p22,p25,\
|
||||||
mov r8 = ar.k1;;
|
p26,p27,p28,p29,p30,p31,p33,p37,p41,p45,p49,p50,p51
|
||||||
br.ret.dpnt b0;;
|
(p1) mov ret0=ar.k0 // ar0
|
||||||
.endp AsmReadApplicationRegisterK1
|
(p2) mov ret0=ar.k1 // ar1
|
||||||
|
(p3) mov ret0=ar.k2 // ar2
|
||||||
|
(p4) mov ret0=ar.k3 // ar3
|
||||||
|
(p5) mov ret0=ar.k4 // ar4
|
||||||
.text
|
(p6) mov ret0=ar.k5 // ar5
|
||||||
.type AsmReadApplicationRegisterK2, @function
|
(p7) mov ret0=ar.k6 // ar6
|
||||||
.proc AsmReadApplicationRegisterK2
|
(p8) mov ret0=ar.k7 // ar7
|
||||||
//
|
|
||||||
// Reads appplication register K2.
|
(p17) mov ret0=ar.rsc // ar16
|
||||||
//
|
(p18) mov ret0=ar.bsp // ar17
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
(p19) mov ret0=ar.bspstore // ar18
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K2
|
(p20) mov ret0=ar.rnat // ar19
|
||||||
//
|
|
||||||
// @return The 64-bit application register K2.
|
(p22) mov ret0=ar.fcr // ar21 [iA32]
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterK2::
|
(p25) mov ret0=ar.eflag // ar24 [iA32]
|
||||||
mov r8 = ar.k2;;
|
(p26) mov ret0=ar.csd // ar25 [iA32]
|
||||||
br.ret.dpnt b0;;
|
(p27) mov ret0=ar.ssd // ar26 [iA32]
|
||||||
.endp AsmReadApplicationRegisterK2
|
(p28) mov ret0=ar.cflg // ar27 [iA32]
|
||||||
|
(p29) mov ret0=ar.fsr // ar28 [iA32]
|
||||||
|
(p30) mov ret0=ar.fir // ar29 [iA32]
|
||||||
|
(p31) mov ret0=ar.fdr // ar30 [iA32]
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterK3, @function
|
(p33) mov ret0=ar.ccv // ar32
|
||||||
.proc AsmReadApplicationRegisterK3
|
|
||||||
//
|
(p37) mov ret0=ar.unat // ar36
|
||||||
// Reads appplication register K3.
|
|
||||||
//
|
(p41) mov ret0=ar.fpsr // ar40
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K3
|
(p45) mov ret0=ar.itc // ar44
|
||||||
//
|
|
||||||
// @return The 64-bit application register K3.
|
//
|
||||||
//
|
// This is the translated (-16) range.
|
||||||
AsmReadApplicationRegisterK3::
|
//
|
||||||
mov r8 = ar.k3;;
|
(p49) mov ret0=ar.pfs // ar64
|
||||||
br.ret.dpnt b0;;
|
(p50) mov ret0=ar.lc // ar65
|
||||||
.endp AsmReadApplicationRegisterK3
|
(p51) mov ret0=ar.ec // ar66
|
||||||
|
|
||||||
|
// Restore predicates and return.
|
||||||
|
|
||||||
.text
|
mov pr=r14,-1
|
||||||
.type AsmReadApplicationRegisterK4, @function
|
br.ret.sptk b0
|
||||||
.proc AsmReadApplicationRegisterK4
|
.endp
|
||||||
//
|
|
||||||
// Reads appplication register K4.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K4
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register K4.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterK4::
|
|
||||||
mov r8 = ar.k4;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterK4
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterK5, @function
|
|
||||||
.proc AsmReadApplicationRegisterK5
|
|
||||||
//
|
|
||||||
// Reads appplication register K5.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K5
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register K5.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterK5::
|
|
||||||
mov r8 = ar.k5;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterK5
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterK6, @function
|
|
||||||
.proc AsmReadApplicationRegisterK6
|
|
||||||
//
|
|
||||||
// Reads appplication register K6.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K6
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register K6.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterK6::
|
|
||||||
mov r8 = ar.k6;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterK6
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterK7, @function
|
|
||||||
.proc AsmReadApplicationRegisterK7
|
|
||||||
//
|
|
||||||
// Reads appplication register K7.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_K7
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register K7.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterK7::
|
|
||||||
mov r8 = ar.k7;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterK7
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterRsc, @function
|
|
||||||
.proc AsmReadApplicationRegisterRsc
|
|
||||||
//
|
|
||||||
// Reads appplication register RSC.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_RSC
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register RSC.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterRsc::
|
|
||||||
mov r8 = ar.rsc;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterRsc
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterBsp, @function
|
|
||||||
.proc AsmReadApplicationRegisterBsp
|
|
||||||
//
|
|
||||||
// Reads appplication register BSP.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_BSP
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register BSP.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterBsp::
|
|
||||||
mov r8 = ar.bsp;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterBsp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterBspstore, @function
|
|
||||||
.proc AsmReadApplicationRegisterBspstore
|
|
||||||
//
|
|
||||||
// Reads appplication register BSPSTORE.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_BSPSTORE
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register BSPSTORE.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterBspstore::
|
|
||||||
mov r8 = ar.bspstore;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterBspstore
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterRnat, @function
|
|
||||||
.proc AsmReadApplicationRegisterRnat
|
|
||||||
//
|
|
||||||
// Reads appplication register RNAT.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_RNAT
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register RNAT.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterRnat::
|
|
||||||
mov r8 = ar.rnat;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterRnat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterFcr, @function
|
|
||||||
.proc AsmReadApplicationRegisterFcr
|
|
||||||
//
|
|
||||||
// Reads appplication register FCR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_FCR
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register FCR.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterFcr::
|
|
||||||
mov r8 = ar.fcr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterFcr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterEflag, @function
|
|
||||||
.proc AsmReadApplicationRegisterEflag
|
|
||||||
//
|
|
||||||
// Reads appplication register EFLAG.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_EFLAG
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register EFLAG.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterEflag::
|
|
||||||
mov r8 = ar.eflag;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterEflag
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterCsd, @function
|
|
||||||
.proc AsmReadApplicationRegisterCsd
|
|
||||||
//
|
|
||||||
// Reads appplication register CSD.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_CSD
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register CSD.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterCsd::
|
|
||||||
mov r8 = ar.csd;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterCsd
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterSsd, @function
|
|
||||||
.proc AsmReadApplicationRegisterSsd
|
|
||||||
//
|
|
||||||
// Reads appplication register SSD.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_SSD
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register SSD.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterSsd::
|
|
||||||
mov r8 = ar.ssd;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterSsd
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterCflg, @function
|
|
||||||
.proc AsmReadApplicationRegisterCflg
|
|
||||||
//
|
|
||||||
// Reads appplication register CFLG.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_CFLG
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register CFLG.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterCflg::
|
|
||||||
mov r8 = ar.cflg;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterCflg
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterFsr, @function
|
|
||||||
.proc AsmReadApplicationRegisterFsr
|
|
||||||
//
|
|
||||||
// Reads appplication register FSR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_FSR
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register FSR.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterFsr::
|
|
||||||
mov r8 = ar.fsr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterFsr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterFir, @function
|
|
||||||
.proc AsmReadApplicationRegisterFir
|
|
||||||
//
|
|
||||||
// Reads appplication register FIR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_FIR
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register FIR.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterFir::
|
|
||||||
mov r8 = ar.fir;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterFir
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterFdr, @function
|
|
||||||
.proc AsmReadApplicationRegisterFdr
|
|
||||||
//
|
|
||||||
// Reads appplication register FDR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_FDR
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register FDR.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterFdr::
|
|
||||||
mov r8 = ar.fdr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterFdr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterCcv, @function
|
|
||||||
.proc AsmReadApplicationRegisterCcv
|
|
||||||
//
|
|
||||||
// Reads appplication register CCV.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_CCV
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register CCV.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterCcv::
|
|
||||||
mov r8 = ar.ccv;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterCcv
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterUnat, @function
|
|
||||||
.proc AsmReadApplicationRegisterUnat
|
|
||||||
//
|
|
||||||
// Reads appplication register UNAT.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_UNAT
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register UNAT.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterUnat::
|
|
||||||
mov r8 = ar.unat;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterUnat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterFpsr, @function
|
|
||||||
.proc AsmReadApplicationRegisterFpsr
|
|
||||||
//
|
|
||||||
// Reads appplication register FPSR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_FPSR
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register FPSR.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterFpsr::
|
|
||||||
mov r8 = ar.fpsr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterFpsr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterItc, @function
|
|
||||||
.proc AsmReadApplicationRegisterItc
|
|
||||||
//
|
|
||||||
// Reads appplication register ITC.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_ITC
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register ITC.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterItc::
|
|
||||||
mov r8 = ar.itc;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterItc
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterPfs, @function
|
|
||||||
.proc AsmReadApplicationRegisterPfs
|
|
||||||
//
|
|
||||||
// Reads appplication register PFS.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_PFS
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register PFS.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterPfs::
|
|
||||||
mov r8 = ar.pfs;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterPfs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterLc, @function
|
|
||||||
.proc AsmReadApplicationRegisterLc
|
|
||||||
//
|
|
||||||
// Reads appplication register LC.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_LC
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register LC.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterLc::
|
|
||||||
mov r8 = ar.lc;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterLc
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadApplicationRegisterEc, @function
|
|
||||||
.proc AsmReadApplicationRegisterEc
|
|
||||||
//
|
|
||||||
// Reads appplication register EC.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadApplicationRegister()
|
|
||||||
// when its parameter Index is IPF_APPLICATION_REGISTER_EC
|
|
||||||
//
|
|
||||||
// @return The 64-bit application register EC.
|
|
||||||
//
|
|
||||||
AsmReadApplicationRegisterEc::
|
|
||||||
mov r8 = ar.ec;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadApplicationRegisterEc
|
|
||||||
|
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
/** @file
|
|
||||||
Implementation of Control Register reading functions on Itanium platform.
|
|
||||||
|
|
||||||
Copyright (c) 2008, Intel Corporation<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "BaseLibInternals.h"
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Loop up table for Index and corresponding control register access routines.
|
|
||||||
//
|
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED REGISTER_ENTRY mControlRegisterAccessEntries[] = {
|
|
||||||
{IPF_CONTROL_REGISTER_DCR, AsmReadControlRegisterDcr},
|
|
||||||
{IPF_CONTROL_REGISTER_ITM, AsmReadControlRegisterItm},
|
|
||||||
{IPF_CONTROL_REGISTER_IVA, AsmReadControlRegisterIva},
|
|
||||||
{IPF_CONTROL_REGISTER_PTA, AsmReadControlRegisterPta},
|
|
||||||
{IPF_CONTROL_REGISTER_IPSR, AsmReadControlRegisterIpsr},
|
|
||||||
{IPF_CONTROL_REGISTER_ISR, AsmReadControlRegisterIsr},
|
|
||||||
{IPF_CONTROL_REGISTER_IIP, AsmReadControlRegisterIip},
|
|
||||||
{IPF_CONTROL_REGISTER_IFA, AsmReadControlRegisterIfa},
|
|
||||||
{IPF_CONTROL_REGISTER_ITIR, AsmReadControlRegisterItir},
|
|
||||||
{IPF_CONTROL_REGISTER_IIPA, AsmReadControlRegisterIipa},
|
|
||||||
{IPF_CONTROL_REGISTER_IFS, AsmReadControlRegisterIfs},
|
|
||||||
{IPF_CONTROL_REGISTER_IIM, AsmReadControlRegisterIim},
|
|
||||||
{IPF_CONTROL_REGISTER_IHA, AsmReadControlRegisterIha},
|
|
||||||
{IPF_CONTROL_REGISTER_LID, AsmReadControlRegisterLid},
|
|
||||||
{IPF_CONTROL_REGISTER_IVR, AsmReadControlRegisterIvr},
|
|
||||||
{IPF_CONTROL_REGISTER_TPR, AsmReadControlRegisterTpr},
|
|
||||||
{IPF_CONTROL_REGISTER_EOI, AsmReadControlRegisterEoi},
|
|
||||||
{IPF_CONTROL_REGISTER_IRR0, AsmReadControlRegisterIrr0},
|
|
||||||
{IPF_CONTROL_REGISTER_IRR1, AsmReadControlRegisterIrr1},
|
|
||||||
{IPF_CONTROL_REGISTER_IRR2, AsmReadControlRegisterIrr2},
|
|
||||||
{IPF_CONTROL_REGISTER_IRR3, AsmReadControlRegisterIrr3},
|
|
||||||
{IPF_CONTROL_REGISTER_ITV, AsmReadControlRegisterItv},
|
|
||||||
{IPF_CONTROL_REGISTER_PMV, AsmReadControlRegisterPmv},
|
|
||||||
{IPF_CONTROL_REGISTER_CMCV, AsmReadControlRegisterCmcv},
|
|
||||||
{IPF_CONTROL_REGISTER_LRR0, AsmReadControlRegisterLrr0},
|
|
||||||
{IPF_CONTROL_REGISTER_LRR1, AsmReadControlRegisterLrr1}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Reads a 64-bit control register.
|
|
||||||
|
|
||||||
Reads and returns the control register specified by Index. The valid Index valued are defined
|
|
||||||
above in "Related Definitions".
|
|
||||||
If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.
|
|
||||||
|
|
||||||
@param Index The index of the control register to read.
|
|
||||||
|
|
||||||
@return The control register specified by Index.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT64
|
|
||||||
EFIAPI
|
|
||||||
AsmReadControlRegister (
|
|
||||||
IN UINT64 Index
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINTN Item;
|
|
||||||
|
|
||||||
for (Item = 0; Item < sizeof (mControlRegisterAccessEntries) / sizeof (mControlRegisterAccessEntries[0]); Item++) {
|
|
||||||
if (mControlRegisterAccessEntries[Item].Index == Index) {
|
|
||||||
return mControlRegisterAccessEntries[Item].Function ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0xFFFFFFFFFFFFFFFF;
|
|
||||||
}
|
|
|
@ -14,469 +14,89 @@
|
||||||
///
|
///
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
//++
|
||||||
|
// AsmReadControlRegister
|
||||||
|
//
|
||||||
|
// Reads a 64-bit control register.
|
||||||
|
//
|
||||||
|
// Reads and returns the control register specified by Index.
|
||||||
|
// If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.
|
||||||
|
//
|
||||||
|
// Arguments :
|
||||||
|
//
|
||||||
|
// On Entry : The index of the control register to read.
|
||||||
|
//
|
||||||
|
// Return Value: The control register specified by Index.
|
||||||
|
//
|
||||||
|
//--
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
.text
|
.text
|
||||||
.type AsmReadControlRegisterDcr, @function
|
.type AsmReadControlRegister, @function
|
||||||
.proc AsmReadControlRegisterDcr
|
.proc AsmReadControlRegister
|
||||||
//
|
.regstk 1, 0, 0, 0
|
||||||
// Reads control register DCR.
|
|
||||||
//
|
AsmReadControlRegister::
|
||||||
// This is a worker function for AsmReadControlRegister()
|
//
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_DCR
|
// CRs are defined in the ranges 0-25 and 64-81 (with some holes).
|
||||||
//
|
// Compact this list by subtracting 32 from the top range.
|
||||||
// @return The 64-bit control register DCR.
|
// 0-25, 64-81 -> 0-25, 32-49
|
||||||
//
|
//
|
||||||
AsmReadControlRegisterDcr::
|
mov r15=2
|
||||||
mov r8 = cr.dcr;;
|
mov r14=pr // save predicates
|
||||||
br.ret.dpnt b0;;
|
cmp.leu p6,p7=64,in0 // p6 = CR# >= 64
|
||||||
.endp AsmReadControlRegisterDcr
|
;;
|
||||||
|
(p7) cmp.leu p7,p0=32,in0 // p7 = 32 <= CR# < 64
|
||||||
|
(p6) add in0=-32,in0 // if (CR >= 64) CR# -= 32
|
||||||
|
;;
|
||||||
.text
|
(p7) mov r15=0 // if bad range (32-63)
|
||||||
.type AsmReadControlRegisterItm, @function
|
;;
|
||||||
.proc AsmReadControlRegisterItm
|
mov ret0=-1 // in case of illegal CR #
|
||||||
//
|
shl r15=r15,in0 // r15 = 0x2 << CR#
|
||||||
// Reads control register ITM.
|
;;
|
||||||
//
|
mov pr=r15,-1
|
||||||
// This is a worker function for AsmReadControlRegister()
|
;;
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_ITM
|
|
||||||
//
|
//
|
||||||
// @return The 64-bit control register ITM.
|
// At this point the predicates contain a bit field of the
|
||||||
//
|
// CR desired. (The bit is the CR+1, since pr0 is always 1.)
|
||||||
AsmReadControlRegisterItm::
|
//
|
||||||
mov r8 = cr.itm;;
|
.pred.rel "mutex",p1,p2,p3,p9,p17,p18,p20,p21,p22,p23,p24,p25,p26,\
|
||||||
br.ret.dpnt b0;;
|
p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p49,p50
|
||||||
.endp AsmReadControlRegisterItm
|
(p1) mov ret0=cr.dcr // cr0
|
||||||
|
(p2) mov ret0=cr.itm // cr1
|
||||||
|
(p3) mov ret0=cr.iva // cr2
|
||||||
|
(p9) mov ret0=cr.pta // cr8
|
||||||
.text
|
(p17) mov ret0=cr.ipsr // cr16
|
||||||
.type AsmReadControlRegisterIva, @function
|
(p18) mov ret0=cr.isr // cr17
|
||||||
.proc AsmReadControlRegisterIva
|
(p20) mov ret0=cr.iip // cr19
|
||||||
//
|
(p21) mov ret0=cr.ifa // cr20
|
||||||
// Reads control register IVA.
|
(p22) mov ret0=cr.itir // cr21
|
||||||
//
|
(p23) mov ret0=cr.iipa // cr22
|
||||||
// This is a worker function for AsmReadControlRegister()
|
(p24) mov ret0=cr.ifs // cr23
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IVA
|
(p25) mov ret0=cr.iim // cr24
|
||||||
//
|
(p26) mov ret0=cr.iha // cr25
|
||||||
// @return The 64-bit control register IVA.
|
|
||||||
//
|
// This is the translated (-32) range.
|
||||||
AsmReadControlRegisterIva::
|
|
||||||
mov r8 = cr.iva;;
|
(p33) mov ret0=cr.lid // cr64
|
||||||
br.ret.dpnt b0;;
|
(p34) mov ret0=cr.ivr // cr65
|
||||||
.endp AsmReadControlRegisterIva
|
(p35) mov ret0=cr.tpr // cr66
|
||||||
|
(p36) mov ret0=cr.eoi // cr67
|
||||||
|
(p37) mov ret0=cr.irr0 // cr68
|
||||||
|
(p38) mov ret0=cr.irr1 // cr69
|
||||||
.text
|
(p39) mov ret0=cr.irr2 // cr70
|
||||||
.type AsmReadControlRegisterPta, @function
|
(p40) mov ret0=cr.irr3 // cr71
|
||||||
.proc AsmReadControlRegisterPta
|
(p41) mov ret0=cr.itv // cr72
|
||||||
//
|
(p42) mov ret0=cr.pmv // cr73
|
||||||
// Reads control register PTA.
|
(p43) mov ret0=cr.cmcv // cr74
|
||||||
//
|
(p49) mov ret0=cr.lrr0 // cr80
|
||||||
// This is a worker function for AsmReadControlRegister()
|
(p50) mov ret0=cr.lrr1 // cr81
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_PTA
|
|
||||||
//
|
//
|
||||||
// @return The 64-bit control register PTA.
|
// Restore predicates and return.
|
||||||
//
|
//
|
||||||
AsmReadControlRegisterPta::
|
mov pr=r14,-1
|
||||||
mov r8 = cr.pta;;
|
br.ret.sptk b0
|
||||||
br.ret.dpnt b0;;
|
.endp
|
||||||
.endp AsmReadControlRegisterPta
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIpsr, @function
|
|
||||||
.proc AsmReadControlRegisterIpsr
|
|
||||||
//
|
|
||||||
// Reads control register IPSR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IPSR
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IPSR.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIpsr::
|
|
||||||
mov r8 = cr.ipsr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIpsr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIsr, @function
|
|
||||||
.proc AsmReadControlRegisterIsr
|
|
||||||
//
|
|
||||||
// Reads control register ISR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_ISR
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register ISR.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIsr::
|
|
||||||
mov r8 = cr.isr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIsr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIip, @function
|
|
||||||
.proc AsmReadControlRegisterIip
|
|
||||||
//
|
|
||||||
// Reads control register IIP.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IIP
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IIP.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIip::
|
|
||||||
mov r8 = cr.iip;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIip
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIfa, @function
|
|
||||||
.proc AsmReadControlRegisterIfa
|
|
||||||
//
|
|
||||||
// Reads control register IFA.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IFA
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IFA.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIfa::
|
|
||||||
mov r8 = cr.ifa;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIfa
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterItir, @function
|
|
||||||
.proc AsmReadControlRegisterItir
|
|
||||||
//
|
|
||||||
// Reads control register ITIR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_ITIR
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register ITIR.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterItir::
|
|
||||||
mov r8 = cr.itir;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterItir
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIipa, @function
|
|
||||||
.proc AsmReadControlRegisterIipa
|
|
||||||
//
|
|
||||||
// Reads control register IIPA.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IIPA
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IIPA.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIipa::
|
|
||||||
mov r8 = cr.iipa;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIipa
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIfs, @function
|
|
||||||
.proc AsmReadControlRegisterIfs
|
|
||||||
//
|
|
||||||
// Reads control register IFS.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IFS
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IFS.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIfs::
|
|
||||||
mov r8 = cr.ifs;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIfs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIim, @function
|
|
||||||
.proc AsmReadControlRegisterIim
|
|
||||||
//
|
|
||||||
// Reads control register IIM.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IIM
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IIM.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIim::
|
|
||||||
mov r8 = cr.iim;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIim
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIha, @function
|
|
||||||
.proc AsmReadControlRegisterIha
|
|
||||||
//
|
|
||||||
// Reads control register IHA.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IHA
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IHA.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIha::
|
|
||||||
mov r8 = cr.iha;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIha
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterLid, @function
|
|
||||||
.proc AsmReadControlRegisterLid
|
|
||||||
//
|
|
||||||
// Reads control register LID.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_LID
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register LID.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterLid::
|
|
||||||
mov r8 = cr.lid;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterLid
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIvr, @function
|
|
||||||
.proc AsmReadControlRegisterIvr
|
|
||||||
//
|
|
||||||
// Reads control register IVR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IVR
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IVR.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIvr::
|
|
||||||
mov r8 = cr.ivr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIvr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterTpr, @function
|
|
||||||
.proc AsmReadControlRegisterTpr
|
|
||||||
//
|
|
||||||
// Reads control register TPR.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_TPR
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register TPR.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterTpr::
|
|
||||||
mov r8 = cr.tpr;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterTpr
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterEoi, @function
|
|
||||||
.proc AsmReadControlRegisterEoi
|
|
||||||
//
|
|
||||||
// Reads control register EOI.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_EOI
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register EOI.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterEoi::
|
|
||||||
mov r8 = cr.eoi;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterEoi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIrr0, @function
|
|
||||||
.proc AsmReadControlRegisterIrr0
|
|
||||||
//
|
|
||||||
// Reads control register IRR0.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IRR0
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IRR0.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIrr0::
|
|
||||||
mov r8 = cr.irr0;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIrr0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIrr1, @function
|
|
||||||
.proc AsmReadControlRegisterIrr1
|
|
||||||
//
|
|
||||||
// Reads control register IRR1.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IRR1
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IRR1.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIrr1::
|
|
||||||
mov r8 = cr.irr1;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIrr1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIrr2, @function
|
|
||||||
.proc AsmReadControlRegisterIrr2
|
|
||||||
//
|
|
||||||
// Reads control register IRR2.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IRR2
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IRR2.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIrr2::
|
|
||||||
mov r8 = cr.irr2;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIrr2
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterIrr3, @function
|
|
||||||
.proc AsmReadControlRegisterIrr3
|
|
||||||
//
|
|
||||||
// Reads control register IRR3.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_IRR3
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register IRR3.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterIrr3::
|
|
||||||
mov r8 = cr.irr3;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterIrr3
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterItv, @function
|
|
||||||
.proc AsmReadControlRegisterItv
|
|
||||||
//
|
|
||||||
// Reads control register ITV.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_ITV
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register ITV.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterItv::
|
|
||||||
mov r8 = cr.itv;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterItv
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterPmv, @function
|
|
||||||
.proc AsmReadControlRegisterPmv
|
|
||||||
//
|
|
||||||
// Reads control register PMV.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_PMV
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register PMV.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterPmv::
|
|
||||||
mov r8 = cr.pmv;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterPmv
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterCmcv, @function
|
|
||||||
.proc AsmReadControlRegisterCmcv
|
|
||||||
//
|
|
||||||
// Reads control register CMCV.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_CMCV
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register CMCV.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterCmcv::
|
|
||||||
mov r8 = cr.cmcv;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterCmcv
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterLrr0, @function
|
|
||||||
.proc AsmReadControlRegisterLrr0
|
|
||||||
//
|
|
||||||
// Reads control register LRR0.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_LRR0
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register LRR0.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterLrr0::
|
|
||||||
mov r8 = cr.lrr0;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterLrr0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.text
|
|
||||||
.type AsmReadControlRegisterLrr1, @function
|
|
||||||
.proc AsmReadControlRegisterLrr1
|
|
||||||
//
|
|
||||||
// Reads control register LRR1.
|
|
||||||
//
|
|
||||||
// This is a worker function for AsmReadControlRegister()
|
|
||||||
// when its parameter Index is IPF_CONTROL_REGISTER_LRR1
|
|
||||||
//
|
|
||||||
// @return The 64-bit control register LRR1.
|
|
||||||
//
|
|
||||||
AsmReadControlRegisterLrr1::
|
|
||||||
mov r8 = cr.lrr1;;
|
|
||||||
br.ret.dpnt b0;;
|
|
||||||
.endp AsmReadControlRegisterLrr1
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue