I had only tested this code for ARMv7 and ARMv8. This patch adds several
fallback paths if the processor does not support dmb ish:
- dmb sy if a cortex-M with support for dmb
- mcr p15, #0, r0, c7, c10, #5 for ARMv6 (special instruction equivalent to a DMB)
- call to __sync_synchronize otherwise.
These fallback paths were chosen based on the code for fence seq_cst.
Thanks to luqmana for having noticed this bug.