12. Планирование последовательности операций

12.1. Зависимости по передаче данных и управления

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

В таблицах указано значение relative_latency - относительное время исполнения операции, поставляющей данные; с точки зрения планирования это - минимально необходимое расстояние в тактах/командах между одноименными фазами зависимых операций;

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

Задержка между источником и потребителем может быть реализована размещением между ними реальных или фиктивных команд (операция nop N, где N > 0), либо их смеси. Если требуемая задержка (указанная в таблице) равна D, между источником и потребителем должно присутствовать минимум (D-1) реальных или фиктивных команд. В некоторых, специально оговоренных случаях фиктивные команды не годятся, и нужно пользоваться только реальными (разрешается операция nop с нулевым аргументом).

12.1.1. Передача данных через регистровый файл

12.1.1.1. Общие положения

Все операции, получающие аргументы через регистровый файл, считывают их в своей фазе R(базирование адресов операндов и передача их на регистры регистрового файла) или E0(начало выполнения операции в исполнительном устройстве). Результаты операций могут передаваться потребителю следующими путями:

  • через регистровый файл (rf)

  • через входные регистры rf (rfbps)

  • через байпас группы целочисленных операций (ibps)

  • через байпас группы вещественных и мультимедийных операций (fbps)

  • через байпас записываемого значения операций записи в память (sbps).

Байпас -это аппаратный механизм, позволяющий операции потребителю получить результат до его записи в регистровый файл (напрямую от операции источника)

Микропроцессор «Эльбрус» имеет 6 каналов для выполнения арифметико-логических операций, при этом каналы 0,1,2 относятся к одному кластеру, а каналы 3,4,5 относятся к другому кластеру. Байпас не может работать между кластерами, работая в каждом отдельно.

Группа, использующая байпас ibps, включает:

  • скалярные целочисленные операции, исключая операции умножения, деления, получения остатка и извлечения корня

  • операции считывания их памяти

  • адресные операнды операций записи в память.

Группа, использующая байпас fbps, включает:

  • все вещественные операции - скалярные и пакетные

  • все операции преобразования вещественных и целых чисел - скалярные и пакетные

  • целочисленные операции умножения

  • целочисленные операции деления, получения остатка и извлечения корня

  • все пакетные целочисленные операции.

Группа, использующая байпас sbps, включает:

  • записываемое значение операций записи в память.

Байпассирование не применяется или ограничивается в следующих случаях:

  • результаты операций считывания из памяти в случае промаха в Data Cache первого уровня (DC) передаются только через rf;

  • результаты операций пересылки данных из APB передаются только через rf;

  • если формат результата-источника (с учетом режима расширения формата флагом WD.dbl) меньше формата операнда-потребителя, передача выполняется через rfbps или rf; операнд-значение, записываемое в память, может передаваться только через rf;

  • результаты операций группы fbps передаются в операции группы ibps только через rfbps или rf;

  • результаты операций группы ibps передаются в операции группы fbps с задержкой в 1 такт (через rf, rfbps или ibps);

  • второй операнд тех расширенных вещественных операций (FX…), которые требуют его преобразования в расширенный формат (s/d -> x), не передается через байпас fbps; к таким операциям относятся FXADD(s/d)(s/d/x), FXSUB(s/d)(s/d/x), FXRSUB(s/d)(s/d/x), FXCMP(s/d)(f/b); передача осуществляется через rfbps или rf.

В случае суперпозиции условий выбирается «наихудший» вид передачи.

Кроме того, байпас fbps не применяется при определенных сочетаниях типов/форматов результатов и операндов зависимых операций этой группы (эти сочетания считаются статистически незначимыми); передача осуществляется через rfbps или rf. В приведенной ниже таблице по вертикали перечислены типы/форматы результата операции-источника, а по горизонтали - типы/форматы операндов операции-потребителя (сочетания, не упомянутые в таблице, подчиняются общим правилам). В таблице использованы следующие обозначения:

+ - байпас fbps применяется;

