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