изменить шаблон определения машины GCC ".md" - PullRequest
2 голосов
/ 13 июня 2011

Я сейчас изменяю md-файл gcc для цели mips (el).Версия gcc src - 4.6.0.

Я хочу изменить генерацию insn с расширением знака.

Первоначально, mips использует команду "lb" / "lh" длярасширить байт / половину.

, но в моем целевом процессоре он не имеет "lb" и "lh", он поддерживает только "lbu" и "lhu".поэтому я должен сгенерировать такие инструкции для реализации sign-ext.

например

lb% 0,% 1

стать:

lbu% 0,% 1%% 0,% 0,24сра% 0,% 0,24

аналогично:

lh% 0,% 1

становится:

lhu% 0,% 1srl% 0,% 0,16сра% 0,% 0,16

Но, в оригинальном файле "md" два из них - это один шаблон, он использует макрос для генерации инструкции lb / lh:

"l<SHORT:size>"

<SHORT:size> may be "b" or "h" --> "lb" or "lh"

, но я хочу получить"24" из "b";получить "16" форму "ч".Как мне этого добиться?

1 Ответ

1 голос
/ 30 марта 2012

Для случая lb вам нужно определить три правила, используя define_insn для lbu, srl и sra соответственно.Как только это будет сделано, вы определяете правило расширения, используя define_expand для фунта, который расширяется до lbu, srl и sra.

Во время расширения GCC преобразует lb в lbu, srl и sra, что означает, что во время фазы RTL у вас больше не будет lb, а будут только вещи, которые ваш бэкэнд поймет.

Аналогично для lh.Внутренние документы не являются лучшими в мире, если вы уже не знаете, но они могут быть полезны для вас, чтобы посмотреть конкретные детали при чтении бэкэндов других людей.

Вкл. define_insn: http://gcc.gnu.org/onlinedocs/gccint/Patterns.html#index-define_005finsn-3192 Вкл. define_expand: http://gcc.gnu.org/onlinedocs/gccint/Expander-Definitions.html#index-define_005fexpand-3613

Наслаждайтесь.

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