]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. Removal PalCallStatic API
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 27 Nov 2008 06:48:03 +0000 (06:48 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 27 Nov 2008 06:48:03 +0000 (06:48 +0000)
2. Two two new ReadApplicationRegister.c(), ReadControlRegister.c() API together with its related definitions in BaseLib.h
3. Remove prototype of AsmSwitchStackAndBackingStore() in public BaseLib.h, it is supposed to be a worker function for AsmSwitchStack()

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6757 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Include/Library/BaseLib.h
MdePkg/Library/BaseLib/BaseLib.inf
MdePkg/Library/BaseLib/BaseLibInternals.h
MdePkg/Library/BaseLib/Ipf/PalCallStatic.s [deleted file]
MdePkg/Library/BaseLib/Ipf/ReadApplicationRegister.c [new file with mode: 0644]
MdePkg/Library/BaseLib/Ipf/ReadAr.s [new file with mode: 0644]
MdePkg/Library/BaseLib/Ipf/ReadControlRegister.c [new file with mode: 0644]
MdePkg/Library/BaseLib/Ipf/ReadCr.s [new file with mode: 0644]

index 2ea6b6194ee6fa149a0c981e419c597def467a13..5c569ce78ae40eb26106db87a07f3738bdeea207 100644 (file)
@@ -4841,6 +4841,105 @@ AsmReadSp (
   );\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
@@ -4905,67 +5004,6 @@ AsmPalCall (
   );\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
index 85b7433afff742d0c6e34984c26464a40568f8bd..3a38f2ba1cac3360a27a857d4a5eb58382718f11 100644 (file)
   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
index b39f2df9277adb97ada1dc6452458e6d9b8c4ccd..431c1e3533c09a7143e1dd1d34b9ad7193645dd6 100644 (file)
@@ -828,6 +828,865 @@ InternalX86DisablePaging64 (
 // 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
diff --git a/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s b/MdePkg/Library/BaseLib/Ipf/PalCallStatic.s
deleted file mode 100644 (file)
index c21d742..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/// @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
diff --git a/MdePkg/Library/BaseLib/Ipf/ReadApplicationRegister.c b/MdePkg/Library/BaseLib/Ipf/ReadApplicationRegister.c
new file mode 100644 (file)
index 0000000..818e6ac
--- /dev/null
@@ -0,0 +1,79 @@
+/** @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
diff --git a/MdePkg/Library/BaseLib/Ipf/ReadAr.s b/MdePkg/Library/BaseLib/Ipf/ReadAr.s
new file mode 100644 (file)
index 0000000..5622526
--- /dev/null
@@ -0,0 +1,501 @@
+/// @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
diff --git a/MdePkg/Library/BaseLib/Ipf/ReadControlRegister.c b/MdePkg/Library/BaseLib/Ipf/ReadControlRegister.c
new file mode 100644 (file)
index 0000000..a3a8e11
--- /dev/null
@@ -0,0 +1,78 @@
+/** @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
diff --git a/MdePkg/Library/BaseLib/Ipf/ReadCr.s b/MdePkg/Library/BaseLib/Ipf/ReadCr.s
new file mode 100644 (file)
index 0000000..839ea6f
--- /dev/null
@@ -0,0 +1,482 @@
+/// @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