P8000/WEGA/contrib/lcc/lib/libc/u8k/gen/strspn.s

55 lines
898 B
ArmAsm

/*
* Return the number of characters in the maximum leading segment
* of string which consists solely of characters from charset.
*
* int
* strspn(string, charset)
* char *string;
* register char *charset;
* {
* register char *p, *q;
* char rl0, rl1;
*
* for(q=string; (rl0=*q) != '\0'; ++q) {
* p = charset;
* goon:
* rl1 = *p++;
* if (rl1 == '\0')
* break;
* if (rl0 == rl1)
* continue;
* goto gogon;
* }
* return(q-string);
* }
*/
.seg
fp := r13
FP := rr12
sp := r15
SP := rr14
.psec
.code
_strspn::
ldm r2,|_stkseg+4|(sp),#4 // rr2 <-> q=string , rr4 <-> charset
~for1:
ldb rl0,@rr2 // rl0=*q
testb rl0
jr nz,~L1
~finis:
sub r3,|_stkseg+6|(sp)
ld r2,r3
ret
~L1:
ldl rr6,rr4 // rr6 <-> p=charset
~for2:
ldb rl1,@rr6 // rl1=*p
testb rl1
jr z,~finis
inc r7,#1 // p++
cpb rl0,rl1
jr ne,~for2
inc r3,#1 // q++
jr ~for1
}