Annotation of lucent/sys/src/libc/68020/memmove.s, revision 1.1

1.1     ! root        1:        TEXT    memmove(SB), $0
        !             2: move:
        !             3: 
        !             4:        MOVL    n+8(FP),R0
        !             5:        BEQ     return
        !             6:        BGT     ok
        !             7:        MOVL    0, R0
        !             8: ok:
        !             9:        MOVL    s1+0(FP),A2
        !            10:        MOVL    s2+4(FP),A1
        !            11: 
        !            12:        CMPL    A2,A1
        !            13:        BHI     back
        !            14: 
        !            15: /*
        !            16:  * speed depends on source allignment
        !            17:  * destination allignment is secondary
        !            18:  * byte-at-a-time foreward copy to
        !            19:  * get source (A1) alligned.
        !            20:  */
        !            21: f1:
        !            22:        MOVL    A1, R1
        !            23:        ANDL    $3, R1
        !            24:        BEQ     f2
        !            25:        SUBL    $1, R0
        !            26:        BLT     return
        !            27:        MOVB    (A1)+, (A2)+
        !            28:        BRA     f1
        !            29: /*
        !            30:  * quad-long-at-a-time forward copy
        !            31:  */
        !            32: f2:
        !            33:        SUBL    $16, R0
        !            34:        BLT     f3
        !            35:        MOVL    (A1)+, (A2)+
        !            36:        MOVL    (A1)+, (A2)+
        !            37:        MOVL    (A1)+, (A2)+
        !            38:        MOVL    (A1)+, (A2)+
        !            39:        BRA     f2
        !            40: 
        !            41: /*
        !            42:  * cleanup byte-at-a-time
        !            43:  */
        !            44: f3:
        !            45:        ADDL    $15, R0
        !            46:        BLT     return
        !            47: f4:
        !            48:        MOVB    (A1)+, (A2)+
        !            49:        SUBL    $1, R0
        !            50:        BGE     f4
        !            51:        BRA     return
        !            52: 
        !            53: return:
        !            54:        MOVL    s1+0(FP),R0
        !            55:        RTS
        !            56: 
        !            57: /*
        !            58:  * everything the same, but
        !            59:  * copy backwards
        !            60:  */
        !            61: back:
        !            62:        ADDL    R0, A1
        !            63:        ADDL    R0, A2
        !            64: 
        !            65: /*
        !            66:  * byte-at-a-time backward copy to
        !            67:  * get source (A1) alligned.
        !            68:  */
        !            69: b1:
        !            70:        MOVL    A1, R1
        !            71:        ANDL    $3, R1
        !            72:        BEQ     b2
        !            73:        SUBL    $1, R0
        !            74:        BLT     return
        !            75:        MOVB    -(A1), -(A2)
        !            76:        BRA     b1
        !            77: /*
        !            78:  * quad-long-at-a-time backward copy
        !            79:  */
        !            80: b2:
        !            81:        SUBL    $16, R0
        !            82:        BLT     b3
        !            83:        MOVL    -(A1), -(A2)
        !            84:        MOVL    -(A1), -(A2)
        !            85:        MOVL    -(A1), -(A2)
        !            86:        MOVL    -(A1), -(A2)
        !            87:        BRA     b2
        !            88: 
        !            89: /*
        !            90:  * cleanup byte-at-a-time backward
        !            91:  */
        !            92: b3:
        !            93:        ADDL    $15, R0
        !            94:        BLT     return
        !            95: b4:
        !            96:        MOVB    -(A1), -(A2)
        !            97:        SUBL    $1, R0
        !            98:        BGE     b4
        !            99:        BRA     return

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.