Смекни!
smekni.com

Форматы данных и команды их обработки процессоров Pentium III, Pentium IV (стр. 11 из 18)

Исключения: 1; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12, 13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима;#PF(fault-code).

XORPS приемник, источник

XORPS (bit-wise logical XOR for Packed Single-precision float-point) — поразрядное логическое ИСКЛЮЧАЮЩЕЕ ИЛИ над упакованными значениями в формате ХММ.

Синтаксис: XORPS rxmm1, rxmm2/m128

Машинный код: 00001111:01010111 :mod rxmm1 r/m

Исключения: PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима;

#PF(fault-code).

6.2. Команды блока XMM (SSE2 – Pentium 4)

ADDPD приемник, источник

ADDPD (ADD Packed Double-precision floating-point values) — сложение упакованных значений с плавающей точкой двойной точности.

Синтаксис: ADDPD rxmm1, rxmm2/m128

Машинный код: 66 0F 58 /r

Действие: сложить пары упакованных значении с плавающей точкой двойной точности источника и приемника (аналогично команде ADDPS) и сохранить результат сложения в соответствующих упакованных значениях с плавающей точкой двойной точности приемника.

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37, 42; #NM: 3; #ХМ; #PF(fault-code); #SS(0): 13; #UD: 10-12,15; RM: #GP: 13,16; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

ADDSD приемник, источник

ADDSD (ADD Scalar Double-precision floating-point values) — сложение скалярных упакованных значений с плавающей точкой двойной точности.

Синтаксис: ADDSD rxmm1, rxmm2/m64

Машинный код: F2 0F 58 /r

Действие: сложить младшие упакованные значения с плавающей точкой двойной точности источника и приемника (аналогично команде ADDSS) и сохранить результат сложения в младшем упакованном значении с плавающей точкой двойной точности приемника.

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37; #PF(fault-code); #SS(0): 13; #NM: 3; #XM; #UD: 10, 11,12, 15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17, 18, 19, 22; #XM; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

ANDPD приемник, источник

ANDPD (bitwise logical AND 0F Packed Double-precision floating-point values) — поразрядное логическое И над упакованными значениями с плавающей точкой двойной точности.

Синтаксис: ANDPD xmm1, xmm2/m128

Машинный код: 66 0F 54 /r

Действие: выполнить поразрядное логические И над двумя упакованными значениями с плавающей точкой двойной точности по схеме: приемник[127-0]- приемник[127-0] пoбитнoe_AND источник[127-0].

Исключения: PM: #GP(0): 37, 42; #SS(0): 13; #NM: 3; #XM; #PF(fault-code);

#UD: 10-12,15; RM: #GP: 13,16; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

ANDNPD приемник, источник

ANDNPD (bitwise logical AND NOT 0F Packed Double-precision floating-point values) — поразрядное логическое И-НЕ над упакованными значениями с плавающей точкой двойной точности. Синтаксис: ANDNPD xmm1, xmm2/m128

Машинный код: 66 0F 55 /r

Действие: выполнить операцию поразрядного логического И-НЕ над парами упакованных значений с плавающей точкой двойной точности в приемнике и источнике по схеме: приемник[127-0]-((NОТприемник[127-0]) пoбитнoe_AND источник[127-0]).

Исключения: PM: #GP(0): 37, 42; #SS(0): 13; #NM: 3; #PF(fault-code); #UD: 10, 11,12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17, 18,19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

CLFLUSH адрес_байта

CLFLUSH (FLUSH Cache Line) — сброс на диск строки кэша, содержащей адрес_байта.

Синтаксис: CLFLUSH m8

Машинный код: 0F AE /7

Действие: объявить недействительной строку кэша, которая содержит линейный адрес адрес_байта на всех уровнях иерархии кэшей данных и команд процессора. Если на одном из уровней иерархии кэшей строка "грязная" (противоречит содержимому памяти), то перед объявлением ее недействительной она записывается в память.

Возможность использования команды CLFLUSH на данном процессоре необходимо выяснить с помощью CPUID. Выровненный размер строки кэша, на который воздействует CLFLUSH, также определяется командой CPUID.

Исключения: PM: #GP(0): 37; #PF(fault-code); #SS(0): 13; #UD: 16; RM: #GP: 13; #UD: 23; VM: исключения реального режима; #PF(fault-code).

CMPPD приемник, источник, условие

CMPPD (CoMPare Packed Double-precision floating-point values description) — сравнение упакованных значений с плавающей точкой двойной точности.

Синтаксис: CMPPD xmm1, xmm2/m128, imm8

Машинный код: 66 0F C2 /r i8

