URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 1009 |
Rev 1765 |
! Entry: r4: destination
|
! Entry: r4: destination
|
! r5: source
|
! r5: source
|
! Exit: r0: destination
|
! Exit: r0: destination
|
! r1-r2,r5: clobbered
|
! r1-r2,r5: clobbered
|
|
|
#include "asm.h"
|
#include "asm.h"
|
|
|
ENTRY(strcpy)
|
ENTRY(strcpy)
|
mov r4,r0
|
mov r4,r0
|
or r5,r0
|
or r5,r0
|
tst #3,r0
|
tst #3,r0
|
SL(bf, L_setup_char_loop, mov r4,r0)
|
SL(bf, L_setup_char_loop, mov r4,r0)
|
mov.l @r5+,r1
|
mov.l @r5+,r1
|
mov #0,r2
|
mov #0,r2
|
cmp/str r2,r1
|
cmp/str r2,r1
|
SL(bt, Longword_loop_end, sub r5,r0)
|
SL(bt, Longword_loop_end, sub r5,r0)
|
.align 2
|
.align 2
|
Longword_loop:
|
Longword_loop:
|
mov.l r1,@(r0,r5)
|
mov.l r1,@(r0,r5)
|
mov.l @r5+,r1
|
mov.l @r5+,r1
|
cmp/str r2,r1
|
cmp/str r2,r1
|
bt Longword_loop_end
|
bt Longword_loop_end
|
mov.l r1,@(r0,r5)
|
mov.l r1,@(r0,r5)
|
mov.l @r5+,r1
|
mov.l @r5+,r1
|
cmp/str r2,r1
|
cmp/str r2,r1
|
bf Longword_loop
|
bf Longword_loop
|
Longword_loop_end:
|
Longword_loop_end:
|
add #-4,r5
|
add #-4,r5
|
add #3,r0
|
add #3,r0
|
.align 2
|
.align 2
|
L_char_loop:
|
L_char_loop:
|
mov.b @r5+,r1
|
mov.b @r5+,r1
|
L_char_loop_start:
|
L_char_loop_start:
|
tst r1,r1
|
tst r1,r1
|
SL(bf, L_char_loop, mov.b r1,@(r0,r5))
|
SL(bf, L_char_loop, mov.b r1,@(r0,r5))
|
rts
|
rts
|
mov r4,r0
|
mov r4,r0
|
L_setup_char_loop:
|
L_setup_char_loop:
|
mov.b @r5+,r1
|
mov.b @r5+,r1
|
bra L_char_loop_start
|
bra L_char_loop_start
|
sub r5,r0
|
sub r5,r0
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.