![]() |
|
|
![]()
|
|
| Russel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 9.8.2006 Репутация: нет Всего: нет |
Добрый День, У меня в XMM регистре находятся 8 целых чисел со знаком по 16 бит, как мне получить модули этих чисел? SSE2...
|
|||
|
||||
| sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 7 Всего: 10 |
Думал я думал...
И придумал последовательность из пяти инструкций XMM-расширения. Придумать из меньшего количества инструкций не удалось.
Объясняю. В xmm1 копруем вектор из xmm0. Если соответствующий элемент вектора xmm1 отрицательный - то при арифметическом сдвиге на 15 разрядов в двухбайтном слове элемента вектора все разряды окажутся равными 1, в противном случае они все будут 0. После выполнения команды исключающего ИЛИ (pxor) в отрицательных элементах исходного вектора все биты изменят значения на противоположные, а в положительных элементах нет, так как отрицательный элемент дал в xmm1 значение ffffh, а положительный - значение 0000h. В результате этого в xmm0 на месте каждого отрицательного элемента вектора получится значение на единицу меньшее модуля бывшего отрицательного значения. Значит необходимо сложить с элементами вектора xmm0, на месте которых были отрицательные числа, значение 1, а с остальными - значение 0.Эти значения мы получим из элементов вектора xmm1 путем логического сдвига элементов на 15 разрядов вправо. Складываем полученный вектор xmm1 с xmm0 и получим в регистре xmm0 то что требуется - модуль элементов. -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
Если мы будем вычитать а не складывать, то мы сэкономим целую команду. -(-1) = +1 заменить на psubw xmm0, xmm1. Примерно так делают компиляторы когда хотят получить модуль числа. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |