Вперед Назад Содержание

1. GNU CC и переносимость

Основная цель GNU CC состояла в создании хорошего, быстрого транслятора для класса машин, на которых предполагается использование системы GNU: 32-битные машины, адресующие 8-битные байты и имеющие несколько регистров общего назначения. Элегантность, теоретическая мощность и простота стояли только на втором месте.

GNU CC получает большую часть информации относительно целевой машины из описания машины, которое дает алгебраическую формулу для каждой машинной команды. Это - очень чистый способ описать целевую машину. Но когда транслятор нуждается в информации, которую трудно выразить таким способом, я не колебался определять для данного случая параметр машинного описания. Цель переносимости - уменьшить общую работу, необходимую на трансляторе; само по себе это не представляет интереса.

GNU CC не содержит машинно-зависимого кода, но он содержит код, который зависит от машинных параметров типа endianness (имеет старший байт больший или меньший адрес в слове) и доступности адресации с автоматическим инкрементом. В проход генерации RTL часто необходимо иметь набор cтратегий для генерации кода для специфического вида дерева синтаксиса, cтратегий, пригодных для использования при различных комбинациях параметров. Часто я не пытался охватить все возможные случаи, а рассматривал только общие или только те, которые я встречал. В результате новая целевая машина может потребовать дополнительных cтратегий. Если такое случится, Вы узнаете об этом, потому что транслятор вызовет " abort ". К счастью, новые cтратегии могут быть добавлены машинно-независимым способом, и будет действовать только на тех целевых машинах, на которых они нужны.


Вперед Назад Содержание