Home | History | Annotate | Download | only in Ipf
      1 /// @file
      2 ///  IPF specific Global Control Registers accessing functions
      3 ///
      4 /// Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
      5 /// This program and the accompanying materials
      6 /// are licensed and made available under the terms and conditions of the BSD License
      7 /// which accompanies this distribution.  The full text of the license may be found at
      8 /// http://opensource.org/licenses/bsd-license.php.
      9 ///
     10 /// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 /// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 ///
     13 /// Module Name: AccessGcr.s
     14 ///
     15 ///
     16 
     17 //---------------------------------------------------------------------------------
     18 //++
     19 // AsmReadDcr
     20 //
     21 // This routine is used to Read the value of Default Control Register (DCR).
     22 //
     23 // Arguments :
     24 //
     25 // On Entry :
     26 //
     27 // Return Value: The current value of DCR.
     28 //
     29 //--
     30 //----------------------------------------------------------------------------------
     31 .text
     32 .type   AsmReadDcr, @function
     33 .proc   AsmReadDcr
     34 
     35 AsmReadDcr::
     36          mov            r8 = cr.dcr;;
     37          br.ret.dpnt    b0;;
     38 .endp    AsmReadDcr
     39 
     40 //---------------------------------------------------------------------------------
     41 //++
     42 // AsmWriteDcr
     43 //
     44 // This routine is used to write the value to Default Control Register (DCR).
     45 //
     46 // Arguments :
     47 //
     48 // On Entry : The value need to be written to DCR
     49 //
     50 // Return Value: The value written to DCR.
     51 //
     52 //--
     53 //----------------------------------------------------------------------------------
     54 .text
     55 .type   AsmWriteDcr, @function
     56 .proc   AsmWriteDcr
     57 .regstk 1, 0, 0, 0
     58 
     59 AsmWriteDcr::
     60          mov            cr.dcr = in0
     61          mov            r8 = in0;;
     62          srlz.i;;
     63          srlz.d;;
     64          br.ret.dpnt    b0;;
     65 .endp    AsmWriteDcr
     66 
     67 
     68 //---------------------------------------------------------------------------------
     69 //++
     70 // AsmReadItc
     71 //
     72 // This routine is used to Read the value of Interval Timer Counter Register (ITC).
     73 //
     74 // Arguments :
     75 //
     76 // On Entry :
     77 //
     78 // Return Value: The current value of ITC.
     79 //
     80 //--
     81 //----------------------------------------------------------------------------------
     82 .text
     83 .type   AsmReadItc, @function
     84 .proc   AsmReadItc
     85 
     86 AsmReadItc::
     87          mov            r8 = ar.itc;;
     88          br.ret.dpnt    b0;;
     89 .endp    AsmReadItc
     90 
     91 //---------------------------------------------------------------------------------
     92 //++
     93 // AsmWriteItc
     94 //
     95 // This routine is used to write the value to Interval Timer Counter Register (ITC).
     96 //
     97 // Arguments :
     98 //
     99 // On Entry : The value need to be written to the ITC
    100 //
    101 // Return Value: The value written to the ITC.
    102 //
    103 //--
    104 //----------------------------------------------------------------------------------
    105 .text
    106 .type   AsmWriteItc, @function
    107 .proc   AsmWriteItc
    108 .regstk 1, 0, 0, 0
    109 
    110 AsmWriteItc::
    111          mov            ar.itc = in0
    112          mov            r8 = in0;;
    113          br.ret.dpnt    b0;;
    114 .endp    AsmWriteItc
    115 
    116 
    117 //---------------------------------------------------------------------------------
    118 //++
    119 // AsmReadItm
    120 //
    121 // This routine is used to Read the value of Interval Timer Match Register (ITM).
    122 //
    123 // Arguments :
    124 //
    125 // On Entry :
    126 //
    127 // Return Value: The current value of ITM.
    128 //
    129 //--
    130 //----------------------------------------------------------------------------------
    131 .text
    132 .type   AsmReadItm, @function
    133 .proc   AsmReadItm
    134 
    135 AsmReadItm::
    136          mov            r8 = cr.itm;;
    137          br.ret.dpnt    b0;;
    138 .endp    AsmReadItm
    139 
    140 //---------------------------------------------------------------------------------
    141 //++
    142 // AsmWriteItm
    143 //
    144 // This routine is used to write the value to Interval Timer Match Register (ITM).
    145 //
    146 // Arguments :
    147 //
    148 // On Entry : The value need to be written to ITM
    149 //
    150 // Return Value: The value written to ITM.
    151 //
    152 //--
    153 //----------------------------------------------------------------------------------
    154 .text
    155 .type   AsmWriteItm, @function
    156 .proc   AsmWriteItm
    157 .regstk 1, 0, 0, 0
    158 
    159 AsmWriteItm::
    160          mov            cr.itm = in0
    161          mov            r8 = in0;;
    162          srlz.d;
    163          br.ret.dpnt    b0;;
    164 .endp    AsmWriteItm
    165 
    166 
    167 //---------------------------------------------------------------------------------
    168 //++
    169 // AsmReadIva
    170 //
    171 // This routine is used to read the value of Interruption Vector Address Register (IVA).
    172 //
    173 // Arguments :
    174 //
    175 // On Entry :
    176 //
    177 // Return Value: The current value of IVA.
    178 //
    179 //--
    180 //----------------------------------------------------------------------------------
    181 .text
    182 .type   AsmReadIva, @function
    183 .proc   AsmReadIva
    184 
    185 AsmReadIva::
    186          mov            r8 = cr.iva;;
    187          br.ret.dpnt    b0;;
    188 .endp    AsmReadIva
    189 
    190 //---------------------------------------------------------------------------------
    191 //++
    192 // AsmWriteIva
    193 //
    194 // This routine is used to write the value to Interruption Vector Address Register (IVA).
    195 //
    196 // Arguments :
    197 //
    198 // On Entry : The value need to be written to IVA
    199 //
    200 // Return Value: The value written to IVA.
    201 //
    202 //--
    203 //----------------------------------------------------------------------------------
    204 .text
    205 .type   AsmWriteIva, @function
    206 .proc   AsmWriteIva
    207 .regstk 1, 3, 0, 0
    208 
    209 AsmWriteIva::
    210         alloc loc1=ar.pfs,1,4,0,0 ;;
    211 
    212         mov         loc2 = psr
    213         rsm         0x6000                      // Make sure interrupts are masked
    214 
    215         mov            cr.iva = in0
    216         srlz.i;;
    217         mov         psr.l = loc2;;
    218         srlz.i;;
    219         srlz.d;;
    220         mov ar.pfs=loc1 ;;
    221         mov            r8 = in0;;
    222         br.ret.dpnt    b0;;
    223 .endp   AsmWriteIva
    224 
    225 
    226 //---------------------------------------------------------------------------------
    227 //++
    228 // AsmReadPta
    229 //
    230 // This routine is used to read the value of Page Table Address Register (PTA).
    231 //
    232 // Arguments :
    233 //
    234 // On Entry :
    235 //
    236 // Return Value: The current value of PTA.
    237 //
    238 //--
    239 //----------------------------------------------------------------------------------
    240 .text
    241 .type   AsmReadPta, @function
    242 .proc   AsmReadPta
    243 
    244 AsmReadPta::
    245          mov            r8 = cr.pta;;
    246          br.ret.dpnt    b0;;
    247 .endp    AsmReadPta
    248 
    249 //---------------------------------------------------------------------------------
    250 //++
    251 // AsmWritePta
    252 //
    253 // This routine is used to write the value to Page Table Address Register (PTA)).
    254 //
    255 // Arguments :
    256 //
    257 // On Entry : The value need to be written to PTA
    258 //
    259 // Return Value: The value written to PTA.
    260 //
    261 //--
    262 //----------------------------------------------------------------------------------
    263 .text
    264 .type   AsmWritePta, @function
    265 .proc   AsmWritePta
    266 .regstk 1, 0, 0, 0
    267 
    268 AsmWritePta::
    269          mov            cr.pta = in0
    270          mov            r8 = in0;;
    271          srlz.i;;
    272          srlz.d;;
    273          br.ret.dpnt    b0;;
    274 .endp    AsmWritePta
    275