home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / mem_move.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-15  |  1.3 KB  |  74 lines

  1.  
  2. *    Maxon C++:
  3. *    Library-Modul "mem_move"
  4. *    Jens Gelhar 19.03.93
  5.  
  6.  
  7.     xdef    _memcpy,memcpy__PvPCvUi
  8.     xdef    _memmove,memmove__PvPCvUi
  9.  
  10. _memcpy:
  11. memcpy__PvPCvUi:
  12. _memmove:
  13. memmove__PvPCvUi:
  14.     movem.l    4(a7),a0/a1
  15.     move.l    12(a7),d0
  16.     beq.b    ret
  17.     bmi.b    ret
  18.     cmp.l    a0,a1
  19.     bhs.b    forward
  20.     ; Rückwärts kopieren:
  21.     add.l    d0,a0
  22.     add.l    d0,a1
  23.     cmp.l    #8,d0        ; bei weniger als 8 Bytes keinen Kult machen!
  24.     blo.b    .loop
  25.     move.l    a0,d1
  26.     lsr.l    #1,d1        ; a0 ungerade?
  27.     bcc.b    .a0even
  28.     move.b    -(a1),-(a0)    ; dann gerade machen!
  29.     subq.l    #1,d0
  30. .a0even    move.l    a1,d1
  31.     lsr.l    #1,d1        ; a1 ungerade?
  32.     bcs.b    .loop        ; dann hilft nix mehr
  33.     ; Langwortweise kopieren:
  34.     subq.l    #4,d0
  35.     blo.b    .nolw
  36. .lw    move.l    -(a1),-(a0)
  37.     subq.l    #4,d0
  38.     bhi.b    .lw
  39. .nolw    addq.l    #4,d0
  40.     beq.b    ret
  41. .loop    move.b    -(a1),-(a0)
  42.     subq.l    #1,d0
  43.     bne.b    .loop
  44.     bra.b    ret
  45.  
  46. forward: ; Vorwärts verschieben
  47.     cmp.l    #8,d0        ; bei weniger als 8 Bytes keinen Kult machen!
  48.     blo.b    .loop
  49.     move.l    a0,d1
  50.     lsr.l    #1,d1        ; a0 ungerade?
  51.     bcc.b    .a0even
  52.     move.b    (a1)+,(a0)+    ; dann gerade machen!
  53.     subq.l    #1,d0
  54. .a0even    move.l    a1,d1
  55.     lsr.l    #1,d1        ; a1 ungerade?
  56.     bcs.b    .loop        ; dann hilft nix mehr
  57.     ; Langwortweise kopieren:
  58.     subq.l    #4,d0
  59.     blo.b    .nolw
  60. .lw    move.l    (a1)+,(a0)+
  61.     subq.l    #4,d0
  62.     bhi.b    .lw
  63. .nolw    addq.l    #4,d0
  64.     beq.b    ret
  65. .loop    ; Byteweise kopieren:
  66.     move.b    (a1)+,(a0)+
  67.     subq.l    #1,d0
  68.     bne.b    .loop
  69.  
  70. ret:    move.l    4(a7),d0
  71.     rts
  72.  
  73.     end
  74.