Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 26346bd in mainline


Ignore:
Timestamp:
2013-03-30T18:26:17Z (9 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master
Children:
582f4d28
Parents:
0ca441c
Message:

mips32: implement memset() and memcpy()

Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/mips32/Makefile.inc

    r0ca441c r26346bd  
    5050endif
    5151
    52 
    5352SOURCES = \
    5453        arch/$(BARCH)/src/asm.S \
  • boot/arch/mips32/src/asm.S

    r0ca441c r26346bd  
    3737.global halt
    3838.global jump_to_kernel
     39.global memset
     40.global memcpy
    3941
    4042.section BOOTSTRAP
     
    158160        j $a0
    159161        nop
     162
     163memset:
     164        move $v0, $a0
     165        beqz $a2, 0f
     166        addiu $t1, $a2, -1
     167       
     168        negu $t0, $a0
     169        andi $t0, $t0, 0x3
     170        sltu $v1, $a2, $t0
     171        bnez $v1, 1f
     172        andi $a1, $a1, 0xff
     173       
     174        7:
     175                sltiu $v1, $a2, 4
     176                beqz $v1, 2f
     177                move $v1, $v0
     178               
     179                 move $t0, $a2
     180       
     181        3:
     182                sb $a1, 0($v1)
     183                addiu $v1, $v1, 1
     184                subu $a3, $v1, $v0
     185                sltu $a3, $a3, $t0
     186                bnez $a3, 3b
     187                addiu $t1, $t1, -1
     188               
     189                beq $a2, $t0, 0f
     190                subu $a2, $a2, $t0
     191       
     192        8:
     193                srl $a0, $a2, 0x2
     194                sll $t4, $a0, 0x2
     195                beqz $t4, 4f
     196                sll $t2, $a1, 0x10
     197               
     198                sll $t3, $a1, 0x8
     199                or $t3, $a1, $t3
     200                sll $a3, $a1, 0x18
     201                or $t3, $t3, $t2
     202                or $t3, $t3, $a3
     203                addu $t0, $v0, $t0
     204                move $a3, $zero
     205       
     206        5:
     207                addiu $a3, $a3, 1
     208                sltu $t2, $a3, $a0
     209                sw $t3, 0($t0)
     210                bnez $t2, 5b
     211                addiu $t0, $t0, 4
     212               
     213                addu $v1, $v1, $t4
     214                beq $a2, $t4, 0f
     215                subu $t1, $t1, $t4
     216       
     217        4:
     218                addiu $t1, $t1, 1
     219                addu $t1, $v1, $t1
     220                sb $a1, 0($v1)
     221       
     222        6:
     223                addiu $v1, $v1, 1
     224                bnel $v1, $t1, 6b
     225                sb $a1, 0($v1)
     226       
     227        0:
     228                jr $ra
     229                nop
     230       
     231        1:
     232                j 7b
     233                move $t0, $a2
     234       
     235        2:
     236                bnez $t0, 3b
     237                nop
     238               
     239                j 8b
     240                subu $a2, $a2, $t0
     241
     242memcpy:
     243        move $t2, $a0  /* save dst */
     244       
     245        addiu $v0, $a1, 3
     246        li $v1, -4  /* 0xfffffffffffffffc */
     247        and $v0, $v0, $v1
     248        beq $a1, $v0, 3f
     249        move $t0, $a0
     250       
     251        0:
     252                beq $a2, $zero, 2f
     253                move $a3, $zero
     254       
     255        1:
     256                addu $v0, $a1, $a3
     257                lbu $a0, 0($v0)
     258                addu $v1, $t0, $a3
     259                addiu $a3, $a3, 1
     260                bne $a3, $a2, 1b
     261                sb $a0, 0($v1)
     262       
     263        2:
     264                jr $ra
     265                move $v0, $t2
     266       
     267        3:
     268                addiu $v0, $a0, 3
     269                and $v0, $v0, $v1
     270                bne $a0, $v0, 0b
     271                srl $t1, $a2, 2
     272               
     273                beq $t1, $zero, 5f
     274                move $a3, $zero
     275               
     276                move $a3, $zero
     277                move $a0, $zero
     278       
     279        4:
     280                addu $v0, $a1, $a0
     281                lw $v1, 0($v0)
     282                addiu $a3, $a3, 1
     283                addu $v0, $t0, $a0
     284                sw $v1, 0($v0)
     285                bne $a3, $t1, 4b
     286                addiu $a0, $a0, 4
     287       
     288        5:
     289                andi $a2, $a2, 0x3
     290                beq $a2, $zero, 2b
     291                nop
     292               
     293                sll $v0, $a3, 2
     294                addu $t1, $v0, $t0
     295                move $a3, $zero
     296                addu $t0, $v0, $a1
     297       
     298        6:
     299                addu $v0, $t0, $a3
     300                lbu $a0, 0($v0)
     301                addu $v1, $t1, $a3
     302                addiu $a3, $a3, 1
     303                bne $a3, $a2, 6b
     304                sb $a0, 0($v1)
     305               
     306                jr $ra
     307                move $v0, $t2
  • boot/generic/include/memstr.h

    r0ca441c r26346bd  
    3535#include <typedefs.h>
    3636
     37#define memset(dst, val, cnt)  __builtin_memset((dst), (val), (cnt))
     38#define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
     39
    3740extern void *memmove(void *, const void *, size_t);
    3841
  • 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:
  • uspace/lib/c/arch/mips32/Makefile.inc

    r0ca441c r26346bd  
    2828
    2929ARCH_SOURCES = \
     30        arch/$(UARCH)/src/asm.S \
    3031        arch/$(UARCH)/src/entry.S \
    3132        arch/$(UARCH)/src/entryjmp.S \
Note: See TracChangeset for help on using the changeset viewer.