Alexander "SonnySlave"
а не заниматься такими заменами, пусть и простыми
Evgenii
что на бумажке люди не пишут котангенс
Evgenii
ну точнее
Evgenii
в России он используется, а вот здесь например нет вообще
Evgenii
я не видел котангенс кроме вольфрама нигде уже давно
Anonymous
в России он используется, а вот здесь например нет вообще
Понял по флажку, не присматривался раньше
Alexander "SonnySlave"
ахахах, оптимизаторы хороши! https://godbolt.org/g/eNRjqj
Vladislav
такое очень давно умели, казалось бы
Alexander "SonnySlave"
такое очень давно умели, казалось бы
а ты посмотри - я просто аргумент поменял местами в последнем случае)))
Alexander "SonnySlave"
и он из-за этого фейлит. Чувствуется, как там всё писано
Ioann_
Согласен - что за разработчики там только сидят ...
Vladislav
а, в этом смысле)
Vladislav
лол, да
Vladislav
я только на gcc посмотрел что-то
Alexander "SonnySlave"
ладно msvc - ему простительно
Alexander "SonnySlave"
но вот clang и icc - плоховато вышло как-то у них
Vladislav
хех, а в даблах наоборот у шланга самый адекватный результат https://godbolt.org/g/eLq9kn
Alexander "SonnySlave"
мне уже надоело это делать сегодня
Ioann_
Вот только посмотрите на код Студии
Ioann_
Что за WTF
Ioann_
И вы еще говорите, что руками писать вставки - не ок
Ioann_
Ну как так то братцы ?
Ioann_
По-моему там просто еще код биткоин майнера добавляется
Alexander "SonnySlave"
у них в последнем апдейте новый оптимизатор появился
Alexander "SonnySlave"
так что теперь не всё так плохо у них
Alexander "SonnySlave"
но всё равно - это пиздец
Ioann_
А на годболте старый стоит оптимайзер ?
Alexander "SonnySlave"
инфа сотка
Vladislav
а /Ox - правильная настройка?
Vladislav
я не умею в флаги msvc
Vladislav
с /O3 совсем уж ересь выдает
Vladislav
tv65 = 0 $T1 = 8 _Left$ = 32 _Right$ = 40 std::max<double>, COMDAT PROC mov QWORD PTR [rsp+16], rdx mov QWORD PTR [rsp+8], rcx sub rsp, 24 mov rax, QWORD PTR _Right$[rsp] mov rcx, QWORD PTR _Left$[rsp] movsd xmm0, QWORD PTR [rax] comisd xmm0, QWORD PTR [rcx] jbe SHORT $LN3@max mov rax, QWORD PTR _Right$[rsp] mov QWORD PTR tv65[rsp], rax jmp SHORT $LN4@max $LN3@max: mov rax, QWORD PTR _Left$[rsp] mov QWORD PTR tv65[rsp], rax $LN4@max: mov rax, QWORD PTR tv65[rsp] mov QWORD PTR $T1[rsp], rax mov rax, QWORD PTR $T1[rsp] add rsp, 24 ret 0 std::max<double> ENDP tv65 = 32 a$ = 64 b$ = 72 test PROC movsd QWORD PTR [rsp+16], xmm1 movsd QWORD PTR [rsp+8], xmm0 sub rsp, 56 ; 00000038H lea rdx, QWORD PTR a$[rsp] lea rcx, QWORD PTR b$[rsp] call std::max<double> mov QWORD PTR tv65[rsp], rax lea rdx, QWORD PTR b$[rsp] lea rcx, QWORD PTR a$[rsp] call std::max<double> mov rcx, QWORD PTR tv65[rsp] mov rdx, rcx mov rcx, rax call std::max<double> movsd xmm0, QWORD PTR [rax] add rsp, 56 ; 00000038H ret 0 test ENDP
Ioann_
Вроде верная. Кек.
Vladislav
Nikita
с /O3 совсем уж ересь выдает
/О3 же ничего не делает
Vladislav
а march ему никак не указать?
Vladislav
интересно что gcc выдает чуть более адекватный код если убрать -ffast-math
Vladislav
а шланг наоборот ><
Alexander "SonnySlave"
Ioann_
а march ему никак не указать?
Там же xmm регистры используются :\
Vladislav
Там же xmm регистры используются :\
да пес его знает, вдруг поможет
Vladislav
или fast-math ему включить
Alexander "SonnySlave"
а march ему никак не указать?
только явно указав архитектуру через /arch:
Alexander "SonnySlave"
Alexander "SonnySlave"
Alexander "SonnySlave"
ахахах, вы только посмотрите на msvc
Alexander "SonnySlave"
https://godbolt.org/g/8PV96o
Vladislav
ᅟ
Ioann_
А что не так ?
Ioann_
Ioann_
ахахах, вы только посмотрите на msvc
Ioann_
https://godbolt.org/g/8PV96o
Ioann_
Ioann_
На сколько я вижу, сверху код инстанцирования шаблонов макс, мин, а вот снизу - да, 4 строчки кода который бегает по циклу
Ioann_
до константы, но макс мин не вызывает
Ioann_
так что, не все так плачевно :)
Evgenii
И вы еще говорите, что руками писать вставки - не ок
ну если ты обнаружил что именно это тебя ограничивает и все померял, то ок
Ioann_
Ну, блин, там свои проблемы есть. В х64 нельзя в вставки. А в х32 можно.
Ioann_
Только отдельный АСМ собрать и слинковать кек. Ну слава богу MASM64 есть в комплекте
Ioann_
Правильно делать так, берем GCC, ICC - генерируем ASM, открываем MSVC - делаем ASM вставку, того из компиляторов, что дал лучшие результаты, в код. PROFIT ???
🐙 Antony
я не вижу причины не иметь уже готовую функцию для котангенса
Без проблем! Пишите proposal с примерами его использования на практике
Alexander "SonnySlave"
Alexander "SonnySlave"
применение ровно такое же, как и у тангенса, это очевидно. Просто это настолько очевидная вещь, что до меня это наверняка обсуждали и не раз. Ты с комитета, тебе виднее
Alexander "SonnySlave"
Поделись ссылками, интересно же :)
https://bugs.llvm.org/show_bug.cgi?id=35611
Alexander "SonnySlave"
смотри в Depends on
Alexander "SonnySlave"
Могу поузнавать. Остальные тригонометрические функции есть?
ну, синусы-косинусы-тангенс есть. арки к ним тоже есть
Alexander "SonnySlave"
Alexander "SonnySlave"
Если там кто-то заведёт речь про "Слишком специализировано, не нужно", то не верь им - это ложь
Matwey
А зачем вам котангенс?
Berkus
Matwey
котангенс полезен тем что у него полюс не там где у тангенса