Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

        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

Generated by GNU Enscript 1.6.6.