libjpeg-turbo для Android: как организовать выбор времени выполнения кода NEON / не-NEON?
Я использую порт libjpeg-turbo для Android. Он не сильно отличается от базового jpeg-turbo с точки зрения исходного кода: http://git.linaro.org/gitweb?p=people/tomgall/libjpeg-turbo/libjpeg-turbo.git;a=shortlog;h=refs/heads/android
Существует модуль (статическая библиотека), состоящий из 2 файлов, зависящих от функций процессора: jsimd_arm_neon.S и jsimd_arm.c. Я хочу скомпилировать jpeg-turbo с поддержкой NEON, я должен определить __ARM_HAVE_NEON
и скомпилируйте этот модуль с -march=armv7-a -mfpu=neon
, Я хочу, чтобы библиотека работала на старом оборудовании без поддержки Neon (например, Tegra 2), я должен удалить флаг компилятора neon и undef __ARM_HAVE_NEON
,
Мой вопрос: как его скомпилировать, чтобы неоновый или неоновый путь можно было выбирать во время выполнения без SIGILL
на неоновом оборудовании? Я знаю, как проверять NEON во время выполнения, но я не знаю, как изменить libjpeg-turbo и организовать библиотеки.
1 ответ
Старый вопрос, но я все равно добавлю его на всякий случай. Кто-то действительно вдавался в подробности, и одной из проблем был динамический выбор NEON. Это объясняется здесь: /questions/44563595/libjpeg-turbo-dlya-android/44563641#44563641.
Соответствующий раздел - пункт 4, чтобы изменить некоторые строки в методе init_simd().