Действие: сравнить упакованные значения с плавающей точкой двойной точности в приемнике и источнике. Результат сравнения для каждой пары упакованных чисел представляется в виде маски: единичная маска ffffffffffffffffh — значения чисел равны, нулевая маска 0000000000000000h — значения не равны. Условие сравнения задается непосредственным операндом условие, первые 3 бита которого определяют тип сравнения. Остальные биты зарезервированы. Соответствие значений операнда условие условию сравнения следующее: 0 (приемник = источник), 1 (приемник < источник), 2 (приемник <= источник), 3 (приемник и (или) источник — NAN или в неопределенном формате), 4 (приемник

источник), 5 (
(приемник <источник)), 6 (
(приемник <= источник)), 7 (упакованные значения приемника и источника — правильные значения с плавающей точкой двойной точности). Для проверки остальных условий необходимо вначале поменять содержимое приемника и источника, а затем использовать команду CMPPD со следующими значениями операнда условие: 1 (приемник > источник), 2 (приемник >= источник), 5 (
(приемник > источник)), 6 (
(приемник >= источник)).

Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM: #GP(0):

37, 42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17, 19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

CMPSD приемник, источник, условие

CMPSD (CoMPare Scalar Double-precision floating-point values description) — сравнение скалярных значений с плавающей точкой двойной точности.

Синтаксис: CMPSD xmm1, xmm2/m64, imm8

Машинный код: F2 0F C2 /r i8

Действие: сравнить упакованные значения с плавающей точкой двойной точности в разрядах [63-0] приемника и источника. Формирование проверяемого условия и результата выполнения команды аналогичны соответствующим атрибутам команды CMPPD.

Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15; #AC(0)_cpl3; RM: #GP: 13, 16; #NM: 3; #XM; #UD: 17-19, 22; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

COMISD приемник, источник, условие

COMISD (COMpare Scalar ordered Double-precision floating-point values and set EFLAGS) — сравнение упорядоченных скалярных значений с плавающей точкой двойной точности и установка регистра EFLAGS.

Синтаксис: COMISD xmm1, xmm2/m64

Машинный код: 66 0F 2F /r

Действие: сравнить упорядоченные скалярные значения с плавающей точкой двойной точности в разрядах [63-0] приемника и источника. По результату сравнения установить флаги ZF, PF и CF в регистре EFLAGS: приемник > источник (ZF = О, PF = О, CF = 0), приемник > источник (ZF = О, PF = О, CF = 1), приемник = источник (ZF = 1, PF = О, CF = 0), приемник и(или) источник NAN или в неопределенном формате (ZF = 1, PF = 1, CF = 1). Флаги 0F, SF и AF устанавливаются в 0. В случае генерации немаскированного исключения с плавающей точкой регистр EFLAGS не модифицируется.

Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #XM; #UD: 17-19, 22; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

CVTDQ2PD приемник, источник

CVTDQ2PD (ConVerT packed Doubleword Integers to Packed Double-precision floating-point values) — преобразование двух упакованных 32-битных целых в два упакованных значения с плавающей точкой двойной точности.

Синтаксис: CVTDQ2PD rxmm1, rxmm2/m64

Машинный код: F3 0F E6

Действие: алгоритм работы команды показан на рисунке ниже.

Исключения: PM: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD:

10, 11, 12, 15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #АС: 5; #PF(fault-code); #AC(0)_u.

CVTDQ2PS приемник, источник

CVTDQ2PS (ConVerT Packed Doubleword integers to Packed Single-precision floatingpoint values) — преобразование четырех упакованных 32-битных целых со знаком в четыре упакованных значения с плавающей точкой одинарной точности.

Синтаксис: CVTDQ2PS rxmm1, rxmm2/m128

Машинный код: 0F 5B /r

Действие: алгоритм работы команды показан на рисунке ниже.

В случае когда не удается выполнить точное преобразование, значение округляется в соответствии с полем MXCSR.RC.

Исключения: SIMD (NE): #P; PM: #GP(0): 37, 42; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15; RM: #GP: 13, 16; #NM: 3; #XM; #UD: 17-19, 22; VM: исключения реального режима; #АС: 5; #PF(fault-code).

CVTPD2DQ приемник, источник

CVTPD2DQ, (ConVerT Packed Double-Precision Floating-Point Values to Packed Doubleword integers) — преобразование двух упакованных значений с плавающей точкой двойной точности в два упакованных 32-битных целых.

Синтаксис: CVTPD2DQ rxmm1, rxmm2/m128

Машинный код: F2 0F E6

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем MXCSR.RC. Если преобразованный результат больше чем максимально возможное целочисленное 32-битное значение, то возвращается значение 80000000h.

Исключения: SIMD (NE): #I, #Р; РМ: #GP(0): 37, 42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17, 18, 19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

CVTPD2PI приемник, источник

CVTPD2PI (ConVerT Packed Double-precision floating-point values to Packed doubleword Integers) — преобразование двух упакованных значений с плавающей точкой двойной точности в два упакованных 32-битных целых.

Синтаксис: CVTPD2PI rmmx, rxmm/m128

Машинный код: 66 0F 2D /r

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем MXCSR.RC. Если преобразованный результат больше чем максимально возможное целочисленное 32-битное значение, то возвращается значение 80000000h.