Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M8 / Исполнительная среда Itanium.doc
Скачиваний:
43
Добавлен:
16.04.2013
Размер:
340 Кб
Скачать

3.4.2. Специальные случаи зависимости waw

Есть три разрешенных специальных случая зависимости WAW по регистрам в пределах группы инструкций. Это такие специальные случаи: инструкции типа сравнения, инструкции с плавающей точкой и инструкция st8.spill.

Набор инструкций типа сравнения включает: cmp, cmp4, tbit, tnat, fcmp, frsqrta, frcpa и fclass. Инструкции типа сравнения в одной группе инструкций, могут иметь адресатом один и тот же предикатный регистр:

  • Инструкциями типа сравнения являются и все сравнения типа И, и все сравнения типа ИЛИ (сравнения типа И связаны с окончаниями .and и .andcm; сравнения типа ИЛИ связаны с окончаниями .or и .orcm), либо это

  • Все инструкции типа сравнения указывают на PR0. Все зависимости типа WAW разрешены для PR0; сравнения могут быть некоторого типа, и могут быть различных типов.

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

Примечание. Инструкции переноса в PR записывают только те PR, которые указаны в их (инструкций) маске, но инструкциями переноса из PR всегда читают все регистры.

Инструкции с плавающей точкой неявно записывают регистр состояния с плавающей точкой (FPSR) и регистр состояния процессора (PSR). В той же самой группе инструкций могут появляться несколько инструкций с плавающей точкой, поскольку ограничение на регистровую зависимость типа WAW в отношении FPSR и PSR не применяется. После выполнения группы инструкций, состоянием FPSR и PSR будет являться логическое ИЛИ от всех записей.

Инструкция st8.spill неявно записывает регистр UNAT. Для этой инструкции ограничение на регистровую зависимость типа WAW относительно UNAT, применяется на уровне битов. В той же самой группе инструкций могут появляться несколько инструкций st8.spill если они не записывают один и тот же бит UNAT. Регистровые зависимости типа WAW между инструкциями st8.spill и инструкций mov ar= нацеленные на UNAT не должны встречаться в пределах одной и той же группы инструкций.

3.4.3. Специальные случаи зависимости war

Зависимость типа WAR между чтением 63-х предикатных регистров с помощью любой инструкции типа B и частичной записью 63-х предикатных регистров с помощью перехода типа модульно планируемого цикла (br.ctop, br.cexit, br.wtop, br.wexit) без вмешательства остановок, является запрещенной. Иные зависимости типа WAR, разрешены в группе инструкций.

3.4.4. Поведение процессора при нарушениях зависимости

Если программа нарушает правила ресурсных зависимостей типа RAW, WAW или WAR внутри группы инструкций, то поведение процессора не предсказуемо. Ограничивающие условия неопределенного поведения описаны в разделе 3.5 «Неопределенное поведение».

Для помощи в отладке кода, который нарушает правила зависимости архитектурных ресурсов, некоторыми процессорами обеспечиваются аппаратные средства обнаружения нарушений зависимости при выполнении. Это может явиться причиной того, что группа инструкций, которая содержит нелегальную зависимость, вызовет ошибку «Нелегальная зависимость» (описанную в главе 5 «Прерывания» во втором томе). Однако, даже в реализациях, которые обеспечивают такую проверку, программное обеспечение не может надеяться, что процессор перехватит все нарушения зависимости или даже перехватит то же самое нарушение каждый раз, когда оно будет происходить.

Однако все модели процессора, которые обеспечивают аппаратные средства обнаружения нарушения зависимости, требуются для удовлетворения следующих сообщенных ограничений нарушения зависимости:

  • Все обнаруженные нарушения зависимости должны быть сообщены как ошибки типа «Нелегальная зависимость» (описанные в главе 5 «Прерывания» во втором томе). Когда вызвана ошибка «Нелегальная зависимость», значение субъекта для нарушения зависимости – не определено. Необнаруженные нарушения зависимости являются причиной неопределенного поведения программы, как это описано в разделе 3.5 «Неопределенное поведение».

  • Все обнаруженные нарушения зависимости типа RAW и WAW должны быть переданы как ошибки типа «Нелегальная зависимость» на вторую операцию, т.е. в случае RAW – на чтение, а в случае WAW – на запись второго ресурса.

  • Все обнаруженные нарушения зависимости типа WAR (в 63-х предикатных регистрах) должны быть переданы как ошибки типа «Нелегальная зависимость» на вторую операцию – запись предиката.

  • Ошибки типа «Нелегальная зависимость» передаются строго в программном порядке. Если прерывание, переход или спекулятивная проверка сделаны между первой и второй операциями нарушения зависимости, то ошибка типа «Нелегальная зависимость» не делается.

Примечание. Если группа инструкций начинается в заданной точке входа (на стопе или на адресате переключения потока управления), то инструкции предшествующие точке входа не рассматриваются как часть группы инструкций и не должны принимать участие в проверке нарушения любой зависимости. Например, если rfi сделана на слот 1 связки, то инструкция в слоте 0 и инструкции с меньшими адресами памяти не являются частью новой группы инструкций и не должны принимать участие в проверке нарушения любой зависимости.

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