Android没有qsort_r(或者如何在Android ARM代码中禁用强制Thumb使用CLZ)

Android没有qsort_r(或者如何在Android ARM代码中禁用强制Thumb使用CLZ),android,arm,libc,thumb,qsort,Android,Arm,Libc,Thumb,Qsort,我想做的(高级):在Android上使用qsort\r 没有默认的实现。所以我从BSD那里抓到了一个。不幸的是,它需要fls功能,这在Android上也是不可用的。所以我抓取了苹果开源Libc库,并将ARM实现复制到一个内联程序集中。现在我明白了: Assembler messages: Error: selected processor does not support Thumb mode `clz r3,r0' Error: cannot honor width suffix -- `rs

我想做的(高级):在Android上使用qsort\r

没有默认的实现。所以我从BSD那里抓到了一个。不幸的是,它需要fls功能,这在Android上也是不可用的。所以我抓取了苹果开源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不支持拇指模式。那么,我如何强制这一个文件采用非拇指模式,或者纯C实现是否可用于fls


(天哪,为什么我要玩这么低级的游戏才能在你的Android.mk文件中有qsort_r…

,下面是如何设置来编译你的代码的thumb、arm和neon版本。汇编语言源文件在makefile中需要大写“S”,但实际名称不需要大写。后缀“.arm”和“.arm.neon”仅在makefile中,而不是名称的一部分(例如,下面的文件名为main.c、main_asm.s、test.c和test_asm.s)


在Android.mk文件中,将“.arm”添加到文件名中,它们将被编译为arm模式而不是Thumb模式(例如sort.c.arm)。我在Android本机库中使用了混合的Thumb/ARM代码,效果很好。@BitBank请将其输入到answer co中,我可以对其进行升级。
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 \