diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-09-07 14:37:40 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-09-07 14:59:29 +0200 |
commit | 2b4c03cbc84090174a3cf5d27887bac8fb052b57 (patch) | |
tree | 5765297bc0b861b53526cbed3fb9d2257c456d90 /kern/macros.h | |
parent | 48b94c74e9817781a1e7a4fdd03fa471953047fb (diff) |
kern: fix loop reading the time value
Previously, recent versions of gcc would hoist the loads out of the
loop reading the time value.
* kern/macros.h (access_once): New macro.
* kern/mach_clock.c (host_get_time): Use the new macro to prevent the
loads from being hoisted out of the loop.
Diffstat (limited to 'kern/macros.h')
-rw-r--r-- | kern/macros.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kern/macros.h b/kern/macros.h index 7cc579d..c2e8545 100644 --- a/kern/macros.h +++ b/kern/macros.h @@ -52,6 +52,8 @@ #define structof(ptr, type, member) \ ((type *)((char *)(ptr) - offsetof(type, member))) +#define access_once(x) (*(volatile typeof(x) *)&(x)) + #define alignof(x) __alignof__(x) #ifndef likely |