mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-25 16:47:20 +08:00
67 lines
987 B
ArmAsm
67 lines
987 B
ArmAsm
|
! Entry: r4: destination
|
||
|
! r5: source
|
||
|
! Exit: r0: result
|
||
|
! r1-r2,r4-r5: clobbered
|
||
|
|
||
|
#include "asm.h"
|
||
|
|
||
|
ENTRY(strcmp)
|
||
|
mov r4,r0
|
||
|
or r5,r0
|
||
|
tst #3,r0
|
||
|
bf L_setup_char_loop
|
||
|
mov #0,r0
|
||
|
#ifdef DELAYED_BRANCHES
|
||
|
mov.l @r4+,r1
|
||
|
.align 2
|
||
|
Longword_loop:
|
||
|
mov.l @r5+,r2
|
||
|
cmp/str r0,r1
|
||
|
bt Longword_loop_end
|
||
|
cmp/eq r1,r2
|
||
|
bt.s Longword_loop
|
||
|
mov.l @r4+,r1
|
||
|
add #-4, r4
|
||
|
Longword_loop_end:
|
||
|
add #-4, r4
|
||
|
add #-4, r5
|
||
|
L_setup_char_loop:
|
||
|
mov.b @r4+,r0
|
||
|
.align 2
|
||
|
L_char_loop:
|
||
|
mov.b @r5+,r1
|
||
|
tst r0,r0
|
||
|
bt L_return
|
||
|
cmp/eq r0,r1
|
||
|
bt.s L_char_loop
|
||
|
mov.b @r4+,r0
|
||
|
add #-2,r4
|
||
|
mov.b @r4,r0
|
||
|
#else /* ! DELAYED_BRANCHES */
|
||
|
.align 2
|
||
|
Longword_loop:
|
||
|
mov.l @r4+,r1
|
||
|
mov.l @r5+,r2
|
||
|
cmp/str r0,r1
|
||
|
bt Longword_loop_end
|
||
|
cmp/eq r1,r2
|
||
|
bt Longword_loop
|
||
|
Longword_loop_end:
|
||
|
add #-4, r4
|
||
|
add #-4, r5
|
||
|
.align 2
|
||
|
L_setup_char_loop:
|
||
|
L_char_loop:
|
||
|
mov.b @r4+,r0
|
||
|
mov.b @r5+,r1
|
||
|
tst r0,r0
|
||
|
bt L_return
|
||
|
cmp/eq r0,r1
|
||
|
bt L_char_loop
|
||
|
#endif
|
||
|
L_return:
|
||
|
extu.b r0,r0
|
||
|
extu.b r1,r1
|
||
|
rts
|
||
|
sub r1,r0
|