);\r
\r
\r
+///\r
+/// Valid Index value for AsmReadControlRegister()\r
+///\r
+#define IPF_CONTROL_REGISTER_DCR 0\r
+#define IPF_CONTROL_REGISTER_ITM 1\r
+#define IPF_CONTROL_REGISTER_IVA 2\r
+#define IPF_CONTROL_REGISTER_PTA 8\r
+#define IPF_CONTROL_REGISTER_IPSR 16\r
+#define IPF_CONTROL_REGISTER_ISR 17\r
+#define IPF_CONTROL_REGISTER_IIP 19\r
+#define IPF_CONTROL_REGISTER_IFA 20\r
+#define IPF_CONTROL_REGISTER_ITIR 21\r
+#define IPF_CONTROL_REGISTER_IIPA 22\r
+#define IPF_CONTROL_REGISTER_IFS 23\r
+#define IPF_CONTROL_REGISTER_IIM 24\r
+#define IPF_CONTROL_REGISTER_IHA 25\r
+#define IPF_CONTROL_REGISTER_LID 64\r
+#define IPF_CONTROL_REGISTER_IVR 65\r
+#define IPF_CONTROL_REGISTER_TPR 66\r
+#define IPF_CONTROL_REGISTER_EOI 67\r
+#define IPF_CONTROL_REGISTER_IRR0 68\r
+#define IPF_CONTROL_REGISTER_IRR1 69\r
+#define IPF_CONTROL_REGISTER_IRR2 70\r
+#define IPF_CONTROL_REGISTER_IRR3 71\r
+#define IPF_CONTROL_REGISTER_ITV 72\r
+#define IPF_CONTROL_REGISTER_PMV 73\r
+#define IPF_CONTROL_REGISTER_CMCV 74\r
+#define IPF_CONTROL_REGISTER_LRR0 80\r
+#define IPF_CONTROL_REGISTER_LRR1 81\r
+\r
+/**\r
+ Reads a 64-bit control register.\r
+\r
+ Reads and returns the control register specified by Index. The valid Index valued are defined\r
+ above in "Related Definitions".\r
+ If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.\r
+\r
+ @param Index The index of the control register to read.\r
+\r
+ @return The control register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegister (\r
+ IN UINT64 Index\r
+ );\r
+\r
+\r
+///\r
+/// Valid Index value for AsmReadApplicationRegister()\r
+///\r
+#define IPF_APPLICATION_REGISTER_K0 0\r
+#define IPF_APPLICATION_REGISTER_K1 1\r
+#define IPF_APPLICATION_REGISTER_K2 2\r
+#define IPF_APPLICATION_REGISTER_K3 3\r
+#define IPF_APPLICATION_REGISTER_K4 4\r
+#define IPF_APPLICATION_REGISTER_K5 5\r
+#define IPF_APPLICATION_REGISTER_K6 6\r
+#define IPF_APPLICATION_REGISTER_K7 7\r
+#define IPF_APPLICATION_REGISTER_RSC 16\r
+#define IPF_APPLICATION_REGISTER_BSP 17\r
+#define IPF_APPLICATION_REGISTER_BSPSTORE 18\r
+#define IPF_APPLICATION_REGISTER_RNAT 19\r
+#define IPF_APPLICATION_REGISTER_FCR 21\r
+#define IPF_APPLICATION_REGISTER_EFLAG 24\r
+#define IPF_APPLICATION_REGISTER_CSD 25\r
+#define IPF_APPLICATION_REGISTER_SSD 26\r
+#define IPF_APPLICATION_REGISTER_CFLG 27\r
+#define IPF_APPLICATION_REGISTER_FSR 28\r
+#define IPF_APPLICATION_REGISTER_FIR 29\r
+#define IPF_APPLICATION_REGISTER_FDR 30\r
+#define IPF_APPLICATION_REGISTER_CCV 32\r
+#define IPF_APPLICATION_REGISTER_UNAT 36\r
+#define IPF_APPLICATION_REGISTER_FPSR 40\r
+#define IPF_APPLICATION_REGISTER_ITC 44\r
+#define IPF_APPLICATION_REGISTER_PFS 64\r
+#define IPF_APPLICATION_REGISTER_LC 65\r
+#define IPF_APPLICATION_REGISTER_EC 66\r
+\r
+/**\r
+ Reads a 64-bit application register.\r
+\r
+ Reads and returns the application register specified by Index. The valid Index valued are defined\r
+ above in "Related Definitions".\r
+ If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.\r
+\r
+ @param Index The index of the application register to read.\r
+\r
+ @return The application register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegister (\r
+ IN UINT64 Index\r
+ );\r
+\r
+\r
/**\r
Determines if the CPU is currently executing in virtual, physical, or mixed mode.\r
\r
);\r
\r
\r
-/**\r
- Transfers control to a function starting with a new stack.\r
-\r
- Transfers control to the function specified by EntryPoint using the new stack\r
- specified by NewStack and passing in the parameters specified by Context1 and\r
- Context2. Context1 and Context2 are optional and may be NULL. The function\r
- EntryPoint must never return.\r
-\r
- If EntryPoint is NULL, then ASSERT().\r
- If NewStack is NULL, then ASSERT().\r
-\r
- @param EntryPoint A pointer to function to call with the new stack.\r
- @param Context1 A pointer to the context to pass into the EntryPoint\r
- function.\r
- @param Context2 A pointer to the context to pass into the EntryPoint\r
- function.\r
- @param NewStack A pointer to the new stack to use for the EntryPoint\r
- function.\r
- @param NewBsp A pointer to the new memory location for RSE backing\r
- store.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-AsmSwitchStackAndBackingStore (\r
- IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
- IN VOID *Context1, OPTIONAL\r
- IN VOID *Context2, OPTIONAL\r
- IN VOID *NewStack,\r
- IN VOID *NewBsp\r
- );\r
-\r
-/**\r
- @todo This call should be removed after the PalCall\r
- Instance issue has been fixed.\r
-\r
- Performs a PAL call using static calling convention.\r
-\r
- An internal function to perform a PAL call using static calling convention.\r
-\r
- @param PalEntryPoint The entry point address of PAL. The address in ar.kr5\r
- would be used if this parameter were NULL on input.\r
- @param Arg1 The first argument of a PAL call.\r
- @param Arg2 The second argument of a PAL call.\r
- @param Arg3 The third argument of a PAL call.\r
- @param Arg4 The fourth argument of a PAL call.\r
-\r
- @return The values returned in r8, r9, r10 and r11.\r
-\r
-**/\r
-PAL_CALL_RETURN\r
-PalCallStatic (\r
- IN CONST VOID *PalEntryPoint,\r
- IN UINT64 Arg1,\r
- IN UINT64 Arg2,\r
- IN UINT64 Arg3,\r
- IN UINT64 Arg4\r
- );\r
-\r
-\r
-\r
#elif defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)\r
///\r
/// IA32 and X64 Specific Functions\r
Ipf/SwitchStack.s\r
Ipf/LongJmp.s\r
Ipf/SetJmp.s\r
- Ipf/PalCallStatic.s\r
+ Ipf/ReadCr.s\r
+ Ipf/ReadControlRegister.c\r
+ Ipf/ReadAr.s\r
+ Ipf/ReadApplicationRegister.c\r
Ipf/Ia64gen.h\r
Ipf/Asm.h\r
Math64.c\r
// IPF specific functions\r
//\r
\r
+//\r
+// Structure definition for look up table.\r
+//\r
+typedef struct {\r
+ UINT64 Index;\r
+ UINT64 (*Function) (VOID);\r
+} REGISTER_ENTRY;\r
+\r
+\r
+/**\r
+ Reads control register DCR.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_DCR\r
+\r
+ @return The 64-bit control register DCR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterDcr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register ITM.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_ITM\r
+\r
+ @return The 64-bit control register ITM.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterItm (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IVA.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IVA\r
+\r
+ @return The 64-bit control register IVA.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIva (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register PTA.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_PTA\r
+\r
+ @return The 64-bit control register PTA.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterPta (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IPSR.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IPSR\r
+\r
+ @return The 64-bit control register IPSR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIpsr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register ISR.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_ISR\r
+\r
+ @return The 64-bit control register ISR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIsr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IIP.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IIP\r
+\r
+ @return The 64-bit control register IIP.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIip (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IFA.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IFA\r
+\r
+ @return The 64-bit control register IFA.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIfa (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register ITIR.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_ITIR\r
+\r
+ @return The 64-bit control register ITIR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterItir (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IIPA.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IIPA\r
+\r
+ @return The 64-bit control register IIPA.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIipa (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IFS.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IFS\r
+\r
+ @return The 64-bit control register IFS.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIfs (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IIM.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IIM\r
+\r
+ @return The 64-bit control register IIM.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIim (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IHA.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IHA\r
+\r
+ @return The 64-bit control register IHA.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIha (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register LID.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_LID\r
+\r
+ @return The 64-bit control register LID.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterLid (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IVR.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IVR\r
+\r
+ @return The 64-bit control register IVR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIvr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register TPR.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_TPR\r
+\r
+ @return The 64-bit control register TPR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterTpr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register EOI.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_EOI\r
+\r
+ @return The 64-bit control register EOI.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterEoi (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IRR0.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IRR0\r
+\r
+ @return The 64-bit control register IRR0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIrr0 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IRR1.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IRR1\r
+\r
+ @return The 64-bit control register IRR1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIrr1 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IRR2.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IRR2\r
+\r
+ @return The 64-bit control register IRR2.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIrr2 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register IRR3.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_IRR3\r
+\r
+ @return The 64-bit control register IRR3.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterIrr3 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register ITV.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_ITV\r
+\r
+ @return The 64-bit control register ITV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterItv (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register PMV.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_PMV\r
+\r
+ @return The 64-bit control register PMV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterPmv (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register CMCV.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_CMCV\r
+\r
+ @return The 64-bit control register CMCV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterCmcv (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register LRR0.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_LRR0\r
+\r
+ @return The 64-bit control register LRR0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterLrr0 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads control register LRR1.\r
+\r
+ This is a worker function for AsmReadControlRegister()\r
+ when its parameter Index is IPF_CONTROL_REGISTER_LRR1\r
+\r
+ @return The 64-bit control register LRR1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegisterLrr1 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register K0.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K0\r
+\r
+ @return The 64-bit application register K0.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK0 (\r
+ VOID\r
+ );\r
+\r
+\r
+\r
+/**\r
+ Reads application register K1.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K1\r
+\r
+ @return The 64-bit application register K1.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK1 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register K2.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K2\r
+\r
+ @return The 64-bit application register K2.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK2 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register K3.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K3\r
+\r
+ @return The 64-bit application register K3.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK3 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register K4.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K4\r
+\r
+ @return The 64-bit application register K4.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK4 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register K5.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K5\r
+\r
+ @return The 64-bit application register K5.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK5 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register K6.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K6\r
+\r
+ @return The 64-bit application register K6.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK6 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register K7.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_K7\r
+\r
+ @return The 64-bit application register K7.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterK7 (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register RSC.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_RSC\r
+\r
+ @return The 64-bit application register RSC.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterRsc (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register BSP.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_BSP\r
+\r
+ @return The 64-bit application register BSP.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterBsp (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register BSPSTORE.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_BSPSTORE\r
+\r
+ @return The 64-bit application register BSPSTORE.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterBspstore (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register RNAT.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_RNAT\r
+\r
+ @return The 64-bit application register RNAT.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterRnat (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register FCR.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_FCR\r
+\r
+ @return The 64-bit application register FCR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterFcr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register EFLAG.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_EFLAG\r
+\r
+ @return The 64-bit application register EFLAG.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterEflag (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register CSD.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_CSD\r
+\r
+ @return The 64-bit application register CSD.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterCsd (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register SSD.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_SSD\r
+\r
+ @return The 64-bit application register SSD.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterSsd (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register CFLG.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_CFLG\r
+\r
+ @return The 64-bit application register CFLG.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterCflg (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register FSR.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_FSR\r
+\r
+ @return The 64-bit application register FSR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterFsr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register FIR.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_FIR\r
+\r
+ @return The 64-bit application register FIR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterFir (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register FDR.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_FDR\r
+\r
+ @return The 64-bit application register FDR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterFdr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register CCV.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_CCV\r
+\r
+ @return The 64-bit application register CCV.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterCcv (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register UNAT.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_UNAT\r
+\r
+ @return The 64-bit application register UNAT.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterUnat (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register FPSR.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_FPSR\r
+\r
+ @return The 64-bit application register FPSR.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterFpsr (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register ITC.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_ITC\r
+\r
+ @return The 64-bit application register ITC.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterItc (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register PFS.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_PFS\r
+\r
+ @return The 64-bit application register PFS.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterPfs (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register LC.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_LC\r
+\r
+ @return The 64-bit application register LC.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterLc (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Reads application register EC.\r
+\r
+ This is a worker function for AsmReadApplicationRegister()\r
+ when its parameter Index is IPF_APPLICATION_REGISTER_EC\r
+\r
+ @return The 64-bit application register EC.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegisterEc (\r
+ VOID\r
+ );\r
+\r
+\r
+\r
/**\r
Transfers control to a function starting with a new stack.\r
\r
+++ /dev/null
-/// @file\r
-/// Contains an implementation of CallPalProcStatic on Itanium-based\r
-/// architecture.\r
-///\r
-/// Copyright (c) 2006, Intel Corporation\r
-/// All rights reserved. This program and the accompanying materials\r
-/// are licensed and made available under the terms and conditions of the BSD License\r
-/// which accompanies this distribution. The full text of the license may be found at\r
-/// http://opensource.org/licenses/bsd-license.php\r
-///\r
-/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-///\r
-/// Module Name: PalCallStatic.s\r
-///\r
-///\r
-\r
-.auto\r
-.text\r
-\r
-.proc PalCallStatic\r
-.type PalCallStatic, @function\r
-.regstk 5, 0, 0, 0\r
-PalCallStatic::\r
- cmp.eq p15 = in0, r0\r
- mov r31 = in4\r
- mov r8 = ip\r
-\r
-(p15) mov in0 = ar.k5\r
- add r8 = (_PalProcReturn - PalCallStatic), r8\r
- mov r30 = in3\r
-\r
- mov in4 = psr\r
- mov in3 = b0\r
- mov b7 = in0\r
-\r
- rsm 1 << 14 // Disable interrupts\r
- mov r29 = in2\r
- mov r28 = in1\r
-\r
- mov b0 = r8\r
- br.cond.sptk.many b7\r
-\r
-_PalProcReturn:\r
- mov psr.l = in4\r
- mov b0 = in3\r
- br.ret.sptk.many b0\r
-.endp PalCallStatic\r
--- /dev/null
+/** @file\r
+ Implementation of Application Register reading functions on Itanium platform.\r
+\r
+ Copyright (c) 2008, Intel Corporation<BR>\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "BaseLibInternals.h"\r
+\r
+\r
+//\r
+// Loop up table for Index and corresponding application register access routines. \r
+//\r
+GLOBAL_REMOVE_IF_UNREFERENCED REGISTER_ENTRY mApplicationRegisterAccessEntries[] = {\r
+ {IPF_APPLICATION_REGISTER_K0, AsmReadApplicationRegisterK0},\r
+ {IPF_APPLICATION_REGISTER_K1, AsmReadApplicationRegisterK1},\r
+ {IPF_APPLICATION_REGISTER_K2, AsmReadApplicationRegisterK2},\r
+ {IPF_APPLICATION_REGISTER_K3, AsmReadApplicationRegisterK3},\r
+ {IPF_APPLICATION_REGISTER_K4, AsmReadApplicationRegisterK4},\r
+ {IPF_APPLICATION_REGISTER_K5, AsmReadApplicationRegisterK5},\r
+ {IPF_APPLICATION_REGISTER_K6, AsmReadApplicationRegisterK6},\r
+ {IPF_APPLICATION_REGISTER_K7, AsmReadApplicationRegisterK7},\r
+ {IPF_APPLICATION_REGISTER_RSC, AsmReadApplicationRegisterRsc},\r
+ {IPF_APPLICATION_REGISTER_BSP, AsmReadApplicationRegisterBsp},\r
+ {IPF_APPLICATION_REGISTER_BSPSTORE, AsmReadApplicationRegisterBspstore},\r
+ {IPF_APPLICATION_REGISTER_RNAT, AsmReadApplicationRegisterRnat},\r
+ {IPF_APPLICATION_REGISTER_FCR, AsmReadApplicationRegisterFcr},\r
+ {IPF_APPLICATION_REGISTER_EFLAG, AsmReadApplicationRegisterEflag},\r
+ {IPF_APPLICATION_REGISTER_CSD, AsmReadApplicationRegisterCsd},\r
+ {IPF_APPLICATION_REGISTER_SSD, AsmReadApplicationRegisterSsd},\r
+ {IPF_APPLICATION_REGISTER_CFLG, AsmReadApplicationRegisterCflg},\r
+ {IPF_APPLICATION_REGISTER_FSR, AsmReadApplicationRegisterFsr},\r
+ {IPF_APPLICATION_REGISTER_FIR, AsmReadApplicationRegisterFir},\r
+ {IPF_APPLICATION_REGISTER_FDR, AsmReadApplicationRegisterFdr},\r
+ {IPF_APPLICATION_REGISTER_CCV, AsmReadApplicationRegisterCcv},\r
+ {IPF_APPLICATION_REGISTER_UNAT, AsmReadApplicationRegisterUnat},\r
+ {IPF_APPLICATION_REGISTER_FPSR, AsmReadApplicationRegisterFpsr},\r
+ {IPF_APPLICATION_REGISTER_ITC, AsmReadApplicationRegisterItc},\r
+ {IPF_APPLICATION_REGISTER_PFS, AsmReadApplicationRegisterPfs},\r
+ {IPF_APPLICATION_REGISTER_LC, AsmReadApplicationRegisterLc},\r
+ {IPF_APPLICATION_REGISTER_EC, AsmReadApplicationRegisterEc}\r
+};\r
+\r
+\r
+/**\r
+ Reads a 64-bit application register.\r
+\r
+ Reads and returns the application register specified by Index. The valid Index valued are defined\r
+ above in "Related Definitions".\r
+ If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.\r
+\r
+ @param Index The index of the application register to read.\r
+\r
+ @return The application register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadApplicationRegister (\r
+ IN UINT64 Index\r
+ )\r
+{\r
+ UINTN Item;\r
+\r
+ for (Item = 0; Item < sizeof (mApplicationRegisterAccessEntries) / sizeof (mApplicationRegisterAccessEntries[0]); Item++) {\r
+ if (mApplicationRegisterAccessEntries[Item].Index == Index) {\r
+ return mApplicationRegisterAccessEntries[Item].Function ();\r
+ }\r
+ }\r
+\r
+ return 0xFFFFFFFFFFFFFFFF;\r
+}\r
--- /dev/null
+/// @file\r
+/// IPF specific application register reading functions\r
+///\r
+/// Copyright (c) 2008, Intel Corporation\r
+/// All rights reserved. This program and the accompanying materials\r
+/// are licensed and made available under the terms and conditions of the BSD License\r
+/// which accompanies this distribution. The full text of the license may be found at\r
+/// http://opensource.org/licenses/bsd-license.php\r
+///\r
+/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+///\r
+///\r
+///\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK0, @function\r
+.proc AsmReadApplicationRegisterK0\r
+//\r
+// Reads appplication register K0.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K0\r
+//\r
+// @return The 64-bit application register K0.\r
+//\r
+AsmReadApplicationRegisterK0::\r
+ mov r8 = ar.k0;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK0\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK1, @function\r
+.proc AsmReadApplicationRegisterK1\r
+//\r
+// Reads appplication register K1.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K1\r
+//\r
+// @return The 64-bit application register K1.\r
+//\r
+AsmReadApplicationRegisterK1::\r
+ mov r8 = ar.k1;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK1\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK2, @function\r
+.proc AsmReadApplicationRegisterK2\r
+//\r
+// Reads appplication register K2.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K2\r
+//\r
+// @return The 64-bit application register K2.\r
+//\r
+AsmReadApplicationRegisterK2::\r
+ mov r8 = ar.k2;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK2\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK3, @function\r
+.proc AsmReadApplicationRegisterK3\r
+//\r
+// Reads appplication register K3.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K3\r
+//\r
+// @return The 64-bit application register K3.\r
+//\r
+AsmReadApplicationRegisterK3::\r
+ mov r8 = ar.k3;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK3\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK4, @function\r
+.proc AsmReadApplicationRegisterK4\r
+//\r
+// Reads appplication register K4.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K4\r
+//\r
+// @return The 64-bit application register K4.\r
+//\r
+AsmReadApplicationRegisterK4::\r
+ mov r8 = ar.k4;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK4\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK5, @function\r
+.proc AsmReadApplicationRegisterK5\r
+//\r
+// Reads appplication register K5.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K5\r
+//\r
+// @return The 64-bit application register K5.\r
+//\r
+AsmReadApplicationRegisterK5::\r
+ mov r8 = ar.k5;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK5\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK6, @function\r
+.proc AsmReadApplicationRegisterK6\r
+//\r
+// Reads appplication register K6.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K6\r
+//\r
+// @return The 64-bit application register K6.\r
+//\r
+AsmReadApplicationRegisterK6::\r
+ mov r8 = ar.k6;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK6\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterK7, @function\r
+.proc AsmReadApplicationRegisterK7\r
+//\r
+// Reads appplication register K7.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_K7\r
+//\r
+// @return The 64-bit application register K7.\r
+//\r
+AsmReadApplicationRegisterK7::\r
+ mov r8 = ar.k7;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterK7\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterRsc, @function\r
+.proc AsmReadApplicationRegisterRsc\r
+//\r
+// Reads appplication register RSC.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_RSC\r
+//\r
+// @return The 64-bit application register RSC.\r
+//\r
+AsmReadApplicationRegisterRsc::\r
+ mov r8 = ar.rsc;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterRsc\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterBsp, @function\r
+.proc AsmReadApplicationRegisterBsp\r
+//\r
+// Reads appplication register BSP.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_BSP\r
+//\r
+// @return The 64-bit application register BSP.\r
+//\r
+AsmReadApplicationRegisterBsp::\r
+ mov r8 = ar.bsp;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterBsp\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterBspstore, @function\r
+.proc AsmReadApplicationRegisterBspstore\r
+//\r
+// Reads appplication register BSPSTORE.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_BSPSTORE\r
+//\r
+// @return The 64-bit application register BSPSTORE.\r
+//\r
+AsmReadApplicationRegisterBspstore::\r
+ mov r8 = ar.bspstore;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterBspstore\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterRnat, @function\r
+.proc AsmReadApplicationRegisterRnat\r
+//\r
+// Reads appplication register RNAT.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_RNAT\r
+//\r
+// @return The 64-bit application register RNAT.\r
+//\r
+AsmReadApplicationRegisterRnat::\r
+ mov r8 = ar.rnat;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterRnat\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterFcr, @function\r
+.proc AsmReadApplicationRegisterFcr\r
+//\r
+// Reads appplication register FCR.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_FCR\r
+//\r
+// @return The 64-bit application register FCR.\r
+//\r
+AsmReadApplicationRegisterFcr::\r
+ mov r8 = ar.fcr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterFcr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterEflag, @function\r
+.proc AsmReadApplicationRegisterEflag\r
+//\r
+// Reads appplication register EFLAG.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_EFLAG\r
+//\r
+// @return The 64-bit application register EFLAG.\r
+//\r
+AsmReadApplicationRegisterEflag::\r
+ mov r8 = ar.eflag;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterEflag\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterCsd, @function\r
+.proc AsmReadApplicationRegisterCsd\r
+//\r
+// Reads appplication register CSD.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_CSD\r
+//\r
+// @return The 64-bit application register CSD.\r
+//\r
+AsmReadApplicationRegisterCsd::\r
+ mov r8 = ar.csd;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterCsd\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterSsd, @function\r
+.proc AsmReadApplicationRegisterSsd\r
+//\r
+// Reads appplication register SSD.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_SSD\r
+//\r
+// @return The 64-bit application register SSD.\r
+//\r
+AsmReadApplicationRegisterSsd::\r
+ mov r8 = ar.ssd;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterSsd\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterCflg, @function\r
+.proc AsmReadApplicationRegisterCflg\r
+//\r
+// Reads appplication register CFLG.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_CFLG\r
+//\r
+// @return The 64-bit application register CFLG.\r
+//\r
+AsmReadApplicationRegisterCflg::\r
+ mov r8 = ar.cflg;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterCflg\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterFsr, @function\r
+.proc AsmReadApplicationRegisterFsr\r
+//\r
+// Reads appplication register FSR.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_FSR\r
+//\r
+// @return The 64-bit application register FSR.\r
+//\r
+AsmReadApplicationRegisterFsr::\r
+ mov r8 = ar.fsr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterFsr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterFir, @function\r
+.proc AsmReadApplicationRegisterFir\r
+//\r
+// Reads appplication register FIR.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_FIR\r
+//\r
+// @return The 64-bit application register FIR.\r
+//\r
+AsmReadApplicationRegisterFir::\r
+ mov r8 = ar.fir;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterFir\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterFdr, @function\r
+.proc AsmReadApplicationRegisterFdr\r
+//\r
+// Reads appplication register FDR.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_FDR\r
+//\r
+// @return The 64-bit application register FDR.\r
+//\r
+AsmReadApplicationRegisterFdr::\r
+ mov r8 = ar.fdr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterFdr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterCcv, @function\r
+.proc AsmReadApplicationRegisterCcv\r
+//\r
+// Reads appplication register CCV.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_CCV\r
+//\r
+// @return The 64-bit application register CCV.\r
+//\r
+AsmReadApplicationRegisterCcv::\r
+ mov r8 = ar.ccv;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterCcv\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterUnat, @function\r
+.proc AsmReadApplicationRegisterUnat\r
+//\r
+// Reads appplication register UNAT.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_UNAT\r
+//\r
+// @return The 64-bit application register UNAT.\r
+//\r
+AsmReadApplicationRegisterUnat::\r
+ mov r8 = ar.unat;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterUnat\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterFpsr, @function\r
+.proc AsmReadApplicationRegisterFpsr\r
+//\r
+// Reads appplication register FPSR.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_FPSR\r
+//\r
+// @return The 64-bit application register FPSR.\r
+//\r
+AsmReadApplicationRegisterFpsr::\r
+ mov r8 = ar.fpsr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterFpsr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterItc, @function\r
+.proc AsmReadApplicationRegisterItc\r
+//\r
+// Reads appplication register ITC.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_ITC\r
+//\r
+// @return The 64-bit application register ITC.\r
+//\r
+AsmReadApplicationRegisterItc::\r
+ mov r8 = ar.itc;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterItc\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterPfs, @function\r
+.proc AsmReadApplicationRegisterPfs\r
+//\r
+// Reads appplication register PFS.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_PFS\r
+//\r
+// @return The 64-bit application register PFS.\r
+//\r
+AsmReadApplicationRegisterPfs::\r
+ mov r8 = ar.pfs;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterPfs\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterLc, @function\r
+.proc AsmReadApplicationRegisterLc\r
+//\r
+// Reads appplication register LC.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_LC\r
+//\r
+// @return The 64-bit application register LC.\r
+//\r
+AsmReadApplicationRegisterLc::\r
+ mov r8 = ar.lc;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterLc\r
+\r
+\r
+\r
+.text\r
+.type AsmReadApplicationRegisterEc, @function\r
+.proc AsmReadApplicationRegisterEc\r
+//\r
+// Reads appplication register EC.\r
+//\r
+// This is a worker function for AsmReadApplicationRegister()\r
+// when its parameter Index is IPF_APPLICATION_REGISTER_EC\r
+//\r
+// @return The 64-bit application register EC.\r
+//\r
+AsmReadApplicationRegisterEc::\r
+ mov r8 = ar.ec;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadApplicationRegisterEc\r
+\r
--- /dev/null
+/** @file\r
+ Implementation of Control Register reading functions on Itanium platform.\r
+\r
+ Copyright (c) 2008, Intel Corporation<BR>\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include "BaseLibInternals.h"\r
+\r
+\r
+//\r
+// Loop up table for Index and corresponding control register access routines. \r
+//\r
+GLOBAL_REMOVE_IF_UNREFERENCED REGISTER_ENTRY mControlRegisterAccessEntries[] = {\r
+ {IPF_CONTROL_REGISTER_DCR, AsmReadControlRegisterDcr},\r
+ {IPF_CONTROL_REGISTER_ITM, AsmReadControlRegisterItm},\r
+ {IPF_CONTROL_REGISTER_IVA, AsmReadControlRegisterIva},\r
+ {IPF_CONTROL_REGISTER_PTA, AsmReadControlRegisterPta},\r
+ {IPF_CONTROL_REGISTER_IPSR, AsmReadControlRegisterIpsr},\r
+ {IPF_CONTROL_REGISTER_ISR, AsmReadControlRegisterIsr},\r
+ {IPF_CONTROL_REGISTER_IIP, AsmReadControlRegisterIip},\r
+ {IPF_CONTROL_REGISTER_IFA, AsmReadControlRegisterIfa},\r
+ {IPF_CONTROL_REGISTER_ITIR, AsmReadControlRegisterItir},\r
+ {IPF_CONTROL_REGISTER_IIPA, AsmReadControlRegisterIipa},\r
+ {IPF_CONTROL_REGISTER_IFS, AsmReadControlRegisterIfs},\r
+ {IPF_CONTROL_REGISTER_IIM, AsmReadControlRegisterIim},\r
+ {IPF_CONTROL_REGISTER_IHA, AsmReadControlRegisterIha},\r
+ {IPF_CONTROL_REGISTER_LID, AsmReadControlRegisterLid},\r
+ {IPF_CONTROL_REGISTER_IVR, AsmReadControlRegisterIvr},\r
+ {IPF_CONTROL_REGISTER_TPR, AsmReadControlRegisterTpr},\r
+ {IPF_CONTROL_REGISTER_EOI, AsmReadControlRegisterEoi},\r
+ {IPF_CONTROL_REGISTER_IRR0, AsmReadControlRegisterIrr0},\r
+ {IPF_CONTROL_REGISTER_IRR1, AsmReadControlRegisterIrr1},\r
+ {IPF_CONTROL_REGISTER_IRR2, AsmReadControlRegisterIrr2},\r
+ {IPF_CONTROL_REGISTER_IRR3, AsmReadControlRegisterIrr3},\r
+ {IPF_CONTROL_REGISTER_ITV, AsmReadControlRegisterItv},\r
+ {IPF_CONTROL_REGISTER_PMV, AsmReadControlRegisterPmv},\r
+ {IPF_CONTROL_REGISTER_CMCV, AsmReadControlRegisterCmcv},\r
+ {IPF_CONTROL_REGISTER_LRR0, AsmReadControlRegisterLrr0},\r
+ {IPF_CONTROL_REGISTER_LRR1, AsmReadControlRegisterLrr1}\r
+};\r
+\r
+\r
+/**\r
+ Reads a 64-bit control register.\r
+\r
+ Reads and returns the control register specified by Index. The valid Index valued are defined\r
+ above in "Related Definitions".\r
+ If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.\r
+\r
+ @param Index The index of the control register to read.\r
+\r
+ @return The control register specified by Index.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+AsmReadControlRegister (\r
+ IN UINT64 Index\r
+ )\r
+{\r
+ UINTN Item;\r
+\r
+ for (Item = 0; Item < sizeof (mControlRegisterAccessEntries) / sizeof (mControlRegisterAccessEntries[0]); Item++) {\r
+ if (mControlRegisterAccessEntries[Item].Index == Index) {\r
+ return mControlRegisterAccessEntries[Item].Function ();\r
+ }\r
+ }\r
+\r
+ return 0xFFFFFFFFFFFFFFFF;\r
+}\r
--- /dev/null
+/// @file\r
+/// IPF specific control register reading functions\r
+///\r
+/// Copyright (c) 2008, Intel Corporation\r
+/// All rights reserved. This program and the accompanying materials\r
+/// are licensed and made available under the terms and conditions of the BSD License\r
+/// which accompanies this distribution. The full text of the license may be found at\r
+/// http://opensource.org/licenses/bsd-license.php\r
+///\r
+/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+///\r
+///\r
+///\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterDcr, @function\r
+.proc AsmReadControlRegisterDcr\r
+//\r
+// Reads control register DCR.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_DCR\r
+//\r
+// @return The 64-bit control register DCR.\r
+//\r
+AsmReadControlRegisterDcr::\r
+ mov r8 = cr.dcr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterDcr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterItm, @function\r
+.proc AsmReadControlRegisterItm\r
+//\r
+// Reads control register ITM.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_ITM\r
+//\r
+// @return The 64-bit control register ITM.\r
+//\r
+AsmReadControlRegisterItm::\r
+ mov r8 = cr.itm;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterItm\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIva, @function\r
+.proc AsmReadControlRegisterIva\r
+//\r
+// Reads control register IVA.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IVA\r
+//\r
+// @return The 64-bit control register IVA.\r
+//\r
+AsmReadControlRegisterIva::\r
+ mov r8 = cr.iva;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIva\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterPta, @function\r
+.proc AsmReadControlRegisterPta\r
+//\r
+// Reads control register PTA.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_PTA\r
+//\r
+// @return The 64-bit control register PTA.\r
+//\r
+AsmReadControlRegisterPta::\r
+ mov r8 = cr.pta;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterPta\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIpsr, @function\r
+.proc AsmReadControlRegisterIpsr\r
+//\r
+// Reads control register IPSR.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IPSR\r
+//\r
+// @return The 64-bit control register IPSR.\r
+//\r
+AsmReadControlRegisterIpsr::\r
+ mov r8 = cr.ipsr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIpsr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIsr, @function\r
+.proc AsmReadControlRegisterIsr\r
+//\r
+// Reads control register ISR.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_ISR\r
+//\r
+// @return The 64-bit control register ISR.\r
+//\r
+AsmReadControlRegisterIsr::\r
+ mov r8 = cr.isr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIsr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIip, @function\r
+.proc AsmReadControlRegisterIip\r
+//\r
+// Reads control register IIP.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IIP\r
+//\r
+// @return The 64-bit control register IIP.\r
+//\r
+AsmReadControlRegisterIip::\r
+ mov r8 = cr.iip;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIip\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIfa, @function\r
+.proc AsmReadControlRegisterIfa\r
+//\r
+// Reads control register IFA.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IFA\r
+//\r
+// @return The 64-bit control register IFA.\r
+//\r
+AsmReadControlRegisterIfa::\r
+ mov r8 = cr.ifa;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIfa\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterItir, @function\r
+.proc AsmReadControlRegisterItir\r
+//\r
+// Reads control register ITIR.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_ITIR\r
+//\r
+// @return The 64-bit control register ITIR.\r
+//\r
+AsmReadControlRegisterItir::\r
+ mov r8 = cr.itir;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterItir\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIipa, @function\r
+.proc AsmReadControlRegisterIipa\r
+//\r
+// Reads control register IIPA.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IIPA\r
+//\r
+// @return The 64-bit control register IIPA.\r
+//\r
+AsmReadControlRegisterIipa::\r
+ mov r8 = cr.iipa;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIipa\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIfs, @function\r
+.proc AsmReadControlRegisterIfs\r
+//\r
+// Reads control register IFS.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IFS\r
+//\r
+// @return The 64-bit control register IFS.\r
+//\r
+AsmReadControlRegisterIfs::\r
+ mov r8 = cr.ifs;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIfs\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIim, @function\r
+.proc AsmReadControlRegisterIim\r
+//\r
+// Reads control register IIM.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IIM\r
+//\r
+// @return The 64-bit control register IIM.\r
+//\r
+AsmReadControlRegisterIim::\r
+ mov r8 = cr.iim;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIim\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIha, @function\r
+.proc AsmReadControlRegisterIha\r
+//\r
+// Reads control register IHA.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IHA\r
+//\r
+// @return The 64-bit control register IHA.\r
+//\r
+AsmReadControlRegisterIha::\r
+ mov r8 = cr.iha;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIha\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterLid, @function\r
+.proc AsmReadControlRegisterLid\r
+//\r
+// Reads control register LID.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_LID\r
+//\r
+// @return The 64-bit control register LID.\r
+//\r
+AsmReadControlRegisterLid::\r
+ mov r8 = cr.lid;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterLid\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIvr, @function\r
+.proc AsmReadControlRegisterIvr\r
+//\r
+// Reads control register IVR.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IVR\r
+//\r
+// @return The 64-bit control register IVR.\r
+//\r
+AsmReadControlRegisterIvr::\r
+ mov r8 = cr.ivr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIvr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterTpr, @function\r
+.proc AsmReadControlRegisterTpr\r
+//\r
+// Reads control register TPR.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_TPR\r
+//\r
+// @return The 64-bit control register TPR.\r
+//\r
+AsmReadControlRegisterTpr::\r
+ mov r8 = cr.tpr;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterTpr\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterEoi, @function\r
+.proc AsmReadControlRegisterEoi\r
+//\r
+// Reads control register EOI.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_EOI\r
+//\r
+// @return The 64-bit control register EOI.\r
+//\r
+AsmReadControlRegisterEoi::\r
+ mov r8 = cr.eoi;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterEoi\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIrr0, @function\r
+.proc AsmReadControlRegisterIrr0\r
+//\r
+// Reads control register IRR0.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IRR0\r
+//\r
+// @return The 64-bit control register IRR0.\r
+//\r
+AsmReadControlRegisterIrr0::\r
+ mov r8 = cr.irr0;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIrr0\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIrr1, @function\r
+.proc AsmReadControlRegisterIrr1\r
+//\r
+// Reads control register IRR1.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IRR1\r
+//\r
+// @return The 64-bit control register IRR1.\r
+//\r
+AsmReadControlRegisterIrr1::\r
+ mov r8 = cr.irr1;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIrr1\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIrr2, @function\r
+.proc AsmReadControlRegisterIrr2\r
+//\r
+// Reads control register IRR2.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IRR2\r
+//\r
+// @return The 64-bit control register IRR2.\r
+//\r
+AsmReadControlRegisterIrr2::\r
+ mov r8 = cr.irr2;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIrr2\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterIrr3, @function\r
+.proc AsmReadControlRegisterIrr3\r
+//\r
+// Reads control register IRR3.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_IRR3\r
+//\r
+// @return The 64-bit control register IRR3.\r
+//\r
+AsmReadControlRegisterIrr3::\r
+ mov r8 = cr.irr3;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterIrr3\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterItv, @function\r
+.proc AsmReadControlRegisterItv\r
+//\r
+// Reads control register ITV.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_ITV\r
+//\r
+// @return The 64-bit control register ITV.\r
+//\r
+AsmReadControlRegisterItv::\r
+ mov r8 = cr.itv;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterItv\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterPmv, @function\r
+.proc AsmReadControlRegisterPmv\r
+//\r
+// Reads control register PMV.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_PMV\r
+//\r
+// @return The 64-bit control register PMV.\r
+//\r
+AsmReadControlRegisterPmv::\r
+ mov r8 = cr.pmv;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterPmv\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterCmcv, @function\r
+.proc AsmReadControlRegisterCmcv\r
+//\r
+// Reads control register CMCV.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_CMCV\r
+//\r
+// @return The 64-bit control register CMCV.\r
+//\r
+AsmReadControlRegisterCmcv::\r
+ mov r8 = cr.cmcv;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterCmcv\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterLrr0, @function\r
+.proc AsmReadControlRegisterLrr0\r
+//\r
+// Reads control register LRR0.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_LRR0\r
+//\r
+// @return The 64-bit control register LRR0.\r
+//\r
+AsmReadControlRegisterLrr0::\r
+ mov r8 = cr.lrr0;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterLrr0\r
+\r
+\r
+\r
+.text\r
+.type AsmReadControlRegisterLrr1, @function\r
+.proc AsmReadControlRegisterLrr1\r
+//\r
+// Reads control register LRR1.\r
+//\r
+// This is a worker function for AsmReadControlRegister()\r
+// when its parameter Index is IPF_CONTROL_REGISTER_LRR1\r
+//\r
+// @return The 64-bit control register LRR1.\r
+//\r
+AsmReadControlRegisterLrr1::\r
+ mov r8 = cr.lrr1;;\r
+ br.ret.dpnt b0;;\r
+.endp AsmReadControlRegisterLrr1\r
+\r