1 TEXT strcpy(SB), $0 2 3MOVW R7, 0(FP) 4 MOVW s1+0(FP), R9 /* R9 is to pointer */ 5 MOVW s2+4(FP), R10 /* R10 is from pointer */ 6 7/* 8 * test if both pointers 9 * are similarly word aligned 10 */ 11 XOR R9,R10, R7 12 ANDCC $3,R7, R0 13 BNE una 14 15/* 16 * make byte masks 17 */ 18 MOVW $0xff, R17 19 SLL $8,R17, R16 20 SLL $16,R17, R13 21 SLL $24,R17, R12 22 23/* 24 * byte at a time to word align 25 */ 26al1: 27 ANDCC $3,R10, R0 28 BE al2 29 MOVB (R10), R11 30 ADD $1, R10 31 MOVB R11, (R9) 32 ADD $1, R9 33 SUBCC R0,R11, R0 34 BNE al1 35 JMP out 36 37/* 38 * word at a time 39 */ 40al2: 41 ADD $4, R9 42 MOVW (R10), R11 /* fetch */ 43 ADD $4, R10 44 ANDCC R12,R11, R0 /* is it byte 0 */ 45 BE b0 46 ANDCC R13,R11, R0 /* is it byte 1 */ 47 BE b1 48 ANDCC R16,R11, R0 /* is it byte 2 */ 49 BE b2 50 MOVW R11, -4(R9) /* store */ 51 ANDCC R17,R11, R0 /* is it byte 3 */ 52 BNE al2 53 54 JMP out 55 56b0: 57 MOVB R0, -4(R9) 58 JMP out 59 60b1: 61 SRL $24, R11 62 MOVB R11, -4(R9) 63 MOVB R0, -3(R9) 64 JMP out 65 66b2: 67 SRL $24,R11, R7 68 MOVB R7, -4(R9) 69 SRL $16, R11 70 MOVB R11, -3(R9) 71 MOVB R0, -2(R9) 72 JMP out 73 74una: 75 MOVB (R10), R11 76 ADD $1, R10 77 MOVB R11, (R9) 78 ADD $1, R9 79 SUBCC R0,R11, R0 80 BNE una 81 82out: 83 MOVW s1+0(FP),R7 84 RETURN 85