[an error occurred while processing this directive]
|
Вот кусок кода для ядра C55X (я специально показал лишнее вокруг цикла - чтобы видеть, что регистр T2 в адресных фазах не задействован).
bclr TC1xccpart t3<#0
|| mov #0,t3and #7Fh,ac1
|| xor t2,t2add mmap(@t3)<<#7,ac1
mov *ar2+,ac2
|| add #1,t0
sub ac0<<#-18,ac1
|| rptblocal loop_quan
;----- quantizer loop begin ----
cmpor ac1|| mov *ar2+,ac2
loop_quan: xccpart !TC1 || add #1,t2
;----- quantizer loop end ----mov dbl(*ar0(#-5)),ac1
sftl t0,#1
|| sftl ac1,#-15,ac2
mov ac2,t3
add #1,t0
|| sftl ac1,#-10
При его анализе в Pipeline Stall Analyzer на драйвере "Cycle Accurate 55xx simulator" он как-то без особых закономерностей показывает пару раз (цикл выполняется 7 раз) STALL в фазе AC2 между второй командой цикла в RD и первой в AC2. а в качестве "камня преткновения" показывает DR2 (то есть T2 как я понял). Причем этот STALL есть не на всех итерациях! А на двух из семи. В чем тут засада? Симулятор глючит? Или там такие непонятно-хитрожопые сталлы в проце будут?
E-mail: info@telesys.ru