Android NDK - suporta código ARM direto ou apenas Thumb
-
24-09-2019 - |
Pergunta
Pediram-me para avaliar a plataforma Android para o nosso produto e estou procurando várias opções, estou apenas arranhando a superfície agora e a única coisa que está me incomodando é que não consigo ver como compilar o código como código ARM direto (sem Thumb), sei que o Thumb roda mais devagar e precisaremos do desempenho nas principais seções do nosso código.
EU pensar deveria estar apenas configurando o -march
bandeira no LOCAL_CFLAGS
do Android.mk
arquivo, mas não consigo fazer isso funcionar ...
Alguém pode ajudar?
Solução
Especificando a seguinte bandeira para um módulo em Android.mk
Compilará o código de braço reto.
LOCAL_ARM_MODE := arm
Ativar otimização também pode ajudar:
LOCAL_CFLAGS := -O3
Outras dicas
Você pode construir em ARM, Thumb ou uma mistura dos dois.
No makefile, em LOCAL_SRC_FILES
, onde você listaria MyFile.c
, especificamos MyFile.c.arm
(não renomeie o arquivo no disco, apenas faça isso na lista de arquivos de origem).Esta convenção é usada em todo o Android para código que é crítico para o desempenho (ou apenas precisa ser ARM por algum motivo).
As notas usuais se aplicam, é claro:O código Thumb tende a exigir mais instruções para realizar algo, mas cada instrução tem metade do tamanho, então o código geralmente é um pouco mais lento, mas também um pouco menor.Em algumas situações, o tamanho menor permite um melhor ajuste aos (minúsculos) caches das CPUs ARM, podendo até ser mais rápido.