Welcome to mirror list, hosted at ThFree Co, Russian Federation.

strcpy.S « sh « machine « libc « newlib - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 63aa7e75bff6aca8a8d95251bb6d97c0467ffab2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
! 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