Changeset f58af46 in mainline


Ignore:
Timestamp:
2006-05-05T15:14:34Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c6c59ccd
Parents:
e8194664
Message:

Implemented mips memcpy (copy from gcc builtin memcpy).

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • arch/mips32/include/exception.h

    re8194664 rf58af46  
    9696static inline void istate_set_retaddr(istate_t *istate, __address retaddr)
    9797{
    98         /* TODO */
     98        istate->epc = retaddr;
    9999}
    100100
  • arch/mips32/src/asm.S

    re8194664 rf58af46  
    6767memcpy_from_uspace:
    6868memcpy_to_uspace:
    69         j _memcpy
    70         nop
     69        srl     $t1,$a2,0x2
     70        beqz    $t1,1f
     71        move    $t0,$zero
     72        move    $a3,$zero
     732:     
     74        addu    $v0,$a1,$a3
     75        lw      $v1,0($v0)
     76        addiu   $t0,$t0,1
     77        addu    $v0,$a0,$a3
     78        sw      $v1,0($v0)
     79        bne     $t0,$t1,2b
     80        addiu   $a3,$a3,4
     811:     
     82        andi    $a2,$a2,0x3
     83        beqz    $a2,3f
     84        move    $a3,$zero
     85        sll     $v0,$t0,0x2
     86        addu    $t1,$a0,$v0
     87        addu    $t0,$v0,$a1
     884:     
     89        addu    $v0,$t0,$a3
     90        lbu     $a0,0($v0)
     91        addu    $v1,$t1,$a3
     92        addiu   $a3,$a3,1
     93        bne     $a3,$a2,4b
     94        sb      $a0,0($v1)
     953:     
     96        jr      $ra
     97        move    $v0,$a1
    7198
    7299memcpy_from_uspace_failover_address:
    73100memcpy_to_uspace_failover_address:
    74         j memcpy_from_uspace_failover_address
    75         nop
     101        jr      $ra
     102        move    $v0, $zero
    76103
    77104
  • arch/mips32/src/start.S

    re8194664 rf58af46  
    285285        add $sp, $k0, 0
    286286
     287        jal tlb_refill /* tlb_refill(register_space) */
    287288        add $a0, $sp, 0
    288         jal tlb_refill /* tlb_refill(register_space) */
    289         nop
    290289
    291290        REGISTERS_LOAD $sp
  • generic/include/syscall/copy.h

    re8194664 rf58af46  
    3838extern char memcpy_to_uspace_failover_address;
    3939
    40 extern int copy_from_uspace(void *dst, void *uspace_src, size_t size);
    41 extern int copy_to_uspace(void *dst_uspace, void *src, size_t size);
     40extern int copy_from_uspace(void *dst, const void *uspace_src, size_t size);
     41extern int copy_to_uspace(void *dst_uspace, const void *src, size_t size);
    4242
    4343/*
    4444 * This interface must be implemented by each architecture.
    4545 */
    46 extern int memcpy_from_uspace(void *dst, void *uspace_src, size_t size);
    47 extern int memcpy_to_uspace(void *uspace_dst, void *src, size_t size);
     46extern int memcpy_from_uspace(void *dst, const void *uspace_src, size_t size);
     47extern int memcpy_to_uspace(void *uspace_dst, const void *src, size_t size);
    4848
    4949#endif
  • generic/src/ipc/sysipc.c

    re8194664 rf58af46  
    309309        call = ipc_call_alloc(0);
    310310        rc = copy_from_uspace(&call->data.args, &data->args, sizeof(call->data.args));
    311         if (rc != 0)
     311        if (rc != 0) {
     312                ipc_call_free(call);
    312313                return (__native) rc;
     314        }
    313315        if (!(res=request_preprocess(call)))
    314316                ipc_call(phone, call);
  • generic/src/syscall/copy.c

    re8194664 rf58af46  
    5555 * @return 0 on success or error code from @ref errno.h.
    5656 */
    57 int copy_from_uspace(void *dst, void *uspace_src, size_t size)
     57int copy_from_uspace(void *dst, const void *uspace_src, size_t size)
    5858{
    5959        ipl_t ipl;
     
    9696 * @return 0 on success or error code from @ref errno.h.
    9797 */
    98 int copy_to_uspace(void *uspace_dst, void *src, size_t size)
     98int copy_to_uspace(void *uspace_dst, const void *src, size_t size)
    9999{
    100100        ipl_t ipl;
  • generic/src/syscall/syscall.c

    re8194664 rf58af46  
    4444#include <synch/futex.h>
    4545#include <ddi/ddi.h>
     46#include <syscall/copy.h>
    4647
    4748static __native sys_io(int fd, const void * buf, size_t count) {
     
    5051
    5152        size_t i;
     53        char str[10];
    5254       
    5355        for (i = 0; i < count; i++)
Note: See TracChangeset for help on using the changeset viewer.