Advertisement
xerpi

mips memcpy

Sep 28th, 2013
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #made by xerpi
  2.  
  3. .text
  4. .global mips_memcpy
  5. .set noreorder
  6.  
  7.  
  8. mips_memcpy:
  9.     move $t0, $a0   #backup destination
  10.    
  11. _loop_memcpy:
  12.     beqz $a2, _e_memcpy    #if(size==0) return
  13.     nop
  14.     bge $a2, 4, _4_memcpy  #if(size >= 4) goto _4_memcpy
  15.     nop
  16.     bge $a2, 2, _2_memcpy  #if(size >= 2) goto _2_memcpy
  17.     nop
  18.     _1_memcpy:
  19.         lb $t1, ($a1)       #u8 x = *in
  20.         sb $t1, ($a0)       #*out = x
  21.         addi $a0, $a0, 1    #in++
  22.         addi $a1, $a1, 1    #out++
  23.         j _loop_memcpy
  24.         addi $a2, $a2, -1   #size--
  25.     _2_memcpy:
  26.         lh $t1, ($a1)      #u16 x = *in
  27.         sh $t1, ($a0)      #*out = x
  28.         addi $a0, $a0, 2   #in+=2
  29.         addi $a1, $a1, 2   #out+=2
  30.         j _loop_memcpy
  31.         addi $a2, $a2, -2  #size-=2
  32.     _4_memcpy:
  33.         lw $t1, ($a1)      #u32 x = *in
  34.         sw $t1, ($a0)      #*out = x
  35.         addi $a0, $a0, 4   #in+=4
  36.         addi $a1, $a1, 4   #out+=4
  37.         j _loop_memcpy
  38.         addi $a2, $a2, -4  #size-=4
  39.    
  40. _e_memcpy:
  41.     jr $ra
  42.     move $v0, $t0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement