[an error occurred while processing this directive]
|
>> а неостановка конвеера связана с старыми ревизиями или мистическое правило
совесть просто замучает :) а если серьёзно, то начинал с ревизии 0.1, там это серьёзно, а сейчас... объяснить то можно, но лень...
>> вроде как параллельные инструкции рекомендуется выравнивать .align 8
нет, не нужно
>> так как если .align 4 то будет два такта на выборку
нет, будет 1 такт
Единственное исключение, точнее два...
Первое: если выполняется команда перехода на невыровненную на 64 бита 64-битную инструкцию, то будет 1 такт пенальти.
Второе: Если первая инструкция цикла 64-битная и невыровненная, и одновременно с этим она не следует непосредственно за инструкцией LSETUP (то есть между LSETUP и ней есть ещё какой-то код), то в начале второй итерации цикла, будет 1 такт пенальти.
>> компилер не для этого ли вставляет NOP/MNOP в паралельную инструкцию? или просто инструкция паралельная не может быть не 64 бита
Именно так, не может. Параллельные инструкции все 64 битные.
>> если в потоке идут 16/32/64 битовые инструкции?
А пусть себе идут если без команд переходов. Все будут по 1 такту.
>> можно ли убрать НОПы из параллельных инструкций, если важнее плотность кода, а выравнивание(скорость) не нужно?
Нельзя убрать. Можно лишь разобрать такую инструкцию на последовательные, например:
r0 = r0 +|+ r1 || r1 = [i0++] || r2 = [i1++]; 64 бита, 1 такт
r0 = r0 +|+ r1 || r1 = [i0++]; 64 бита, 1 такт
r0 = r0 +|+ r1; r1 = [i0++]; 48 бит, 2 такта
r1 = [i0++] || r2 = [i1++]; 64 бита, 1 такт
r1 = [i0++]; r2 = [i1++]; 32 бита, 2 такта
E-mail: info@telesys.ru