home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / miwm.zoo / quick.s < prev    next >
Text File  |  1991-12-05  |  1KB  |  54 lines

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