]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/arm64/memmove.s
libc: change usize to 64-bit for amd64 and arm64, make memory(2) functions use usize
[plan9front.git] / sys / src / libc / arm64 / memmove.s
1 TEXT memcpy(SB), $-4
2 TEXT memmove(SB), $-4
3         MOV     from+8(FP), R1
4         MOV     n+16(FP), R2
5
6         CMP     R0, R1
7         BEQ     _done
8         BLT     _backward
9
10 _forward:
11         MOV     R0, R7
12         ADD     R0, R2, R3
13         BIC     $15, R2, R4
14         CBZ     R4, _floop1
15         ADD     R0, R4, R4
16
17 _floop16:
18         MOVP    (R1)16!, R5, R6
19         MOVP    R5, R6, (R7)16!
20         CMP     R4, R7
21         BNE     _floop16
22
23 _floop1:
24         CMP     R3, R7
25         BEQ     _done
26         MOVBU   (R1)1!, R5
27         MOVBU   R5, (R7)1!
28         B       _floop1
29
30 _done:
31         RETURN
32
33 _backward:
34         ADD     R2, R1, R1
35         ADD     R2, R0, R3
36         BIC     $15, R2, R4
37         CBZ     R4, _bloop1
38         SUB     R4, R3, R4
39
40 _bloop16:
41         MOVP    -16(R1)!, R5, R6
42         MOVP    R5, R6, -16(R3)!
43         CMP     R4, R3
44         BNE     _bloop16
45
46 _bloop1:
47         CMP     R0, R3
48         BEQ     _done
49         MOVBU   -1(R1)!, R5
50         MOVBU   R5, -1(R3)!
51         B       _bloop1