PROgrammist, №2

Page 52

[ПРОграммист

ВВЕДЕНИЕ В SSE

апрель 2010

Данные инструкции поддерживают только запись вида XMM-to-MEMORY и MEMORY-to-XMM. Для записи из регистра общего назначения в регистр XMM и обратно есть инструкции MOVD и MOVQ. Их мнемоники расшифровываются так: MOVD - MOV DOUBLE WORD(DWORD) MOVQ - MOV QUAD WORD(QWORD) Перейдем к основным арифметическим операциям: ;; Сложение ADDSS - ADD SCALAR ADDSD - ADD SCALAR ;; Вычитание SUBSS - SUB SCALAR SUBSD - SUB SCALAR ;; Умножение MULSS - MUL SCALAR MULSD - MUL SCALAR ;; Деление DIVSS - DIV SCALAR DIVSD - DIV SCALAR

SINGLE DOUBLE SINGLE DOUBLE SINGLE DOUBLE

Примечание. XMM-регистры могут быть разделены на два 64-битных FP64 числа или четыре 32-битные FP32 числа. В данном случае SINGLE и DOUBLE обозначают FP32 и FP64 соответственно. SCALAR - скалярное значение, выраженное одним числом, в отличие от векторного. В случае работы со скалярными значениями используется нижний SINGLE или DOUBLE (т.е. нижние 32 или 64-бита соответственно) XMMрегистров.

Недостаток SSE заключается в том, что среди инструкций нет SINGLE тригонометрических функций. Sin, Cos, Tan, Ctan - все эти DOUBLE функции придется реализовать самостоятельно. Правда, есть бесплатная Intel Aproximated Math Library, скачать ее можно по адресу: www.intel.com/design/pentiumiii/devtools/AMaths.zip. В связи с данным фактом, в качестве алгоритма для практической реализации был выбран ряд Тейлора для функции синуса. Это ,конечно, не самый быстрый алгоритм, но, пожалуй, самый простой. Мы будем использовать 8 членов ряда, что предоставит вполне достаточную точность. В связи со спецификой Protected Mode, а именно – невозможностью прямой передачи 64битных чисел через стек (нет, конечно можно, только по частям но неудобно), рассмотрим еще одну инструкцию, которую мы задействуем в нашей программе: СVTSS2SD - ConVerT Scalar Single 2(to) Scalar Double И ее сестра делающая обратное: СVTSD2SS - ConVerT Scalar Double 2(to) Scalar Single Данная инструкция принимает два аргумента, в качестве второго аргумента может выступать либо XMM-регистр либо 32-битная ячейка памяти - DWORD. Примеры использования SSE-команд: movss xmm0,dword[myFP32] movss xmm0,xmm1 movss dword[myFP32],xmm0 movsd xmm0,qword[myFP64] movsd xmm0,xmm1 movsd qword[myFP64],xmm0

ЛАБОРАТОРИЯ

add/sub/mul/div: addss xmm0,dword[myFP32] subsd xmm0,xmm1 mulss xmm0,dword[myFP32] divsd xmm0,xmm1

52⁠

содержание ^


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.