КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Сложение
PADDB mmx,src; W/D Сложение байтов результат в mmx перенос игнорируется сложение с насыщением PADDSB mmx,src;только знаковое для байт PADDSW; для слов реализует сложение байт результат в приемнике при этому если результат превышает значение 127 то записывает 127
Вычитание. PSUBB mmx, src; mmx=mmx-src W D Вычитание элемента данных из источника и приемника, заем игнорируется -128-1=+127 PSUBSB -128-1=-128 SW без знаковое вычитание с насыщением: PSUBUSB 0-1=0 USW P – потоковое (команды mmx) Источником может быть память Старшее умножение: PMULHW mmx,src Команда умножает каждое из 4-х слов приемника на 4 слова приемника, старшее чота там и кароче максимум 128 битный Старшие половины результатов помещаются в приемник при этом младшие половины теряются PMULLW mmx,src Умнажает каждое из 4-х слова регистра mmx на 4 слова приемника младшие половины результата записываются в приемник.
0.ввод the_loop: movq mm1, [LOP];ESI movq mm0, [ROP];EDI movq mm2, mm0 1.мл.умножение PMULHW mm0, mm1 2.старшее умножение PMULLW mm2, mm1 3.объединить результат PUNPCKLWD mm3, mm0 4.вывод PUNPCKHWD mm3, mm2 PUNPCKLWD mm4, mm0 PUNPCLHWD mm4, mm2 add LOP, 08h add ROP, 08h movq [REZ],mm3 add REZ,mm4 movq [REZ],mm4 sub count,4 JNZ the_loop void mulAss(int32* REZ, int16 *LOP, int* ROP, int count) Доступ будет такой mov ecx, [ebp+08h] mov edi, [ebp+0Ch] mov esi, [ebp+10h] mov eax, [ebp+14h]
Сравнения операции. PCMPEQB/W/D mmx,src;сравниваются байты, слова, двойные слова PCMPEQD [12][-7], [100][-7];= [0][-1] PCMPGTB/W/D mmx,src; сравнивают элементы данных источника и приемника если элемент приемника больше чем приемника то в этом элементы устанавливаем единицы, в противном случай 0 PCMPGTD [100][-7], [12][-7];= [-1][0]
Логические операции. PAND mmx,src - логическое И над каждым битом POR mmx,src - логическое ИЛИ PXOR mmx,src - логическое ИСКЛЮЧАЮЩЕЕ_ИЛИ PANDN mmx,src – логическое НЕ_И или штрих Шеффера
Команды сдвига: PSLLW/D/Q mmx,dst;источником может быть непосредственное значение, регистр mmx или ячейка памяти, младшие биты заполняются нулями. PSLLW mm0,15; обнулит PS L/R L/A W/D/Q – сдвиг влево\вправо логический\арифметический 16\32\64
EMMS – освобождение регистров mmx. Включает FPU-шки.
Расширения SSE. (Stream SIMD Extensions) Впервые появились в Пентиумах ядро SIMD. Упакованные 128 битные регистры, в которых находится 4 слова с плавающей запятой. [float][float][float][float] – 32битные float. Имеют недостаточную точность Были добавлены команды целочисленные для команд MMX с 3-х аппаратно добавилось кол-во регистров. Изменился тип данных. Расширился набор команд для работы с комплексными числа. Предназначение: оптимизация по скорости плавающей запятой. Если точность флотов не устраивает, то не рекомендуется оптимизировать. Теоретически скорость возрастает в 8-10 раз.
Кроме самих регистров SSE есть еще регистры флагов для SSE которые что то там изменяют или показывают состояние. Команды: movaps dst,src – самый быстрый, пересылка выровненных упакованных чисел. Копирует 128 бит из источника в приемник один из операндов должен быть регистр SSE данные должны быть выровнены movups dst,src – пересылка не выровненных упакованных чисел Копирует 128 бит из источника в приемник один из операндов должен быть регистр SSE //ПОЛЬЗОВАТСЯ ЭТОЙ ХУЙНЁЙ НИЛЬЗЯ ОНО ГОРАЗДО МЕДЛЕННЕЕ Индекс нулевого индекса должен быть кратен Шыснадцати Штатные средства этим не обеспечивают. Надо добавитzь еще 4 байта, а патом сгенерировать указатель на один из байтов. В программе делаем 2 указателя на флоты float *vector,*v_ptr; Распределим память для указателя вектор vector = new float[size+4]; //внизу для освобождение v_ptr=(float*)(((int)vector/4+1)*4); //найти ближайший кратный, освобождать его не надо movss dst,src – копирует младшие 32 бита из источника в приемник. //НЕ ИСПОЛЬЗОВАТЬ ЭТУ ХУЙНЮ. movhps movlps movhlps movlhps movmsk
ADD+PS/SS sse,src сложение 4-х пар упакованных флотов/для нулевого слова один из операндов должен быть регистром SSE, 2-й операнд. SUB-PS/SS sse,src вычитает из источника приемник, 4 пары упакованных слотов/для нулевого слова MUL*PS/SS sse,src умножает 4 пары слова/для нулевого слова на источник DIV/PS/SS sse,src делит 4 пары слова/для нулевого слова результат в приемник, приемник – SSE Single (SS) команды используются для распараллеливания того самого.
SQRTPS/SS sse,src извлекает корень квадратный(x) RCPPS/SS sse извлекает 1/x Ошибка этой операции 1,5*2^(-12). RSQRTPS/SS sse извлекает 1/sqrt(x) Bug too its rain cats and dogs.
MAXPS/SS sse,src выбирает старший флот и сует в приемник MINPS/SS выбирает младший флот и сует в приемник, словами упакованными в регистр sse могут быть не числа (если там не числа то в приемник записывается число)
Команды сравнения: CMPPS/SS sse, src, imm упячивает ЛОЖ=0 либо 0FFFFFFFFh истина imm – что именно проверяем. 0 == приемник равен источнику, 1 < приемник строго меньше, 2 <= меньше равен приемник источнику, 3 – один из операндов не число, 4 ≠ не равенство, 5 – >= приемник больше или равен, 6 - > больше, 7 – оба операнда числа. COMISS sse,src не изменяет значение операндов, сравнение нулевой пары чисел с установкой флагов (результат в регистре флагов).
Команды преобразования типов: CVTPI2PS sse, mmx – 4 числа из регистра mmx в sse упакованные целые в вещественные в младшие 2 флота. CONVERT PACKED INTEGER TO PACKED SFLOAT CVTPS2PI mmx, sse – младшие 2 флота в MMX упаковывается 64 бита. Возможны ошибки.
Правило округления двоичного процессора округление в +/- Бесконечность, 0. 1,7=2 + -1,7=-1 + 1,7=1 - -1,7=-2 - 1,7=1 0 -1,7=-1 0
Дата добавления: 2014-01-04; Просмотров: 840; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |