TEXT strcpy(SB), $0 MOVW R7, 0(FP) MOVW s1+0(FP), R9 /* R9 is to pointer */ MOVW s2+4(FP), R10 /* R10 is from pointer */ /* * test if both pointers * are similarly word aligned */ XOR R9,R10, R7 ANDCC $3,R7, R0 BNE una /* * make byte masks */ MOVW $0xff, R17 SLL $8,R17, R16 SLL $16,R17, R13 SLL $24,R17, R12 /* * byte at a time to word align */al1: ANDCC $3,R10, R0 BE al2 MOVB (R10), R11 ADD $1, R10 MOVB R11, (R9) ADD $1, R9 SUBCC R0,R11, R0 BNE al1 JMP out /* * word at a time */al2: ADD $4, R9 MOVW (R10), R11 /* fetch */ ADD $4, R10 ANDCC R12,R11, R0 /* is it byte 0 */ BE b0 ANDCC R13,R11, R0 /* is it byte 1 */ BE b1 ANDCC R16,R11, R0 /* is it byte 2 */ BE b2 MOVW R11, -4(R9) /* store */ ANDCC R17,R11, R0 /* is it byte 3 */ BNE al2 JMP out b0: MOVB R0, -4(R9) JMP out b1: SRL $24, R11 MOVB R11, -4(R9) MOVB R0, -3(R9) JMP out b2: SRL $24,R11, R7 MOVB R7, -4(R9) SRL $16, R11 MOVB R11, -3(R9) MOVB R0, -2(R9) JMP out una: MOVB (R10), R11 ADD $1, R10 MOVB R11, (R9) ADD $1, R9 SUBCC R0,R11, R0 BNE una out: MOVW s1+0(FP),R7 RETURN
TEXT strcpy(SB), $0
MOVW R7, 0(FP)
MOVW s1+0(FP), R9 /* R9 is to pointer */
MOVW s2+4(FP), R10 /* R10 is from pointer */
/*
* test if both pointers
* are similarly word aligned
*/
XOR R9,R10, R7
ANDCC $3,R7, R0
BNE una
/*
* make byte masks
*/
MOVW $0xff, R17
SLL $8,R17, R16
SLL $16,R17, R13
SLL $24,R17, R12
/*
* byte at a time to word align
*/
al1:
ANDCC $3,R10, R0
BE al2
MOVB (R10), R11
ADD $1, R10
MOVB R11, (R9)
ADD $1, R9
SUBCC R0,R11, R0
BNE al1
JMP out
/*
* word at a time
*/
al2:
ADD $4, R9
MOVW (R10), R11 /* fetch */
ADD $4, R10
ANDCC R12,R11, R0 /* is it byte 0 */
BE b0
ANDCC R13,R11, R0 /* is it byte 1 */
BE b1
ANDCC R16,R11, R0 /* is it byte 2 */
BE b2
MOVW R11, -4(R9) /* store */
ANDCC R17,R11, R0 /* is it byte 3 */
BNE al2
JMP out
b0:
MOVB R0, -4(R9)
JMP out
b1:
SRL $24, R11
MOVB R11, -4(R9)
MOVB R0, -3(R9)
JMP out
b2:
SRL $24,R11, R7
MOVB R7, -4(R9)
SRL $16, R11
MOVB R11, -3(R9)
MOVB R0, -2(R9)
JMP out
una:
MOVB (R10), R11
ADD $1, R10
MOVB R11, (R9)
ADD $1, R9
SUBCC R0,R11, R0
BNE una
out:
MOVW s1+0(FP),R7
RETURN