aboutsummaryrefslogtreecommitdiffstats
path: root/src/x86_64/prelude.asm
blob: 788b8e99e4b7caba64db969f439164fa34dc9489 (plain)
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
54
55
56
printdln:
        sub     rsp, 40
        mov     BYTE [rsp+31], 10
        test    rdi, rdi
        jne     .L2
        mov     BYTE [rsp+30], 48
        mov     eax, 30
        mov     r8d, 2
.L3:
        lea     rsi, [rsp+rax]
        mov     rdx, r8
        ;; write syscall (Linux)
        mov     rdi, 1
        mov     rax, 1
        syscall
        add     rsp, 40
        ret
.L2:
        mov     r10d, 1
        js      .L12
.L4:
        mov     r8d, 1
        lea     r9, [rsp+31]
        mov     rsi, -3689348814741910323
.L5:
        mov     rax, rdi
        mov     rcx, r9
        mul     rsi
        sub     rcx, r8
        shr     rdx, 3
        lea     rax, [rdx+rdx*4]
        add     rax, rax
        sub     rdi, rax
        mov     rax, r8
        add     r8, 1
        add     edi, 48
        mov     BYTE [rcx], dil
        mov     rdi, rdx
        test    rdx, rdx
        jne     .L5
        cmp     r10d, -1
        jne     .L10
        not     r8
        mov     BYTE [rsp+32+r8], 45
        lea     r8, [rax+2]
.L10:
        mov     eax, 32
        sub     rax, r8
        jmp     .L3
.L12:
        neg     rdi
        mov     r10d, -1
        jmp     .L4

global  _start
_start: