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

Juan I Carrano notifications at github.com
Thu Apr 25 12:02:24 CEST 2019


jcarrano 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

<details>
 <summary>read_fence_test.c</summary>

```c
extern void f(void);

int x;

int *p;

int test(void)
{
    int y = x;
    f();
    return y+x;
}

int z(int x)
{
    return x*x;
}

int test2(void)
{
    int y = x;
    int k = z(x);
    return y+x+k;
}


int test3(void)
{
    int y = x;
    //__sync_synchronize();
    __asm__ __volatile__("": : :"memory");
    return y + x;
}
```

</details>

Compile with `arm-none-eabi-gcc -mcpu=cortex-m3 -std=c99 -Og -dA -ggdb -c read_fence_test.c`

In `test()`, the compiler is forced to emit a re-read of `x` because it does not know if `f()` modified it.

-- 
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#discussion_r278481661
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.riot-os.org/pipermail/notifications/attachments/20190425/4d82864b/attachment.html>


More information about the notifications mailing list