f80 - вещественные числа формата extended, а также результаты и операнды других форматов, если они вырабатываются/потребляются операциями над вещественными числами формата extended;

f64 - вещественные числа формата double;

f32 - вещественные числа формата single;

pf32 - вещественные числа формата single, упакованные в данных формата double;

mmx64 - целые числа, упакованные в данных формата double;

mmx32 - целые числа, упакованные в данных формата single;

fcm64 - результаты операций вещественного сравнения формата double;

fcm32 - результаты операций вещественного сравнения формата single;

int64 - целые числа формата double, являющиеся результатами/операндами операций умножения, деления и преобразования целых чисел;

int32 - целые числа формата single, являющиеся результатами/операндами операций умножения, деления и преобразования целых чисел/

Таблица байпассирования результатов для операций группы fbps представлено в таблице 12.1

Таблица 12.1

-----|-------|-------|-------|-------|-------|-------|-------|-------|
    п|       |       |       |       |       |       |       |       |
    о|       |       |       |       |       |       |       |       |
    т| f80   | f64   | f32   | pf32  | mmx64 | mmx32 | int64 | int32 |
ист р|       |       |       |       |       |       |       |       |
-------------|-------|-------|-------|-------|-------|-------|-------|
f80  |   +   |       |       |       |   +   |   +   |   +   |   +   |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
f64  |       |   +   |       |       |   +   |       |       |       |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
f32  |       |       |   +   |       |       |   +   |       |       |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
pf32 |       |       |       |   +   |   +   |       |       |       |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
mmx64|       |   +   |       |   +   |   +   |   +   |   +   |   +   |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
mmx32|       |       |   +   |       |       |   +   |       |   +   |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
fcm64|       |   +   |       |   +   |   +   |   +   |   +   |   +   |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
fcm32|       |       |   +   |       |       |   +   |       |   +   |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
int64|       |       |       |       |   +   |   +   |   +   |   +   |
-----|-------|-------|-------|-------|-------|-------|-------|-------|
int32|       |       |       |       |       |   +   |       |   +   |
-----|-------|-------|-------|-------|-------|-------|-------|-------|

12.1.1.2. Времена исполнения операций

С точки зрения времени исполнения операции, поставляющие результат в rf, подразделяются на несколько групп (такое разбиение используется в таблице 12.2):

out_0i:

в случае числового результата:

ADDs/d, SUBs/d, AND(N)s/d, OR(N)s/d, XOR(N)s/d, SCLs/d, SHLs/d, SHRs/d, SARs/d, MERGEs/d, SXT, GETF, INSF

GETTAGs/d/q, PUTTAGs/d, BITREVs/d, LZCNTs/d, POPCNTs/d

out_1i:

Целочисленные комбинированные(трех-операндные) операции.

AND, ANDN, OR, ORN, XOR, XORN, MERGE, ADD, SUB, SCL, SCR, SHL, SHR, SAR, GETF, INSF

out_1a:

в случае выработки флагов:

ADD*, SUB*, AND(N)*, OR(N)*, XOR(N)*, SCL*, SHL*, SHR*, SAR*, INC*, DEC*

RRs/d (кроме FPCR, FPSR, PFPFR)

GDTOAP, CUDTOAP, GETVA, GETPL, CAST, APTOAP(B), ODTOAP, MOVTs/d/q, TDTOMP, GETTD, GETSP, GETSAP, GETSOD

GETTST

out_2i:

в случае попадания в DC1:

LD*, за исключением LDAA*

out_4i:

MOVAB, MOVAH, MOVAW, MOVAD, MOVAQ

out_1m:

PADD*, PSUB*, PCMP*, PAVG*, PMIN*, PMAX*, PUNPCK*, PACK*, PMOV*

PSR*, PSL*, PSHUF*, PEXTRH, PINSH, PMERGE

PAND*, POR*, PXOR*, PSIGN*

PHADD*, PHSUB*

out_2m:

PMULHH, PMULLH, PMADDH, PMULUBHH, PMULHRSH, PMADDUBSH

PSADBW, MPSADBH, PHMINPOSUH

