aboutsummaryrefslogtreecommitdiff
path: root/std/std.zig
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2015-12-10 17:42:47 -0700
committerAndrew Kelley <superjoe30@gmail.com>2015-12-10 17:42:47 -0700
commit15ba5bc54e286fb64d67e38857ede4b0dac9c841 (patch)
tree994b49126657dd38831d4a937e25f5fde4a8cff2 /std/std.zig
parent0dbee2300ed28c18ecccaf71f10f68eb2da71266 (diff)
downloadzig-15ba5bc54e286fb64d67e38857ede4b0dac9c841.tar.gz
zig-15ba5bc54e286fb64d67e38857ede4b0dac9c841.zip
provide std.zig and add it to import paths
Diffstat (limited to 'std/std.zig')
-rw-r--r--std/std.zig23
1 files changed, 23 insertions, 0 deletions
diff --git a/std/std.zig b/std/std.zig
new file mode 100644
index 0000000000..3bcf9e4783
--- /dev/null
+++ b/std/std.zig
@@ -0,0 +1,23 @@
+fn syscall3(number: isize, arg1: isize, arg2: isize, arg3: isize) -> isize {
+ let mut result : isize;
+ asm volatile (
+ "mov %[number], %%rax\n"
+ "mov %[arg1], %%rdi\n"
+ "mov %[arg2], %%rsi\n"
+ "mov %[arg3], %%rdx\n"
+ "syscall\n"
+ "mov %%rax, %[ret]\n"
+ : [ret] "=r" (result)
+ : [number] "r" (number), [arg1] "r" (arg1), [arg2] "r" (arg2), [arg3] "r" (arg3)
+ : "rcx", "r11", "rax", "rdi", "rsi", "rdx");
+ return result;
+}
+
+// TODO error handling
+// TODO zig strings instead of C strings
+// TODO handle buffering and flushing
+pub print_str(str : *const u8, len: isize) {
+ let SYS_write = 1;
+ let stdout_fileno = 1;
+ syscall3(SYS_write, stdout_fileno, str as isize, str_len);
+}