Changeset 26346bd in mainline for kernel/arch/mips32/src/asm.S


Ignore:
Timestamp:
2013-03-30T18:26:17Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
582f4d28
Parents:
0ca441c
Message:

mips32: implement memset() and memcpy()

File:
1 edited

Legend:

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

    r0ca441c r26346bd  
    5757        nop
    5858
     59.global memset
     60.global memcpy
    5961.global memcpy_from_uspace
    6062.global memcpy_to_uspace
    6163.global memcpy_from_uspace_failover_address
    6264.global memcpy_to_uspace_failover_address
     65
     66memset:
     67        move $v0, $a0
     68        beqz $a2, 0f
     69        addiu $t1, $a2, -1
     70       
     71        negu $t0, $a0
     72        andi $t0, $t0, 0x3
     73        sltu $v1, $a2, $t0
     74        bnez $v1, 1f
     75        andi $a1, $a1, 0xff
     76       
     77        7:
     78                sltiu $v1, $a2, 4
     79                beqz $v1, 2f
     80                move $v1, $v0
     81               
     82                move $t0, $a2
     83       
     84        3:
     85                sb $a1, 0($v1)
     86                addiu $v1, $v1, 1
     87                subu $a3, $v1, $v0
     88                sltu $a3, $a3, $t0
     89                bnez $a3, 3b
     90                addiu $t1, $t1, -1
     91               
     92                beq $a2, $t0, 0f
     93                subu $a2, $a2, $t0
     94       
     95        8:
     96                srl $a0, $a2, 0x2
     97                sll $t4, $a0, 0x2
     98                beqz $t4, 4f
     99                sll $t2, $a1, 0x10
     100               
     101                sll $t3, $a1, 0x8
     102                or $t3, $a1, $t3
     103                sll $a3, $a1, 0x18
     104                or $t3, $t3, $t2
     105                or $t3, $t3, $a3
     106                addu $t0, $v0, $t0
     107                move $a3, $zero
     108       
     109        5:
     110                addiu $a3, $a3, 1
     111                sltu $t2, $a3, $a0
     112                sw $t3, 0($t0)
     113                bnez $t2, 5b
     114                addiu $t0, $t0, 4
     115               
     116                addu $v1, $v1, $t4
     117                beq $a2, $t4, 0f
     118                subu $t1, $t1, $t4
     119       
     120        4:
     121                addiu $t1, $t1, 1
     122                addu $t1, $v1, $t1
     123                sb $a1, 0($v1)
     124       
     125        6:
     126                addiu $v1, $v1, 1
     127                bnel $v1, $t1, 6b
     128                sb $a1, 0($v1)
     129       
     130        0:
     131                jr $ra
     132                nop
     133       
     134        1:
     135                j 7b
     136                move $t0, $a2
     137       
     138        2:
     139                bnez $t0, 3b
     140                nop
     141               
     142                j 8b
     143                subu $a2, $a2, $t0
     144
     145memcpy:
    63146memcpy_from_uspace:
    64147memcpy_to_uspace:
Note: See TracChangeset for help on using the changeset viewer.