Здравствуйте, Andrew S, Вы писали:
AS>Итак, в результате мы получаем в минимуме 3 сдвига, 3 сравнения и 3 сложения. Достаточно оптимально, не правда ли?
Вообщем различные эксперементы и показания профилировщика, показали что самый быстрый метод в моей задаче оказался этот:
bool IsSignalOne(WORD w)
{
__asm {
movzx eax,w;
cmp ax,0x7e7e;
jz go_true;
movzx ecx,al;
not cl;
bsr ecx,cl;
ror ax,cl;
cmp ax,0x7e7e;
jnz go_false;
go_true:
mov eax,1;
jmp go_end;
go_false:
xor eax,eax;
go_end:
}
}
На Пенке 700Mgz данный код выполняется ~50 наносек, сгенерированый код компилятором для switch выполняется ~120 наносек.