Наследование операндов
Под наследованием операндов подразумевается использование в инструкции родительских операндов. При этом изменение таких операндов возможно только на уровне родителя. В качестве примера возьмем те же инструкции, что и рассмотренные при описании наследования кода операции:
MOVE GRs, GRt с кодом 0111-0011-GGGG-RRRR,
где операнды GRs, GRt кодируются битами, помеченными в бинарном коде инструкции буквами GGGG и RRRR соответственно, и
MOVE ARs, GRt с кодом 0011-0011-AAAA-RRRR,
где операнды ARs, GRt кодируются битами, помеченными в бинарном коде инструкции соответственно буквами AAAA и RRRR.
Видно, что вторые операнды этих двух инструкций GRt имеют одинаковый тип и одинаковое положение в бинарном коде. Таким образом, если в дереве инструкций добавить родительский узел с определенным в нем операндом:
Имя: | GRt |
Тип: | General Purpose Register |
Кодирование: | XXXX-XXXX-XXXX-RRRR, |
а затем добавить к этому родительскому узлу двух потомков: MOVE GRs, GRt с операндами:
Имя: | GRs |
Унаследован: | нет |
Тип: | General Purpose Register |
Кодирование: | XXXX-XXXX-GGGG-XXXX, |
Имя: | GRt |
Унаследован: | да |
и MOVE ARs, GRt с операндами:
Имя: | ARs |
Унаследован: | нет |
Тип: | Address Register |
Кодирование: | XXXX-XXXX-AAAA-XXXX, |
Имя: | GRt |
Унаследован: | да |
то эти потомки будут содержать унаследованный операнд GRt. При изменении каких либо свойств этого операнда в родительском узле соответствующие изменения автоматически применятся к потомкам. Опыт авторов показывает, что в условиях должной организации дерева команд при добавлении новой инструкции большая часть операндов наследуется от родительского узла.
Наследовать можно любое количество операндов, по-разному расположенных в бинарном коде родителя, в том числе и с перекрытием. При удалении операнда у родителя соответствующий унаследованный операнд удаляется у всех потомков.