This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


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: constant string changed


How can I turn this optimization off?

Phung

On Wed, Oct 6, 2010 at 10:04 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Oct 06, 2010 at 09:59:29PM +0700, Phung Nguyen wrote:
>> When porting GCC on xc16x, I met a problem with a constant string. The
>> following is the C code:
>> #include "stdio.h"
>>
>> int main () {
>>
>> ? ? ? printf ("c\n");
>> }
>> And the following is the generated assembly:
>> ? ? ? .xc16x
>>
>> ? ? ? .section .rodata
>>
>> .LC0:
>> ? ? ? .ascii "c\0"
>> ? ? ? .section .text
>> ? ? ? .align 1
>> ? ? ? .global _main
>> _main:
>> ? ? ? ?mov ?[-r0],r1
>> ? ? ? ?mov ?r1,r0
>>
>> ? ? ? mov r8,#SOF:.LC0
>> ? ? ? calla cc_UC,_puts
>> ? ? ? ?mov ?r1,[r0+]
>> ret
>>
>> where there is no '\n' in the constant string .LC0 any more. However,
>> when I change the string into "%c\n" (with a character passed), the
>> constant string .LC0 becomes .ascii "c\12\0"
>>
>> Is there any idea about this kind of problem? Where did I got the mistake?
>
> Why do you think there is any problem? ?printf ("c\n") is quivalent
> to cheaper puts ("c"), so when optimizing gcc uses the latter instead of
> former.
>
> ? ? ? ?Jakub
>


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