Почему компиляторы генерируют нормальные нагрузки и хранилища для 64-битной атомки, а не в RISC-V?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему компиляторы генерируют нормальные нагрузки и хранилища для 64-битной атомки, а не в RISC-V?

Сообщение Anonymous »

У меня есть эта функция: < /p>

Код: Выделить всё

void not(std::atomic_uint64_t& a) {
a = ~a;
}
< /code>
Я ожидал, что мой компилятор генерирует сборку RISC-V, которая будет выглядеть так: < /p>
li t0, -1
amoxor.aqrl x0, t0, (a0)
ret
< /code>
Но когда я посмотрел на GCC, сгенерированная сборка выглядела следующая: < /p>
fence   rw,rw
ld      a5,0(a0)
fence   r,rw
not     a5,a5
fence   rw,w
sd      a5,0(a0)
fence   rw,rw
ret
< /code>
Я думал, что это может быть ошибка компилятора, но Clang генерирует аналогичные инструкции по всем версиям, которые я попробовал. Разве это не тот случай, когда значение может быть изменено между нагрузкой и магазином? Разве это не нужно, по крайней мере, LR.D 
/ combo?


Подробнее здесь: https://stackoverflow.com/questions/796 ... ot-in-risc
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»