[an error occurred while processing this directive]
|
Собственно, нечего более разумного,
кроме предложенного "yes", придумать так и не удалось..
Тем не менее, справедливости ради, все же приведу фрагмент:
R2 = [P0++] ; read register pair from memory
R0 = 0 ;
R1 = 0 ;
P2 = 16 ; loop counter
CC = R1 ;
loop BitFieldExtract LC0 = P2 ;
loop_begin BitFieldExtract ;
R2 = rot R2 by 1 ;
R1 = rot R1 by 1 ; odd bits
R2 = rot R2 by 1 ;
R0 = rot R0 by 1 ; even bits
loop_end BitFieldExtract ;
// call process_data ;
// swap ac0,ac2 ; swap AC0 & AC2
// call process_data ;
loop BitFieldExpand LC0 = P2 ;
loop_begin BitFieldExpand ;
bitmux(R0,R1,A0)(ASR) ;
loop_end BitFieldExpand ;
A0 = A0 >> 8 ;
R0 = A0.w ;
[P1++] = R0 ; write to output buffer
Кол-во команд:
Load+Extract+Expand+Store = 1+16*4+1+16*1+3 = 85.
Против 11 на TMS.
Если бы в AD догадались сделать команду "bitDEmux()"
или изменить алгоритм работы "bitmux()",
можно было бы уменьшить кол-во команд до 37,
но все равно намного хуже чем TMS.
E-mail: info@telesys.ru