Annotation of MiNT/src/gas/quickmov.s, revision 1.1

1.1     ! root        1: |
        !             2: 
        !             3: | quickmove(char *dst, char *src, long nbytes):
        !             4: 
        !             5: | quickly copy "nbytes" bytes from src to dst. Assumes that both
        !             6: 
        !             7: | src and dst are word aligned.
        !             8: 
        !             9: |
        !            10: 
        !            11:        .text
        !            12: 
        !            13:        .globl  _quickmove
        !            14: 
        !            15: _quickmove:
        !            16: 
        !            17:        movel   sp@(4), a0              | get dst
        !            18: 
        !            19:        movel   sp@(8), a1              | get src
        !            20: 
        !            21:        movel   sp@(12), d0             | get nbytes
        !            22: 
        !            23:        lsrl    #8, d0                  | 
        !            24: 
        !            25:        lsrl    #1, d0                  | d0 = nbytes / 512
        !            26: 
        !            27:        subql   #1, d0                  | prepare for dbra loop
        !            28: 
        !            29:        bmi     Leftover                | if < 0, skip
        !            30: 
        !            31:        moveml  d1-d7/a2-a6, sp@-       | save regs
        !            32: 
        !            33: L1:
        !            34: 
        !            35:        moveml  a1@+, d1-d7/a2-a6       | read 12*4 = 48 bytes
        !            36: 
        !            37:        moveml  d1-d7/a2-a6, a0@        |
        !            38: 
        !            39:        moveml  a1@+, d1-d7/a2-a6       | 2nd read
        !            40: 
        !            41:        moveml  d1-d7/a2-a6, a0@(48)    |
        !            42: 
        !            43:        moveml  a1@+, d1-d7/a2-a6       | 3rd read
        !            44: 
        !            45:        moveml  d1-d7/a2-a6, a0@(96)    |
        !            46: 
        !            47:        moveml  a1@+, d1-d7/a2-a6       | 4th read
        !            48: 
        !            49:        moveml  d1-d7/a2-a6, a0@(144)   |
        !            50: 
        !            51:        moveml  a1@+, d1-d7/a2-a6       | 5th
        !            52: 
        !            53:        moveml  d1-d7/a2-a6, a0@(192)   |
        !            54: 
        !            55:        moveml  a1@+, d1-d7/a2-a6       | 6th
        !            56: 
        !            57:        moveml  d1-d7/a2-a6, a0@(240)   |
        !            58: 
        !            59:        moveml  a1@+, d1-d7/a2-a6       | 7th
        !            60: 
        !            61:        moveml  d1-d7/a2-a6, a0@(288)   |
        !            62: 
        !            63:        moveml  a1@+, d1-d7/a2-a6       | 8th
        !            64: 
        !            65:        moveml  d1-d7/a2-a6, a0@(336)   |
        !            66: 
        !            67:        moveml  a1@+, d1-d7/a2-a6       | 9th
        !            68: 
        !            69:        moveml  d1-d7/a2-a6, a0@(384)   |
        !            70: 
        !            71:        moveml  a1@+, d1-d7/a2-a6       | 10th
        !            72: 
        !            73:        moveml  d1-d7/a2-a6, a0@(432)   | At this point, 480 bytes done
        !            74: 
        !            75:        moveml  a1@+, d1-d7/a2          | Only do 32 more bytes
        !            76: 
        !            77:        moveml  d1-d7/a2, a0@(480)      | for a total of 512
        !            78: 
        !            79: 
        !            80: 
        !            81:        lea     a0@(512), a0
        !            82: 
        !            83:        subql   #1, d0
        !            84: 
        !            85:        bge     L1
        !            86: 
        !            87: 
        !            88: 
        !            89:        moveml  sp@+, d1-d7/a2-a6       | pop registers
        !            90: 
        !            91: 
        !            92: 
        !            93: Leftover:                              | do the remaining bytes
        !            94: 
        !            95:        movel   sp@(12), d1
        !            96: 
        !            97:        andl    #0x01ff, d1             | d1 = nbytes % 512
        !            98: 
        !            99:        subql   #1, d1                  | prepare for dbra loop
        !           100: 
        !           101:        bmi     Ldone
        !           102: 
        !           103: L2:
        !           104: 
        !           105:        moveb   a1@+, a0@+
        !           106: 
        !           107:        dbra    d1, L2
        !           108: 
        !           109: Ldone:
        !           110: 
        !           111:        rts                             | return
        !           112: 

unix.superglobalmegacorp.com

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