newlib-cygwin/newlib/libc/machine/sh/strcmp.S

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