Как я могу создать собственный атрибут переменной для направления movs в разные адресные пространства? - PullRequest
2 голосов
/ 23 июня 2011

Итак, я создаю собственный бэкэнд для GCC для процессора. Этот процессор имеет 4 адресных пространства: локальное, глобальное, ммм и ммр. Я хочу сделать так, чтобы при написании кода на c вы могли сделать это:

int global x = 5;

, что приведет к тому, что компилятор выплюнет инструкцию, подобную этой:

ldi.g %reg, 5

Я знаю, что некоторые процессоры, такие как blackfin и MeP, делают что-то похожее на это, поэтому я думаю, что это возможно, однако я понятия не имею, как это сделать. Техника, которая должна позволять мне это делать, - это переменный атрибут .

Любые предложения о том, как я мог бы сделать это?

1 Ответ

1 голос
/ 24 июня 2011

Вы можете добавить специфичные для цели атрибуты, зарегистрировав таблицу struct attribute_spec, используя TARGET_ATTRIBUTE_TABLE, как описано в документации GCC для внутренних устройств . Подробности struct attribute_spec можно найти в источнике (gcc/tree.h).

Этот обработчик не нуждается в для выполнения каких-либо действий, кроме возврата NULL_TREE, хотя обычно он по крайней мере выполняет некоторую проверку ошибок. (Прочитайте комментарии в gcc/tree.h и посмотрите примеры в других целях.)

Позже вы можете получить список атрибутов для узла дерева объявлений с помощью DECL_ATTRIBUTES() (см. внутренние документы снова ) и использовать lookup_attribute() (снова см. gcc/tree.h), чтобы увидеть, данный атрибут в списке.

Вы хотите ссылаться на символ, чтобы генерировать другую сборку на основе ваших новых атрибутов, поэтому вы, вероятно, захотите использовать TARGET_ENCODE_SECTION_INFO ловушку ("Определите эту ловушку, если нужно обрабатывать ссылки на символ или константу по-разному, в зависимости от чего-либо о переменной или функции, названной символом ") , чтобы установить флаг на symbol_ref (как предполагается в документации). Вы можете определить предикат для проверки этого флага в .md.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...