Project Home
Project Home
Trackers
Trackers
Documents
Documents
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - GCC 4.3.3 can't use NEON-pipeline on Cortex-A8 (OMAP 3530): (1 Item)
   
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?