diff options
Diffstat (limited to 'sys.s')
| -rw-r--r-- | sys.s | 69 |
1 files changed, 69 insertions, 0 deletions
@@ -0,0 +1,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 |