FCMP(s/d)f, FCMP(s/d), PFCMP(s/d)

FMIN(s/d), FMAX(s/d), PFMIN(s/d), PFMAX(s/d)

out_4f:

в случае денормализованного операнда или отрицательного переполнения произведения - out_5f

FMULs/d, PFMULs/d, FXMULsx, FXMULdx, FXMULxx, FSCALEs/d, FXSCALEsx

MULs/d, UMULX, SMULX, UMULHd, SMULHd

FADDs/d, FSUBs/d, PFADDs/d, PFSUBs/d, PFHADDs, PFHSUBs, PFADDSUBs

операции преобразования STO*S, STO*D, DTO*S, DTO*D

MOVFI, MOVIF, MOVx

FXCMP(s/d/x)f

out_5f:

в случае денормализованного операнда или отрицательного переполнения произведения - out_6f

FXMULss, FXMULdd, FXMULxs, FXMULxd

FXADD..(7 операций), FXSUB..(7 операций), FXRSUB..(4 операции)

операции преобразования STO*X, XTO*S, DTO*X, XTO*D, STO*XTO*S, DTO*XTO*D

out_6f:

FRCPs, FRSQRTs

в случае NaN - out_13f

out_8r:

в случае попадания в DC2 (см. также out_19-r):

LD*,

для операций типа «TLB probe»

out_8f:

FMUL_(ADD/SUB/RSUB)(s/d)

PFMUL_(ADD/SUB/RSUB)(s/d)

PFMUL_(HADD/HSUB/ADDSUB)s

в случае, когда постепенное отрицательное переполнение или денормализованный операнд вызывают необходимость денормализации или нормализации произведения (в операциях умножения), - тогда это относится к out_9f

F(ADD/SUB)_(ADD/SUB/RSUB)(s/d)

PF(ADD/SUB)_(ADD/SUB/RSUB)(s/d)

PF(HADD/HSUB/ADDSUB)_(HADD/HSUB/ADDSUB)s

out_9f:

RRs/d (FPCR, FPSR, PFPFR)

out_10f:

FSQRTs, PFSQRTs

Эти операции могут относиться к другим группам в некоторых редких (менее 0.5%) случаях - out_12f; в случае NaN - out_13f.

out_11f:

FDIVs, PFDIVs (в случае NaN - out_13f)

FXSQRTIsx, FXSQRTIdx, FXSQRTIxx (в случае NaN - out_18f)

FSQRTId

out_10-14f:

SMODx, UMODx

out_11-14f:

SDIVs/x, UDIVs/x

out_11-16f:

FXDIVss, FXDIVsx, FXDIVdx, FXDIVxs, FXDIVxx

FXDIVTss, FXDIVTsx, FXDIVTdx

в случае NaN - out_18f

out_11-18f:

SDIVd, UDIVd

out_14f:

FDIVd, PFDIVd

в случае NaN - out_16f

FSQRTTd, PFSQRTTd

в некоторых редких (менее 0.5%) случаях - out_31f; в случае NaN - out_16f;

out_14-16f:

FXDIVdd, FXDIVxd, FXDIVTdd

в случае NaN - out_18f

out_16f:

FXSQRTU..(3 операции), FXSQRTT..(3 операции)

в случае NaN - out_18f

out_19-r:

LD* (в случае промаха в DC2)




С точки зрения получения операндов через байпасы различных типов операции также подразделяются на несколько групп:

in_i:

ADDs/d, SUBs/d, AND(N)s/d, OR(N)s/d, XOR(N)s/d

SHLs/d, SHRs/d, SARs/d

LD*

адресные операнды (src1,src2) операций ST*

in_f:

все FP-операции

все операции умножения

все операции деления

все мультимедийные операции

in_r:

все операции из другого кластера (за исключением операнда - значения для записи в память)

in_s:

операнд (src3) - значение для записи в память (зависит от кластера):

ST*

12.1.1.3. Зависимости между операциями

