123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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
|