From 7c108dbf487a54775aacf717b6bac4f25b80c041 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 29 Aug 2021 14:56:47 +0100 Subject: [PATCH] Update usage of `syscall` to use the intrinsics --- core/os/os_linux.odin | 4 ++-- core/sync/sync_freebsd.odin | 16 ++++++---------- core/sync/sync_linux.odin | 9 ++------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index 697105cac..35effc01b 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -7,6 +7,7 @@ import "core:runtime" import "core:strings" import "core:c" import "core:strconv" +import "core:intrinsics" Handle :: distinct i32; File_Time :: distinct u64; @@ -269,7 +270,6 @@ SYS_GETTID: Syscall : 186; foreign libc { @(link_name="__errno_location") __errno_location :: proc() -> ^int ---; - @(link_name="syscall") syscall :: proc(number: Syscall, #c_vararg args: ..any) -> i32 ---; @(link_name="open") _unix_open :: proc(path: cstring, flags: c.int, mode: c.int) -> Handle ---; @(link_name="close") _unix_close :: proc(fd: Handle) -> c.int ---; @@ -595,7 +595,7 @@ exit :: proc "contextless" (code: int) -> ! { } current_thread_id :: proc "contextless" () -> int { - return cast(int)syscall(SYS_GETTID); + return cast(int)intrinsics.syscall(SYS_GETTID); } dlopen :: proc(filename: string, flags: int) -> rawptr { diff --git a/core/sync/sync_freebsd.odin b/core/sync/sync_freebsd.odin index 0fa5f9e6f..240308b7d 100644 --- a/core/sync/sync_freebsd.odin +++ b/core/sync/sync_freebsd.odin @@ -1,16 +1,12 @@ package sync import "core:sys/unix" +import "core:intrinsics" -foreign import libc "system:c" current_thread_id :: proc "contextless" () -> int { - foreign libc { - syscall :: proc(number: i32, #c_vararg args: ..any) -> i32 --- - } - SYS_GETTID :: 186; - return int(syscall(SYS_GETTID)); + return int(intrinsics.syscall(SYS_GETTID)); } @@ -32,10 +28,10 @@ semaphore_destroy :: proc(s: ^Semaphore) { } semaphore_post :: proc(s: ^Semaphore, count := 1) { - // NOTE: SPEED: If there's one syscall to do this, we should use it instead of the loop. - for in 0.. int { - foreign libc { - syscall :: proc(number: i32, #c_vararg args: ..any) -> i32 --- - } - SYS_GETTID :: 186; - return int(syscall(SYS_GETTID)); + return int(intrinsics.syscall(SYS_GETTID)); }