use USER_CPPFLAGS
[AROS.git] / arch / m68k-all / exec / copymem_.S
blob0ca42c176d37b3e38aca65090ecf92912d1baf99
1 /*
2     Copyright © 1995-2017, The AROS Development Team. All rights reserved.
3     $Id$
5     Desc: CopyMem
6     Lang: english
7 */
9         #include "aros/m68k/asm.h"
11         .text
12         .balign 4
14         .globl  AROS_SLIB_ENTRY(CopyMem,Exec,104)
15         .type   AROS_SLIB_ENTRY(CopyMem,Exec,104),@function
16 AROS_SLIB_ENTRY(CopyMem,Exec,104):
18         moveq #64,%d1
19         cmp.l %d1,%d0
20         bcs.s copy_00_bytes
21         move.l %a0,%d1
22         btst #0,%d1
23         beq.s copy_00_salign
24         move.b (%a0)+,(%a1)+
25         subq.l #1,%d0
26 copy_00_salign:
27         move.l %a1,%d1
28         btst #0,%d1
29         // alignment mismatch?
30         bne.s copy_00_bytes
31         movem.l %d2-%d7/%a2-%a6,-(%sp)
32 copy_00_movem:
33         movem.l (%a0)+,%d1-%d7/%a2-%a6
34         movem.l %d1-%d7/%a2-%a6,(%a1)
35         moveq #12*4,%d1
36         sub.l %d1,%d0
37         add.l %d1,%a1
38         cmp.l %d1,%d0
39         bcc.s copy_00_movem
40         movem.l (%sp)+,%d2-%d7/%a2-%a6
41         // copy byte by byte
42 copy_00_bytes:
43         move.w %d0,%d1
44         swap %d0
45         bra.s copy_00_bytes2
46 copy_00_bytes_loop:
47         move.b (%a0)+,(%a1)+
48 copy_00_bytes2:
49         dbf %d1,copy_00_bytes_loop
50         dbf %d0,copy_00_bytes_loop
51         rts