mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
Make many package time procedures use "contextless" calling convention
This commit is contained in:
@@ -3,7 +3,7 @@ package sys_windows
|
|||||||
|
|
||||||
foreign import Synchronization "system:Synchronization.lib"
|
foreign import Synchronization "system:Synchronization.lib"
|
||||||
|
|
||||||
@(default_calling_convention="c")
|
@(default_calling_convention="stdcall")
|
||||||
foreign Synchronization {
|
foreign Synchronization {
|
||||||
WaitOnAddress :: proc(Address: PVOID, CompareAddress: PVOID, AddressSize: SIZE_T, dwMilliseconds: DWORD) -> BOOL ---
|
WaitOnAddress :: proc(Address: PVOID, CompareAddress: PVOID, AddressSize: SIZE_T, dwMilliseconds: DWORD) -> BOOL ---
|
||||||
WakeByAddressSingle :: proc(Address: PVOID) ---
|
WakeByAddressSingle :: proc(Address: PVOID) ---
|
||||||
|
|||||||
@@ -6,9 +6,6 @@ import win32 "core:sys/windows"
|
|||||||
import "core:runtime"
|
import "core:runtime"
|
||||||
import "core:intrinsics"
|
import "core:intrinsics"
|
||||||
import "core:time"
|
import "core:time"
|
||||||
import "core:fmt"
|
|
||||||
|
|
||||||
_ :: fmt
|
|
||||||
|
|
||||||
Sema :: struct {
|
Sema :: struct {
|
||||||
count: i32,
|
count: i32,
|
||||||
|
|||||||
+6
-6
@@ -6,16 +6,16 @@ Tick :: struct {
|
|||||||
_nsec: i64, // relative amount
|
_nsec: i64, // relative amount
|
||||||
}
|
}
|
||||||
|
|
||||||
tick_now :: proc() -> Tick {
|
tick_now :: proc "contextless" () -> Tick {
|
||||||
return _tick_now()
|
return _tick_now()
|
||||||
}
|
}
|
||||||
|
|
||||||
tick_diff :: proc(start, end: Tick) -> Duration {
|
tick_diff :: proc "contextless" (start, end: Tick) -> Duration {
|
||||||
d := end._nsec - start._nsec
|
d := end._nsec - start._nsec
|
||||||
return Duration(d)
|
return Duration(d)
|
||||||
}
|
}
|
||||||
|
|
||||||
tick_lap_time :: proc(prev: ^Tick) -> Duration {
|
tick_lap_time :: proc "contextless" (prev: ^Tick) -> Duration {
|
||||||
d: Duration
|
d: Duration
|
||||||
t := tick_now()
|
t := tick_now()
|
||||||
if prev._nsec != 0 {
|
if prev._nsec != 0 {
|
||||||
@@ -25,18 +25,18 @@ tick_lap_time :: proc(prev: ^Tick) -> Duration {
|
|||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
tick_since :: proc(start: Tick) -> Duration {
|
tick_since :: proc "contextless" (start: Tick) -> Duration {
|
||||||
return tick_diff(start, tick_now())
|
return tick_diff(start, tick_now())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@(deferred_in_out=_tick_duration_end)
|
@(deferred_in_out=_tick_duration_end)
|
||||||
SCOPED_TICK_DURATION :: proc(d: ^Duration) -> Tick {
|
SCOPED_TICK_DURATION :: proc "contextless" (d: ^Duration) -> Tick {
|
||||||
return tick_now()
|
return tick_now()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_tick_duration_end :: proc(d: ^Duration, t: Tick) {
|
_tick_duration_end :: proc "contextless" (d: ^Duration, t: Tick) {
|
||||||
d^ = tick_since(t)
|
d^ = tick_since(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ import "core:sys/es"
|
|||||||
|
|
||||||
IS_SUPPORTED :: true;
|
IS_SUPPORTED :: true;
|
||||||
|
|
||||||
now :: proc() -> Time {
|
now :: proc "contextless" () -> Time {
|
||||||
// TODO Replace once there's a proper time API.
|
// TODO Replace once there's a proper time API.
|
||||||
return Time{_nsec = i64(es.TimeStampMs() * 1e6)};
|
return Time{_nsec = i64(es.TimeStampMs() * 1e6)};
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep :: proc(d: Duration) {
|
sleep :: proc "contextless" (d: Duration) {
|
||||||
es.Sleep(u64(d/Millisecond));
|
es.Sleep(u64(d/Millisecond));
|
||||||
}
|
}
|
||||||
|
|
||||||
_tick_now :: proc() -> Tick {
|
_tick_now :: proc "contextless" () -> Tick {
|
||||||
return Tick{_nsec = i64(es.TimeStampMs() * 1e6)};
|
return Tick{_nsec = i64(es.TimeStampMs() * 1e6)};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ CLOCK_SYSTEM :: CLOCK_REALTIME
|
|||||||
CLOCK_CALENDAR :: CLOCK_MONOTONIC
|
CLOCK_CALENDAR :: CLOCK_MONOTONIC
|
||||||
|
|
||||||
|
|
||||||
clock_gettime :: proc(clock_id: u64) -> TimeSpec {
|
clock_gettime :: proc "contextless" (clock_id: u64) -> TimeSpec {
|
||||||
ts : TimeSpec // NOTE(tetra): Do we need to initialize this?
|
ts : TimeSpec // NOTE(tetra): Do we need to initialize this?
|
||||||
_unix_clock_gettime(clock_id, &ts)
|
_unix_clock_gettime(clock_id, &ts)
|
||||||
return ts
|
return ts
|
||||||
@@ -85,7 +85,7 @@ nanosleep :: proc(nanoseconds: i64) -> int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_tick_now :: proc() -> Tick {
|
_tick_now :: proc "contextless" () -> Tick {
|
||||||
t := clock_gettime(CLOCK_MONOTONIC_RAW)
|
t := clock_gettime(CLOCK_MONOTONIC_RAW)
|
||||||
_nsec := t.tv_sec*1e9 + t.tv_nsec
|
_nsec := t.tv_sec*1e9 + t.tv_nsec
|
||||||
return Tick{_nsec = _nsec}
|
return Tick{_nsec = _nsec}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ sleep :: proc(d: Duration) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
_tick_now :: proc() -> Tick {
|
_tick_now :: proc "contextless" () -> Tick {
|
||||||
mul_div_u64 :: proc(val, num, den: i64) -> i64 {
|
mul_div_u64 :: proc "contextless" (val, num, den: i64) -> i64 {
|
||||||
q := val / den
|
q := val / den
|
||||||
r := val % den
|
r := val % den
|
||||||
return q * num + r * num / den
|
return q * num + r * num / den
|
||||||
|
|||||||
Reference in New Issue
Block a user