lwi r30, r5, 72
lwi r31, r5, 76
+ rtsd r15, 8
or r3, r0, r6
- rts r15, 4
.end longjmp
swi r30, r5, 72
swi r31, r5, 76
+ rtsd r15, 8
or r3, r0, r0
- rts r15, 4
.end setjmp
bnei r7, end_cmp_loop /* IF yes (r7 > 0) use byte compares in end_cmp_loop */ \n\
cmpu r7, r4, r3 /* ELSE compare whole word */ \n\
bnei r7, end_cmp \n\
- addik r9, r9, 4 \n\
- bri cmp_loop \n\
+ brid cmp_loop \n\
+ addik r9, r9, 4 /* delay slot */ \n\
end_cmp_loop: \n\
lbu r3, r5, r9 /* byte compare loop */ \n\
lbu r4, r6, r9 \n\
cmpu r7, r4, r3 /* Compare bytes */ \n\
bnei r7, end_cmp_early \n\
- addik r9, r9, 1 \n\
- bnei r3, end_cmp_loop /* If reached null on one string, terminate */ \n\
+ bneid r3, end_cmp_loop /* If reached null on one string, terminate */ \n\
+ addik r9, r9, 1 /* delay slot */ \n\
end_cmp_early: \n\
+ rtsd r15, 8 \n\
or r3, r0, r7 \n\
- rts r15, 4 \n\
try_align_args: \n\
xor r7, r4, r3 \n\
bnei r7, regular_strcmp /* cannot align args */ \n\
bnei r7, end_cmp \n\
beqi r3, end_cmp \n\
addik r10, r10, -1 \n\
+ beqid r10, cmp_loop \n\
addik r9, r9, 1 \n\
- beqi r10, cmp_loop \n\
bri align_loop \n\
regular_strcmp: \n\
lbu r3, r5, r9 \n\
cmpu r7, r4, r3 \n\
bnei r7, end_cmp \n\
beqi r3, end_cmp \n\
+ brid regular_strcmp \n\
addik r9, r9, 1 \n\
- bri regular_strcmp \n\
end_cmp: \n\
- or r3, r0, r7 \n\
- rts r15, 4 /* Return strcmp result */"
-);
+ rtsd r15, 8 \n\
+ or r3, r0, r7 /* Return strcmp result */");
#endif /* ! HAVE_HW_PCMP */
}
pcmpbf r4, r0, r3 \n\
bnei r4, cpy_bytes /* If r4 != 0, then null present within string */\n\
sw r3, r5, r9 \n\
+ brid cpy_loop \n\
addik r9, r9, 4 \n\
- bri cpy_loop \n\
cpy_bytes: \n\
lbu r3, r6, r9 \n\
sb r3, r5, r9 \n\
addik r4, r4, -1 \n\
- addik r9, r9, 1 \n\
- bnei r4, cpy_bytes \n\
+ bneid r4, cpy_bytes \n\
+ addik r9, r9, 1 /* delay slot */\n\
cpy_null: \n\
- or r3, r0, r5 \n\
- rts r15, 4 /* Return strcpy result */\n\
+ rtsd r15, 8 \n\
+ or r3, r0, r5 /* Return strcpy result */\n\
try_align_args: \n\
xor r7, r4, r3 \n\
bnei r7, regular_strcpy /* cannot align args */\n\
align_loop: \n\
lbu r3, r6, r9 \n\
sb r3, r5, r9 \n\
+ beqid r3, end_cpy /* Break if we have seen null character */\n\
addik r10, r10, -1 \n\
- beqi r3, end_cpy /* Break if we have seen null character */\n\
+ bneid r10, align_loop \n\
addik r9, r9, 1 \n\
- bnei r10, align_loop \n\
bri cpy_loop \n\
regular_strcpy: \n\
lbu r3, r6, r9 \n\
sb r3, r5, r9 \n\
+ bneid r3, regular_strcpy \n\
addik r9, r9, 1 \n\
- bnei r3, regular_strcpy \n\
end_cpy: \n\
- or r3, r0, r5 \n\
- rts r15, 4 /* Return strcpy result */"
-);
+ rtsd r15, 8 \n\
+ or r3, r0, r5 /* Return strcpy result */");
#endif /* ! HAVE_HW_PCMP */
}
lw r3, r5, r9 \n\
pcmpbf r4, r3, r0 \n\
bnei r4, end_len \n\
+ brid len_loop \n\
addik r9, r9, 4 \n\
- bri len_loop \n\
end_len: \n\
lbu r3, r5, r9 \n\
beqi r3, done_len \n\
+ brid end_len \n\
addik r9, r9, 1 \n\
- bri end_len \n\
done_len: \n\
+ rtsd r15, 8 \n\
or r3, r0, r9 /* Return len */ \n\
- rts r15, 4 \n\
align_arg: \n\
rsubik r10, r3, 4 \n\
align_loop: \n\
lbu r3, r5, r9 \n\
beqid r3, done_len \n\
addik r10, r10, -1 \n\
+ bneid r10, align_loop \n\
addik r9, r9, 1 \n\
- bnei r10, align_loop \n\
bri len_loop");
#endif /* ! HAVE_HW_PCMP */