52 lines
856 B
ArmAsm
52 lines
856 B
ArmAsm
/*
|
|
* Return ptr to first occurance of any character from `brkset'
|
|
* in the character string `string'; NULL if none exists.
|
|
*
|
|
* #define NULL (char *) 0
|
|
*
|
|
* char *
|
|
* strpbrk(string, brkset)
|
|
* register char *string, *brkset;
|
|
* {
|
|
* register char *p;
|
|
* char rl0, rl1;
|
|
*
|
|
* do {
|
|
* rl0 = *string;
|
|
* for(p=brkset; (rl1=*p++)!= '\0'; )
|
|
* if (rl1 == rl0)
|
|
* return(string);
|
|
* }
|
|
* while(string++, rl0 != '\0');
|
|
* return(NULL);
|
|
* }
|
|
*/
|
|
.seg
|
|
fp := r13
|
|
FP := rr12
|
|
sp := r15
|
|
SP := rr14
|
|
.psec
|
|
.code
|
|
_strpbrk::
|
|
{
|
|
ldm r2,|_stkseg+4|(sp),#4 // rr2 <-> string , rr4 <-> brkset
|
|
~do:
|
|
ldb rl0,@rr2 // rl0=*string
|
|
ldl rr6,rr4 // rr6 <-> p=brkset
|
|
~for:
|
|
ldb rl1,@rr6 // rl1=*p
|
|
inc r7,#1 // p++
|
|
testb rl1
|
|
jr z,~while
|
|
cpb rl0,rl1
|
|
jr ne,~for
|
|
ret
|
|
~while:
|
|
inc r3,#1 // string++
|
|
testb rl0
|
|
jr nz,~do
|
|
subl rr2,rr2
|
|
ret
|
|
}
|