169 похожих чатов

Добрый вечер, уважаемые знатоки. Не знаете ли вы как сравнивать

xmm регистры, в которых лежат unsigned значения? Нужно узнать в каком большее значение. К сожалению, подсчет Leading Zero Bits невозможен, а все встроенные инструкции сравнивают только signed значения

19 ответов

9 просмотров

VPTEST?

Dog_with_a_Tail- Автор вопроса
КТ315
VPTEST?

Оно, насколько я понял, bitwise and сделает, но не покажет какой из операндов больше

Dog_with_a_Tail
Оно, насколько я понял, bitwise and сделает, но не...

Тебе нужно сравнить ответ с любым слагаемым, если ответ меньше, значит имело место переполнение, но по любому должны быть какие-то флаги

Dog_with_a_Tail- Автор вопроса
disba1ancer
Тебе нужно сравнить ответ с любым слагаемым, если ...

Сравнить то нужно, но вот нигде никакие флаги не задаются, просто "When an individual result is too large to be represented in 8 bits (overflow), the result is wrapped around and the low 8 bits are written to the destination operand (that is, the carry is ignored)."

Dog_with_a_Tail
Сравнить то нужно, но вот нигде никакие флаги не з...

Так тебе всего-то нужны флаги ZF, SF, OF. Насчёт VPTEST — да, не подойдёт.

Конвертировать в signed и сравнивать, например. Конвертировать можно, изменив старший бит или вычитая половину диапазона (sub/xor с 0x80...000). Это плюс несколько инструкций, но одной-двумя всё равно не получится.

Dog_with_a_Tail
Сравнить то нужно, но вот нигде никакие флаги не з...

Можешь посчитать с переполнением и без переполнения и сравнить. Но получится примерно то же по количеству инструкций: movdqa xmm2,xmm0 paddw xmm0,xmm1 paddusw xmm2,xmm1 pcmpeqw xmm2,xmm0 ; плюс что-то делаем с маской в xmm2

Dog_with_a_Tail- Автор вопроса
s54820
Можешь посчитать с переполнением и без переполнени...

так проблема в сравнивании опять же, маска xmm2 будет либо строка едениц, если xmm2 == xmm0, либо строка 0, если соответственно не равны, флаги не трогаются какие либо

Dog_with_a_Tail
так проблема в сравнивании опять же, маска xmm2 бу...

А что тебе потом делать-то нужно? Маска в таком виде специально формируется, потому что самый частый следующий шаг - инвертировать маску если нужно, потом замаскировать и заменить часть упакованных значений.

Dog_with_a_Tail- Автор вопроса
s54820
А что тебе потом делать-то нужно? Маска в таком ви...

Изначальная цель - сложить, узнать есть ли оверфлоу

Dog_with_a_Tail
Изначальная цель - сложить, узнать есть ли оверфло...

Но ты ведь можешь забрать маску pmovmskb в обычный регистр.

Dog_with_a_Tail- Автор вопроса
s54820
Но ты ведь можешь забрать маску pmovmskb в обычный...

А я балбес, видимо, мне переполнение в unsigned сложении надо определить

Dog_with_a_Tail
А я балбес, видимо, мне переполнение в unsigned сл...

Так я же предложил решение, что с ним не так? Ну кроме того, что длинное. Если точное место переполнения не интересует, то можно сократить на пару инструкций, отложив финальную проверку до конца цикла.

Dog_with_a_Tail- Автор вопроса
s54820
Так я же предложил решение, что с ним не так? Ну к...

ааааа, пришлось открыть глаза чтобы понять, что написано. Осталось понять как узнать старший бит, менять понятно как

Dog_with_a_Tail
ааааа, пришлось открыть глаза чтобы понять, что на...

movdqa xmm2,xmm0 ; paddw xmm0,xmm1 ; С переполнением. paddusw xmm2,xmm1 ; С накоплением. pcmpeqw xmm2,xmm0 ; 11..11 совпало, 00..00 нет. pmovmskb eax,xmm2 ; Старшие биты каждого байта маски. cmp (или xor) eax,0xffff ; 2 (одинаковых) бита на слово, 8 слов. jnz overflow ; И там какое-нибудь tzcnt/bsf, если надо. Наверняка быстрее можно, если что-то поновее SSE2 взять. Но надо думать/мерять.

Dog_with_a_Tail- Автор вопроса
s54820
movdqa xmm2,xmm0 ; paddw xmm0,xmm...

Гипотетическая ситуация: xmm0 задан старший бит, а у xmm1 не задан, а в unsigned сумме переполнения нет. После paddw и paddusw в xmm0 и xmm2 будут лежать разные числа => дальше пойдем по логике overflow, однако переполнения в реале нет. Во избежание такого, нужно конвертировать числа из unsigned в signed, как и было уже написано тобой, но просто ксорить или вычитатать нельзя, потому что теряется информация о старшем бите, который как раз и определяет будет ли переполнение или нет. А считать старший бит xmm регистров без avx512 невозможно (или я уже не знаю)

Dog_with_a_Tail
Гипотетическая ситуация: xmm0 задан старший бит, а...

А почему будут разные-то? Давай для двухбитных: 10 + 01 = 11, с накоплением тоже 11. И нет, при преобразовании в signed сдвигом диапазона ничего не теряется, просто телодвижений больше.

Dog_with_a_Tail- Автор вопроса
s54820
А почему будут разные-то? Давай для двухбитных: 10...

когда переходим из unsigned в signed 2^128 -> 2^127 - 1 бит под знак. По этой же причине будут и разные результаты, потому что число с заданным старшим битом будет как отрицательное во время paddw

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
как быть с принтером? такой подход прокатит?
zamtmn
12
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Карта сайта