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

E>Здравствуйте, watchmaker, Вы писали:


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

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

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


Извини, но я отвечал только на выпад в сторону memcpy/memmove. Насколько я понял, ТС больше интересуется правилами алиасинга, а не конкретной задачей.

Так то, конечно, для задачи сложения двух чисел, такое использование memcpy выглядит избыточном. Особенно в свете ориентации ТС на архитектуру x86, ибо там уже лет 20 есть инструкция paddd, которая делает ровно то что нужно — складывает у двух 64-х битных чисел нижние и верхние половинки без переноса между ними. Если уж была бы важна скорость, то стоит просто этой инструкцией воспользоваться (например через соответствующий интринсик).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.