Сообщение Re[6]: Как обойти strict aliasing rule? от 18.06.2016 13:08
Изменено 18.06.2016 13:09 S. Schlongberg
Здравствуйте, Erop, Вы писали:
E>А где тут минус
E>и and с чем-то не тем...
E>Тут или какой-то хитрый рюх или 1<<32 не в то посчитался, (лучше, конечно, 1ULL<<32 писать) или ещё чего...
Наверно, потому что имелось в виду
E>>>Ну, например
(В оригинале суффикса ull нп было.)
Теперь получается
E>А где тут минус
E>и and с чем-то не тем...
E>Тут или какой-то хитрый рюх или 1<<32 не в то посчитался, (лучше, конечно, 1ULL<<32 писать) или ещё чего...
Наверно, потому что имелось в виду
E>>>Ну, например
a + b - ((1ull<<32)&((a+b)^~(a^b))) И пусть себе там компилятор разбирается, как оптимизировать? (В оригинале суффикса ull нп было.)
Теперь получается
mov rax, QWORD PTR [rcx]
mov r8, rax
xor r8, rdx
not r8
lea rcx, QWORD PTR [rax+rdx]
xor r8, rcx
mov rcx, 4294967296 ; 0000000100000000H
and r8, rcx
sub rax, r8
add rax, rdx
ret 0Здравствуйте, Erop, Вы писали:
E>А где тут минус
E>и and с чем-то не тем...
E>Тут или какой-то хитрый рюх или 1<<32 не в то посчитался, (лучше, конечно, 1ULL<<32 писать) или ещё чего...
Наверно, потому что имелось в виду
E>>>Ну, например
(В оригинале суффикса ull не было.)
Теперь получается
E>А где тут минус
E>и and с чем-то не тем...
E>Тут или какой-то хитрый рюх или 1<<32 не в то посчитался, (лучше, конечно, 1ULL<<32 писать) или ещё чего...
Наверно, потому что имелось в виду
E>>>Ну, например
a + b - ((1ull<<32)&((a+b)^~(a^b))) И пусть себе там компилятор разбирается, как оптимизировать? (В оригинале суффикса ull не было.)
Теперь получается
mov rax, QWORD PTR [rcx]
mov r8, rax
xor r8, rdx
not r8
lea rcx, QWORD PTR [rax+rdx]
xor r8, rcx
mov rcx, 4294967296 ; 0000000100000000H
and r8, rcx
sub rax, r8
add rax, rdx
ret 0