home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / mint / mint095s / quickmov.s < prev    next >
Text File  |  1993-08-03  |  2KB  |  57 lines

  1. |
  2. | quickmove(char *dst, char *src, long nbytes):
  3. | quickly copy "nbytes" bytes from src to dst. Assumes that both
  4. | src and dst are word aligned.
  5. |
  6.     .text
  7.     .globl    _quickmove
  8. _quickmove:
  9.     movel    sp@(4), a0        | get dst
  10.     movel    sp@(8), a1        | get src
  11.     movel    sp@(12), d0        | get nbytes
  12.     lsrl    #8, d0            | 
  13.     lsrl    #1, d0            | d0 = nbytes / 512
  14.     subql    #1, d0            | prepare for dbra loop
  15.     bmi    Leftover        | if < 0, skip
  16.     moveml    d1-d7/a2-a6, sp@-    | save regs
  17. L1:
  18.     moveml    a1@+, d1-d7/a2-a6    | read 12*4 = 48 bytes
  19.     moveml    d1-d7/a2-a6, a0@    |
  20.     moveml    a1@+, d1-d7/a2-a6    | 2nd read
  21.     moveml    d1-d7/a2-a6, a0@(48)    |
  22.     moveml    a1@+, d1-d7/a2-a6    | 3rd read
  23.     moveml    d1-d7/a2-a6, a0@(96)    |
  24.     moveml    a1@+, d1-d7/a2-a6    | 4th read
  25.     moveml    d1-d7/a2-a6, a0@(144)    |
  26.     moveml    a1@+, d1-d7/a2-a6    | 5th
  27.     moveml    d1-d7/a2-a6, a0@(192)    |
  28.     moveml    a1@+, d1-d7/a2-a6    | 6th
  29.     moveml    d1-d7/a2-a6, a0@(240)    |
  30.     moveml    a1@+, d1-d7/a2-a6    | 7th
  31.     moveml    d1-d7/a2-a6, a0@(288)    |
  32.     moveml    a1@+, d1-d7/a2-a6    | 8th
  33.     moveml    d1-d7/a2-a6, a0@(336)    |
  34.     moveml    a1@+, d1-d7/a2-a6    | 9th
  35.     moveml    d1-d7/a2-a6, a0@(384)    |
  36.     moveml    a1@+, d1-d7/a2-a6    | 10th
  37.     moveml    d1-d7/a2-a6, a0@(432)    | At this point, 480 bytes done
  38.     moveml    a1@+, d1-d7/a2        | Only do 32 more bytes
  39.     moveml    d1-d7/a2, a0@(480)    | for a total of 512
  40.  
  41.     lea    a0@(512), a0
  42.     subql    #1, d0
  43.     bge    L1
  44.  
  45.     moveml    sp@+, d1-d7/a2-a6    | pop registers
  46.  
  47. Leftover:                | do the remaining bytes
  48.     movel    sp@(12), d1
  49.     andl    #0x01ff, d1        | d1 = nbytes % 512
  50.     subql    #1, d1            | prepare for dbra loop
  51.     bmi    Ldone
  52. L2:
  53.     moveb    a1@+, a0@+
  54.     dbra    d1, L2
  55. Ldone:
  56.     rts                | return
  57.