Немного комментариев по поводу особенностей моей заготовки:
В документации где-то было сказано что "ultimate design goal" или вроде того - чтобы можно было модель cpu (backend) сделать полностью с помощью tablegen. (.td-файлы)
В русле стремления к этому например были приняты такие решения:
- группировать регистры (в классы) по наборам инструкций в которых они могут быть использованы (отсюда например такие классы как R16_BC_DE_HL, R16_BC_DE_IX_SP и т.д.) + соответствующая группировка инструкций,
- операции обмена между регистрами реализовать с помощью "виртуальных регистров", например (упрощенно):
- опкоды (точнее биты которые присутствуют (=1) во всех вариациях инструкций, иначе говоря этакие "базовые опкоды") также присутствуют в .td для дальнейшего использования в реализации MC и т.п.Код:def V_DEHL : RegisterWithSubRegs<"v_dehl", [DE,HL]>; def V_HLDE : RegisterWithSubRegs<"v_hlde", [HL,DE]>; let Defs = [DE,HL] in def EX_DE_HL : I<0xEB, RawFrm, (outs), (ins), "ex\tde, hl", [(set V_DEHL, V_HLDE)]>;




Ответить с цитированием