x86_64 выравнивание стека и восстановление без сохранения регистров

Я пишу процедуры обработки прерываний для x86_64. ABI указывает, что перед вызовом функции C я должен выровнять стек до 16 байт. x86_64 ISA указывает, что при входе в ISR мой стек выровнен по 8 байтам. Поэтому мне нужно выровнять указатель стека до 16 байт. Проблема в том, что при возврате из моей функции C я должен восстановить (потенциально) невыровненный указатель стека, чтобы я мог правильно вернуться из своего прерывания.

Интересно, есть ли способ сделать это без использования регистра общего назначения?

5
задан dschatz 6 March 2012 в 21:39
поделиться