Неоптимизированный макро-путь связан с тем, что некоторые инструкции требуют немедленного постоянного аргумента, который в противном случае было бы проблематичным получить при -O0 (необходимо встроить функцию, а затем распространить значение).
инство компиляторов C ++ поддерживают инструкции SIMD (SSE / AVX) с такими интрижками, как
_mm_cmpeq_epi32
Моя проблема в том, что эта функция не помечена какconstexpr
хотя "семантически" нет причин, чтобы эта функция неconstexpr
так как это чистая функция.
Есть ли способ, которым я мог бы написать свою собственную версию (например)_mm_cmpeq_epi32
этоconstexpr
?
Очевидно, я хотел бы, чтобы функция во время выполнения использовала правильный asm, я знаю, что могу переопределить любую функцию SIMD с медленной функцией, котораяconstexpr
.
Если вам интересно, почему я забочусь оconstexpr
SIMD функций. Non constexprness является заразным, что означает, что любые мои функции, которые используют эти функции SIMD, не могут бытьconstexpr
.