Atlantic Точно, Athlon forever, Intel в отстой ! Только не понятно, что значит "пашет без проблем". Если декодер за один такт распознает не более 3-х префиксов, то сколько тактов будет декодироваться твоя цепочка "NOP9 (или даже NOP15)" ?
большой nop от wasm db "WASM.ASSEMBLER.NOP.XFGZMDJIEI[[[_" p.s> хотя вот флаги портит, и не знаю, насколько безопасен опкод 2eh
leo Значит, что выполняется как NOP и не вызывает при этом Exception. А насчет 3-х префиксов ты, скорее всего, прав, но в таком случае я в своем посте уже привел эффективные NOP'ы (NOP1-NOP9). То есть эти NOP'ы (вплоть до NOP12) будут выполняться за один такт на Athlon'е.
Black_mirror Бажить будет если... Да, бажить не будет Что-то мне показалось что 4G в мантиссу не влезут. Торможу, FPU ведь на 80 бит работает
Atlantic Много префиксов к сожалению плохо - декодирование будет тормозить. <Prefix Decode Penalty> Intel Pentium Pro/Pentium II: 1-clock Delay AMD K6: Delays can occur due to prefix accumulation.
leo alpet Сейчас тестил на своем Athlon XP: db 66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,90h - 5 тактов на 15 байт db 66h,66h,66h,90h,66h,66h,66h,90h,66h,66h,66h,90h - 1 такт на 12 байт!!!!!!! Так что Athlon'ы действительно рулят. А вот насчет - тут alpet прав, на этих процах дела с префиксами похуже.
Atlantic Ты наверное цикл сделал большой. Команда декодировалась медленно, а по итерациям выполнялась быстро. Надо посмотреть через CodeAnalyst будет... Но вообще не ясно чем эта команда будет лучше jmp $ + 17h
Atlantic db 0x8D,0x80,0,0,0,0 ; lea eax,[eax+0x00000000] db 0x8D,0x89,0,0,0,0 ; lea ecx,[ecx+0x00000000] Пенёк сделает тоже и без префиксов (даже можно ещё инструкцию впихнуть в этот такт, главное чтобы alu не использовала)
Atlantic > "1 такт на 12 байт!!!!!!!" Здорово !!!!!!! Но думаю, парочка стандартных lea eax,[eax+00000000h] с разными регистрами датут те же 12 байт за 1 тик, и надеюсь не только на Athlon XP И говоря о тиках не стоит забывать о распараллеливании со следующими командами. Например на PIII lea вроде как только через один порт работает (по Фогу), поэтому 2 штуки вроде как должны выполняться за 2 тика, но ведь одновременно с ними могут выполняться и следующие инструкции если нет конфликта по портам и регистрам. ЗЫ: Ну вот пока сочинял, bogrus уже тоже самое сказал
alpet Ну сделал я цикл из многих повторений, чтобы точно замерить время... bogrus leo А как вам это: db 81h,0C3h,0h,0h,0h,0h,81h,0C1h,0h,0h,0h,0h,66h,83h,0C0h,0 16 байт, 1 такт (но флаги меняет)
Atlantic На пнях 2 alu, третий add не лезет в такт(у атлона 3?), попробуй prefetchnta [esp+0x0000000] ; целых 8 байт
bogrus Я знаю Но вот на атлонах 3 А вообще, оптимизация NOP'ов - имхо, пустое занятие. Лучше оптимизить код, который эти самые NOP'ы выравнивают
Кстати, сдвиги на 0 тоже считаются, если кто не знает: shl eax,0 или rcl eax,0 Можно также попробовать rcl eax,1 rcr eax,1 будет портиться только флаг OF
Funbit Только сейчас заметил, что это действительно NOP. Вручную подбирал, или с помощью какой-то проги?