Erro de Compilação na plataforma arm

58 views
Skip to first unread message

D.Possamai

unread,
Aug 10, 2012, 10:18:21 AM8/10/12
to beagleboa...@googlegroups.com
Ola Pessoal,

Estou otimizando um código em C para plataforma ARM utilizando o gprof. Nele observei duas "funções" que estavam utilizando parte consideravel do processamento: a mulfd e a addfd. A primeira coisa que fiz foi adicionar o comando -mhard-float na linha de compilação do arquivo makefile. Porém ao dar o comando make, obtive o seguinte erro:

messages.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
Login.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
Main.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
RBC.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
...................................................................................................
...................................................................................................
make: *** [all] Error 1.

Que erro é esse e como eu conserto?





Obrigado
Deivide


Josenivaldo Benito Junior

unread,
Aug 10, 2012, 10:21:59 AM8/10/12
to beagleboa...@googlegroups.com
Olá,

Sua plataforma alvo (processador ARM em questão) possui coprocessador de ponto flutuante?

Acho que pode ser:

1) o processador alvo não possui ponto flutuante em HW e você está forçando a opção hard
2) o processador possui hw de ponto flutuante mas seu toolchain não suporta

att,

--
Josenivaldo Benito Jr.

PU2LBD

*Por Aurélio Buarque de Hollanda,  elite, do francês élite, significa “o que há de melhor em uma sociedade, minoria prestigiada, constituída pelos indivíduos mais aptos”.



2012/8/10 D.Possamai <deivide...@gmail.com>

Josenivaldo Benito Junior

unread,
Aug 10, 2012, 10:25:04 AM8/10/12
to beagleboa...@googlegroups.com
Achei no manaul do GCC:

"Using -mfloat-abi=hard with VFP coprocessors is not supported.  Use 
-mfloat-abi=softfp with the appropriate -mfpu option to allow the 
compiler to generate code that makes use of the hardware floating-point 
capabilities for these CPUs." 

Em outras palavras hard e VFP não funcionam juntos.

--
Josenivaldo Benito Jr.

PU2LBD

*Por Aurélio Buarque de Hollanda,  elite, do francês élite, significa “o que há de melhor em uma sociedade, minoria prestigiada, constituída pelos indivíduos mais aptos”.



2012/8/10 Josenivaldo Benito Junior <jrbe...@benito.qsl.br>

Marco Casaroli

unread,
Aug 10, 2012, 10:50:38 AM8/10/12
to beagleboa...@googlegroups.com

Qual o compilador (toolchain) que voce esta usando?

Qual processador target?

Nao vai ganhar quase nada usando a hardfp ABI.

Voce pode usar o VFP usando softfp ABI mesmo.

Ou entao tem como usar o NEON que eh mais rapido que o VFP para float de precisao simples.

Quando me responder as perguntas e eu tiver no meu computador vou ver os parametros exatos.

Alem disso, tem como mandar o GCC gerar codiso assembly para ver quais instrucoes ele ta gerando (soft, VFP, ou NEON).

Marco Casaroli

unread,
Aug 10, 2012, 1:16:07 PM8/10/12
to beagleboa...@googlegroups.com
Veja esse link:

http://wiki.debian.org/ArmHardFloatPort/VfpComparison 

Em resumo, se você tiver um ARM Cortex A8 use os parametros:

-mfloat-abi=softfp -mfpu=vfpv3-d16

Alem disso, sugiro usar o cross compilador CSL 2009q1


Marco Casaroli


2012/8/10 Marco Casaroli <marco.c...@gmail.com>

D.Possamai

unread,
Aug 14, 2012, 9:28:49 AM8/14/12
to beagleboa...@googlegroups.com
Olá Marco Casaroli, 
eu utilizei um dos comandos que vc mencionou (-mfloat-abi=softfp) na flag do makefile e a compilação ocorreu com sucesso. Fiz o gprof do programa e as funções que eu mencionei anteriormente já não estão mais utilizando parte do processamento.





Obrigado pela Ajuda
Deivide
 

Marco Casaroli

unread,
Aug 14, 2012, 11:02:20 AM8/14/12
to beagleboa...@googlegroups.com
Olá Deivide,

Fico feliz em saber que funcionou.

Se quiser, creio que consegue ganhar mais performance ainda utilizando o NEON (-mfpu=neon), porém, só vai ganhar alguma coisa com operacoes de ponto flutuante com precisão simples (float e não double) e em alguns casos bem específicos. Além disso, o NEON não é 100% IEEE 754, o que felizmente não faz diferença na maioria dos casos.

De qualquer forma, vale a pena tentar.

Poderia falar qual programa você está compilando?

Abraço.

Marco Casaroli


2012/8/14 D.Possamai <deivide...@gmail.com>
Reply all
Reply to author
Forward
0 new messages