Annotation of MiNT/src/gas/quickmov.s, revision 1.1.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.