home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 309_01 / cc9.c < prev    next >
Text File  |  1990-03-20  |  8KB  |  299 lines

  1. /*
  2. HEADER:        Small-C source part 9;
  3. FILENAME:    CC9.C;
  4. AUTHORS:    Dieter H. Flunkert;
  5. COMPILERS:Turbo C V2.0 Medium Memory Model;
  6. SYSTEM: MSDOS (Brian Brown, Nov 1989)
  7. */
  8.  
  9. #include <stdio.h>
  10. #include "ccdef.c"
  11.  
  12. /* external function declarations */
  13. extern int cout(), nl(), ol(), ot(), outstr(), streq();
  14.  
  15. /* external variable declaration */
  16. extern int optimize, output;
  17.  
  18. #ifdef OPTIMIZE
  19. peephole(ptr) char *ptr; {
  20.  char val[6],*valptr;
  21.  char val1[6];
  22.  int i,addval;
  23.  while(*ptr) {
  24.  if(optimize) {
  25. #ifdef TAB
  26.  if(streq(ptr,"\tleay ")) {
  27.   valptr = val; /* reset pointer */
  28.   i=6;
  29.   while(*(ptr+i) != ',') {*valptr++ = *(ptr+i);++i;}
  30.   *valptr=0;
  31.   addval=i+21;
  32.   if(streq(ptr+i,",S\n\ttfr  y,d\n\tpshs d\n")) {
  33.    if(streq(ptr+addval,"\tldd  [,s++]\n")) {
  34.     ot("ldd  ");outstr(val);outstr(",s");nl();
  35.     ptr=ptr+addval+13;
  36.    }
  37.    else if(streq(ptr+addval,"\tldd  #")) {
  38.     addval=addval+7;
  39.     valptr = val1;
  40.     while(*(ptr+addval) != '\n')
  41.      {*valptr++ = *(ptr+addval); ++addval;}
  42.     *valptr=0;
  43.     ++addval;
  44.     if(streq(ptr+addval,"\tstd  [,s++]\n")) {
  45.      ot("ldd  #");outstr(val1);nl();
  46.      ot("std  ");outstr(val);outstr(",s");nl();
  47.      ptr=ptr+addval+13;
  48.     }
  49.     else if(streq(ptr+addval,"\tstb  [,s++]\n")) {
  50.      ot("ldd  #");outstr(val1);nl();
  51.      ot("stb  ");outstr(val);outstr(",s");nl();
  52.      ptr=ptr+addval+13;
  53.     }
  54.     else cout(*ptr++,output);
  55.    }
  56.    else if(streq(ptr+addval,"\tldb  [,s++]\n")) {
  57.     ot("ldb  ");outstr(val);outstr(",s");nl();
  58.     ptr=ptr+addval+13;
  59.    }
  60.    else if(streq(ptr+addval,"\tleay ")) {
  61.     addval=addval+6;
  62.     valptr = val1;
  63.     while(*(ptr+addval) != ',')
  64.      {*valptr++ = *(ptr+addval); ++addval;}
  65.     *valptr=0;
  66.     ++addval;
  67.     if(streq(ptr+addval,
  68.     ",s\n\ttfr  y,d\n\tpshs d\n\tldd  [,d++]\n")) {
  69.      ot("leay ");outstr(val);outstr(",d");nl();
  70.      ol("pshs y");
  71.      ot("ldd  ");outstr(val1);outstr(",s");nl();
  72.      ptr=ptr+addval+34;
  73.     }
  74.     else cout(*ptr++,output);
  75.    }
  76.    else if(streq(ptr+addval,"\tldb  #")) {
  77.     addval=addval+7;
  78.     valptr = val1;
  79.     while(*(ptr+addval) != '\n')
  80.      {*valptr++ = *(ptr+addval); ++addval;}
  81.     *valptr=0;
  82.     ++addval;
  83.     if(streq(ptr+addval,"\tstb  [,s++]\n")) {
  84.      ot("ldb  #");outstr(val1);nl();
  85.      ot("stb  ");outstr(val);outstr(",s");nl();
  86.      ptr=ptr+addval+13;
  87.     }
  88.     else cout(*ptr++,output);
  89.    }
  90.    else if(streq(ptr+addval,"\tlbsr ")) {
  91.     addval=addval+6;
  92.     valptr = val1;
  93.     while(*(ptr+addval) != '\n')
  94.      {*valptr++ = *(ptr+addval); ++addval;}
  95.     *valptr=0;
  96.     ++addval;
  97.     if(streq(ptr+addval,"\tstd  [,s++]\n")) {
  98.      ot("lbsr ");outstr(val1);nl();
  99.      ot("std  ");outstr(val);outstr(",s");nl();
  100.      ptr=ptr+addval+13;
  101.     }
  102.     else cout(*ptr++,output);
  103.    }
  104.    else if(streq(ptr+addval,
  105.    "\tpshs d\n\tldd  [,s++]\n\taddd #")) {
  106.     addval=addval+28;
  107.     valptr = val1;
  108.     while(*(ptr+addval) != '\n')
  109.      {*valptr++ = *(ptr+addval); ++addval;}
  110.     *valptr=0;
  111.     ++addval;
  112.     if(streq(ptr+addval,"\tstd  [,s++]\n")) {
  113.      ot("ldd  ");outstr(val);outstr(",s");nl();
  114.      ot("addd #");outstr(val1);nl();
  115.      ot("std  ");outstr(val);outstr(",s");nl();
  116.      ptr=ptr+addval+13;
  117.     }
  118.     else cout(*ptr++,output);
  119.    }
  120.    else if(streq(ptr+addval,
  121.    "\tpshs d\n\tldd  [,s++]\n\tsubd #")) {
  122.     addval=addval+28;
  123.     valptr = val1;
  124.     while(*(ptr+addval) != '\n')
  125.      {*valptr++ = *(ptr+addval); ++addval;}
  126.     *valptr=0;
  127.     ++addval;
  128.     if(streq(ptr+addval,"\tstd  [,s++]\n")) {
  129.      ot("ldd  ");outstr(val);outstr(",s");nl();
  130.      ot("subd #");outstr(val1);nl();
  131.      ot("std  ");outstr(val);outstr(",s");nl();
  132.      ptr=ptr+addval+13;
  133.     }
  134.     else cout(*ptr++,output);
  135.    }
  136.    else cout(*ptr++,output);
  137.   }
  138.   else cout(*ptr++,output);
  139.  }
  140.  else if(streq(ptr,"\tpshs d\n\tldd  #")) {
  141.   valptr = val;
  142.   i = 15;
  143.   while(*(ptr+i) != '\n') {*valptr++ = *(ptr+i);++i;}
  144.   *valptr=0;
  145.   addval=i+12;
  146.   if(streq(ptr+i,"\n\taddd ,s++\n")) {
  147.    ot("addd #");outstr(val);nl();
  148.    ptr=ptr+addval;
  149.   }
  150.   else if(streq(ptr+i,
  151.   "\n\tpuls x\n\tpshs d\n\ttfr  x,d\n\tsubd ,s++\n")) {
  152.    ot("subd #");outstr(val);nl();
  153.    ptr=ptr+i+38;
  154.   }
  155.   else cout(*ptr++,output);
  156.  }
  157.  else cout(*ptr++,output);
  158. #else
  159.  if(streq(ptr," leay ")) {
  160.   valptr = val; /* reset pointer */
  161.   i=6;
  162.   while(*(ptr+i) != ',') {*valptr++ = *(ptr+i);++i;}
  163.   *valptr=0;
  164.   addval=i+21;
  165.   if(streq(ptr+i,",s\n tfr  y,d\n pshs d\n")) {
  166.    if(streq(ptr+addval," ldd  [,s++]\n")) {
  167.     ot("ldd  ");outstr(val);outstr(",s");nl();
  168.     ptr=ptr+addval+13;
  169.    }
  170.    else if(streq(ptr+addval," ldd  #")) {
  171.     addval=addval+7;
  172.     valptr = val1;
  173.     while(*(ptr+addval) != '\n')
  174.      {*valptr++ = *(ptr+addval); ++addval;}
  175.     *valptr=0;
  176.     ++addval;
  177.     if(streq(ptr+addval," std  [,s++]\n")) {
  178.      ot("ldd  #");outstr(val1);nl();
  179.      ot("std  ");outstr(val);outstr(",s");nl();
  180.      ptr=ptr+addval+13;
  181.     }
  182.     else if(streq(ptr+addval," stb  [,s++]\n")) {
  183.      ot("ldd  #");outstr(val1);nl();
  184.      ot("stb  ");outstr(val);outstr(",s");nl();
  185.      ptr=ptr+addval+13;
  186.     }
  187.     else cout(*ptr++,output);
  188.    }
  189.    else if(streq(ptr+addval," ldb  [,s++]\n")) {
  190.     ot("ldb  ");outstr(val);outstr(",s");nl();
  191.     ptr=ptr+addval+13;
  192.    }
  193.    else if(streq(ptr+addval," leay ")) {
  194.     addval=addval+6;
  195.     valptr = val1;
  196.     while(*(ptr+addval) != ',')
  197.      {*valptr++ = *(ptr+addval); ++addval;}
  198.     *valptr=0;
  199.     ++addval;
  200.     if(streq(ptr+addval,
  201.     ",s\n tfr  y,d\n pshs d\n ldd  [,s++]\n")) {
  202.      ot("leay ");outstr(val);outstr(",s");nl();
  203.      ol("pshs y");
  204.      ot("ldd  ");outstr(val1);outstr(",s");nl();
  205.      ptr=ptr+addval+34;
  206.     }
  207.     else cout(*ptr++,output);
  208.    }
  209.    else if(streq(ptr+addval," ldb #")) {
  210.     addval=addval+7;
  211.     valptr = val1;
  212.     while(*(ptr+addval) != '\n')
  213.      {*valptr++ = *(ptr+addval); ++addval;}
  214.     *valptr=0;
  215.     ++addval;
  216.     if(streq(ptr+addval," stb  [,s++]\n")) {
  217.      ot("ldb  #");outstr(val1);nl();
  218.      ot("stb  ");outstr(val);outstr(",s");nl();
  219.      ptr=ptr+addval+13;
  220.     }
  221.     else cout(*ptr++,output);
  222.    }
  223.    else if(streq(ptr+addval," lbsr ")) {
  224.     addval=addval+6;
  225.     valptr = val1;
  226.     while(*(ptr+addval) != '\n')
  227.      {*valptr++ = *(ptr+addval); ++addval;}
  228.     *valptr=0;
  229.     ++addval;
  230.     if(streq(ptr+addval," std  [,s++]\n")) {
  231.      ot("lbsr ");outstr(val1);nl();
  232.      ot("std  ");outstr(val);outstr(",s");nl();
  233.      ptr=ptr+addval+13;
  234.     }
  235.     else cout(*ptr++,output);
  236.    }
  237.    else if(streq(ptr+addval,
  238.    " pshs d\n ldd  [,s++]\n addd #")) {
  239.     addval=addval+28;
  240.     valptr = val1;
  241.     while(*(ptr+addval) != '\n')
  242.      {*valptr++ = *(ptr+addval); ++addval;}
  243.     *valptr=0;
  244.     ++addval;
  245.     if(streq(ptr+addval," std  [,s++]\n")) {
  246.      ot("ldd ");outstr(val);outstr(",s");nl();
  247.      ot("addd #");outstr(val1);nl();
  248.      ot("std  ");outstr(val);outstr(",s");nl();
  249.      ptr=ptr+addval+13;
  250.     }
  251.     else cout(*ptr++,output);
  252.    }
  253.    else if(streq(ptr+addval,
  254.    " pshs d\n ldd  [,s++]\n subd #")) {
  255.     addval=addval+28;
  256.     valptr = val1;
  257.     while(*(ptr+addval) != '\n')
  258.      {*valptr++ = *(ptr+addval); ++addval;}
  259.     *valptr=0;
  260.     ++addval;
  261.     if(streq(ptr+addval," std  [,s++]\n")) {
  262.      ot("ldd  ");outstr(val);outstr(",s");nl();
  263.      ot("subd #");outstr(val1);nl();
  264.      ot("std  ");outstr(val);outstr(",s");nl();
  265.      ptr=ptr+addval+13;
  266.     }
  267.     else cout(*ptr++,output);
  268.    }
  269.    else cout(*ptr++,output);
  270.   }
  271.   else cout(*ptr++,output);
  272.  }
  273.  else if(streq(ptr," pshs d\n ldd  #")) {
  274.   valptr = val;
  275.   i = 15;
  276.   while(*(ptr+i) != '\n') {*valptr++ = *(ptr+i);++i;}
  277.   *valptr=0;
  278.   addval=i+12;
  279.   if(streq(ptr+i,"\n addd ,s++\n")) {
  280.    ot("addd #");outstr(val);nl();
  281.    ptr=ptr+addval;
  282.   }
  283.   else if(streq(ptr+i,
  284.   "\n puls x\n pshs d\n tfr  x,d\n subd ,s++\n")) {
  285.    ot("subd #");outstr(val);nl();
  286.    ptr=ptr+i+38;
  287.   }
  288.   else cout(*ptr++,output);
  289.  }
  290.  else cout(*ptr++,output);
  291. #endif
  292.  }
  293.  else cout(*ptr++,output);
  294.  }
  295. }
  296. #endif
  297.  
  298. /* <<<<<  End of compiler  >>>>> */
  299.