[an error occurred while processing this directive]
|
Команда, которая выполняется 4 такта (например ADDSP) как-бы только "запускается" на выполнение инструкцией. Единственное ограничение (в следующих за ней 3-х тактах - делэй слотах) нельзя ставить такую команду, которая умудрится записать данное в тот-же регистр.
Еще бывает неприятность под названием functional unit latency. - но как помнится не в 62хх, а в 67хх.
Пример 1 (тут глюков нет) 67хх
ADDSP .L1 A6,A7,A8
|| SHR .S1 A9,6,A8
ADD .L1 A8,1,A8
NEG .L1 A8,A8
STW .D1 A8,*+A14(10)
NOP ; <--- а тут A8 станет результатом ADDSP
; и с ним можно продолжать работать.
;---- А этот пример - с глюком.
LDW .D1 *+A14(10), A8
ADDSP .L1 A6,A7,A8
|| SHR .S1 A9,6,A8
ADD .L1 A8,1,A8
NEG .L1 A8,A8
STW .D1 A8,*+A14(10)
NOP ; <--- а тут A8 пишут одновременно и LDW и ADDSP
; это конфликт, не детектируемый ассемблером
Главное - следить чтоб такого не получалось.
А заглатывает оно действительно по 8 команд, однако если в этих 8-ми командах несколько параллельных групп (execute-пакетов), то конвейер приостанавливает фазы fetch (все) и фазу DP, а дальше по конвейеру продолжает разгребать execute пакеты из того-же fetch пакета. Как только все выполнено - fetch возобновляется.
E-mail: info@telesys.ru