This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Once more THUMB suboptimal code


> I use arm-ecos-elf-gcc v. 3.1 to compile C++ code. The compiler options are
> 
> -g  -Os -mthumb -Wall -Wstrict-prototypes -nostartfiles -Wa,-ahlms=$test.lst
>  -fno-rtti -fno-exceptions
> 
> For the function:
> 
> static void bcpy( char* to, const char* from, int length )
> {
> 	for( int i = 0; i < length; i++ )
> 		to[i] = from[i];
> }
> 
> I have got the next compilation result:
> 
>   63 0018 10B5     		push	{r4, lr}
>   64 001a 041C     		mov	r4, r0
>   65 001c 081C     		mov	r0, r1
>   66 001e 111C     		mov	r1, r2
>   67              	.LM5:
>   68              	.LBB3:
>   69              	.LBB4:
>   70 0020 0022     		mov	r2, #0
>   71 0022 8A42     		cmp	r2, r1
>   72 0024 04DA     		bge	.L9
>   73              	.L7:
>   74              	.LM6:
>   75 0026 835C     		ldrb	r3, [r0, r2]
>   76 0028 A354     		strb	r3, [r4, r2]
>   77              	.LM7:
>   78 002a 0132     		add	r2, r2, #1
>   79 002c 8A42     		cmp	r2, r1
>   80 002e FADB     		blt	.L7
>   81              	.L9:
>   82              	.LM8:
>   83              		@ sp needed for prologue
>   84 0030 10BD     		pop	{r4, pc}
> 
> The result is very strange from my point of view: there are a few excessive
> register copying which should be avoided by register scheduler. What do you
> think: the gcc register scheduler has some bug or the machine description is
> guilty?

It's the register allocator.  The new allocator in the current sources 
does much better:

~/gnu/egcs/arm-elf/gcc/cc1plus -O2 -fnew-ra -mthumb foo.c

_Z4bcpyPcPKci:
        push    {r4, lr}
        mov     r4, #0
        cmp     r4, r2
        bge     .L8
.L6:
        ldrb    r3, [r1, r4]
        strb    r3, [r0, r4]
        add     r4, r4, #1
        cmp     r4, r2
        blt     .L6
.L8:
        @ sp needed for prologue
        pop     {r4, pc}

R.


------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]