Предположим, у меня есть 8 окон, подобных этой: http://www.sics.se/~psm/sparcwin.gif
И я в этой ситуации прав, WIM указывает на w7, и я нахожусь в окне w0.
Предположим, что в этом окне я собираюсь вызвать некоторую функцию, которая получает один параметр. Поэтому я установил значение параметра в% o1 (чтобы функция могла получить его в% i0).
Хорошо, тогда я звоню, и функция выполняет «сохранение». WIM в этом бите окна равен 1, поэтому window_overflow запускается. Что я понял по этому поводу, так это то, что обработчик сохраняет в стеке окна w7 (% sp) регистры% i1, ..,% i7,% l0, ..,% l7, чтобы затем «возвращаться» в window_underflow восстановите это окно.
У меня вопрос ... когда окно сохранено, оригиналы% i0, ...,% i7 из w7, утерянные из-за этого, являются параметрами функции, которую вызвала программа в w0 (поскольку я установил% o0, .. в w0 перед вызовом, а затем сделайте ошибку 'save'). Так что эта «система» не имеет смысла, так что, думаю, я что-то упустил.
Еще один похожий вопрос. Предположим, что моя программа в w0 не вызывает функцию, но использует% o0,% o1, .. в качестве "локальных" переменных, у меня возникла бы та же проблема, даже не зная, что я убил% i0,% i1, .. из w7.
ОТВЕТ: Я обнаружил, что недопустимые окна уже сохранены в стеке, поэтому, когда 'save' будет выполнено, обработчик window_overflow сохранит w6 в стеке (и установит WIM в w6). Это, очевидно, объясняет все о моем вопросе. Наверное, я перепутал myselft, когда увидел пример обработчика этой ловушки и не вспомнил, что в V8 он всегда уменьшает CWP без проверки WIM.