1*6ca8a7e3SDavid du ColombierTEXT strchr(SB), $0 27dd7cddfSDavid du Colombier MOVBU c+4(FP), R1 37dd7cddfSDavid du Colombier CMP $0, R1 47dd7cddfSDavid du Colombier BEQ _null 57dd7cddfSDavid du Colombier 67dd7cddfSDavid du Colombier_strchr: /* not looking for a null, byte at a time */ 77dd7cddfSDavid du Colombier MOVBU.P 1(R0), R2 87dd7cddfSDavid du Colombier CMP R1, R2 97dd7cddfSDavid du Colombier BEQ _sub1 107dd7cddfSDavid du Colombier 117dd7cddfSDavid du Colombier CMP $0, R2 127dd7cddfSDavid du Colombier BNE _strchr 137dd7cddfSDavid du Colombier 147dd7cddfSDavid du Colombier_return0: /* character not found in string, return 0 */ 157dd7cddfSDavid du Colombier MOVW $0, R0 167dd7cddfSDavid du Colombier RET 177dd7cddfSDavid du Colombier 187dd7cddfSDavid du Colombier_null: /* looking for null, align */ 197dd7cddfSDavid du Colombier AND.S $3, R0, R2 207dd7cddfSDavid du Colombier BEQ _aligned 217dd7cddfSDavid du Colombier 227dd7cddfSDavid du Colombier MOVBU.P 1(R0), R4 237dd7cddfSDavid du Colombier CMP $0, R4 247dd7cddfSDavid du Colombier BEQ _sub1 257dd7cddfSDavid du Colombier B _null 267dd7cddfSDavid du Colombier 277dd7cddfSDavid du Colombier_aligned: 287dd7cddfSDavid du Colombier MOVW $0xFF, R3 /* mask */ 297dd7cddfSDavid du Colombier 307dd7cddfSDavid du Colombier_loop: 317dd7cddfSDavid du Colombier MOVW.P 4(R0), R4 /* 4 at a time */ 327dd7cddfSDavid du Colombier TST R4, R3 /* AND.S R2, R3, Rx */ 3380ee5cbfSDavid du Colombier TST.NE R4>>8, R3 3480ee5cbfSDavid du Colombier TST.NE R4>>16, R3 3580ee5cbfSDavid du Colombier TST.NE R4>>24, R3 3680ee5cbfSDavid du Colombier BNE _loop 3780ee5cbfSDavid du Colombier 3880ee5cbfSDavid du Colombier TST R4, R3 /* its somewhere, find it and correct */ 397dd7cddfSDavid du Colombier BEQ _sub4 407dd7cddfSDavid du Colombier TST R4>>8, R3 417dd7cddfSDavid du Colombier BEQ _sub3 427dd7cddfSDavid du Colombier TST R4>>16, R3 437dd7cddfSDavid du Colombier BEQ _sub2 447dd7cddfSDavid du Colombier 457dd7cddfSDavid du Colombier_sub1: /* compensate for pointer increment */ 467dd7cddfSDavid du Colombier SUB $1, R0 477dd7cddfSDavid du Colombier RET 487dd7cddfSDavid du Colombier_sub2: 497dd7cddfSDavid du Colombier SUB $2, R0 507dd7cddfSDavid du Colombier RET 517dd7cddfSDavid du Colombier_sub3: 527dd7cddfSDavid du Colombier SUB $3, R0 537dd7cddfSDavid du Colombier RET 547dd7cddfSDavid du Colombier_sub4: 557dd7cddfSDavid du Colombier SUB $4, R0 567dd7cddfSDavid du Colombier RET 57