Здравствуйте, watchmaker, Вы писали:
W>А что за компилятор, который не умеет memmove?
W>Например, gcc и clang заменяют вызов функции на простое чтение из памяти даже при полностью выключенной оптимизации. Так что каст через memcpy может использоваться для борьбы с алиасингом. https://godbolt.org/g/mtEgIY
ТС'у нужны операции, вроде сложить два 64-х числа без переноса между 31-м и 32-м битом.
Ты правда думаешь, что реализация через memmove не напряжёт оптимизатор?
Я, например, не в курсе, но как-то сомневаюсь, то оно хорошо соптимизируется...
Хотя вопрос, конечно, интересный.
Я думаю, что самый дружественный к оптимизации подход будет где-то тут:
a + b - ((1ULL<<32)&((a+b)^~(a^b)))
Но может, конечно, и через химию с памятью быстрее, но как-то мало верится. Например, не понятно, что скорее будет векторизовано...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском