Можно ли безопасно пропустить инструкции DMB в ARM Cortex M4? - PullRequest
0 голосов
/ 11 июня 2018

Я просматриваю сборку, сгенерированную GCC для ARM Cortex M4, и заметил, что atomic_compare_exchange_weak получает две DMB инструкции, вставленные вокруг условия (скомпилировано с GCC 4.9 с использованием -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    ...

Поскольку в руководстве по программированию для барьерных инструкций для ARM Cortex M4 указано, что:

Пропуск инструкции DMB или DSB в примерах на рисунках 41 и 42 не будетвызвать любую ошибку, потому что процессоры Cortex-M:

  • не переупорядочивают передачи памяти
  • не позволяют перекрывать две передачи записи.

Есть ли причина, по которой эти инструкции нельзя было удалить при нацеливании на Cortex M?

1 Ответ

0 голосов
/ 11 июня 2018

Я не знаю, можно ли использовать Cortex M4 в конфигурации с несколькими процессорами / многоядерными процессорами, но в целом:

  1. Барьеры памяти никогда не требуются (всегда могут быть опущены)в одноядерных системах.
  2. Барьеры памяти всегда необходимы (их нельзя опускать) в многоядерных системах, где потоки / процессы, работающие в одной и той же памяти, могут работать на разных ядрах.

Наличие или отсутствие переупорядочения операций записи в память на аппаратном уровне не имеет значения.

Конечно, я ожидаю, что инструкция DMB будет в основном бесплатной на чипах, которые не поддерживают SMP, поэтому я не уверенпочему вы хотите попытаться взломать его.

Обратите внимание, что, основываясь на вопросе, ссылающемся на код, который компилятор создает для атомарных встроенных функций, я предполагаю, что контекст предназначен для синхронизации атомарных элементов, чтобы сделать ихсоответствовать высокоуровневой спецификации, а не другим применениям, таким как барьеры ввода-вывода для MMIO, и вышеупомянутое «никогда» не должно рассматриваться как относящееся к этому (unrel) (хотя я подозреваю, что по причинам, которые вы уже указали, это не относится к Cortex M4).

...