Средства разработки приложений



              

Машинно-зависимая поддержка раннего выполнения


При разработке алгоритма раннего выполнения мы ориентировались на мультиплатформенный компилятор, подобный GCC. Для этого машинно-зависимые части поддержки раннего выполнения были выделены отдельно. Если необходимо реализовать поддержку для определенной платформы, то модуль компилятора, реализующий кодогенерацию для этой платформы, должен предоставить следующие возможности (реализованные в виде процедур):

  • Запрос о том, какие типы раннего выполнения (в терминах введенных нами флагов) поддерживает архитектура;
  • Запрос о том, поддерживает ли архитектура раннее выполнение данной инструкции;
  • Запрос на преобразование инструкции, подготавливаемой к раннему выполнению определенного типа, к виду (во внутреннем представлении), который она примет при раннем выполнении. Для Itanium, например, при передаче инструкции загрузки из памяти в качестве параметра необходимо вернуть инструкцию во внутреннем представлении, соответствующую ld.s или ld.a;
  • Запрос на создание инструкции проверки для данного типа раннего выполнения;
  • Запрос на то, нужен ли блок восстановления для данной инструкции данного типа раннего выполнения, или же можно обойтись инструкцией проверки;
  • Запрос на расширение структур данных при создании новых инструкций (нового базового блока).

Кроме того, для всех типов инструкций раннего выполнения необходимо задать их вид в ассемблере целевой машины для кодогенератора, а также время выполнения (латентность) и занимаемые функциональные устройства для того, чтобы планировщик мог оценивать состояние конвейера целевой машины в процессе планирования.


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