MdePkg/Library/BaseLib/Ipf/AccessPsr.s File Reference


Detailed Description

IPF specific Processor Status Register accessing functions
Copyright (c) 2006 - 2010, 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.
Module Name: AccessPsr.s

define CpuModeMask 0x0000001008020000

define CpuInVirtualMode 0x1
define CpuInPhysicalMode 0x0
define CpuInMixMode (0x0 - 0x1)

AsmReadPsr
This routine is used to read the current value of Processor Status Register (PSR).
Arguments :
On Entry :
Return Value: The current PSR value.
.text
.type AsmReadPsr,
.proc AsmReadPsr

AsmReadPsr::
mov r8 = psr;;
br.ret.dpnt b0;;
.endp AsmReadPsr

AsmWritePsr
This routine is used to write the value of Processor Status Register (PSR).
Arguments :
On Entry : The value need to be written.
Return Value: The value have been written.
.text
.type AsmWritePsr,
.proc AsmWritePsr
.regstk 1, 0, 0, 0

AsmWritePsr::
mov psr.l = in0
mov r8 = in0;;
srlz.d;;
srlz.i;;
br.ret.dpnt b0;;
.endp AsmWritePsr

AsmCpuVirtual
This routine is used to determines if the CPU is currently executing
in virtual, physical, or mixed mode.
If the CPU is in virtual mode(PSR.RT=1, PSR.DT=1, PSR.IT=1), then 1 is returned.
If the CPU is in physical mode(PSR.RT=0, PSR.DT=0, PSR.IT=0), then 0 is returned.
If the CPU is not in physical mode or virtual mode, then it is in mixed mode,
and -1 is returned.
Arguments:
On Entry: None
Return Value: The CPU mode flag
return 1 The CPU is in virtual mode.
return 0 The CPU is in physical mode.
return -1 The CPU is in mixed mode.
.text
.type AsmCpuVirtual,
.proc AsmCpuVirtual

AsmCpuVirtual::
mov r29 = psr
movl r30 = CpuModeMask;;
and r28 = r30, r29;;
cmp.eq p6, p7 = r30, r28;;
(p6) mov r8 = CpuInVirtualMode;;
(p6) br.ret.dpnt b0;;
(p7) cmp.eq p6, p7 = 0x0, r28;;
(p6) mov r8 = CpuInPhysicalMode;;
(p7) mov r8 = CpuInMixMode;;
br.ret.dpnt b0;;
.endp AsmCpuVirtual


Generated on Thu Sep 24 23:14:22 2015 for MdePkg[ALL] by  doxygen 1.5.7.1