Причина, по которой вы не можете этого сделать, заключается в том, что архитектура команд не принимает косвенный регистр в качестве режима адресации для параметра регистра.Честно говоря, я никогда не видел такую архитектуру машины, поскольку количество регистров обычно довольно мало, поэтому регистр кодируется как часть самой инструкции.Если вам действительно не нравится решение, которое вы получили, вы можете попытаться самостоятельно синтезировать инструкцию (возьмите базовый код операции, посмотрите, куда идет спецификатор регистра и ИЛИ в соответствующем значении), затем выполните его.В зависимости от вашей ОС и компилятора это может оказаться невозможным (самоизменяющийся код часто запрещен).
Делает ли код чище, если вы пишете таблицу переходов в сборке?Может быть, передать спецификатор SPR (при условии, что это целое число, начинающееся с нуля, или может быть приведено к одному), сдвинуть его влево, чтобы получить смещение в таблице переходов, а затем перейти в таблицу, которая будет представлять собой последовательность
MTPSR PSRx, val
RET
MTPSR PSRx+1, val
RET
Я не знаю, что для вас считается "чище", просто подумал, что выброслю это.Обратите внимание, что вам, возможно, придется дополнить NOP, чтобы все выровнять, у меня нет руководства по PowerPC, поэтому я понятия не имею, каковы размеры инструкций или требования к выравниванию.