1*272efad7SDavid du Colombier TEXT strcpy(SB),$0 2*272efad7SDavid du Colombier 3*272efad7SDavid du Colombier MOVL $0, AX 4*272efad7SDavid du Colombier MOVQ $-1, CX 5*272efad7SDavid du Colombier CLD 6*272efad7SDavid du Colombier/* 7*272efad7SDavid du Colombier * find end of second string 8*272efad7SDavid du Colombier */ 9*272efad7SDavid du Colombier 10*272efad7SDavid du Colombier MOVQ p2+8(FP), DI 11*272efad7SDavid du Colombier REPN; SCASB 12*272efad7SDavid du Colombier 13*272efad7SDavid du Colombier MOVQ DI, BX 14*272efad7SDavid du Colombier SUBQ p2+8(FP), BX 15*272efad7SDavid du Colombier 16*272efad7SDavid du Colombier/* 17*272efad7SDavid du Colombier * copy the memory 18*272efad7SDavid du Colombier */ 19*272efad7SDavid du Colombier MOVQ RARG, DI 20*272efad7SDavid du Colombier MOVQ p2+8(FP), SI 21*272efad7SDavid du Colombier/* 22*272efad7SDavid du Colombier * copy whole longs, if aligned 23*272efad7SDavid du Colombier */ 24*272efad7SDavid du Colombier MOVQ DI, CX 25*272efad7SDavid du Colombier ORQ SI, CX 26*272efad7SDavid du Colombier ANDL $3, CX 27*272efad7SDavid du Colombier JNE c3 28*272efad7SDavid du Colombier MOVQ BX, CX 29*272efad7SDavid du Colombier SHRQ $2, CX 30*272efad7SDavid du Colombier REP; MOVSL 31*272efad7SDavid du Colombier/* 32*272efad7SDavid du Colombier * copy the rest, by bytes 33*272efad7SDavid du Colombier */ 34*272efad7SDavid du Colombier ANDL $3, BX 35*272efad7SDavid du Colombierc3: 36*272efad7SDavid du Colombier MOVL BX, CX 37*272efad7SDavid du Colombier REP; MOVSB 38*272efad7SDavid du Colombier 39*272efad7SDavid du Colombier MOVQ RARG, AX 40*272efad7SDavid du Colombier RET 41