On Wed, Oct 6, 2010 at 11:34 PM, Phung Nguyen <nhph...@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 <ja...@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
>>
>

Reply via email to