Pergunta

Atualmente, estou tentando otimizar algum código relacionado ao DSP com o tubarão e descobri que estou perdendo muito tempo em uma conversão de bóia para inteiro:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

Como o iPhone parece ter um co-processador ARM11 FP, estou me perguntando se posso substituir meu código pela instrução FTOSI. Há algum documentação Disponível no site do ARM, mas não tenho experiência em montagem otimizada à mão. Alguém já fez isso antes?
Eu acho que poderia entender o código com

__asm__ volatile

Mas como faço para verificar se a instrução está disponível?
Como posso passar meu valor?

EDIT1: Como Louis já apontou, esqueci de mencionar que estou compilando com "Compile for Thumb" desligado.

EDIT2: Como eu quero converter o float para o Int16 assinado e não o Int não assinado, mudei a instrução do braço de ftoui para ftosi. Este foi um erro no post original.

Foi útil?

Solução

Essa pode ser uma pergunta óbvia, mas você tem certeza de que está mirando o braço? Por padrão, o iPhone SDK compila todos os aplicativos para o polegar, que usa o ponto flutuante de software tudo (incluindo conversão float/int).

De qualquer forma, se o dispositivo tiver um coprocessador VFP, ele tem a instrução. Você pode verificar se ele possui um coprocessador apropriado lendo o registro do FPSID e certificando -se de que ele é um modelo suportado.

Eu suspeito que é seguro assumir que todos os iPhones o apoiam. Entre outras coisas, o Assembler da Apple tem suporte para o OpCode, e o back -end do ARM LLVM o usa para as conversões de tipo, o que significa que quando a Apple eventualmente suporta LLVM no telefone, seu compilador vai gerar instruções FTOUI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top