OSDN Git Service

* final.c (asm_fprintf): Update comments, accept "-+ #0" flags,
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Jun 2003 08:34:22 +0000 (08:34 +0000)
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Jun 2003 08:34:22 +0000 (08:34 +0000)
optimize '%' case, handle %c, don't accept %p, %e, %f or %g,
handle %ll, optimize regular character case.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@67434 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/final.c

index 23a9ad0..c157541 100644 (file)
@@ -1,3 +1,9 @@
+2003-06-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * final.c (asm_fprintf): Update comments, accept "-+ #0" flags,
+       optimize '%' case, handle %c, don't accept %p, %e, %f or %g,
+       handle %ll, optimize regular character case.
+
 2003-06-04  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
 
        * Makefile.in (cse.o): Add params.h dependency.
index 1dc66c5..2dd07e5 100644 (file)
@@ -3372,7 +3372,7 @@ output_addr_const (file, x)
    %U prints the value of USER_LABEL_PREFIX.
    %I prints the value of IMMEDIATE_PREFIX.
    %O runs ASM_OUTPUT_OPCODE to transform what follows in the string.
-   Also supported are %d, %x, %s, %e, %f, %g and %%.
+   Also supported are %d, %i, %u, %x, %X, %o, %c, %s and %%.
 
    We handle alternate assembler dialects here, just like output_asm_insn.  */
 
@@ -3421,6 +3421,11 @@ asm_fprintf (FILE *file, const char *p, ...)
       case '%':
        c = *p++;
        q = &buf[1];
+       while (strchr ("-+ #0", c))
+         {
+           *q++ = c;
+           c = *p++;
+         }
        while (ISDIGIT (c) || c == '.')
          {
            *q++ = c;
@@ -3429,21 +3434,22 @@ asm_fprintf (FILE *file, const char *p, ...)
        switch (c)
          {
          case '%':
-           fprintf (file, "%%");
+           putc ('%', file);
            break;
 
          case 'd':  case 'i':  case 'u':
-         case 'x':  case 'p':  case 'X':
-         case 'o':
+         case 'x':  case 'X':  case 'o':
+         case 'c':
            *q++ = c;
            *q = 0;
            fprintf (file, buf, va_arg (argptr, int));
            break;
 
          case 'w':
-           /* This is a prefix to the 'd', 'i', 'u', 'x', 'p', and 'X' cases,
-              but we do not check for those cases.  It means that the value
-              is a HOST_WIDE_INT, which may be either `int' or `long'.  */
+           /* This is a prefix to the 'd', 'i', 'u', 'x', 'X', and
+              'o' cases, but we do not check for those cases.  It
+              means that the value is a HOST_WIDE_INT, which may be
+              either `long' or `long long'.  */
 
 #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
 #else
@@ -3462,17 +3468,22 @@ asm_fprintf (FILE *file, const char *p, ...)
 
          case 'l':
            *q++ = c;
-           *q++ = *p++;
-           *q = 0;
-           fprintf (file, buf, va_arg (argptr, long));
-           break;
-
-         case 'e':
-         case 'f':
-         case 'g':
-           *q++ = c;
-           *q = 0;
-           fprintf (file, buf, va_arg (argptr, double));
+#ifdef HAVE_LONG_LONG
+           if (*p == 'l')
+             {
+               *q++ = *p++;
+               *q++ = *p++;
+               *q = 0;
+               fprintf (file, buf, va_arg (argptr, long long));
+             }
+           else
+#endif
+             {
+               *q++ = *p++;
+               *q = 0;
+               fprintf (file, buf, va_arg (argptr, long));
+             }
+           
            break;
 
          case 's':
@@ -3529,7 +3540,7 @@ asm_fprintf (FILE *file, const char *p, ...)
        break;
 
       default:
-       fputc (c, file);
+       putc (c, file);
       }
   va_end (argptr);
 }