Регистрируется в компиляторах MIPS - что использовать? - PullRequest
2 голосов
/ 30 ноября 2011

Я сейчас пишу игрушечный компилятор в качестве домашнего задания, ориентированного на архитектуру MIPS.

Существует 18 регистров, которые обычно доступны при переводе с языков более высокого уровня: s0 до s7, которые сохраняются вызываемым абонентом, и t0 до t9, которые сохраняются вызывающим абонентом.

С этими 18 доступными регистрами возникает вопрос: какой регистр мне выбрать при выполнении перевода функции.

У каждого сета есть свои плюсы и минусы:

  1. Регистры, сохраненные в Callee, должны быть сохранены и восстановлены из стека в начале и конце функции соответственно.
  2. Сохраненные вызывающим регистры регистры должны быть сохранены и восстановлены из стека до и после вызова подпрограммы соответственно.

Мне ясно, что если я приму статическую стратегию использования этих регистров - какой бы она ни была, например, предпочтение регистров, сохраненных вызываемым абонентом, а не регистров, сохраненных вызывающим абонентом, - я не получу оптимальную производительность, поскольку, скорее всего, в этом не будет необходимости регистрация загрузки / магазинов.

Итак, есть ли хорошие практики использования этих двух наборов регистров?

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

Вот лучшее решение, чем у chill, которое распределяет регистры с более высокой степенью детализации:

Сначала мы выполняем анализ живучести для каждой переменной и:

  • Для переменной интервал живучестииз которых охватывает вызов функции: мы предпочитаем регистры, сохраненные вызывающим абонентом, а не регистры, сохраненные вызывающим абонентом.
  • Для переменной, жизненный интервал которой не охватывает вызов функции: предпочтительнее сохраненные вызывающим регистры, чем сохраненные вызываемыеиз них.
2 голосов
/ 30 ноября 2011

Предпочитайте регистры, сохраненные вызываемым абонентом, в функциях, не связанных с листом, предпочитайте регистры, сохраняемые вызывающим абонентом, в функциях листа.

На листьях и на один уровень выше дерева вызовов, только с небольшим удачи, у тебя не будет никаких спасений.

...