mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Update usage of syscall to use the intrinsics
This commit is contained in:
@@ -7,6 +7,7 @@ import "core:runtime"
|
|||||||
import "core:strings"
|
import "core:strings"
|
||||||
import "core:c"
|
import "core:c"
|
||||||
import "core:strconv"
|
import "core:strconv"
|
||||||
|
import "core:intrinsics"
|
||||||
|
|
||||||
Handle :: distinct i32;
|
Handle :: distinct i32;
|
||||||
File_Time :: distinct u64;
|
File_Time :: distinct u64;
|
||||||
@@ -269,7 +270,6 @@ SYS_GETTID: Syscall : 186;
|
|||||||
|
|
||||||
foreign libc {
|
foreign libc {
|
||||||
@(link_name="__errno_location") __errno_location :: proc() -> ^int ---;
|
@(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="open") _unix_open :: proc(path: cstring, flags: c.int, mode: c.int) -> Handle ---;
|
||||||
@(link_name="close") _unix_close :: proc(fd: Handle) -> c.int ---;
|
@(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 {
|
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 {
|
dlopen :: proc(filename: string, flags: int) -> rawptr {
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
package sync
|
package sync
|
||||||
|
|
||||||
import "core:sys/unix"
|
import "core:sys/unix"
|
||||||
|
import "core:intrinsics"
|
||||||
|
|
||||||
foreign import libc "system:c"
|
|
||||||
|
|
||||||
current_thread_id :: proc "contextless" () -> int {
|
current_thread_id :: proc "contextless" () -> int {
|
||||||
foreign libc {
|
|
||||||
syscall :: proc(number: i32, #c_vararg args: ..any) -> i32 ---
|
|
||||||
}
|
|
||||||
|
|
||||||
SYS_GETTID :: 186;
|
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) {
|
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.
|
// NOTE: SPEED: If there's one syscall to do this, we should use it instead of the loop.
|
||||||
for in 0..<count {
|
for in 0..<count {
|
||||||
assert(unix.sem_post(&s.handle) == 0);
|
assert(unix.sem_post(&s.handle) == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
semaphore_wait_for :: proc(s: ^Semaphore) {
|
semaphore_wait_for :: proc(s: ^Semaphore) {
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
package sync
|
package sync
|
||||||
|
|
||||||
import "core:sys/unix"
|
import "core:sys/unix"
|
||||||
|
import "core:intrinsics"
|
||||||
foreign import libc "system:c"
|
|
||||||
|
|
||||||
current_thread_id :: proc "contextless" () -> int {
|
current_thread_id :: proc "contextless" () -> int {
|
||||||
foreign libc {
|
|
||||||
syscall :: proc(number: i32, #c_vararg args: ..any) -> i32 ---
|
|
||||||
}
|
|
||||||
|
|
||||||
SYS_GETTID :: 186;
|
SYS_GETTID :: 186;
|
||||||
return int(syscall(SYS_GETTID));
|
return int(intrinsics.syscall(SYS_GETTID));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user