home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / mac / 1000 / CCE_1024.ZIP / CCE_1024 / SOZBIN07.LZH / SOZDISTR / DOC / TOP.CHG < prev    next >
Text File  |  1994-07-06  |  11KB  |  266 lines

  1. top version 2.00 eXtended Version
  2. changes by Harun Scheutzow  and jerry geiger:
  3. version V2.00x17
  4.     Options switched off by commandline arguments cannot be reactivated
  5.     with '#pragma OPT +<char>' statements.
  6.  
  7. version V2.00x16
  8.     '+u' bug should be fixed now. I hope so - jerry.
  9.     Harun improved his peephole bug fix.
  10.  
  11. version V2.00x15 
  12.     one known bug: sometimes it is better to make use of '-u' option,
  13.     cause top calculates wrong offsets to (sp) after deleting
  14.     link/unlink instructions sometimes
  15.  
  16. Thu Jun 16 1994
  17.     peephole bug;
  18.     deleting of:
  19.         move.l    a3,a4
  20.         move.l    _alles,a3
  21.         move.l    a4,_alles
  22.         with use of a3
  23.     fixed. (Harun Scheutzow did this)
  24.  
  25. Thu Jun 14 1994
  26.     There was still a impossible 'moveq #VAL, dest' generated sometimes.
  27.     error messages output changed, more diagnostics (switches in source)
  28.     in verbose mode
  29.  
  30. version 2.00x14
  31. Mon Mar 7 1994
  32. fixing bugs:
  33. No more 'moveq #VAL, Ax' is generated.
  34.  
  35.  
  36. Feb 19 1994
  37. version 2.00x13
  38. I tried to fix some bugs:
  39. No more 'lea ANY, Dx' is produced.
  40. An exception sometimes occured while testing a non existent bra condition.
  41. Fixed.
  42.  
  43. Option -v and -V now work as you'ld expect:
  44. -v : verbose
  45. -V : print version info
  46.  
  47.  
  48. TOP, Version 2.00x9 ('x9' von uns zwecks Unterscheidbarkeit hinzugefügt)
  49. Stand: 26.08.92
  50.  
  51. Kurzübersicht/Zusammenfassung der Änderungen am SOZOBON-Optimizer TOP,
  52. die von Christian Wempe und Holger Weets durchgeführt wurden:
  53.  
  54. Zunächst die schlechte Nachricht:
  55. In der Original-Version 2.00 hatte sich außer der neuen Option '-g'
  56. praktisch so gut wie überhaupt nichts verändert. Alle Fehler waren
  57. noch drin, und es waren keinerlei neue Optimierungen enthalten.
  58. Somit tragen wir die Verantwortung für alle Fehler, die mit dem neuen
  59. Optimizer auftreten, und mit dem alten nicht. Natürlich können wir
  60. dafür in keiner Weise haftbar gemacht werden, die Benutzung erfolgt
  61. auf eigene Gefahr. Jeder Benutzer erkennt dies mit dem ersten Starten
  62. des Programmes an.
  63.  
  64. Allgemeines
  65. -----------
  66. - alle uns bekannten Fehler konnten beseitigt werden
  67. - TOP wurde auf Geschwindigkeit und Länge optimiert
  68.    - binäres statt lineares Suchen
  69.    - Zeiger statt Arrays
  70.    - intelligenteres ausführen der Register-Analyse
  71.    - Zusammenfassen von Peephole changes
  72.    - System-Nahes I/O - Handling
  73. - TOP läuft jetzt ohne Änderungen auf ATARI und Amiga
  74. - Die bereits eingebauten Optimierungen wurden wesentlich verbessert,
  75.   und sehr viele neue hinzugefügt (siehe unten)
  76. - Die Zusammenarbeit mit dem Compiler (XCC) wurde verbessert.
  77.   Dieser erzeugt einige neue Hinweise im Text, welche TOP für bessere
  78.   Optimierung nutzt;
  79.       Für Insider:
  80.       ;loop Lx       -- wird für loop rotations verwendet, Lx ist das
  81.                         Label, welches am Anfang der Schleifen-Bedingung
  82.                         steht
  83.       ;ret  (d|a)0   -- wird zum Löschen von überflüssigen Zeilen ver-
  84.                         wendet; das Argument (d0 oder a0) gibt dabei an,
  85.                         in welchem Register das Funktions-Ergebnis zurück-
  86.                         gegeben wird.
  87.                         Bisher hat TOP bei jeder Funktion angenommen, das
  88.                         sie ein Ergebnis in D0 zurückgibt, und demzufolge
  89.                         weniger Instruktionen gelöscht
  90.       ;sstart
  91.       ;send          -- dient zum umsortieren von switches
  92.       ;longs         -- reicht die '-L' (int = long) Option an den TOP weiter
  93.       ;notop         -- schaltet die Optimierung für die aktuelle Funktion
  94.                         aus, es werden nur noch die Blöcke sortiert
  95.                         (praktisch zum debuggen!)
  96.       ;xhcc          -- nur wenn dies im Text steht, wird die ';ret' Direktive
  97.                         verwendet; somit läuft TOP jetzt auch mit anderen
  98.                         Versionen des SOZOBON-Compilers zusammen
  99.       ;opt [options] -- hiermit können die Optionen des TOP funktionsweise
  100.                         ein- und ausgeschaltet werden, wobei '+<c>' die Option
  101.                         <c> einschaltet, und '-<c>' sie ausschaltet; diese
  102.                         Schalter können im C-Quelltext per '#pragma' in den
  103.                         Assembler-Text gebracht werden. Siehe dazu die Datei
  104.                         HCC.CHG
  105.       ;debug [fkt]   -- aktuell noch nicht verwendet, kommt später im Zu-
  106.                         sammenhang mit der Debug-Option des Compilers zum
  107.                         Tragen
  108.  
  109.       ;var ...       -- im Original bereits enthalten, gibt Namen, Größe
  110.                         und Stack-Position einer lokalen Variablen an
  111.       ;reg ...       -- im Original bereits enthalten, gibt Namen und Register
  112.                         einer lokalen Variablen an
  113.       ;rega ...      -- gibt Namen, Größe und Stack-Position eines lokalen
  114.                         Zeigers an
  115.  
  116. ACHTUNG:  BEI EINGESCHALTETER -C OPTION UNSERE VERSION DER XDLIBS
  117.           SOWIE UNSERE FLOAT-BIBLIOTHEK VERWENET WERDEN !!!
  118.  
  119. Erweiterungen
  120. -------------
  121. - Loop rotations wurden implementiert. Hierbei handelt es sich um eine
  122.   reine Geschwindigkeits-Optimierung, daß Programm wird dadurch weder
  123.   kürzer noch länger.
  124.   Nachtrag: unter Umständen kann es passieren, daß eine zusätzliche
  125.             branch-Anweisung eingefügt werden muß, daß Programm könnte
  126.             also doch etwas länger werden; am Besten ausprobieren.
  127.   Abschaltbar wie bisher mit '-l'
  128.  
  129. - Block-Optimierung wurde implementiert. Hierbei handelt es sich um eine
  130.   reine Längen-Optimierung, daß Programm wird also nicht schneller, und
  131.   wenn '-q' (siehe unten) aktiviert ist, auch nicht langsamer. Abschaltbar
  132.   sind diese mit '-j' (j für 'join')
  133.  
  134. - Mittels der Option '-q' erzeugt TOP schnelleren, ansonsten kürzeren
  135.   Code. Bei manchen Optimierungen ist es nämlich so, daß sie das
  136.   Programm wesentlich schneller, aber auch länger machen, und in diesen
  137.   Fällen wird jetzt durch die Option entschieden, was zu tun ist
  138.  
  139. - Es wurden viele neue peephole changes implementiert. Insbesondere kann
  140.   TOP nun endlich auch ganze C-Anweisungen entfernen, wenn sie über-
  141.   flüssig sind.
  142.  
  143. - Das 'registerizing' wurde dahingehend verbessert, daß nun wenn möglich
  144.   die Register d0-d2 und a0-a2 verwendet werden. Dies ist also eine reine
  145.   Geschwindigkeits-Optimierung, da hierduch die movem-Anweisungen kürzer
  146.   werden bzw ganz entfallen.
  147.  
  148. - Es werden jetzt bei Bedarf auch Adress-Register verwendet, um lokale
  149.   Variablen und Parameter aufzunehmen. Dies betrifft insbesondere auch
  150.   lokale Arrays und Strukturen.
  151.  
  152. - es wurden Peephole changes implementiert, welche auch über mehrere
  153.   Blöcke hinweg arbeiten können, und dabei beliebig viele Instruktionen
  154.   manipulieren (in der Ausgabe: 'peephole changes (X)')
  155.  
  156. - wenn Schleifen rotiert werden, dann kann bei bestimmenten Schleifentypen
  157.   noch mehr optimiert werden (in der Ausgabe: 'branches refixed')
  158.  
  159. - wenn möglich, werden die link/unlk - Anweisungen entfernt. Da dies z.B.
  160.   bei Verwendung der Funktion alloca() Probleme geben kann, ist dieses
  161.   Feature abschaltbar mit '-u'.
  162.  
  163. - bei Aufrufen der Bibliotheks-Funktionen
  164.       strcmp()    strcpy()    strcat()    strlen()    strchr()    strrchr()
  165.       stricmp()   strlwr()    strupr()    strrev()    strpos()    bzero()
  166.       memcpy()    lmemcpy()   memmove()   lmemmove()  memccpy()   memchr()
  167.       memcmp()    memicmp()   memset()    memswap()   stradj()    strcspn()
  168.       stristr()   strncat()   strncmp()   strncpy()   strnicmp()  strnset()
  169.       strpbrk()   strpcpy()   strrpbrk()  strrpos()   strset()    strspn()
  170.       strstr()    strtok()    strtrim()   substr()    subnstr()
  171.       basename()  suffix()
  172.   werden die Parameter in Registern übergeben (und nicht auf dem Stack).
  173.   Gleiches gilt für die intern für 'long' Berechnungen verwendeten
  174.   Funktionen
  175.       lmul, lmulu, ldiv, ldivu, lrem, lremu
  176.   und die intern für Floatingpoint-Berechnungen verwendeten Funktionen
  177.       fpmul, fpdiv, fpadd, fpsub, fpcmp, fpneg, fpltof, fpftol
  178.  
  179.   Diese Form des Aufrufes ist
  180.   - schneller und kürzer
  181.     (Stack-Korrektur sowie das Laden der Parameter vom Stack entfällt)
  182.   - läuft aber nur noch mit unserer Version der XDLibs
  183.   - und abschaltbar mit '-c'
  184.   ACHTUNG: Die oben aufgezählten Funktionen sind speziell für die Register-
  185.            Parameter-Übergabe umgeschrieben worden, und sollten keinesfalls
  186.            durch Eigenkonstruktionen ersetzt werden !!!!
  187.   Bei den oben aufgeführten Funktionen wird seit V2.00x6 ein Parameter-
  188.   Test durchgeführt. Der TOP warnt z.B. bei Anweisungen wie
  189.       "strlwr(str1, str2);", weil die Funktion strlwr() mit nur einem Parameter
  190.   aufgerufen wird.
  191.  
  192. - Die Funktionen werden so umsortiert, daß a() vor b() steht, wenn a()
  193.   von b() aufgerufen wird
  194.   -> der Assembler kann mehr bsr.s statt jsr/bsr verwenden, was kürzer
  195.      ist
  196.   Dies ist abschaltbar mit '-f'
  197.  
  198. - ATARI:
  199.    Aufrufe von Funktionen, die in der selben Datei stehen, werden PC-
  200.    relativ gemacht.
  201.   AMIGA:
  202.    Alle Funktions-Aufrufe werden PC-relativ gemacht.
  203.   Dies ist abschaltbar mit '-a'.
  204.  
  205. - damit es nicht so langweilig wird, zeigt TOP jetzt immer an, welche
  206.   Funktion gerade optimiert wird
  207.  
  208. - Mehrere Variablen k÷nnen sich jetzt ein Register teilen, dadurch k÷nnen
  209.   eventuell noch mehr Variablen registert werden, wodurch der Code sowohl
  210.   kⁿrzer als auch schneller wird. (in der Ausgabe: 'registers joined')
  211.   Dies ist abschaltbar mit '-m' und ist nur eingeschaltet, wenn das
  212.   Registerizing (-r) auch eingeschaltet ist.
  213.  
  214. Bugs
  215. ----
  216. Aktuell sind uns keine Fehler des Optimizers bekannt, wegen der
  217. Komplexität des Optimierungs-Prozesses sind diese jedoch nie
  218. auszuschliessen.
  219. Wenn also Fehler gefunden werden, dann wie folgt vorgehen:
  220. 1. Programm ohne TOP übersetzen und prüfen, ob der Fehler nicht
  221.    vielleicht trotzdem auftritt...
  222.  
  223. 2. Nachsehen, ob in der fehlerhaften Datei der Inline-Assembler ver-
  224.    wendet wurde ( asm() ); falls ja, liegt der Fehler aller Wahr-
  225.    scheinlichkeit nach daran, daß dort Code erzeugt wurde, welcher
  226.    den TOP irritiert:
  227.    - '.dc' - Anweisungen im TEXT-Segment
  228.       Abhilfe: die Daten ins DATA-Segment verfrachten (mit '.data')
  229.    - Kommentare der Form, wie sie vom Compiler geschrieben werden (s.o.)
  230.       Abhilfe: nach dem ';' ein Leerzeichen machen
  231.    - diverse Code-Sequenzen, die der Compiler nie erzeugt
  232.       Abhilfe: alle Funktionen, die den Inline-Assembler verwenden,
  233.                in eine separate Datei verschieben, und diese ohne
  234.                Optimizer übersetzen, oder die betreffenden Funktionen
  235.                mit '#pragma +TOP' / '#pragma -TOP' klammern
  236.  
  237. 3. die Datei, in der TOP den Fehler macht, vom Compiler übersetzen
  238.    lassen
  239.  
  240. 4. die so erhaltene Datei (*.S) auf eine Diskette kopieren
  241.    (kopieren der *.C - Datei wäre hilfreich, aber nicht unbedingt
  242.    erforderlich)
  243.  
  244. 5. Alles aufschreiben, was zu dem Fehler bekannt ist
  245.    - in welcher Funktion tritt er auf
  246.    - welche Optionen des TOP müssen angegeben werden, damit der Fehler
  247.      nicht mehr auftritt
  248.       -  zuerst die Peephole changes abschalten, danach funktioniert
  249.          wahrscheinlich bereits alles wieder
  250.       -  falls der Fehler immer noch auftritt, jetzt die restlichen
  251.          Optionen probieren.
  252.          Soblald der Fehler nicht mehr auftritt, soviele Optimierungen wie
  253.          möglich wieder einschalten (um die Optimierungs-Art einzugrenzen,
  254.          an der es wirklich lag)
  255.    - wie äußert sich der Fehler (Berechnung falsch, Bomben, etc)
  256.  
  257. Christian & Holger
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.