我想做的(高级):在 Android 上使用 qsort_r。
没有默认实现。所以我从 BSD 获取了一个。不幸的是,它需要 fls 函数,而 Android 上也没有该函数。因此,我获取了 Apple Open Source Libc 库,并将 ARM 实现复制到内联程序集中。现在我得到了这个:
Assembler messages:
Error: selected processor does not support Thumb mode `clz r3,r0'
Error: cannot honor width suffix -- `rsb r0,r3,#32'
AFAIR ARM-6 不支持 Thumb 模式。那么我该如何强制这个文件使用非 Thumb 模式,或者纯 C 实现是否可用于 fls?
(天哪,为什么我必须玩这么低的级别才能拥有 qsort_r...)
最佳答案
在您的 Android.mk 文件中,以下是如何进行设置以编译代码的拇指、 ARM 和 NEON 版本。汇编语言源文件需要在 makefile 中将“S”大写,但实际名称不需要大写。后缀“.arm”和“.arm.neon”仅出现在 makefile 中,而不是名称的一部分(例如,下面的文件名为 main.c、main_asm.s、test.c 和 test_asm.s)。
LOCAL_ARM_MODE := arm # remove this if you want thumb mode
LOCAL_ARM_NEON := true # remove this if you want armv5 mode
# this flag will allow neon intrinsics in your C files
LOCAL_CFLAGS := -mfpu=neon -march=armv7
LOCAL_SRC_FILES := \
main.c.arm \
test.c.arm.neon \
main_asm.S.arm \
test_asm.S.arm.neon \
关于android - Android 没有 qsort_r(或者如何禁用强制 Thumb 在 Android ARM 代码中使用 CLZ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033017/