File: macros_arm64.inc

package info (click to toggle)
mini-init-asm 0.3.1%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 372 kB
  • sloc: asm: 3,733; sh: 693; makefile: 85
file content (53 lines) | stat: -rw-r--r-- 974 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Common macros & helpers for Linux AArch64 syscalls

.extern write_all

.macro SYSCALL num
    mov x8, \num
    svc #0
.endm

.macro WRITE fd, ptr, len
    mov x0, \fd
    mov x1, \ptr
    mov x2, \len
    SYSCALL SYS_write
.endm

.macro EXIT code
    mov x0, \code
    SYSCALL SYS_exit
.endm

.macro LOG msg_ptr, msg_len
    stp x0, x1, [sp, #-16]!
    stp x2, x3, [sp, #-16]!
    str x30, [sp, #-16]!
    adrp x3, g_verbose
    add x3, x3, :lo12:g_verbose
    ldr x3, [x3]
    cbz x3, .Llog_done\@
    bl get_timestamp_ptr
    mov x1, x0
    mov x0, #2
    mov x2, #18
    bl write_all
    mov x0, #2
    adrp x1, \msg_ptr
    add x1, x1, :lo12:\msg_ptr
    mov x2, #\msg_len
    bl write_all
    // newline (keep stack 16-byte aligned)
    sub sp, sp, #16
    mov w4, #'\n'
    strb w4, [sp]
    mov x0, #2
    mov x1, sp
    mov x2, #1
    bl write_all
    add sp, sp, #16
.Llog_done\@:
    ldr x30, [sp], #16
    ldp x2, x3, [sp], #16
    ldp x0, x1, [sp], #16
.endm