Не так давно излагал возможные инструкции своего будущего процессора QuatCore (Quaternion Core). Большинство достаточно стандартные - прочитать, записать, прибавить, вычесть, умножить, условные и безусловные переходы, к этому добавляется автоматический инкремент/декремент и косвенная адресация с регистрами X, Y, Z, SP как "базовые" и i,j,k как "индексные".
Единственное, что в нём выявляло "заточенность" на работу с кватернионами - это довольно странный тип адресации [Y + i^j], и флаг PM (Plus-Minus), который определяется из регистров i,j по таблице:
+ - - -
+ + + -
+ - + +
+ + - +
и ещё один регистр Inv, который заставляет транспонировать эту табличку.
Это было нужно, чтобы легко и непринуждённо перемножить два кватерниона с помощью двух вложенных циклов. Но оказывается, эти режимы могут помочь и в других делах!
По сути, мы получаем возможность "на лету" строить такую матрицу:
Умножая её на вектор 4х1, приходим к умножению кватернионов.
Если оставив лишь 2 компонента, делая циклы от 0 до 1, получим такую матрицу:
ужасно полезная штука - это умножение комплексных чисел, а при единичной норме - матрица поворота. И возможность всегда получать транспонированную (поворот в обратную сторону) тоже весьма пользительна.
Делая циклы от 1 до 3, получаем следующую матрицу:
Положив λ0=0, получаем векторное произведение (ещё надо будет её транспонировать, выставив Inv=1), а если λ0=1, а остальные компоненты малы - это будет матрица малого поворота.
Так что выделить под эти режимы 2 адреса из доступных 256 - очень даже выгодное вложение :)