Florian Berger
|
GCC 4.3.3 can't use NEON-pipeline on Cortex-A8 (OMAP 3530)
|
Florian Berger
07/11/2009 2:22 PM
post33601
|
GCC 4.3.3 can't use NEON-pipeline on Cortex-A8 (OMAP 3530)
Hello,
I'm trying to make use of the NEON-pipeline for fast floating point arithmetics on an Cortex-A8. I also have problems
using the not fully pipelined VFP.
IDE: QNX® Momentics® Integrated Development Environment Version: 4.6.0
GCC compiler (v4.3.3) is set up with following tags:
-mtune=cortex-a8 -march=armv7-a -mfpu=neon -ftree-vectorize -mfloat-abi=softfp
and I'm also linking against libm-vfp.so (instead of libm.so)
During compiling i get the following errors:
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qccvAhTrc\TestPro.s: Assembler messages:
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qccvAhTrc\TestPro.s:130: Error: selected processor does not support `flds s14,[fp,#-
28]'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qccvAhTrc\TestPro.s:131: Error: selected processor does not support `flds s15,[fp,#-
24]'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qccvAhTrc\TestPro.s:132: Error: selected processor does not support `fadds s14,s14,
s15'
and so on...
Simple test code:
//begin code
//This Code compiles fine with the option -mfpu=vfp but not with neon
#include <cstdlib>
#include <iostream>
#include <math.h>
int main(int argc, char *argv[]) {
float a,b,c;
a = 8.0f;
b = 1.4f;
for(float g=0.0f; g < 50; g+= 1.0f)
{
c = a+b+g;
c += a*b;
std::printf("g:%f\n",g);
std::printf("Ergebnis:%f\n",c);
}
return EXIT_SUCCESS;
}
//end code
In an ohter project using the option -mfpu=vfp i get following errors:
(The code that yields following errors doesn't compile with either neon or vfp, it works fine with software float
emulation (as it is set by default))
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qcc0yf3eb\Vector.s: Assembler messages:
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qcc0yf3eb\Vector.s:117: Error: D register out of range for selected VFP version -- `
fldd d16,[r1,#0]'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qcc0yf3eb\Vector.s:118: Error: register out of range in list -- `fldmiad ip!,{d17}'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qcc0yf3eb\Vector.s:119: Error: bad instruction `vadd.f32 d16,d16,d17'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\2qcc0yf3eb\Vector.s:120: Error: register out of range in list -- `fstmiad r1!,{d16}'
etc...
I used this wiki page as guide http://wiki.davincidsp.com/index.php/Cortex-A8_Features
What am I doing wrong?
|
|
|