home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mint104s.zoo / mint.src / quickmov.spp < prev    next >
Text File  |  1993-03-08  |  2KB  |  62 lines

  1. ; Copyright 1992 Eric R. Smith
  2. ; All rights reserved.
  3. ;
  4. ; quickmove(char *dst, char *src, long nbytes):
  5. ; quickly copy "nbytes" bytes from src to dst. Assumes that both
  6. ; src and dst are word aligned.
  7. ;
  8.     TEXT
  9.  
  10.     XDEF    _quickmove
  11.  
  12. _quickmove:
  13.     move.l    4(sp),a0        ; get dst
  14.     move.l    8(sp),a1        ; get src
  15.     move.l    12(sp),d0        ; get nbytes
  16.     lsr.l    #8,d0            ; 
  17.     lsr.l    #1,d0            ; d0 = nbytes / 512
  18.     subq.l    #1,d0            ; prepare for dbra loop
  19.     bmi.s    Leftover        ; if < 0, skip
  20.     movem.l    d1-d7/a2-a6,-(sp)    ; save regs
  21. L1:
  22.     movem.l    (a1)+,d1-d7/a2-a6    ; read 12*4 = 48 bytes
  23.     movem.l    d1-d7/a2-a6,(a0)    ;
  24.     movem.l    (a1)+,d1-d7/a2-a6    ; 2nd read
  25.     movem.l    d1-d7/a2-a6,48(a0)    ;
  26.     movem.l    (a1)+,d1-d7/a2-a6    ; 3rd read
  27.     movem.l    d1-d7/a2-a6,96(a0)    ;
  28.     movem.l    (a1)+,d1-d7/a2-a6    ; 4th read
  29.     movem.l    d1-d7/a2-a6,144(a0)    ;
  30.     movem.l    (a1)+,d1-d7/a2-a6    ; 5th
  31.     movem.l    d1-d7/a2-a6,192(a0)    ;
  32.     movem.l    (a1)+,d1-d7/a2-a6    ; 6th
  33.     movem.l    d1-d7/a2-a6,240(a0)    ;
  34.     movem.l    (a1)+,d1-d7/a2-a6    ; 7th
  35.     movem.l    d1-d7/a2-a6,288(a0)    ;
  36.     movem.l    (a1)+,d1-d7/a2-a6    ; 8th
  37.     movem.l    d1-d7/a2-a6,336(a0)    ;
  38.     movem.l    (a1)+,d1-d7/a2-a6    ; 9th
  39.     movem.l    d1-d7/a2-a6,384(a0)    ;
  40.     movem.l    (a1)+,d1-d7/a2-a6    ; 10th
  41.     movem.l    d1-d7/a2-a6,432(a0)    ; At this point, 480 bytes done
  42.     movem.l    (a1)+,d1-d7/a2        ; Only do 32 more bytes
  43.     movem.l    d1-d7/a2,480(a0)    ; for a total of 512
  44.  
  45.     lea    512(a0),a0
  46.     subq.l    #1,d0
  47.     bge.s    L1
  48.  
  49.     movem.l    (sp)+,d1-d7/a2-a6    ; pop registers
  50.  
  51. Leftover:                ; do the remaining bytes
  52.     move.l    12(sp),d1
  53.     and.l    #$01ff,d1        ; d1 = nbytes % 512
  54.     subq.l    #1,d1            ; prepare for dbra loop
  55.     bmi.s    Ldone
  56. L2:
  57.     move.b    (a1)+,(a0)+
  58.     dbra    d1,L2
  59. Ldone:
  60.     rts                ; return
  61.     END
  62.