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
57
58
59
60
61
62
63
64
65
66
67
68
69
|
.ifndef __SYS__
.set __SYS__, 1
.include "syscall.s"
# sys call args:
# %rdi
# %rsi
# %rdx
# %rcx
# %r8
# %r9
.macro __putargs6 arg:req, args:vararg
movq \arg, %r9
.endm
.macro __putargs5 arg:req, args:vararg
movq \arg, %r8
.ifnb \args
__putargs6 \args
.endif
.endm
.macro __putargs4 arg:req, args:vararg
movq \arg, %rcx
.ifnb \args
__putargs5 \args
.endif
.endm
.macro __putargs3 arg:req, args:vararg
movq \arg, %rdx
.ifnb \args
__putargs4 \args
.endif
.endm
.macro __putargs2 arg:req, args:vararg
movq \arg, %rsi
.ifnb \args
__putargs3 \args
.endif
.endm
.macro __putargs1 arg:req, args:vararg
movq \arg, %rdi
.ifnb \args
__putargs2 \args
.endif
.endm
.macro sysargs args:vararg
.ifnb \args
__putargs1 \args
.endif
.endm
.macro sys func:req, args:vararg
sysargs \args
movq $__NR_\func, %rax
syscall
.endm
.set STDIN, 0
.set STDOUT, 1
.set STDERR, 2
.endif
|