В Таблице 12.2 приведены рекомендации по планированию операций для случая зависимости типа запись - считывание. Таблица содержит минимально возможные времена передачи операндов, то есть без учета динамически возникающих конфликтов.

В колонках 2-4 указаны времена передач с использованием всех доступных байпасов. Для многих операций такие пути возможны только при условии, что операции источник и потребитель расположены в одном кластере.

В последних двух колонках указаны времена передач только через rfbps или rf. Как правило, это передачи между кластерами, либо передачи, для которых не реализованы более короткие пути. Дополнительно нужно учитывать следующие особенности:

  • Для передач в другой кластер из операций-источников out_0i предусмотрен сокращенный путь, отображенный в строке «через байпас»,

  • Цифры предпоследнего столбца (in_s) нужно корректировать, если результат операции-источника имеет меньший формат, чем записываемое значение, - задержка увеличивается на 1 (передача только через rf); исключение составляют цифры, помеченные знаком „*)“, так как они уже соответствуют передаче только через rf; также не требует коррекции цифра в строке «out_0i через байпас».

Таблица 12.2

-------------------------------------------------------
 first op     |         second op (reading)           |
 (modifying)  |---------------------------------------|
              |       в своем         |   в другой    |
              |       кластере        | кластер или   |
              |   (через байпасы)     |через rfbps, rf|
              |                       |(см. 12.1.1.1) |
              |-----------------------|---------------|
              | in_i  | in_f  | in_s  | in_s  | in_r  |
-------------------------------------------------------
      : через |1      |1      |1      |1      |2      |
      :байпас |       |       |       |       |       |
 out_0i       .........................................
       через  |       |       |       |3      |4      |
       rfbps  |       |       |       |       |       |
       или rf |       |       |       |       |       |
-------------------------------------------------------
 out_1i       |2      |2      |1      |3      |4      |
-------------------------------------------------------
 out_1a       |2      |2      |1      |3      |4      |
-------------------------------------------------------
 out_2i       |3      |3      |4      |4      |4      |
-------------------------------------------------------
 out_4i       |5      |5      |4      |4 *)   |5      |
-------------------------------------------------------
 out_1m       |4      |1      |1      |3      |4      |
-------------------------------------------------------
 out_2m       |4      |2      |2      |3      |4      |
-------------------------------------------------------
 out_4f       |6      |4      |4      |6      |6      |
-------------------------------------------------------
 out_5f       |7      |5      |5      |7      |7      |
-------------------------------------------------------
 out_6f       |8      |6      |6      |8      |8      |
-------------------------------------------------------
 out_8r       |9      |9      |8      |8 *)   |9      |
-------------------------------------------------------
 out_8f       |10     |8      |8      |10     |10     |
-------------------------------------------------------
 out_9f       |11     |9      |9      |11     |11     |
-------------------------------------------------------
 out_10f      |12     |10     |10     |12     |12     |
-------------------------------------------------------
 out_10-14f   |12-16  |10-14  |10-14  |12-16  |12-16  |
-------------------------------------------------------
 out_11f      |13     |11     |11     |13     |13     |
-------------------------------------------------------
 out_11-14f   |13-16  |11-14  |11-14  |13-16  |13-16  |
-------------------------------------------------------
 out_11-16f   |13-18  |11-16  |11-16  |13-18  |13-18  |
-------------------------------------------------------
 out_11-18f   |13-20  |11-18  |11-18  |13-20  |13-20  |
-------------------------------------------------------
 out_12f      |14     |12     |12     |14     |14     |
-------------------------------------------------------
 out_13f      |15     |13     |13     |15     |15     |
-------------------------------------------------------
 out_14f      |16     |14     |14     |16     |16     |
-------------------------------------------------------
 out_16f      |18     |16     |16     |18     |18     |
-------------------------------------------------------
 out_14-16f   |16-18  |14-16  |14-16  |16-18  |16-18  |
-------------------------------------------------------
 out_18f      |20     |18     |18     |20     |20     |
-------------------------------------------------------
 out_31f      |33     |31     |31     |33     |33     |
