42 lines
		
	
	
		
			713 B
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			713 B
		
	
	
	
		
			ArmAsm
		
	
	
	
| ! Entry: r4: destination
 | |
| !        r5: source
 | |
| ! Exit:  r0: destination
 | |
| !        r1-r2,r5: clobbered
 | |
| 
 | |
| #include "asm.h"
 | |
| 
 | |
| ENTRY(strcpy)
 | |
| 	mov     r4,r0
 | |
| 	or      r5,r0
 | |
| 	tst	#3,r0
 | |
| 	SL(bf, L_setup_char_loop, mov r4,r0)
 | |
| 	mov.l   @r5+,r1
 | |
| 	mov     #0,r2
 | |
| 	cmp/str r2,r1
 | |
| 	SL(bt, Longword_loop_end, sub r5,r0)
 | |
| 	.align  2
 | |
| Longword_loop:
 | |
| 	mov.l   r1,@(r0,r5)
 | |
| 	mov.l   @r5+,r1
 | |
| 	cmp/str r2,r1
 | |
| 	bt      Longword_loop_end
 | |
| 	mov.l   r1,@(r0,r5)
 | |
| 	mov.l   @r5+,r1
 | |
| 	cmp/str r2,r1
 | |
| 	bf      Longword_loop
 | |
| Longword_loop_end:
 | |
| 	add	#-4,r5
 | |
| 	add	#3,r0
 | |
| 	.align  2
 | |
| L_char_loop:
 | |
| 	mov.b	@r5+,r1
 | |
| L_char_loop_start:
 | |
| 	tst	r1,r1
 | |
| 	SL(bf, L_char_loop, mov.b r1,@(r0,r5))
 | |
| 	rts
 | |
| 	mov r4,r0
 | |
| L_setup_char_loop:
 | |
| 	mov.b	@r5+,r1
 | |
| 	bra L_char_loop_start
 | |
| 	sub r5,r0
 |