]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseLib/Ipf/ReadAr.s
Update the copyright notice format
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ipf / ReadAr.s
CommitLineData
aad6137d 1/// @file\r
2/// IPF specific application register reading functions\r
3///\r
bb817c56
HT
4/// Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>\r
5/// This program and the accompanying materials\r
aad6137d 6/// are licensed and made available under the terms and conditions of the BSD License\r
7/// which accompanies this distribution. The full text of the license may be found at\r
8/// http://opensource.org/licenses/bsd-license.php\r
9///\r
10/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12///\r
13///\r
14///\r
15\r
16\r
17\r
59e0bb0c 18//---------------------------------------------------------------------------------\r
19//++\r
20// AsmReadApplicationRegister\r
21//\r
22// Reads a 64-bit application register.\r
23//\r
24// Reads and returns the application register specified by Index.\r
25// If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.\r
26//\r
27// Arguments :\r
28//\r
29// On Entry : The index of the application register to read.\r
30//\r
31// Return Value: The application register specified by Index.\r
32//\r
33//--\r
34//----------------------------------------------------------------------------------\r
35.text\r
36.type AsmReadApplicationRegister, @function\r
37.proc AsmReadApplicationRegister\r
38.regstk 1, 0, 0, 0\r
39\r
40AsmReadApplicationRegister::\r
41 //\r
42 // ARs are defined in the ranges 0-44 and 64-66 (with some holes).\r
43 // Compact this list by subtracting 16 from the top range.\r
44 // 0-44, 64-66 -> 0-44, 48-50\r
45 //\r
46 mov r15=2\r
47 mov r14=pr // save predicates\r
48 cmp.leu p6,p7=64,in0 // p6 = AR# >= 64\r
49 ;;\r
50 (p7) cmp.leu p7,p0=48,in0 // p7 = 32 <= AR# < 64\r
51 (p6) add in0=-16,in0 // if (AR >= 64) AR# -= 16\r
52 ;;\r
53 (p7) mov r15=0 // if bad range (48-63)\r
54 ;;\r
55 mov ret0=-1 // in case of illegal AR #\r
56 shl r15=r15,in0 // r15 = 0x2 << AR#\r
57 ;;\r
58 mov pr=r15,-1\r
59 ;;\r
60 //\r
61 // At this point the predicates contain a bit field of the\r
62 // AR desired. (The bit is the AR+1, since pr0 is always 1.)\r
63 //\r
64 .pred.rel "mutex",p1,p2,p3,p4,p5,p6,p7,p8,p17,p18,p19,p20,p22,p25,\\r
65 p26,p27,p28,p29,p30,p31,p33,p37,p41,p45,p49,p50,p51\r
66 (p1) mov ret0=ar.k0 // ar0\r
67 (p2) mov ret0=ar.k1 // ar1\r
68 (p3) mov ret0=ar.k2 // ar2\r
69 (p4) mov ret0=ar.k3 // ar3\r
70 (p5) mov ret0=ar.k4 // ar4\r
71 (p6) mov ret0=ar.k5 // ar5\r
72 (p7) mov ret0=ar.k6 // ar6\r
73 (p8) mov ret0=ar.k7 // ar7\r
74\r
75 (p17) mov ret0=ar.rsc // ar16\r
76 (p18) mov ret0=ar.bsp // ar17\r
77 (p19) mov ret0=ar.bspstore // ar18\r
78 (p20) mov ret0=ar.rnat // ar19\r
79\r
80 (p22) mov ret0=ar.fcr // ar21 [iA32]\r
81\r
82 (p25) mov ret0=ar.eflag // ar24 [iA32]\r
83 (p26) mov ret0=ar.csd // ar25 [iA32]\r
84 (p27) mov ret0=ar.ssd // ar26 [iA32]\r
85 (p28) mov ret0=ar.cflg // ar27 [iA32]\r
86 (p29) mov ret0=ar.fsr // ar28 [iA32]\r
87 (p30) mov ret0=ar.fir // ar29 [iA32]\r
88 (p31) mov ret0=ar.fdr // ar30 [iA32]\r
89\r
90 (p33) mov ret0=ar.ccv // ar32\r
91\r
92 (p37) mov ret0=ar.unat // ar36\r
93\r
94 (p41) mov ret0=ar.fpsr // ar40\r
95\r
96 (p45) mov ret0=ar.itc // ar44\r
97\r
98 //\r
99 // This is the translated (-16) range.\r
100 //\r
101 (p49) mov ret0=ar.pfs // ar64\r
102 (p50) mov ret0=ar.lc // ar65\r
103 (p51) mov ret0=ar.ec // ar66\r
104\r
105 // Restore predicates and return.\r
106\r
107 mov pr=r14,-1\r
108 br.ret.sptk b0\r
109 .endp\r