1 module syscalld.arch.syscall_x86_64; 2 3 version(Posix): 4 version(D_InlineAsm_X86_64): 5 @nogc: 6 nothrow: 7 8 size_t syscall(size_t ident) 9 { 10 size_t ret; 11 12 synchronized asm @nogc nothrow 13 { 14 mov RAX, ident; 15 syscall; 16 mov ret, RAX; 17 } 18 return ret; 19 } 20 21 size_t syscall(size_t ident, size_t n) 22 { 23 size_t ret; 24 25 synchronized asm @nogc nothrow 26 { 27 mov RAX, ident; 28 mov RDI, n[RBP]; 29 syscall; 30 mov ret, RAX; 31 } 32 return ret; 33 } 34 35 size_t syscall(size_t ident, size_t n, size_t arg1) 36 { 37 size_t ret; 38 39 synchronized asm @nogc nothrow 40 { 41 mov RAX, ident; 42 mov RDI, n[RBP]; 43 mov RSI, arg1[RBP]; 44 syscall; 45 mov ret, RAX; 46 } 47 return ret; 48 } 49 50 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2) 51 { 52 size_t ret; 53 54 synchronized asm @nogc nothrow 55 { 56 mov RAX, ident; 57 mov RDI, n[RBP]; 58 mov RSI, arg1[RBP]; 59 mov RDX, arg2[RBP]; 60 syscall; 61 mov ret, RAX; 62 } 63 return ret; 64 } 65 66 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2, size_t arg3) 67 { 68 size_t ret; 69 70 synchronized asm @nogc nothrow 71 { 72 mov RAX, ident; 73 mov RDI, n[RBP]; 74 mov RSI, arg1[RBP]; 75 mov RDX, arg2[RBP]; 76 mov R10, arg3[RBP]; 77 syscall; 78 mov ret, RAX; 79 } 80 return ret; 81 } 82 83 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2, size_t arg3, size_t arg4) 84 { 85 size_t ret; 86 87 synchronized asm @nogc nothrow 88 { 89 mov RAX, ident; 90 mov RDI, n[RBP]; 91 mov RSI, arg1[RBP]; 92 mov RDX, arg2[RBP]; 93 mov R10, arg3[RBP]; 94 mov R8, arg4[RBP]; 95 syscall; 96 mov ret, RAX; 97 } 98 return ret; 99 } 100 101 size_t syscall(size_t ident, size_t n, size_t arg1, size_t arg2, size_t arg3, size_t arg4, size_t arg5) 102 { 103 size_t ret; 104 105 synchronized asm @nogc nothrow 106 { 107 mov RAX, ident; 108 mov RDI, n[RBP]; 109 mov RSI, arg1[RBP]; 110 mov RDX, arg2[RBP]; 111 mov R10, arg3[RBP]; 112 mov R8, arg4[RBP]; 113 mov R9, arg5[RBP]; 114 syscall; 115 mov ret, RAX; 116 } 117 return ret; 118 }