Здравствуйте, 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-х битных чисел нижние и верхние половинки без переноса между ними. Если уж была бы важна скорость, то стоит просто этой инструкцией воспользоваться (например через соответствующий интринсик).