История изменений
Исправление hateyoufeel, (текущая версия) :
то clang сгененрирует такой же код, как и для tmp_swap. С minus_swap аналогично.
Ага. Или с -fno-strict-aliasing (не проверял, но прозреваю).
Проблема в том, что большая часть сишников не знают ни про restrict, ни про strict aliasing. Для них указатели – просто числа. И вот это вот говно с xor и вычитанием я имел «счастье» наблюдать в реальном коде.
Аноним был прав. Потому что код в общем случае не эквивалентен (что видно, если, например, вызвать xor_swap(&a, &a))
Тссс! Я-то знаю. А вот сишник Сергей выше – нет, у него суперскалярные процессоры сишечке мешают.
Исправление hateyoufeel, :
то clang сгененрирует такой же код, как и для tmp_swap. С minus_swap аналогично.
Ага. Или с -fno-strict-aliasing (не проверял, но прозреваю).
Проблема в том, что большая часть сишников не знают ни про restrict, ни про strict aliasing. Для них указатели – просто числа. И вот это вот говно с xor и вычитанием я имел «счастье» наблюдать в реальном коде.
Исходная версия hateyoufeel, :
то clang сгененрирует такой же код, как и для tmp_swap. С minus_swap аналогично.
Ага. Или с -fno-strict-aliasing (не проверял, но прозреваю).
Проблема в том, что большая часть сишников не знают ни про restrict, ни про strict aliasing. Для них указатели – просто числа.