Does the Nokia 5800 support application level use of hardware based floating-point code (using ARM VFP)?
If yes, can I do this using GCCE?
Thanks,
Tobias
Does the Nokia 5800 support application level use of hardware based floating-point code (using ARM VFP)?
If yes, can I do this using GCCE?
Thanks,
Tobias
Well, there is a version of the ARM11 (the processor that the 5800 uses) that supports floating point. I can't find any exact source regarding which one it is. I think it's up to the processor itself if floating-point hardware is used for an operation so it shouldn't matter if you use GCCE or RVCT.
According to http://www.pdadb.net, the 5800 uses the same SoC as the E51 : Freescale MXC300-30. This SoC contains an ARM1136JF-S core. The "F" stands for HW FPU.
Unfortunately, the E51 does not seem to support application level HW FPU - pls see:
http://discussion.forum.nokia.com/fo...813#post502813
It is not enough to have HW FPU to be able to use that from app level - pls see:
http://discussion.forum.nokia.com/fo...178#post502178
So if anybody has an authorative answer, I'd be glad, since I am not able to get a physical device here in Germany currently.
Yes 5800 support FPU. I check on device.So if anybody has an authorative answer, I'd be glad, since I am not able to get a physical device here in Germany currently.
Yes, its true, i got about 7 time growing perfomance with ARMFPU VFPV2 option on 5800 device. Unforunatly gcc does not generate VFP assembler code, but with inline assembler within your .cpp code its possible to reach VFP instructions. RVCT use all VFPv2 instructions "from the box" so use it for for hard floating pont application, if you have it, of course :)
CPP code:
int num_ops = 100000000;
float a = 0.14f;
float ff = 1.1514f;
float c=0;
for (int q=0;q<num_ops;q++){
c += a * ff;
}
There is examle of assebler code generated by RVCT with vfp support:
MOV r0,#0
|L5.68|
ADD r0,r0,#1
FMACS s16,s17,s18
CMP r0,r5
BLT |L5.68|
ADD r0,sp,#0x28
and this is asm code, provided by GCC and RVCT withou vfp support:
LDR r0,[sp,#0x3c]
LDR r1,[sp,#0x38]
MOVS r5,#0
BL __aeabi_fmul
STR r0,[sp,#0x40]
|L1.182|
LDR r0,[sp,#0x40]
MOVS r1,r7
BL __aeabi_fadd
MOVS r7,r0
ADDS r5,r5,#1
CMP r5,r6
BLT |L1.182|
ADD r0,sp,#0x28
As you can see, vithout vfp support are used fp emulated functions like __aeabi_fmul and __aeabi_fadd.