2

我想做的(高级):在 Android 上使用 qsort_r。

没有默认实现。所以我从 BSD 中获取了一个。不幸的是,它需要在 Android 上也不可用的 fls 功能。因此,我获取了 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...)

4

1 回答 1

2

在你的 Android.mk 文件中,这里是如何设置东西来编译你的代码的 thumb、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 \
于 2013-09-16T14:53:01.503 回答