1*37da2899SCharles.ForsythTEXT strchr(SB), $-4 2*37da2899SCharles.Forsyth MOVBU c+4(FP), R1 3*37da2899SCharles.Forsyth CMP $0, R1 4*37da2899SCharles.Forsyth BEQ _null 5*37da2899SCharles.Forsyth 6*37da2899SCharles.Forsyth_strchr: /* not looking for a null, byte at a time */ 7*37da2899SCharles.Forsyth MOVBU.P 1(R0), R2 8*37da2899SCharles.Forsyth CMP R1, R2 9*37da2899SCharles.Forsyth BEQ _sub1 10*37da2899SCharles.Forsyth 11*37da2899SCharles.Forsyth CMP $0, R2 12*37da2899SCharles.Forsyth BNE _strchr 13*37da2899SCharles.Forsyth 14*37da2899SCharles.Forsyth_return0: /* character not found in string, return 0 */ 15*37da2899SCharles.Forsyth MOVW $0, R0 16*37da2899SCharles.Forsyth RET 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth_null: /* looking for null, align */ 19*37da2899SCharles.Forsyth AND.S $3, R0, R2 20*37da2899SCharles.Forsyth BEQ _aligned 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth MOVBU.P 1(R0), R4 23*37da2899SCharles.Forsyth CMP $0, R4 24*37da2899SCharles.Forsyth BEQ _sub1 25*37da2899SCharles.Forsyth B _null 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth_aligned: 28*37da2899SCharles.Forsyth MOVW $0xFF, R3 /* mask */ 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth_loop: 31*37da2899SCharles.Forsyth MOVW.P 4(R0), R4 /* 4 at a time */ 32*37da2899SCharles.Forsyth TST R4, R3 /* AND.S R2, R3, Rx */ 33*37da2899SCharles.Forsyth BEQ _sub4 34*37da2899SCharles.Forsyth TST R4>>8, R3 35*37da2899SCharles.Forsyth BEQ _sub3 36*37da2899SCharles.Forsyth TST R4>>16, R3 37*37da2899SCharles.Forsyth BEQ _sub2 38*37da2899SCharles.Forsyth TST R4>>24, R3 39*37da2899SCharles.Forsyth BNE _loop 40*37da2899SCharles.Forsyth 41*37da2899SCharles.Forsyth_sub1: /* compensate for pointer increment */ 42*37da2899SCharles.Forsyth SUB $1, R0 43*37da2899SCharles.Forsyth RET 44*37da2899SCharles.Forsyth_sub2: 45*37da2899SCharles.Forsyth SUB $2, R0 46*37da2899SCharles.Forsyth RET 47*37da2899SCharles.Forsyth_sub3: 48*37da2899SCharles.Forsyth SUB $3, R0 49*37da2899SCharles.Forsyth RET 50*37da2899SCharles.Forsyth_sub4: 51*37da2899SCharles.Forsyth SUB $4, R0 52*37da2899SCharles.Forsyth RET 53