as instrucciones de DMB se pueden omitir de forma segura en ARM Cortex M4
stoy revisando el ensamblaje generado por GCC para un ARM Cortex M4, y noté queatomic_compare_exchange_weak
obtiene dosDMB
instrucciones insertadas alrededor de la condición (compiladas con GCC 4.9 usando-std=gnu11 -O2
):
// if (atomic_compare_exchange_weak(&address, &x, y))
dmb sy
ldrex r0, [r3]
cmp r0, r2
itt eq
strexeq lr, r1, [r3]
cmpeq.w lr, #0
dmb sy
bne.n ...
Desde el guía de programación de instrucciones de barrera para ARM Cortex M4 Establece que
Omitir la instrucción DMB o DSB en los ejemplos de la Figura 41 y la Figura 42 no causaría ningún error porque los procesadores Cortex-M:
no reordenar transferencias de memoriano permita que se superpongan dos transferencias de escritura.¿Hay alguna razón por la que no se puedan eliminar estas instrucciones cuando se apunta a Cortex M?