Ассемблер - регистры MMX - команды условного перехода.

AR®
Дата: 01.06.2018 16:20:37
С целью ускорения целочисленной 64-битной арифметики решил попробовать использовать ассемблерную вставку с использованием регистров MMX (которые 64-битные и как нельзя лучше подошли бы для моей задачи).

Не знаю, как сделать цикл со счётчиком или условный переход по равенству/неравенству содержимого одного из MMX-регистров 0.
Некоторая сложность в том, что счётчик (кол-во повторений цикла) у меня тоже 64-битный.

Возможно ли это сделать?
Инструкции JZ, JNZ я так понимаю, для MMX-регистров не при делах?
mayton
Дата: 01.06.2018 18:30:38
Старшие разряды счётчика будут константами много миллионов лет. И зачем оно тогда?
AR®
Дата: 01.06.2018 19:45:04
Какие разряды Вы считаете старшими?
Мне будут нужны количества повторений цикла, лежащие в диапазоне 33-41 бит.
Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее, вот за этим оно и нужно. :)
Dima T
Дата: 01.06.2018 20:03:34
MMX это каменный век, 90-е, сейчас есть AVX-*, наверно надо в эту сторону копать. Как в асме их использовать не знаю, но все компиляторы С/С++ имеют соответствующий ключик для разрешения использования этого набора команд проца.
AR®
Дата: 01.06.2018 21:46:16
Dima T
MMX это каменный век, 90-е, сейчас есть AVX-*, наверно надо в эту сторону копать. Как в асме их использовать не знаю, но все компиляторы С/С++ имеют соответствующий ключик для разрешения использования этого набора команд проца.


Возможно, возможно.
Но мне ещё важна совместимость с разными компами, некоторые из них довольно старые, хотя SSE 4 есть уже на всех проверенных.
Мне не критично использование именно MMX, а нужна быстрая 64-битная арифметика (сложение-вычитание, сдвиги, and-or-xor).
Изопропил
Дата: 01.06.2018 21:47:57
Не нужен asm

Достаточно воспользоваться intrinsics инструкциями.
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
AR®
Дата: 01.06.2018 21:53:36
Я правильно понял, что Вы предлагаете не выписывать явно работу с требуемыми регистрами, а довериться компилятору C ?
mayton
Дата: 02.06.2018 08:25:10
AR®
Какие разряды Вы считаете старшими?
Мне будут нужны количества повторений цикла, лежащие в диапазоне 33-41 бит.
Всё это работает на "чистом" C++ в пределах 1 суток, но хотелось бы быстрее, вот за этим оно и нужно. :)

Сделай цикл в цикле.
AR®
Дата: 02.06.2018 08:41:56
Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями).
mayton
Дата: 02.06.2018 08:51:42
AR®
Вряд ли цикл в цикле будет способствовать достижению главной цели (сделать быстрее, чем на C++ с оптимизациями).

Попробуй.