[riot-notifications] [RIOT-OS/RIOT] sys: Added simple memory barrier API (#11438)

Kaspar Schleiser notifications at github.com
Wed Apr 24 16:47:00 CEST 2019


kaspar030 commented on this pull request.



> + * uint16_t measure_time(void) {
+ *     uint16_t pre = TIMER;
+ *     do_computing();
+ *     uint16_t post = TIMER;
+ *     return pre - post;
+ * }
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * In the above example the compiler will now dutifully generate code to access
+ * the timer register two times. The compiler will also not reorder any
+ * `volatile` memory access in regard to any other `volatile` memory access.
+ * But some compilers will reorder non-`volatile` accesses across `volatile`
+ * memory accesses. If the implementation of `do_computing()` is visible to the
+ * compiler, the compiler may conclude that do_computing() could be moved
+ * above the first or below the second access to `TIMER`, which will render the
+ * benchmark meaningless. (**Beware:** Even if `do_something()` is an external

Is this accurate? AFAIK, function calls are sequence points WRT the abstract machine. LTO cannot change that.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/RIOT-OS/RIOT/pull/11438#pullrequestreview-230159982
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.riot-os.org/pipermail/notifications/attachments/20190424/bfe6a106/attachment.html>


More information about the notifications mailing list