1*272efad7SDavid du Colombier TEXT memccpy(SB),$0 2*272efad7SDavid du Colombier 3*272efad7SDavid du Colombier MOVL n+24(FP), CX 4*272efad7SDavid du Colombier CMPL CX, $0 5*272efad7SDavid du Colombier JEQ none 6*272efad7SDavid du Colombier MOVQ p2+8(FP), DI 7*272efad7SDavid du Colombier MOVBLZX c+16(FP), AX 8*272efad7SDavid du Colombier CLD 9*272efad7SDavid du Colombier/* 10*272efad7SDavid du Colombier * find the character in the second string 11*272efad7SDavid du Colombier */ 12*272efad7SDavid du Colombier 13*272efad7SDavid du Colombier REPN; SCASB 14*272efad7SDavid du Colombier JEQ found 15*272efad7SDavid du Colombier 16*272efad7SDavid du Colombier/* 17*272efad7SDavid du Colombier * if not found, set count to 'n' 18*272efad7SDavid du Colombier */ 19*272efad7SDavid du Colombiernone: 20*272efad7SDavid du Colombier MOVL $0, AX 21*272efad7SDavid du Colombier MOVL n+24(FP), BX 22*272efad7SDavid du Colombier JMP memcpy 23*272efad7SDavid du Colombier 24*272efad7SDavid du Colombier/* 25*272efad7SDavid du Colombier * if found, set count to bytes thru character 26*272efad7SDavid du Colombier */ 27*272efad7SDavid du Colombierfound: 28*272efad7SDavid du Colombier MOVQ DI, AX 29*272efad7SDavid du Colombier SUBQ p2+8(FP), AX 30*272efad7SDavid du Colombier MOVQ AX, BX 31*272efad7SDavid du Colombier ADDQ RARG, AX 32*272efad7SDavid du Colombier 33*272efad7SDavid du Colombier/* 34*272efad7SDavid du Colombier * copy the memory 35*272efad7SDavid du Colombier */ 36*272efad7SDavid du Colombier 37*272efad7SDavid du Colombiermemcpy: 38*272efad7SDavid du Colombier MOVQ RARG, DI 39*272efad7SDavid du Colombier MOVQ p2+8(FP), SI 40*272efad7SDavid du Colombier/* 41*272efad7SDavid du Colombier * copy whole longs, if aligned 42*272efad7SDavid du Colombier */ 43*272efad7SDavid du Colombier MOVQ DI, DX 44*272efad7SDavid du Colombier ORQ SI, DX 45*272efad7SDavid du Colombier ANDL $3, DX 46*272efad7SDavid du Colombier JNE c3 47*272efad7SDavid du Colombier MOVL BX, CX 48*272efad7SDavid du Colombier SHRQ $2, CX 49*272efad7SDavid du Colombier REP; MOVSL 50*272efad7SDavid du Colombier/* 51*272efad7SDavid du Colombier * copy the rest, by bytes 52*272efad7SDavid du Colombier */ 53*272efad7SDavid du Colombier ANDL $3, BX 54*272efad7SDavid du Colombierc3: 55*272efad7SDavid du Colombier MOVL BX, CX 56*272efad7SDavid du Colombier REP; MOVSB 57*272efad7SDavid du Colombier 58*272efad7SDavid du Colombier RET 59