2015-08-11 5 views
1

Я вижу поведение при компиляции с GCC, что подразумевает, что GCC достаточно умен, чтобы оптимизировать вызовы в одной и той же «области» (я использую этот термин здесь свободно, поскольку область действия шире, чем C++ строго относится к сфере действия), чтобы согрешить и созреть в один призыв к sincos.GCC оптимизирует sinl и cosl для sincosl

В частности, для long double x, sinl(x) и cosl(x) получить оптимизированный для sincosl(x, x) вызова.

Я уверен, что это то, что происходит, поскольку я могу прокомментировать либо грех, либо соз, и получить вызов просто соз или грех соответственно. Аналогично, если я изменяю параметр, то снова получаю отдельные вызовы sin и cos.

Это проблема для меня, поскольку библиотека C, с которой я связываюсь, не реализует sincosl. Поэтому мне действительно нужны отдельные функции.

Мое утверждение верно? Может ли кто-нибудь указать мне на документацию для этого поведения? Может ли он быть отключен?

FYI Я использую:

i686-NaCl-gcc.exe --version x86_64-NaCl-GCC (GCC) 4.4.3 20141209 (Native Client r14192, Git Commit 7faaabb9f10e6dcae5f2b799da43e236e65cda95) Copyright (C) 2010 Free Software Foundation, Inc.

Однако я не ожидаю, что это будет конкретная версия. Вероятно, общее поведение GCC (возможно, я предполагаю, что арка/цель).

+0

Можете ли вы предоставить [MCVE] (https://stackoverflow.com/help/mcve)? Вас также может заинтересовать этот [отчет об ошибках] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46926). – tangrs

+0

Ха, спасибо. Я просто нашел это. Я не могу использовать -ansi, поскольку у проекта нет никаких шансов в этих настройках. MCVE может быть сложным, поскольку я использую нестандартную инструментальную цепочку. Я могу попытаться выполнить репо с версией на полке, но никаких обещаний относительно скорости, с которой я это делаю :( –

+0

Я просто экспериментирую с различными «обходными решениями». Я обнаружил, что добавление 2 * M_PI к одному аргументу работает :) , Не уверен, что я особенно доволен этим! –

ответ