Здравствуйте, FR, Вы писали:
FR>>Все ведь зависит от того, как Microsoft Реализовала JIT. Ведь, например, компилятор может решить, что на данном процессоре данную IL команду можно транслировать в код, использующий MMX, SSE и т.д. Обычный же компилятор без указания этого делать не будет, поскольку полученный код может не работать на всех процессорах.
Эта фраза звучит от человека ни разу не видевшего ММХ и SSE, и не понимающего специализированность этих расширений команд. Они слишком спецефичны для использования и потому не могут использоваться компиляторами без напоминания
Пример:
Есть массив
BYTE a[0x4000];
BYTE b[0x4000];
BYTE c[0x4000];
и функция суммирует элементы массивов a и b и записывает результат в c. если переполнение, то записывается максимально возможное число(т.е 255)
Реализация без MMX
void nommx()
{
int i;
unsigned short t;
for (i = 0; i < 0x4000; i++)
{
t = a[i] + b[i]; //
if (t > 255) //Ðåàëèçàöèÿ îïåðàöèè ñ íàñûùåíèåì
t = 255; //
c[i] = t;
}
}
Реализация с использованием MMX
void withmmx()
{
BYTE *pa, *pb, *pc;
int i;
pa = &a[0];
pb = &b[0];
pc = &c[0];
for (i = 0; i < 0x800; i++)
{
_asm{
movq mm0, [pa];
paddusb mm0, [pb];
movq [pc], mm0;
};
pa+=8;
pb+=8;
pc+=8;
}
_asm
{
emms;
}
}