Re[4]: Как обойти strict aliasing rule?
От: Erop Россия  
Дата: 18.06.16 08:26
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>А что за компилятор, который не умеет memmove?

W>Например, gcc и clang заменяют вызов функции на простое чтение из памяти даже при полностью выключенной оптимизации. Так что каст через memcpy может использоваться для борьбы с алиасингом. https://godbolt.org/g/mtEgIY

ТС'у нужны операции, вроде сложить два 64-х числа без переноса между 31-м и 32-м битом.

Ты правда думаешь, что реализация через memmove не напряжёт оптимизатор?
Я, например, не в курсе, но как-то сомневаюсь, то оно хорошо соптимизируется...

Хотя вопрос, конечно, интересный.

Я думаю, что самый дружественный к оптимизации подход будет где-то тут:
a + b - ((1ULL<<32)&((a+b)^~(a^b)))

Но может, конечно, и через химию с памятью быстрее, но как-то мало верится. Например, не понятно, что скорее будет векторизовано...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.