-------------------------------------------------------
 out_19-r     |20-... |20-... |19-... |19-..*)|20-... |
-------------------------------------------------------

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

Зависимость типа считывание - запись, когда первая операция должна считать старое значение прежде, чем вторая операция запишет в ту же ячейку новое, отсутствует. Операция, модифицирующая ячейку rf, может стоять в той же команде, что и операция, считывающая старое значение из этой ячейки.

Проблема зависимости типа запись - запись, когда первая операция должна завершиться раньше второй, решается аппаратно. Операции могут стоять в соседних командах, тем не менее в rf будет записан результат второй операции.

12.1.2. Передача предикатов через предикатный файл

В Таблице 12.3a приведены ограничения на планирование операций для случая зависимости типа запись - считывание.

Таблица 12.3a

-------------------------------------------------------
              |       second op (reading)             |
 first op     |----------------------------------------
 (modifying)  |CT     |RLP    |ELP    |CT(CALL)       |
              |(cond) |MRGC   |       |(pf save)      |
              |PUTTSD |       |       |               |
              |INVTS  |       |       |               |
-------------------------------------------------------
CMPANDs/d     |3 *1)  |2 *2)  |1      |0              |
CMPs/d        |       |       |       |               |
CCTOLP        |       |       |       |               |
CLP           |       |       |       |               |
MLP           |       |       |       |               |
-------------------------------------------------------
CMPANDs/d  *4)|4      |       |       |               |
CMPs/d        |       |       |       |               |
CCTOLP        |       |       |       |               |
-------------------------------------------------------
FCMPs/d       |5 *1)  |4 *2)  |3 *2)  |0 *3)          |
FCMPEs/d      |       |       |       |               |
-------------------------------------------------------
CT(RETURN)    |1      |1      |1      |1              |
(pf restore)  |       |       |       |               |
-------------------------------------------------------

ct(cond) - при такой операции ct происходит потребление предиката из под условия

ct(call) - при такой операции ct происходит аппаратный спил, сохранение регистров

ct(return) -при такой операции ct происходит восстановлене регистров из связующего стека

* 1) - передачи контролируются аппаратурой; нарушение указанных соотношений приводит к блокировке конвейера на недостающее количество тактов;

* 2) - передачи контролируются аппаратурой; нарушение указанных соотношений приводит к блокировке конвейера на четное количество тактов;

* 3) - если операции расположены в одной и той же или в соседних командах, возможна блокировка конвейера на 2 такта для цели перехода;

* 4) - особым случаем является следующая исполняемая последовательность команд (с информационной зависимостью по результатам/операндам):

  • 1 считывание из памяти с проверкой DAM (MAS - «check» или «check & unlock»);

  • 2 следующая команда содержит операцию сравнения (или CCTOLP), потребляющую результат считывания; при этом не имеет значения, содержит ли команда (1) операцию {nop N} или нет;

  • 3 произвольным образом реализованная пауза в 2 команды для передачи предиката в операцию (4);

  • 4 условная операция передачи управления (за исключением rbranch), потребляющая результат сравнения (2);

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

Следует иметь в виду, что приведенная последовательность является последовательностью «по исполнению», то есть не обязательно принадлежит одному базовому блоку кода, а может быть составлена из команд, динамически связанных передачами управления.

Общим решением проблемы является удлиннение паузы (3) до 3-х команд.

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

  • Если команда (1) содержит операцию rbranch, особый случай не образуется.

В Таблице 12.3b приведены ограничения на планирование операций для случая зависимости типа считывание - запись. В этом случае первая операция должна считать старое значение прежде, чем вторая операция запишет в ту же ячейку новое.

Таблица 12.3b

---------------------------------------------------------------
              |               second op (modifying)           |
 first op     |------------------------------------------------
 (reading)    |CMPANDs/d      |FCMPEs/d       |CT(RETURN)     |
              |CMPs/d         |FCMPs/d        |(pf restore)   |
              |CCTOLP         |               |               |
              |CLP            |               |               |
              |MLP            |               |               |
