Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #made by xerpi
- .text
- .global mips_memcpy
- .set noreorder
- mips_memcpy:
- move $t0, $a0 #backup destination
- _loop_memcpy:
- beqz $a2, _e_memcpy #if(size==0) return
- nop
- bge $a2, 4, _4_memcpy #if(size >= 4) goto _4_memcpy
- nop
- bge $a2, 2, _2_memcpy #if(size >= 2) goto _2_memcpy
- nop
- _1_memcpy:
- lb $t1, ($a1) #u8 x = *in
- sb $t1, ($a0) #*out = x
- addi $a0, $a0, 1 #in++
- addi $a1, $a1, 1 #out++
- j _loop_memcpy
- addi $a2, $a2, -1 #size--
- _2_memcpy:
- lh $t1, ($a1) #u16 x = *in
- sh $t1, ($a0) #*out = x
- addi $a0, $a0, 2 #in+=2
- addi $a1, $a1, 2 #out+=2
- j _loop_memcpy
- addi $a2, $a2, -2 #size-=2
- _4_memcpy:
- lw $t1, ($a1) #u32 x = *in
- sw $t1, ($a0) #*out = x
- addi $a0, $a0, 4 #in+=4
- addi $a1, $a1, 4 #out+=4
- j _loop_memcpy
- addi $a2, $a2, -4 #size-=4
- _e_memcpy:
- jr $ra
- move $v0, $t0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement