LINUX.ORG.RU

История изменений

Исправление mky, (текущая версия) :

От вставления NOP'ов у вас выравнивание данных не нарушается?

И в руководстве по оптимизации под Атлон и Опертрон написано, что нужно вставлять один NOP, а если нужно два и более байт, то перед NOP вставлять от одного до трёх operand-size overrides (66h):

NOP3_OVERRIDE_NOP TEXTEQU <DB 066h,066h,090h>
NOP4_OVERRIDE_NOP TEXTEQU <DB 066h,066h,066h,090h>
NOP5_OVERRIDE_NOP TEXTEQU <DB 066h,066h,090h,066h,090h>
NOP6_OVERRIDE_NOP TEXTEQU <DB 066h,066h,090h,066h,066h,090h>
Может у вас это явления от того, что вы 2 или более подряд NOP вставляете...

Вообще мне казалось что для более быстрой работы кода надо выравнивать начала циклов по 16-байтным границам

Да, там такой совет встречается, но, там ещё написано, что Атлон смотрит 16 байтный блок кода, выровненный по 16 байт и выполняет до трёх команд из этого блока разом. Фиг его знает, какие у вас команды выполняются одновременно при каждом варианте начального адреса блока.

Исходная версия mky, :

От вставления NOP'ов у вас выравнивание данных не нарушается?

И в руководстве по оптимизации под Атлон и Опертрон написано, что нужно вставлять один NOP, а если нужно два и более байт, то перед NOP вставлять от одного до трёх operand-size overrides (66h): <code> NOP3_OVERRIDE_NOP TEXTEQU <DB 066h,066h,090h> NOP4_OVERRIDE_NOP TEXTEQU <DB 066h,066h,066h,090h> NOP5_OVERRIDE_NOP TEXTEQU <DB 066h,066h,090h,066h,090h> NOP6_OVERRIDE_NOP TEXTEQU <DB 066h,066h,090h,066h,066h,090h> </code> Может у вас это явления от того, что вы 2 или более подряд NOP вставляете...

Вообще мне казалось что для более быстрой работы кода надо выравнивать начала циклов по 16-байтным границам

Да, там такой совет встречается, но, там ещё написано, что Атлон смотрит 16 байтный блок кода, выровненный по 16 байт и выполняет до трёх команд из этого блока разом. Фиг его знает, какие у вас команды выполняются одновременно при каждом варианте начального адреса блока.