[an error occurred while processing this directive]
|
второе АЛУ есть 16-битное, и он делает две операции за такт - одну 32-битную (разделяемую в DUAL-операциях на две 16-битные) и одну просто 16 битную. Итого при хороших раскладах три 16 битные операвции за такт.
Для примера:
ADD DUAL(*ar0+),AC0 || SUB #1, T0
берем 32-битное число из памяти с адресом *ar0, инкрементируем ar0 на два (адресная модификация), это 32-битное число рассматриваем как два независимых 16-битных. Точно также рассматриваем содержимое регистра AC0. Складываем два 16-битных числа впараллель в D-АЛУ. Так сказать SIMD-инструкция. И впараллель всему этому вычитаем единицу из регистра T0 в A-АЛУ.
ИТОГО ЗА 1 ТАКТ:
1) считали два 16 битных операнда из памяти
2) прибавили их к двум половинкам 32-битного регистра.
3) декрементировали 16-битный регистр T0
4) выполнили адресную модификацию.
Вот и ускорение для 16-битных операций.
E-mail: info@telesys.ru