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