Примеры:
IF GT R2=R6 LSHIFT BY 30, DM (14,M4) =R0; IF NOT SZ R3=FEXT Rl BY 8: 4;
Код операции: (с доступом к данным)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
100 | 0 | I | м | COND | G | D | DATAEX | DREG |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 10
0 | SHIFTOP | DATA | RN | RX |
Код операции: (без доступа к данным)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
000 | 00010 | COND | DATAEX |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 10
0 | SHIFTOP | DATA | RN | RX |
COND определяет условие для проверки. Если в команде не определено никакого условия, то COND является условием TRUE, и команда выполняется всегда.
SHIFTOP определяет операцию устройства сдвига. Поле DATA определяет 8-разрядное непосредственное значение сдвига. Для операции устройства сдвига, требующей двух 6-разрядных чисел (значение сдвига и значение длины), поле DATAEX добавляет 4 старших разряда к полю DATA, образуя 12-разрядное непосредственное значение. Шесть младших разрядов являются значением сдвига, шесть старших - значением длины. Если определен доступ к памяти, то D выбирает тип доступа (чтение или запись). G выбирает память данных или память программы. DREG определяет регистр регистрового файла. I определяет индексный регистр I, который поет-модифицируется и обновляется значением регистра М, определяемым полем М. Поле COMPUTE определяет вычислительную операцию, выполняемую параллельно с доступом к данным. Если в команде не определено никакой операции вычисления, то это поле NOR. Модификация индексного регистра, необязательное условие, необязательная операция вычисления.
Синтаксис:
IF условие вычисление, MODIFY
(Ia,Mb) (Ic,Md)
Функция:
Обновление определенного регистра I значением определенного регистра М. Если операция вычисления определена, она выполняется параллельно с доступом к данным. Если определено условие, то оно влияет на выполнение всей команды. Замечание: см. раздел 4.4.1 "Ограничения на передачу данных с использованием регистров DAG" в главе 4 Передача данных. Примеры: IF NOT FLAG2_IN R4=R6*R12 (SUF), MODIFY (110,M8); IF NOT LCE MODIFY (13,Ml);
Код операции: (с доступом к данным)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
000 | 00100 | G | COND | I | М |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 1 0
COMPUTE
COND определяет условие для проверки. Если в команде не определено никакого условия, то COND является условием TRUE, и команда выполняется всегда. G выбирает DAG1 или DAG2.1 определяет индексный регистр, М - регистр модификации. Поле COMPUTE определяет вычислительную операцию, выполняемую параллельно с доступом к данным. Если в команде не определено никакой операции вычисления, то это поле NOР.
Прямой (или относительно PC) переход/вызов, необязательное условие
Функция:
Переход или вызов по определенному адресу или по адресу относительно PC. Адрес относительно PC - это 24-разрядное число в виде двоичного дополнения. Модификатор команды DB указывает, что переход задержанный; иначе - он не задержанный. Если модификатор прерывания цикла (LA) определен для перехода, то данные извлекаются из стеков цикла и стека PC при выполнении перехода. Модификатор LA должен использоваться только в случае, если переход выполняется за границу цикла. Если цикла нет или адрес перехода находится внутри цикла, то модификатор LA не должен использоваться.
Модификатор очистки прерывания (CI) команды JUMP позволяет повторно использовать прерывание во время его обработки. Обычно ADSP-2106x игнорирует и не фиксирует прерывание, которое происходит повторно, когда программа его обработки уже выполняется. Команда JUMP (CI) должна размещаться внутри программы обработки прерывания. JUMP (CI) очищает состояние текущего прерывания без выхода из программы обработки прерывания, сводя программу обработки прерывания к стандартной подпрограмме - это позволяет прерыванию произойти снова в результате какого-либо события или задачи в системе ADSP-2106x. Команда JUMP (CI) сводит программу обработки прерывания к стандартной подпрограмме, обнуляя соответствующий бит в регистре фиксирования прерывания (IRPTL) и регистре указателя маски прерывания (IMASKP). Затем ADSP-2106x позволяет прерыванию произойти снова. При возвращении из подпрограммы, в которую была сведена программа обработки прерывания командой JUMP (CI), должен использоваться модификатор (LR) команды RTS (в случае, если прерывание поступает в течение двух последних команд цикла).
Примеры:
IFAVJUMP (PC, 0X00А4);
CALLinit (DB); (init - это программная метка)
JUMP (PC,2) (DB,CI); (очистка текущего прерывания
для повторного использования)
Код операции: (для прямого перехода)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24
000 | 00110 | в | А | COND | J | CI |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 13 12 | 11 | 10 | 9 | 8 | V | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ADDR |
Код операции: (для перехода относительно PC)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24
000 | 00111 | в | А | COND | J | CI |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 13 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RELADDR |
COND определяет условие для проверки. Если в команде не определено никакого условия, то COND является условием TRUE, и команда выполняется всегда. В выбирает тип перехода - переход или вызов. J определяет, задержан переход или нет. Поле адреса ADDR определяет 24-разрядный адрес памяти программы. RELADDR - это 24-разрядное число в виде двоичного дополнения, которое прибавляется к текущему значению PC для генерации адреса перехода. Бит А активизирует прерывание цикла. CI активизирует очистку прерывания. (Для вызовов CI и А игнорируются)
Косвенный (или относительно PC) переход/вызов, необязательное условие, необязательная операция вычисления
Функция:
Переход или вызов по адресу, определяемому пред-модифицированным значением регистра I, или по адресу относительно PC. Адрес относительно PC - это 6-разрядное число в виде двоичного дополнения. Если регистр I определен, то он модифицируется определенным значением регистра М для генерации адреса перехода. На содержимое регистра I операция модификации не влияет.
Переход или вызов выполняется, если заданное условие верно. Если операция вычисления определена без ELSE, то она выполняется параллельно с вызовом или переходом. Если операция вычисления определена с ELSE, то она выполняется, только если заданное условие ложно. Заметим, что условие должно быть задано, если определена фраза ELSE вычисление.
Переход или вызов по определенному адресу или адресу относительно PC. Адрес относительно PC - это 24-разрядное число в виде двоичного дополнения. Модификатор команды DB указывает, что переход задержанный; иначе - он не задержанный. Если модификатор прерывания цикла (LA) определен для перехода, то данные извлекаются из стеков цикла и стека PC при выполнении перехода. Модификатор LA должен использоваться только в случае, если переход выполняется за границу цикла. Если цикла нет или адрес перехода находится внутри цикла, то модификатор LA не должен использоваться.
Модификатор очистки прерывания (CI) команды JUMP позволяет повторно использовать прерывание во время его обработки. Обычно ADSP-2106x игнорирует и не фиксирует прерывание, которое происходит повторно, когда программа его обработки уже выполняется. Команда JUMP (CI) должна размещаться внутри программы обработки прерывания. JUMP (CI) очищает состояние текущего прерывания без выхода из программы обработки прерывания, сводя программу обработки прерывания к стандартной подпрограмме - это позволяет прерыванию произойти снова в результате какого-либо события или задачи в системе ADSP-2106x. Команда JUMP (CI) сводит программу обработки прерывания к стандартной подпрограмме, обнуляя соответствующий бит в регистре фиксирования прерывания (IRPTL) и регистре указателя маски прерывания (IMASKP). Затем ADSP-2106x позволяет прерыванию произойти снова. При возвращении из подпрограммы, в которую была сведена программа обработки прерывания командой JUMP (CI), должен использоваться модификатор (LR) команды RTS (в случае, если прерывание поступает в течение двух последних команд цикла). (См. команду типа 11, возвращение из подпрограммы)
Примеры:
JUMP (M8,112), R6=R6-1; IF EQ CALL (PC,17), ELSE R6=R6-1;
Кодоперации: (для косвенного перехода)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
000 | 01000 | в | А | COND | PMI | РММ | J | Е | CI |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 10
COMPUTE
Код операции: (для перехода относительно PC)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
000 | 01001 | в | А | COND | RELADDR | J | Е | CI |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 10
COMPUTE
COND определяет условие для проверки. Если условие в команде не определено, то COND является условием TRUE, и команда выполняется всегда. Е определяет, используется или нет фраза ELSE. В выбирает тип перехода - переход или вызов. J определяет задержан переход или нет. Бит А активизирует прерывание цикла. CI активизирует очистку прерывания. (Для вызовов CI и А игнорируются) RELADDR - это 6-разрядное число в виде двоичного дополнения, которое прибавляется к текущему значению PC для генерации адреса перехода. PMI выбирает регистр I для косвенного перехода. Регистр I пред-модифицируется, но не обновляется значением регистра М, который выбирается полем РММ. Поле COMPUTE определяет вычислительную операцию, выполняемую параллельно с доступом к данным. Если в команде не определено никакой операции вычисления, то это поле NOР.