---------------------------------------------------------------
CT(cond)      |0              |0              |0 *1)          |
PUTTSD, INVTS |               |               |               |
---------------------------------------------------------------
RLP           |0              |0              |0 *1)          |
MRGC          |               |               |               |
---------------------------------------------------------------
ELP           |0              |0              |0 *1)          |
---------------------------------------------------------------
CT(CALL)      |1 *1)          |1 *1)          |1 *1)          |
(pf save)     |               |               |               |
---------------------------------------------------------------

* 1)- корректность передач для данных величин задержек гарантируется аппаратурой;

В Таблице 12.3c приведены ограничения на планирование операций для случая зависимости типа запись - запись. Такая зависимость возникает, когда двум последовательным операциям назначается под результат одна и та же ячейка файла. В этом случае первая операция должна завершиться раньше второй.

Таблица 12.3c

---------------------------------------------------------------
              |               second op (modifying)           |
 first op     |------------------------------------------------
 (modifying)  |CMPANDs/d      |FCMPEs/d       |CT(RETURN)     |
              |CMPs/d         |FCMPs/d        |(pf restore)   |
              |CCTOLP         |               |               |
              |CLP            |               |               |
              |MLP            |               |               |
---------------------------------------------------------------
CMPANDs/d     |1              |1              |0 *2)          |
CMPs/d        |               |               |               |
CCTOLP        |               |               |               |
CLP           |               |               |               |
MLP           |               |               |               |
---------------------------------------------------------------
FCMPEs/d      |3 *3)          |1              |0 *2)          |
FCMPs/d       |               |               |               |
---------------------------------------------------------------
CT(RETURN)    |1 *1)          |1 *1)          |1 *1)          |
(pf restore)  |               |               |               |
---------------------------------------------------------------

* 1)- корректность передач для данных величин задержек гарантируется аппаратурой;

* 2)- проблема решается аппаратно, не накладывая ограничений на планирование: операции могут стоять как в соседних командах, так и в той же команде, тем не менее в pf будет записан результат второй операции. Следует, однако, иметь в виду, что данный алгоритм предназначен только для тех случаев, когда результат первой операции не используется. Если последовательность операций имеет вид запись - чтение - запись, следует пользоваться таблицами 12.3a),b).

* 3)- передачи контролируются аппаратурой; нарушение указанных соотношений может привести к блокировке конвейера на четное количество тактов;

Корректность передач предикатов через рпедикатный файл не контролируется аппаратурой, поэтому нарушение временных соотношений таблиц 12.3a,b,c может привести к непредсказуемым результатам.

12.1.3. Передача атрибутов CT-операций через регистры CTPR

В этом разделе используются следующие обозначения:

CT_proc - процедурные переходы (вход или возврат);

CT(код) - отражает зависимость по готовности подготавливаемого кода;

CT(ctpr) - отражает зависимость по заполнению регистров CTPR; имеет смысл в следующих случаях:

  • команда передачи управления (CT) ожидает заполнения CTPR даже при ложном условии перехода («not taken»);

  • выработка прерываний по некорректной подготовке ожидает заполнения CTPR;

В Таблице 12.4a приведены ограничения на планирование операций для случая зависимости типа запись - считывание.

Таблица 12.4a

-----------------------------------------------
              |       second op               |
              |       (reading)               |
 first op     |--------------------------------
 (modifying)  |CT     |CT     |DONE   |RRs/d  |
              |(код)  |(ctpr) |(ctpr) |       |
-----------------------------------------------
DISP          |5      |2 *1)  |       |1      |
LDISP         |       |       |       |       |
SDISP         |*1)    |       |       |       |
GETTSD        |       |       |       |       |
-----------------------------------------------
GETPL         |9*1)   |5 *1)  |       |4      |
MOVTd         |       |       |       |       |
GETTC         |       |       |       |       |
-----------------------------------------------
RETURN        |6/8    |2/4    |       |6      |
              |*1,2)  |*1,2)  |       |       |
