Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/asm.S

    rda52547 re4a4b44  
    1 /*
    2  * Copyright (c) 2005 Jakub Jermar
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  *
    9  * - Redistributions of source code must retain the above copyright
    10  *   notice, this list of conditions and the following disclaimer.
    11  * - Redistributions in binary form must reproduce the above copyright
    12  *   notice, this list of conditions and the following disclaimer in the
    13  *   documentation and/or other materials provided with the distribution.
    14  * - The name of the author may not be used to endorse or promote products
    15  *   derived from this software without specific prior written permission.
    16  *
    17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    20  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    27  */
     1#
     2# Copyright (c) 2005 Jakub Jermar
     3# All rights reserved.
     4#
     5# Redistribution and use in source and binary forms, with or without
     6# modification, are permitted provided that the following conditions
     7# are met:
     8#
     9# - Redistributions of source code must retain the above copyright
     10#   notice, this list of conditions and the following disclaimer.
     11# - Redistributions in binary form must reproduce the above copyright
     12#   notice, this list of conditions and the following disclaimer in the
     13#   documentation and/or other materials provided with the distribution.
     14# - The name of the author may not be used to endorse or promote products
     15#   derived from this software without specific prior written permission.
     16#
     17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27#
    2828
    2929#include <arch/register.h>
    3030
    3131.text
    32 .global memcpy
    33 .global memcpy_from_uspace
    34 .global memcpy_to_uspace
    35 .global memcpy_from_uspace_failover_address
    36 .global memcpy_to_uspace_failover_address
    3732
    3833/** Copy memory from/to userspace.
     
    4439 * @param in1 Source address.
    4540 * @param in2 Number of byte to copy.
    46  *
    4741 */
     42.global memcpy
     43.global memcpy_from_uspace
     44.global memcpy_to_uspace
     45.global memcpy_from_uspace_failover_address
     46.global memcpy_to_uspace_failover_address
    4847memcpy:
    4948memcpy_from_uspace:
    5049memcpy_to_uspace:
    5150        alloc loc0 = ar.pfs, 3, 1, 0, 0
    52        
     51
    5352        adds r14 = 7, in1
    5453        mov r2 = ar.lc
     
    5655        and r14 = -8, r14 ;;
    5756        cmp.ne p6, p7 = r14, in1
    58         (p7) br.cond.dpnt 3f ;;
     57(p7)    br.cond.dpnt 3f ;;
     580:
     59        cmp.ne p6, p7 = 0, in2
     60(p7)    br.cond.dpnt 2f ;;
     61(p6)    adds r14 = -1, in2
     62(p6)    mov r16 = r0
     63(p6)    mov r17 = r0 ;;
     64(p6)    mov ar.lc = r14
     651:
     66        add r14 = r16, in1
     67        add r15 = r16, in0
     68        adds r17 = 1, r17 ;;
     69        ld1 r14 = [r14]
     70        mov r16 = r17 ;;
     71        st1 [r15] = r14
     72        br.cloop.sptk.few 1b ;;
     732:
     74        mov ar.lc = r2
     75        mov ar.pfs = loc0
     76        br.ret.sptk.many rp
     773:
     78        adds r14 = 7, in0 ;;
     79        and r14 = -8, r14 ;;
     80        cmp.eq p6, p7 = r14, in0
     81(p7)    br.cond.dptk 0b
     82        shr.u r18 = in2, 3 ;;
     83        cmp.ne p6, p7 = 0, r18
     84(p7)    br.cond.dpnt 5f ;;
     85(p6)    adds r14 = -1, r18
     86(p6)    mov r16 = r0
     87(p6)    mov r17 = r0 ;;
     88(p6)    mov ar.lc = r14
     894:
     90        shladd r14 = r16, 3, r0
     91        adds r16 = 1, r17 ;;
     92        add r15 = in1, r14
     93        add r14 = in0, r14
     94        mov r17 = r16 ;;
     95        ld8 r15 = [r15] ;;
     96        st8 [r14] = r15
     97        br.cloop.sptk.few 4b
     985:
     99        and r15 = 7, in2
     100        shladd r14 = r18, 3, r0
     101        mov r16 = r0
     102        mov r18 = r0 ;;
     103        cmp.eq p6, p7 = 0, r15
     104        add in0 = r14, in0
     105        adds r15 = -1, r15
     106        add r17 = r14, in1
     107(p6)    br.cond.dpnt 2b ;;
     108        mov ar.lc = r15
     1096:
     110        add r14 = r16, r17
     111        add r15 = r16, in0
     112        adds r16 = 1, r18 ;;
     113        ld1 r14 = [r14]
     114        mov r18 = r16 ;;
     115        st1 [r15] = r14
     116        br.cloop.sptk.few 6b ;;
     117        mov ar.lc = r2
     118        mov ar.pfs = loc0
     119        br.ret.sptk.many rp
    59120       
    60         0:
    61        
    62                 cmp.ne p6, p7 = 0, in2
    63                 (p7) br.cond.dpnt 2f ;;
    64                 (p6) adds r14 = -1, in2
    65                 (p6) mov r16 = r0
    66                 (p6) mov r17 = r0 ;;
    67                 (p6) mov ar.lc = r14
    68        
    69         1:
    70        
    71                 add r14 = r16, in1
    72                 add r15 = r16, in0
    73                 adds r17 = 1, r17 ;;
    74                 ld1 r14 = [r14]
    75                 mov r16 = r17 ;;
    76                 st1 [r15] = r14
    77                 br.cloop.sptk.few 1b ;;
    78        
    79         2:
    80        
    81                 mov ar.lc = r2
    82                 mov ar.pfs = loc0
    83                 br.ret.sptk.many rp
    84        
    85         3:
    86        
    87                 adds r14 = 7, in0 ;;
    88                 and r14 = -8, r14 ;;
    89                 cmp.eq p6, p7 = r14, in0
    90                 (p7) br.cond.dptk 0b
    91                 shr.u r18 = in2, 3 ;;
    92                 cmp.ne p6, p7 = 0, r18
    93                 (p7) br.cond.dpnt 5f ;;
    94                 (p6) adds r14 = -1, r18
    95                 (p6) mov r16 = r0
    96                 (p6) mov r17 = r0 ;;
    97                 (p6) mov ar.lc = r14
    98        
    99         4:
    100        
    101                 shladd r14 = r16, 3, r0
    102                 adds r16 = 1, r17 ;;
    103                 add r15 = in1, r14
    104                 add r14 = in0, r14
    105                 mov r17 = r16 ;;
    106                 ld8 r15 = [r15] ;;
    107                 st8 [r14] = r15
    108                 br.cloop.sptk.few 4b
    109        
    110         5:
    111        
    112                 and r15 = 7, in2
    113                 shladd r14 = r18, 3, r0
    114                 mov r16 = r0
    115                 mov r18 = r0 ;;
    116                 cmp.eq p6, p7 = 0, r15
    117                 add in0 = r14, in0
    118                 adds r15 = -1, r15
    119                 add r17 = r14, in1
    120                 (p6) br.cond.dpnt 2b ;;
    121                 mov ar.lc = r15
    122        
    123         6:
    124        
    125                 add r14 = r16, r17
    126                 add r15 = r16, in0
    127                 adds r16 = 1, r18 ;;
    128                 ld1 r14 = [r14]
    129                 mov r18 = r16 ;;
    130                 st1 [r15] = r14
    131                 br.cloop.sptk.few 6b ;;
    132                 mov ar.lc = r2
    133                 mov ar.pfs = loc0
    134                 br.ret.sptk.many rp
    135 
    136121memcpy_from_uspace_failover_address:
    137122memcpy_to_uspace_failover_address:
    138         /* Return 0 on failure */
    139         mov r8 = r0
     123        mov r8 = r0                     /* return 0 on failure */
    140124        mov ar.pfs = loc0
    141125        br.ret.sptk.many rp
     
    161145 * @param in4 Value to be stored in IPSR.
    162146 * @param in5 Value to be stored in RSC.
    163  *
    164147 */
    165148.global switch_to_userspace
    166149switch_to_userspace:
    167150        alloc loc0 = ar.pfs, 6, 3, 0, 0
    168        
    169         /* Disable interruption collection and interrupts */
    170         rsm (PSR_IC_MASK | PSR_I_MASK)
     151        rsm (PSR_IC_MASK | PSR_I_MASK)          /* disable interruption collection and interrupts */
    171152        srlz.d ;;
    172153        srlz.i ;;
     
    175156        mov cr.iip = in0
    176157        mov r12 = in1
    177        
     158
    178159        xor r1 = r1, r1
    179160       
     
    184165        movl loc2 = PFM_MASK ;;
    185166        and loc1 = loc2, loc1 ;;
    186         mov cr.ifs = loc1 ;;  /* prevent decrementing BSP by rfi */
    187        
     167        mov cr.ifs = loc1 ;;                    /* prevent decrementing BSP by rfi */
     168
    188169        invala
    189170       
    190171        mov loc1 = ar.rsc ;;
    191         and loc1 = ~3, loc1 ;;
    192         mov ar.rsc = loc1 ;;  /* put RSE into enforced lazy mode */
    193        
     172        and loc1 = ~3, loc1 ;;                 
     173        mov ar.rsc = loc1 ;;                    /* put RSE into enforced lazy mode */
     174
    194175        flushrs ;;
    195176       
     
    200181       
    201182        rfi ;;
    202 
    203 .global early_putchar
    204 early_putchar:
    205         br.ret.sptk.many b0
Note: See TracChangeset for help on using the changeset viewer.