Arm Community
Site
Search
User
Site
Search
User
Support forums
Arm Development Studio forum
ARM CORTEX A8 : use of fpack-struct compiler directive
Jump...
Cancel
Locked
Locked
Replies
3 replies
Subscribers
119 subscribers
Views
3245 views
Users
0 members are here
Options
Share
More actions
Cancel
Related
How was your experience today?
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion
ARM CORTEX A8 : use of fpack-struct compiler directive
shashikumar MS
over 12 years ago
Note: This was originally posted on 27th May 2009 at
http://forums.arm.com
Hi,
I am compiling an application with arm linux gcc version 4.2.3 (Sourcery G++ Lite 2008q1-126) with the compiler directive's.
I want to optimize this application for the ARM and I am not suppose to use DSP.
[font="Courier New"]
arm-linux-gcc ../Src/*.c ../Src/SimdFunctions.s ../Src/getRectSubPix.s -DOPT_WIN_SIZE -DENABLE_SIMD_GETRECTSUBPIX -DUSE_SIMD -DUSE_SIMD_DAVID -I ../Inc -mcpu=cortex-a8 -mfpu=neon -Wa,-mfpu=neon -mfloat-abi=softfp -o ../Obj/opt_blink.out -O3 -fpack-struct -freorder-blocks-and-partition -lm -lc -lgcc -ftree-vectorize[/font]
after compilation total number of lines of assembly code generated is 35563.
If i remove the compiler directive -fpack-struct the total number of lines of assembly code is 22354.
I checked this by writing a small C program which updates the structure that consists of 3 integer elements. consider if i want to write 55, 66, 77 to these three elements then
with -fpack-sturct directive the program uses byte store to store 55, 66, 77 and then fills the remaining bytes with zeros which generates around 20 lines of assembly code
whereas without -fpack-sturct it writes directly to the location and the assembly generated is is of about 5 lines.
Also help me in any compilation directives to be given to optimize even more.
thanks and regards
Shashi
shashi.ms@samsung.com
Peter Harris
over 12 years ago
Note: This was originally posted on 27th May 2009 at
http://forums.arm.com
Packing data structures is one of those interesting areas of C which is really "interesting" on ARM, if only because the history of unaligned access support is so fragmented.
The GCC compiler assumes that unaligned access is not supported by default - so if you tell it all structures are packed it replaces neat word / halfword loads with individual byte loads and then assembles the result in registers. Consequently the amount of assembler you need goes up quite a lot.
I'm not aware of support in GCC for generating unaligned loads.
In general packing structures generates sub-optimal code - do you need to pack all of your structures?
Cancel
Vote up
0
Vote down
Cancel
shashikumar MS
over 12 years ago
Note: This was originally posted on 27th May 2009 at
http://forums.arm.com
Hi,
Thanks for the reply at the earliest.
I need not pack as most of the structures are defined in such a way that holes are not left in between.
we have done lots of c optimization in this application. are there any new compilation directives which can give more optimization for speed ?
Cancel
Vote up
0
Vote down
Cancel
Simon Craske
over 12 years ago
Note: This was originally posted on 27th May 2009 at
http://forums.arm.com
It may be worth seeing if ARM's RealView compiler can offer the performance you are after.
A free evaluation can be requested from [url="
http://www.arm.com/phpscripts/rvds_eval.php
"]
http://www.arm.com/phpscripts/rvds_eval.php[/url]
hth
s.
Cancel
Vote up
0
Vote down
Cancel