-----------------------------------------------
CT_proc       |       |1      |       |1      |
-----------------------------------------------
RWs/d         |       |5 *3)  |5      |4      |
-----------------------------------------------

* 1) - корректность модификации регистров CTPR контролируется аппаратурой; нарушение указанных временных соотношений вызывает блокировку конвейера, которая длится недостающее количество тактов.

* 2) - задержка увеличивается на 2 такта, если подготовка возврата стоит после операции call, то есть выполняется сразу после выхода из процедуры; если подготовку возврата отодвигать вправо, время выполнения пошагово сокращается, пока не достигнет стандартного. Если после выхода из процедуры (выполнения операции ct) код оказался не готов в течение N тактов, эта задержка эквивалентна отодвиганию операции return на N команд и, соответственно, сокращению времени ее выполнения.

* 3) - данный случай описывает зависимость по выработке прерываний.

Корректность непомеченных передач не контролируется аппаратурой. Нарушение указанных соотношений может привести к непредсказуемым результатам.

В таблице 12.4b приведены ограничения на планирование операций для случая зависимости типа считывание - запись. В этом случае первая операция должна считать старое значение прежде, чем вторая операция запишет в CTPR новое.

Таблица 12.4b

---------------------------------------------------------------
              |       second op (modifying)                   |
 first op     |------------------------------------------------
 (reading)    |DISP   |GETPL  |GETTC  |RETURN |CT_proc|RWs/d  |
              |LDISP  |MOVTd  |       |       |       |       |
              |SDISP  |       |       |       |       |       |
              |GETTSD |       |       |       |       |       |
---------------------------------------------------------------
CT (ctpr)     |1 *1)  |1 *1)  |1 *1)  |1 *1)  |1      |1 *1)  |
---------------------------------------------------------------
RRs/d         |0      |0      |0      |0      |0      |0      |
---------------------------------------------------------------

* 1) - в связи с особенностями аппаратной реализации действует соглашение, запрещающее ставить в одной команде переход и подготовку следующего перехода по одному и тому же CTPR.

Корректность передач не контролируется аппаратурой. Нарушение указанных соотношений может привести к непредсказуемым результатам.

В таблице 12.4c приведены ограничения на планирование операций для случая зависимости типа запись - запись. В этом случае первая операция должна завершиться раньше второй.

Таблица 12.4.с

---------------------------------------------------------------
              |       second op (modifying)                   |
 first op     |------------------------------------------------
 (modifying)  |DISP   |GETPL  |GETTC  |RETURN |CT_proc|RWs/d  |
              |LDISP  |MOVTd  |       |       |       |       |
              |SDISP  |       |       |       |       |       |
              |GETTSD |       |       |       |       |       |
---------------------------------------------------------------
DISP          |1 *1)  |1 *1)  |1 *1)  |1 *1)  |1 *1)  |1 *1)  |
LDISP         |       |       |       |       |       |       |
SDISP         |       |       |       |       |       |       |
GETTSD        |       |       |       |       |       |       |
---------------------------------------------------------------
GETPL         |0 *1)  |1 *1)  |1 *1)  |0 *1)  |1 *1)  |1      |
MOVTd         |       |       |       |       |       |       |
---------------------------------------------------------------
GETTC         |0 *1)  |1 *1)  |1 *1)  |0 *1)  |1 *1)  |3      |
---------------------------------------------------------------
RETURN        |1 *1)  |1 *1)  |1 *1)  |1 *1)  |1 *1)  |3      |
---------------------------------------------------------------
CT_proc       |1      |1 *2)  |1 *2)  |1      |1      |1      |
---------------------------------------------------------------
RWs/d         |4      |4      |4      |4      |4      |1      |
---------------------------------------------------------------

* 1) - корректность передач для данных величин задержек гарантируется аппаратурой;

* 2) - в связи с особенностями аппаратной реализации действует соглашение, запрещающее ставить в одной команде переход и подготовку следующего перехода по одному и тому же CTPR.

Корректность передач не контролируется аппаратурой. Нарушение указанных соотношений может привести к непредсказуемым результатам.