:: limine / common / lib / mem.asm_x86_64 699 B raw

1
section .text
2
3
global memcpy
4
memcpy:
5
    mov rcx, rdx
6
    mov rax, rdi
7
    rep movsb
8
    ret
9
10
global memset
11
memset:
12
    push rdi
13
    mov rax, rsi
14
    mov rcx, rdx
15
    rep stosb
16
    pop rax
17
    ret
18
19
global memmove
20
memmove:
21
    mov rcx, rdx
22
    mov rax, rdi
23
24
    cmp rdi, rsi
25
    ja .copy_backwards
26
27
    rep movsb
28
    jmp .done
29
30
  .copy_backwards:
31
    lea rdi, [rdi+rcx-1]
32
    lea rsi, [rsi+rcx-1]
33
    std
34
    rep movsb
35
    cld
36
37
  .done:
38
    ret
39
40
global memcmp
41
memcmp:
42
    mov rcx, rdx
43
    repe cmpsb
44
    je .equal
45
46
    mov al, byte [rdi-1]
47
    sub al, byte [rsi-1]
48
    movsx rax, al
49
    jmp .done
50
51
  .equal:
52
    xor eax, eax
53
54
  .done:
55
    ret
56
57
section .note.GNU-stack noalloc noexec nowrite progbits
tab: 248 wrap: offon