Есть некая структура с битовыми полями. Допустим
struct _example{
unsigned f10:1;
unsigned f11:1;
unsigned f2:2;
unsigned f4:4;
unsigned f8:8;
unsigned f16:16;
};
При обращении к f10 в виде а10|=1 формируется код orb $1,(%rcx), а нужен orl $1,(%rcx).
Регистр %rcx для примера, содержит адрес начала структуры.
Можно соответствующие переменные объявлять volatile, но это решение подходит для самого первого поля.
Если подумать, то компилятор не может определить границы 32-битных слов в структуре, поэтому обращается к байтам. https://gcc.godbolt.org/z/17JQWM
Ответ
Это невозможно. Компилятор не может рассчитать 32-битные границы.
Комментариев нет:
Отправить комментарий