
- •Развитие микропроцессорных архитектур
- •Введение ……………………………………………….........................................4
- •С благодарностью
- •Введение
- •1. История развития микропроцессоров фирмы Intel
- •2. Микропроцессоры класса cisc
- •Можно отметить следующие основные черты архитектуры amd64:
- •4. Микропроцессоры класса risc
- •5. Повышение производительности микропроцессоров
- •6. Конвейерная работа микропроцессоров
- •7. Метод переименования регистров (регистровые окна)
- •8.Принцип обработки операндов simd
- •8.1. Архитектура mmx
- •8.2 Технология sse
- •8.3 Технология sse2
- •9. Обзор simd-команд
- •9.1. Команды передачи данных
- •9.2 Арифметические команды
- •9.2.2 Команды упакованного/скалярного умножения и деления
- •9.2.3 Команды упакованого/скалярного вычисления квадратных корней
- •9.2.4. Команды упакованного/скалярного нахождения максимума и минимума
- •9.2.5 Команды сравнения
- •9.3. Команды преобразования типов данных
- •9.4. Логические команды
- •9.5. Дополнительные команды simd над целочисленными операндами
- •9.6. Команды перестановки
- •9.7. Команды управления состоянием
- •9.8. Команды технологии sse3
- •1. Преобразование чисел с плавающей запятой в целые числа. В эту подгруппу входит одна-единственная инструкция, которая работает на уровне арифметического сопроцессора x87 fpu.
- •3. Загрузка невыровненных переменных. Данную подгруппу представляет инструкция lddqu.
- •Команда monitor устанавливает диапазон адресов памяти (обычно используется одна строка кэша), по которому будет осуществляться отслеживание записей по стандартному протоколу write-back.
- •10. Технология Hyper-Threading
- •11. Vliw (epic) микропроцессор
- •Литература
- •Замковец Сергей Всеволодович Развитие микропроцессорных архитектур
- •119333, Москва, ул. Вавилова, д. 44, кор. 2
9.2.5 Команды сравнения
Команды сравнения попарно сравнивают все четыре соответствующих FP-элемента двух операндов (для скалярного варианта команд – только младшие элементы) и проверяют выполнение арифметического условия, специфичного для каждой команды. Если для сравниваемой пары условие выполняется, то в соответствующие 32 разряда выходного операнда записывается маска из всех единиц, в противном случае – маска из нулей. Получаемая в результате двоичная маска обычно используется при логических операциях с объектами.
Входной операнд может располагаться либо в XMM регистре, либо в памяти. Выходным операндом должен быть XMM регистр (SIMD регистр).
Команда CMPPS (Compare packed, single-precision, floating-point – сравнение упакованных данных с плавающей запятой с одинарной точностью) сравнивает четыре пары упакованных чисел одинарной точности с плавающей запятой, используя непосредственный операнд как предикат, возвращает как результат в каждом поле SP все "1" (32-битовая маска) или все "0". Команда подерживает набор из 12 условий: равенство, меньше, меньше или равно, больше, больше или равно, неупорядоченно, не равно, не меньше, не меньше или равно, не больше, не больше или равно, упорядоченно.
Команда CMPSS (Compare scalar single-precision, floating-point – сравнение скалярных данных с плавающей запятой с одинарной точностью) сравнивает младшую пару упакованных чисел, используя непосредственный операнд как предикат (как и в CMPPS), возвращает как результат в младшее поле SP 32-битовую маску из всех "1" или всех "0".
Команда COMISS (Compare scalar single-precision, floating-point ordered and set EFLAGS – сравнение скалярных данных с плавающей запятой с одинарной точностью и установление флагов) сравнивает младшую пару упакованных чисел, и устанавливает флаги ZF, PF, и CF в регистре флагов EFLAGS (флаги OF, SF, и AF сбрасываются).
Команда UCOMISS (Unordered compare scalar single-precision, floating-point ordered and set EFLAGS – сравнение неупорядоченных скалярных данных с плавающей запятой с одинарной точностью и установление флагов) сравнивает младшую пару упакованных чисел, и устанавливает флаги ZF, PF, и CF в регистре флагов EFLAGS (флаги OF, SF, и AF сбрасываются).
9.3. Команды преобразования типов данных
Команды этой группы выполняют преобразования данных из 32-разрядного целочисленного представления со знаком в представление с плавающей запятой и обратно. Эти команды производят преобразование упакованных и скалярных данных между 128-разрядными SIMD регистрами с плавающей запятой и также с 64-разрядными целыми MMX регистрами или 32-разрядными целыми регистрами IA32.
Команда CVTPI2PS (Convert packed 32-bit integer to packed, single-precision, floating-point – преобразование упакованных 32-разрядных целых чисел в упакованные данных с плавающей запятой с одинарной точностью) преобразует два 32-разрядных знаковых числа, расположенных в регистре MMX, в два младших числа одинарной точности с плавающей запятой. Когда преобразование неточны, то возвращается округленное значение, соответствующее режиму округления в регистре MXCSR. Старшие два числа регистра назначения не изменяются.
Команда CVTSI2SS (Convert scalar 32-bit integer to scalar single-precision, floating-point – преобразование скалярного 32-разрядного целого числа в скалярное данное с плавающей запятой с одинарной точностью) преобразует 32-битное знаковое целое, находящееся в регистре MMX, в младшее число SIMD-регистра. Когда преобразование неточны, то возвращается округленное значение соответствующее режиму округления в регистре MXCSR. Старшие три числа регистра назначения не изменяются.
Команда CVTPS2PI (Convert packed, single-precision, floating-point to packed 32-bit integer – преобразование упакованных данных с плавающей запятой с одинарной точностью в упакованные 32-разрядные целые числа) преобразует два младших числа одинарной точности с плавающей запятой SIMD-регистра в два 32-битных знаковых целых регистра MMX. Когда преобразование неточны, то возвращается округленное значение соответствующее режиму округления в регистре MXCSR.
Команда CVTTPS2PI (Convert truncate packed, single-precision, floating-point to packed 32-bit integer - преобразование упакованных данных с плавающей запятой с одинарной точностью в упакованные целые числа) аналогична CVTPS2PI, за исключением того, что если преобразования неточны, то в этом случае возвращается усеченый результат.
Команда CVTSS2SI (Convert scalar single-precision, floating-point to a 32-bit integer – преобразование скалярных данных с плавающей запятой с одинарной точностью в 32-разрядное целое) преобразует младшее число SIMD регистра в 32-битное знаковое целое регистра архитектуры IA (в стандартные регистры). Когда преобразование неточны, то возвращается округленное значение соответствующее режиму округления в регистре MXCSR.
Команда CVTTSS2SI (Convert truncate scalar single-precision, floating-point to scalar 32-bit integer – преобразование скалярных данных с плавающей запятой с одинарной точностью в скалярное 32-разрядное целое число) аналогична CVTSS2SI, за исключением того, что если преобразования неточны, то в этом случае возвращается усеченный результат.