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
У меня есть эта функция: < /p> [code]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 [/code]/[code]sc.d[/code] combo?
Мне сложно создать собственный классический модуль для IIS, я сделал это (и он работает нормально) для 32-разрядной среды, но перекомпилировал его в 64-разрядной версии, когда я устанавливаю его в IIS, AppPool работает в 64-разрядной версии. бит...
Кто определяет размер любого типа данных или структуры (в зависимости от 32-битной или 64-битной версии)? Компилятор или процессор? Например, sizeof(int) составляет 4 байта для 32-битной системы, а для 64-битной системы — 8 байт.
Как я могу узнать, в каком режиме находится оболочка, изнутри оболочки?
Я пытался просмотреть модуль платформы, но, похоже, он сообщает вам только о « битовая архитектура и формат связи, используемый для исполняемого файла». Мой двоичный файл...
Я хотел бы предложить способ, который всегда строит мою цель в качестве 32-разрядного или всегда как 64-битный исполняемый файл с Cmake, независимый от системы хоста (добавление флага «-m32» или «-m64» для GCC, пока не уверен, что делать для других...