Changeset ffdfcf0 in mainline


Ignore:
Timestamp:
2006-05-06T12:59:30Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ecf3722
Parents:
c6c59ccd
Message:

Complete implementation of memcpy_from_uspace() and memcpy_to_uspace().
The memcpy() variants are based on the assembler output of the generic
_memcpy().

Location:
arch/ia64
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/include/interrupt.h

    rc6c59ccd rffdfcf0  
    109109static inline void istate_set_retaddr(istate_t *istate, __address retaddr)
    110110{
    111         /* TODO */
     111        istate->cr_iip = retaddr;
     112        istate->cr_ipsr.ri = 0;         /* return to instruction slot #0 */
    112113}
    113114
  • arch/ia64/src/asm.S

    rc6c59ccd rffdfcf0  
    3333/** Copy memory from/to userspace.
    3434 *
     35 * This memcpy() has been taken from the assembler output of
     36 * the generic _memcpy() and modified to have the failover part.
     37 *
    3538 * @param in0 Destination address.
    3639 * @param in1 Source address.
     
    4548memcpy_from_uspace:
    4649memcpy_to_uspace:
    47         br _memcpy
     50        alloc loc0 = ar.pfs, 3, 1, 0, 0
     51
     52        shr.u r18 = in2, 3
     53        mov r8 = in1 ;;                 /* prepare to return in1 on success */
     54        cmp.ne p6, p7 = 0, r18  ;;
     55(p7)    mov r17 = r0
     56(p7)    br.cond.dptk 1f ;;
     57        mov r16 = r0
     58        mov r17 = r0 ;;
     59
     600:
     61        shladd r14 = r17, 3, r0
     62        adds r16 = 1, r16 ;;
     63        add r15 = r14, r8
     64        sxt4 r17 = r16
     65        add r14 = r14, in0 ;;
     66        ld8 r15 = [r15]
     67        cmp.gtu p6, p7 = r18, r17 ;;
     68        st8 [r14] = r15
     69(p6)    br.cond.dptk 0b
     70
     711:
     72        and in2 = 7, in2 ;;
     73        cmp.eq p6, p7 = 0, in2 ;;
     74(p6)    mov ar.pfs = loc0
     75(p6)    br.ret.dptk.many rp
     76        shladd r14 = r17, 3, r0
     77        mov r16 = r0
     78        mov r17 = r0 ;;
     79        add in0 = in0, r14
     80        add r18 = r8, r14 ;;
     81
     822:
     83        add r14 = r16, r18
     84        adds r17 = 1, r17
     85        add r15 = in0, r16 ;;
     86        ld1 r14 = [r14]
     87        sxt4 r16 = r17  ;;
     88        st1 [r15] = r14
     89        cmp.gtu p6, p7 = in2, r16
     90(p6)    br.cond.dptk 2b
     91
     92        mov ar.pfs = loc0
     93        br.ret.sptk.many rp
    4894       
    4995memcpy_from_uspace_failover_address:
    5096memcpy_to_uspace_failover_address:
    51         br memcpy_from_uspace_failover_address
     97        mov r8 = r0                     /* return 0 on failure */
     98        mov ar.pfs = loc0
     99        br.ret.sptk.many rp
    52100
    53101.global memsetb
Note: See TracChangeset for help on using the changeset viewer.