Страницы

Поиск по вопросам

четверг, 21 марта 2019 г.

Как обязать использовать 32-битное обращение к структуре?

Есть некая структура с битовыми полями. Допустим
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-битные границы.

Комментариев нет:

Отправить комментарий