]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/l4re-core/cxx/lib/tl/include/utils
Update
[l4.git] / l4 / pkg / l4re-core / cxx / lib / tl / include / utils
1 #pragma once
2
3 namespace cxx {
4
5 template< typename T >
6 T access_once(T const *a)
7 {
8 #if 1
9   __asm__ __volatile__ ( "" : "=m"(*const_cast<T*>(a)));
10   T tmp = *a;
11   __asm__ __volatile__ ( "" : "=m"(*const_cast<T*>(a)));
12   return tmp;
13 #else
14   return *static_cast<T const volatile *>(a);
15 #endif
16 }
17
18 template< typename T >
19 void write_now(T *a, T const &val)
20 {
21   __asm__ __volatile__ ( "" : "=m"(*a));
22   *a = val;
23   __asm__ __volatile__ ( "" : : "m"(*a));
24 }
25
26
27 }
28