1TEXT strcpy(SB), $0 2 3 MOVW s2+4(FP),R9 /* R9 is from pointer */ 4 MOVW R8, R10 /* R10 is to pointer */ 5 6/* 7 * align 'from' pointer 8 */ 9l1: 10 AND $3, R9, R12 11 ADD $1, R9 12 BEQ R12, l2 13 MOVB -1(R9), R12 14 ADD $1, R10 15 MOVB R12, -1(R10) 16 BNE R12, l1 17 RET 18 19/* 20 * test if 'to' is also aligned 21 */ 22l2: 23 AND $3,R10, R12 24 BEQ R12, l4 25 26/* 27 * copy 4 at a time, 'to' not aligned 28 */ 29l3: 30 MOVW -1(R9), R11 31 ADD $4, R9 32 ADD $4, R10 33 MOVB R11, -4(R10) 34 AND $0xff, R11, R12 35 BEQ R12, out 36 37 SRL $8, R11 38 MOVB R11, -3(R10) 39 AND $0xff, R11, R12 40 BEQ R12, out 41 42 SRL $8, R11 43 MOVB R11, -2(R10) 44 AND $0xff, R11, R12 45 BEQ R12, out 46 47 SRL $8, R11 48 MOVB R11, -1(R10) 49 BNE R11, l3 50 51out: 52 RET 53 54/* 55 * word at a time both aligned 56 */ 57l4: 58 MOVW $0xff000000, R14 59 MOVW $0x00ff0000, R15 60 MOVW $0x0000ff00, R13 61 62l5: 63 ADD $4, R10 64 MOVW -1(R9), R11 /* fetch */ 65 ADD $4, R9 66 67 AND $0xff, R11, R12 /* is it byte 0 */ 68 BEQ R12, b0 69 AND R13, R11, R12 /* is it byte 1 */ 70 BEQ R12, b1 71 AND R15, R11, R12 /* is it byte 2 */ 72 BEQ R12, b2 73 MOVW R11, -4(R10) /* store */ 74 AND R14, R11, R12 /* is it byte 3 */ 75 BNE R12, l5 76 JMP out 77 78b0: 79 MOVB R0, -4(R10) 80 JMP out 81 82b1: 83 MOVB R11, -4(R10) 84 MOVB R0, -3(R10) 85 JMP out 86 87b2: 88 MOVB R11, -4(R10) 89 SRL $8, R11 90 MOVB R11, -3(R10) 91 MOVB R0, -2(R10) 92 JMP out 93