Зачем возвращать адрес объекта в% rax при возврате типа MEMORY? - PullRequest
3 голосов
/ 07 марта 2020

В соответствии с соглашением о вызовах AMD64 при возврате объекта, хранящегося в памяти, выполняются следующие шаги:

  1. Вызывающая сторона выделяет память для возвращаемого объекта и передает адрес в качестве скрытого параметра в %rdi.
  2. Callee заполняет объект.
  3. Callee возвращает адрес объекта в %rax.

Мне интересно, почему было добавлено 3-е требование к стандарту? Память уже выделена вызывающей стороной, поэтому нет необходимости напоминать вызывающей стороне, где она произвела выделение. Какой смысл возвращать адрес памяти в% rax?

1 Ответ

0 голосов
/ 07 марта 2020

RDI - это индекс назначения для строковых операций, его значение может быть переопределено как часть обработки вызываемого абонента. Имеет смысл вернуть адрес через аккумулятор RAX.

...