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


On Wed, Oct 6, 2010 at 11:34 PM, Phung Nguyen <nhphung@gmail.com> wrote:
> How can I turn this optimization off?

Use -fno-builtin-printf.

Richard.

> 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]