modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/930120-1.c (about)

     1  /* { dg-require-effective-target untyped_assembly } */
     2  union {
     3    short I[2];
     4    long int L;
     5    char C[4];
     6  } itolws;
     7  char *errflg;
     8  long int dot;
     9  short dotinc;
    10  long int expvf;
    11  
    12  char *
    13  f(fcount,ifp,itype,ptype)
    14       short fcount;
    15       char *ifp;
    16  {
    17    unsigned w;
    18    long int savdot, wx;
    19    char *fp;
    20    char c, modifier, longpr;
    21    union {
    22      double dval;
    23      struct {
    24        int i1;
    25        int i2;
    26      } ival;
    27    } dw;
    28    union {
    29      float fval;
    30      int ival;
    31    } fw;
    32    int gotdot = 0;
    33    while (fcount > 0) {
    34      fp = ifp;
    35      c = *fp;
    36      longpr = ((c >= 'A') & (c <= 'Z') | (c == 'f') | (c == '4') | (c == 'p') | (c == 'i'));
    37      if ((itype == 0) || (*fp == 'a')) {
    38        wx = dot;
    39        w = dot;
    40      } else {
    41        gotdot = 1;
    42        wx = get((int)dot, itype);
    43        if (!longpr) {
    44  	w = (itolws.L=(wx), itolws.I[((dot)&3)>>1]);
    45        }
    46      }
    47      if (c == 'F') {
    48        dw.ival.i1 = wx;
    49        if (itype == 0) {
    50  	dw.ival.i2 = expvf;
    51        }
    52      }
    53  
    54      modifier = *fp++;
    55      switch(modifier) {
    56      case ' ' :
    57      case '\t' :
    58        break;
    59      case 't':
    60      case 'T':
    61        printf("%T",fcount);
    62        return(fp);
    63      case 'r':
    64      case 'R':
    65        printf("%M",fcount);
    66        return(fp);
    67      case 'k':
    68        printf("%k",w);
    69        break;
    70      case 'K':
    71        printf("%K",wx);
    72        break;
    73      case 'a':
    74        psymoff(dot,ptype,":%16t");
    75        dotinc = 0;
    76        break;
    77      case 'p':
    78        psymoff(0,ptype,"%16t");
    79        break;
    80      case 'u':
    81        printf("%-8u",w);
    82        break;
    83      case 'U':
    84        printf("%-16U",wx); break;
    85      case 'c':
    86      case 'C':
    87        if (modifier == 'C') {
    88  	printesc((int)(itolws.L=(wx), itolws.C[(dot)&3]));
    89        } else {
    90  	printc((char)(itolws.L=(wx), itolws.C[(dot)&3]));
    91        }
    92        dotinc = 1;
    93        break;
    94      case 'b':
    95        printf("%-8x", (itolws.L=(wx), itolws.C[(dot)&3]));
    96        dotinc = 1;
    97        break;
    98      case 'B':
    99        printf("%-8o", (itolws.L=(wx), itolws.C[(dot)&3]));
   100        dotinc = 1;
   101        break;
   102      case 's':
   103      case 'S':
   104        savdot = dot;
   105        dotinc = 1;
   106        while ((c = (itolws.L=(wx), itolws.C[(dot)&3])) && (errflg == 0)) {
   107  	dot = inkdot(1);
   108  	if (modifier == 'S') {
   109  	  printesc(c);
   110  	} else {
   111  	  printc(c);
   112  	}
   113  	endline();
   114  	if (!(dot & 3))
   115  	  wx = get((int)dot, itype);
   116        }
   117        dotinc = dot - savdot + 1;
   118        dot = savdot;
   119        break;
   120      case 'i':
   121        if (gotdot) {
   122  	wx = get((int)(dot & ~3), itype);
   123        }
   124        iDasm((int)(wx), (unsigned int)0, (unsigned int)(dot&~3));
   125        printc('\n');
   126        break;
   127      case 'f':
   128        fw.ival = wx;
   129        printf("%-16.9f", fw.fval);
   130        dotinc = 4;
   131        break;
   132      case 'F':
   133        printf("%-32.18F", dw.dval);
   134        dotinc = 8;
   135        break;
   136      }
   137    }
   138    return(fp);
   139  }