Няма qsort_r за Android (или как да деактивирате принуждаването на Thumb да използва CLZ в кода на Android ARM)

Какво искам да направя (високо ниво): да използвам qsort_r на Android.

Няма изпълнение по подразбиране. Така че взех един от BSD. За съжаление се нуждае от fls функции, които също не са налични на Android. Така че взех библиотеката Libc с отворен код на Apple и копирах изпълнението на 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...)


person Wojtek    schedule 25.12.2012    source източник
comment
Във вашия файл Android.mk добавете .arm към имената на файловете и те ще бъдат компилирани като режим ARM вместо режим Thumb (напр. sort.c.arm). Имах смесен Thumb/ARM код в собствена библиотека на Android и той работи добре.   -  person BitBank    schedule 26.12.2012
comment
@BitBank Моля, включете това в отговор, защото мога да гласувам за него.   -  person Wojtek    schedule 16.09.2013


Отговори (1)


Във вашия файл Android.mk ето как да настроите нещата за компилиране на палец, ръка и неонови версии на вашия код. Изходните файлове на асемблерния език трябва да имат "S" с главна буква в make-файла, но не е необходимо действителното име да бъде с главна буква. Суфиксите ".arm" и ".arm.neon" са само в make-файла, а не част от името (напр. файловете по-долу са наречени 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 \
person BitBank    schedule 16.09.2013