libjpeg-turbo for Android:如何组织NEON /非NEON代码的运行时选择?

时间:2013-12-12 14:09:45

标签: android android-ndk neon libjpeg libjpeg-turbo

我正在使用Android的libjpeg-turbo端口。在源代码方面与基础jpeg-turbo没什么不同:http://git.linaro.org/gitweb?p=people/tomgall/libjpeg-turbo/libjpeg-turbo.git;a=shortlog;h=refs/heads/android

有一个模块(静态库)由2个与cpu特性相关的文件组成:jsimd_arm_neon.S和jsimd_arm.c。我想用NEON支持编译jpeg-turbo,我必须定义__ARM_HAVE_NEON并用-march=armv7-a -mfpu=neon编译这个模块。我希望该库在没有Neon支持的旧硬件上运行(如Tegra 2),我应该删除neon编译器标志和undef __ARM_HAVE_NEON

我的问题是:如何编译它以便在运行时选择氖或非霓虹路径而不在非霓虹灯硬件上使用SIGILL?我知道如何在运行时检查NEON,但我不知道如何修改libjpeg-turbo并组织库。

1 个答案:

答案 0 :(得分:1)

一个古老的问题,但我还是会添加它,以防万一。有人确实详细介绍了其中一个问题是动态选择NEON。这里解释:https://stackoverflow.com/a/20697814/712413

相关部分是第4项,用于修改init_simd()方法中的某些行。