Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 4..doc
Скачиваний:
18
Добавлен:
16.04.2013
Размер:
430.08 Кб
Скачать

4.4.3. Семафорные инструкции

Семафорные инструкции автоматически загружают основной регистр из памяти, выполняют операцию и затем запоминают результат в том же самом месте памяти. Семафорные инструкции всегда не спекулятивны. Не обеспечивается никакого обновления базового регистра.

Определены три типа атомистичных (atomic) (т.е. не делимых) семафорных операций:xchg(exchange– обмен),cmpxchg(compareandexchange– сравнение и обмен),fetchadd(fetchandadd– извлечь и добавить).

При выполнении инструкции xchg, приемник загружается из места памяти указанного первым операндом и при этом значение расширяется нулями, а второй операнд запоминается в месте указанном первым операндом.

При выполнении инструкции cmpxchg, приемник загружается из места памяти указанного первым операндом и при этом значение расширяется нулями, если это расширенное значение равно содержимому прикладного регистраCCV, то второй операнд запоминается в месте указанном первым операндом.

В инструкции fetchaddзадается один исходный основной регистр, один приемный основной регистр и непосредственное значение. При выполнении инструкцииfetchadd, приемник загружается из места памяти указанного исходным операндом и при этом значение расширяется нулями, далее к загруженному значению добавляется непосредственное значение, а результат запоминается в том же самом месте памяти.

4.4.4. Спекуляция по управлению

Специальные механизмы обеспечивают разрешение направляемой компилятором спекуляции. Эта спекуляция делается в двух формах: спекуляция по управлению и спекуляция по данным, с отдельными механизмами для поддержки каждой. Также см. раздел 4.4.5 «Спекуляция по данным».

4.4.4.1. Концепции спекуляции по управлению

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

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

Маркеры отложенного исключения представлены по-разному в файлах основных регистров и регистров с плавающей точкой. В основных регистрах, для каждого регистра определен дополнительный бит называемый NaT(NotaThing– не вещь). Таким образом, общие регистры имеют ширину 65 бит. ЕслиNaTсодержит 1, то это указывает, что регистр содержит маркер задержанного исключения и что его 64-битовая часть данных содержит определенное вычисленное значение, на которое программа не может полагаться. В регистрах с плавающей точкой, задержанное исключение обозначается кодированием специального значения – псевдоноль, которое называетсяNaTVal(подробнее см. ниже в разделе 5.1.3 «Представление значений в регистрах с плавающей точкой»).

Соседние файлы в папке M9