ref: f6ef250871c6e92e77ff3d92adb29619b79e280b
dir: /sys/src/ape/lib/ap/sparc/strcpy.s/
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