могу ли я добавить дополнительные флаги в тест `компиляции » мезона?

#avx2 #meson-build

Вопрос:

Я хочу использовать ret переменную, чтобы проверить, поддерживает ли мой процессор avx2:

     ret = cc.compiles('''
        #include <immintrin.h>
        int main() {
            __m256i m = _mm256_set1_epi32(17);
            return sizeof(__mm256_srli_epi32(m 8);
        }
        ''')
 

но мне нужно как-то добавить флаг компиляции -mavx2 .
Возможно ли это?
Я читал, что в 2019 году этого не было, но, может быть, это изменилось?

Комментарии:

1. Даже при отключенной оптимизации это не проверяет доступность AVX2. Обратите внимание , что _mm256_srli_epi32(m, 8) он находится внутри a sizeof , поэтому он никогда не выполняется. GCC даже скомпилирует его только с -mavx ( godbolt.org/z/T3eKz3j3v ), не требующий -mavx2 или -march=znver1 . Лучшая версия godbolt.org/z/q56r769xM позволяет избежать этой проблемы, компилируя (с -O0 ), чтобы включить vpsrld инструкцию AVX2. (На самом деле , так как я использовал volatile __m256i , он правильно тестируется даже с -O3 .)

2. Вы, вероятно, можете использовать GNU C __attribute__((target("avx2"))) для этого, если параметры сборки являются проблемой. Да, godbolt.org/z/fxfPTWGGE показывает, что работает для GCC (и clang/ICC). Вы можете определить его для MSVC, что позволяет использовать встроенный для расширений, которые не включены.

3. Видишь это

Ответ №1:

Плохо задокументированное ключевое слово args-это то, что вам нужно:

 cc.compiles(..., args : [...])