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 / HCC.CHG < prev    next >
Text File  |  1994-10-23  |  31KB  |  717 lines

  1. hcc 2.00 eXtended Version
  2. known bugs not fixed:
  3. ----------------------------------
  4.  
  5.     char chr;
  6.     ...
  7.     test(chr = 1)
  8. compiles to:
  9.     (move.w #1, <chr>)
  10. what maybe will overwrite another variable or cause an exception:
  11.    address error (if <chr> is not even)
  12.  
  13. ----------------------------------
  14.  
  15. a function pointer out of a structure
  16.   ...
  17.   void   (*fun)(int argument);
  18.   ...
  19. is to call by
  20.    (*struct_p->fun)(argument);
  21. cause
  22.    struct_p->fun(argument);
  23. will not work.
  24. ----------------------------------
  25.  
  26. last modifications - by Volker Seebode - 
  27.  
  28. version/patchlevel x23
  29. Sun Sep 25 1994
  30.  
  31.     bitfields:
  32.     - changed code generation
  33.     - long bitfields implemented ( unsigned long foo : 25; )
  34.     - default order reversed (first bit = MSB)
  35.  
  36.  
  37. last modifications - by jerry g geiger - 
  38.  
  39. version/patchlevel x22
  40. Thu Sep 22 1994
  41.  
  42.     adding something to a void * pointer will generate an error message
  43.     now - better than causing an exception during runtime ;-)
  44.  
  45.     comparing an unsigned to a signed value will cause a warning
  46.         unless switched off by -W-CUS
  47.  
  48.     adding something to a void * pointer will cause a warning, cause
  49.         actually nothing is added (void has length 0!)
  50.  
  51.  
  52. version/patchlevel x21
  53. Sep 15 1994
  54.  
  55.     bug with mixing up 'lsr' and 'asr' instructions and unsigned
  56.     shorts and shorts fixed.
  57.  
  58. version/patchlevel x20
  59. Sep 09 1994
  60.     longs in switch/case should be handled correctly now.
  61.     $ACE environment variable forces hcc to use handle -1 for stderr
  62.         (cause ACE can't handle such things)
  63.     __GDATE__ and __SDATE__ macros fixed.
  64.     a bug occuring with pointer addition/sub sometimes fixed
  65.          (resulting in a 'asr.w' instruction instead of 'asr.l') 
  66.  
  67. version x19
  68. Jul 29 1994
  69.     especially for Holger :
  70.     you can switch off the bad return value/type warnings now
  71.     -W-BRV / #pragma -BRV
  72.  
  73.     the commandline syntax changed a little bit
  74.     (see man file or 'hcc -h')
  75.  
  76. version x17
  77. Jul 04 1994
  78.     bug fixed:
  79.        auto cast of negative short constants to long
  80.  
  81. Jun 13 1994
  82.     the meaning of $INCLUDEDIR changed a little bit:
  83.         it replaces now the built in pathes with
  84.         '${INCLUDEDIR}\sozobonx' and $INCLUDEDIR
  85.     &array is allowed for type checking now
  86.     calling a function via pointer (*func)() should work with
  87.      func(); now, too
  88.     buildin macros changed according to standard
  89.     accepts '/' in include pathes
  90.     ipc'ed files' timestamps are tested now, the newer one is included
  91.     diagnostic output is always written to stderr now
  92.     a man file exists now
  93.     some minor bugs fixed
  94.     $SOZOBONCNF isn't recognized/supported any longer
  95.  
  96. version x15
  97. Apr 19 1994
  98.     #pragma option 'echo' built in:
  99.     '#pragma echo ...' will echo the rest of the line to stderr
  100.     
  101. bug fixes:
  102.     local enum declarations work now (no more bus errors)
  103.     missing #endif's are errors for TRUE #if's now, too
  104.     comparing to 0 should work under all circumstances now
  105.     (there was an error in cast routines)
  106.  
  107.     
  108. version x14
  109. Mar 15 1994    file date: March 23 1994
  110. integer constants:
  111.     should now handled as provided by ANSI:
  112.     Constants are never negativ (except ones prefixed by a '-')
  113.     Hex and octal constants are always unsigned.
  114.     Constants are of the smallest type they fit in.
  115.     
  116.  
  117. version x13
  118. Mon Mar 7 1994
  119.  
  120. integer constants:
  121.     cause stil some problems; a hexadecimal one with leading '0's as
  122.     '0x0000FFFF' is of type long now.
  123.     The handling of constants is still not as provided by ANSI standard.
  124.     Hex and octal constants are not unsigned by default.
  125.     Any constants may become negative, if they don't have a suffix 'U'!
  126.     This is an error, of course. I'll try to fix it.
  127.  
  128. new #pragma option:
  129.     #pragma [+|-]PMR
  130.     switch on/off warning 'probably missing return' 
  131.  
  132. changed macro:
  133.     SOZOBON 
  134.     It has the value of 0x200, as the originals' version number;
  135. new macros: 
  136.     __SOZOBONX__ 
  137.     Is defined for our eXtended version of Sozobon C compiler, it
  138.     will keep the version number of eXtended SOZOBON version as:
  139.     0x200 + our revision number (0x213 for current version).
  140.     __MSHORT__
  141.     Is TRUE if int is a 16 Bit value. (Undefined with -L option).
  142.  
  143. version x12
  144. Mon Feb 28 1994
  145. integer constants:
  146.     hex and octal constants tend to be unsigned now, a hexadecimal one,
  147.     with leading '0's as '0x0000FFFF' is of type long now.
  148.     There is still an error in handling of constants - sorry - comparing
  149.     of two constants can produce wrong code.
  150.  
  151. Arrays larger than 32K should be handled correctly now.
  152.  
  153. Environment:
  154.     SOZOBONCNF=
  155.     "standard": DATE in __DATE__ macro will be of format MM/DD/YY
  156.         else it it will be DD.MM.YY
  157.     "devconout": diagnostic output will not be written to STDERR/Gemdos
  158.         console handle but to BIOS console device
  159.  
  160. function handling:
  161.     A non void declarated function now will cause a warning, if there is
  162.     no return value specified; this works of course the other way round,
  163.     too. 
  164.     A warning will be generated, if hcc cannot decide wether the
  165.     specified return statements will return always some correct value.
  166.  
  167. Bugs fixed:
  168. A 'switch' without a case-block now won't force hcc to an exception
  169. any more. I hope so.
  170.  
  171.  
  172. version x11
  173. Sun Dec 19 1993
  174. Environment:
  175.     SOZOBONCNF=
  176.     List of comma seperated strings:
  177.     "standard" diagnostic output will not go to BIOS console device
  178.         handle but to STDERR/Gemdos console
  179.  
  180.     STDERR=
  181.     If this variable exists diaginstic output will go to Gemdos handle 2
  182.         and not to Gemdos console handle.
  183.  
  184. Macros:
  185.     new macro __CDATE__ implemented; it represents a date-string of the
  186.     format "Mon DD YYYY"
  187.  
  188. commandline Options:
  189.     -v: be verbose
  190.     -V: print complete Version info
  191.  
  192. Bugs fixed:
  193. The error when reading a function declaration like 
  194. 'int main( int argc, char *argv[])' is fixed. (The error was mixing up
  195. the type of array with the pointer's type.)
  196.  
  197. Bugs kept:
  198. A 'const' statement may still cause some trouble, so better '#undef const'
  199. in your source code.
  200.  
  201. ----
  202. Änderungen an HCC V2.0, modifizierte Version 2.00x10
  203. von Holger Weets (Atari(/Amiga)), Christian Wempe (Amiga(/Atari))
  204. und Detlef Wuerkner (Amiga(/Atari))
  205. Stand: 20.04.93
  206.  
  207.  
  208. Erstmal die schlechten Nachrichten:
  209.  
  210. An der Original Version 2.0 des Compilers hat sich praktisch kaum etwas ver-
  211. ändert, somit sind wir verantwortlich für alle Fehler, die mit der neuen
  212. Version auftreten, und mit der alten nicht. Natürlich können wir dafür aber
  213. nicht haftbar gemacht werden, die Benutzung erfolgt auf eigene Gefahr.
  214. Jeder Benutzer erkennt dies mit dem ersten Starten des Programmes an.
  215.  
  216. Folgende Fehler sind aktuell bekannt:
  217. -------------------------------------
  218. - funktion(char_variable = integer_konstante)
  219.         führt zu einer Zuweisung an <char_variable> auf Wortbreite (!),
  220.         was entweder in einem Adress-Fehler endet (3 Bomben) oder zu
  221.         einem (teilweisen) Überschreiben der nächsten Variablen
  222.  
  223. Und jetzt all die guten Nachrichten:
  224.  
  225.  
  226. Updates:
  227.    - x1 -> x2:
  228.       Option '-Q' eingebaut. Bewirkt, daß der Compiler schnelleren Code
  229.       erzeugt, auch wenn dieser das Programm länger macht.
  230.       Code-Erzeugung bei Struktur-Zuweisungen geändert:
  231.          - bei '-Q' erzeugt XCC max. 15 move's, ohne max. 3
  232.          - Erzeugung von move-Listen bei Strukturen, deren Länge nicht durch
  233.            4 teilbar ist, verbessert. Code ist hier jetzt schneller UND kürzer.
  234.  
  235.    - x2 -> x3:
  236.       Erzeugung von 'switches' wesentlich verbessert; der erzeugte Code ist
  237.       jetzt i.A. sowohl schneller als auch kürzer.
  238.  
  239.    - x3 -> x4:
  240.       - der Compiler teilt dem TOP jetzt mit, dass er die erweiterte Version
  241.         ist, und somit laeuft TOP jetzt auch mit anderen (alten) Versionen
  242.         des Compilers anstandslos zusammen
  243.       - neues 'pragma' Argument 'FST' schaltet die '-q' Option ein/aus
  244.       - neues 'pragma' Argument 'TOP' schaltet den TOP Funktionenweise ein/aus
  245.       - neues 'pragma' Argument 'OPT' uebergibt den nachfolgenden String an
  246.          TOP als neue Optionen
  247.       - Pointer-Vergleiche, bei denen ein 'viod *' beteiligt ist, liefern
  248.         jetzt keine Warnung des Compilers mehr
  249.       - Fehler beim scannen der CPP-Tokens behoben
  250.       - trap's werden nur noch generiert, wenn die Option '-L' nicht angegeben
  251.         wurde
  252.  
  253.    - x4 -> x5:
  254.       - es werden jetzt spezielle Sprungtabellen erzeugt, die nur halb so
  255.         lang sind, wie die alten; allerdings lassen sich so erzeugte
  256.         Assemblerfiles auch nur noch mit dem von mir modifizierten JAS V2.00x1
  257.         uebersetzen...
  258.  
  259.    - x5 -> x6:
  260.       - Float-Fehler aus V2.00x5 wieder ausgebaut...
  261.       - noch weiter optimiert
  262.       - mit der neusten Version des TOP übersetzt
  263.       - die includierten Files werden jetzt mit ausgegeben
  264.       - das String-Merging funktioniert jetzt auch im Zusammenhang mit
  265.         CPP-Konstanten, ist somit jetzt endlich vollständig implementiert
  266.       - C++ - Kommentarzeichen implementiert ('//', Kommentar bis Zeilen-
  267.         ende)
  268.       - wieder in HCC umbenannt, weil die veränderte Versionsnummer und
  269.         die Info-Zeile bereits eindeutig zeigt, daß es sich um eine
  270.         modifizierte Version des Compilers handelt (schliesslich haben wir
  271.         den Optimizer ja auch nicht umbenannt, obwohl wir den quasi neu-
  272.         geschrieben haben)
  273.  
  274.    - x6 -> x7:
  275.       - Option '-X' für Debugging implementiert (s.u.)
  276.       - aeusserst aergerlichen Fehler entfernt, der falsche movem - Anweisungen
  277.         bewirkte; solange mit TOP uebersetzt wurde, machte er sich nicht
  278.         bemerkbar, und auch ansonsten trat er nur in einem Spezialfall auf,
  279.         aber dann....
  280.       - hcc kann jetzt auch float's und double's wieder in Registern halten;
  281.         V1.21 konnte dies bereits, aber aus V2.00 scheint es ausgebaut
  282.         worden zu sein, ohne das es hierfuer einen Grund gibt...
  283.  
  284.    - x7 -> x8:
  285.       - optimiert
  286.       - es werden jetzt auch short's registert...
  287.       - "__TOS__" ist jetzt WIRKLICH vordefiniert
  288.       - bessere TOP-Unterstützung
  289.       - Fehler-Erholung bei CPP-Errors verbessert
  290.       - ST-Version: Stack groesser gemacht; fuer 'normale' Quelltexte
  291.         reichte der alte auch (ich habe damit noch nie Probleme gehabt),
  292.         aber es scheint auch Texte zu geben, die den hcc zu sehr tiefer
  293.         Rekursion zwingen und bei solchen ist er schon mal abgestuerzt.
  294.       - ST-Version: falls die Fehlermeldungen des Compilers auf den
  295.         Bildschirm ausgegeben werden, erscheinen sie jetzt auch wieder
  296.         untereinander (vorher wurde nur ein NL ausgegeben, was für
  297.         Dateien und C-Desk's Console Fenster auch reicht)
  298.       - es gibt ein neues Programm fuer das SOZOBON-System, den IPC
  299.         (Includefile PreCompiler), geschrieben von mir (Holger) und
  300.         portiert auf den Amiga von Christian (wem sonst ?) und mir
  301.         Dieses Programm wird von hcc jetzt unterstützt, d.h. beim
  302.         Laden von Includefiles wird zunächst das precompilierte gesucht,
  303.         und erst wenn dieses nicht gefunden wird, das "normale" File
  304.         gelesen. Der Vorteil dieser Methode ist natürlich, daß das
  305.         uebersetzen schneller geht, da precompilierte Dateien wesentlich
  306.         kuerzer sind und ausserdem "vorgekaut". Fuer Details siehe Datei
  307.         "IPC.TXT"
  308.       - beim Übersetzen der MiNT-Sources bemerkt: hcc brachte bei
  309.            "test(&main);"
  310.         eine Fehlermeldung. Das '&' vor dem Funktionsnamen ist völlig
  311.         überflüssig, aber nicht verboten. Jetzt kommt nur noch die
  312.         Warnung "& ignored".
  313.  
  314.    - x8 -> x9:
  315.       - der Compiler hat nicht bemerkt, wenn 'break' oder 'continue' an
  316.         illegalen Stellen verwendet wurden, stattdessen wurde dafür
  317.         'bra L-1' erzeugt, was weder top noch jas sehr witzig fanden
  318.       (06.11.92)
  319.       - die Anzahl der Fehler wird jetzt nur noch auf dem Bildschirm
  320.         ausgegeben, wenn -V angegeben wurde
  321.       - wenn die Fehlermeldungen in eine Datei geschrieben werden, und
  322.         -V angegeben wurde, dann werden sie zusätzlich auch noch auf den
  323.         Bildschirm ausgegeben; dies wurde vor allem deshalb implementiert,
  324.         weil sonst bei Erzeugung einer Fehlerdatei die Warnungen des
  325.         Compilers verlorengehen, da dieser richtigerweise nur dann einen
  326.         Exitcode != 0 liefert, wenn Fehler aufgetreten sind; wenn nur
  327.         Warnungen kamen, war/ist der Exitcode == 0 und niemand merkte
  328.         etwas vom Inhalt der Fehlerdatei
  329.       (19.03.93)
  330.       - falls -V nicht angegeben war und der hcc Fehler gefunden hat, so
  331.         wurde trotzdem 0 als ExitCode zurückgegeben, was natürlich nicht
  332.         im Sinne des Erfinders war.
  333.  
  334.    - x9 -> x10:
  335.       - Fehlermeldungen '? member ID' & 'select non struct' so um-
  336.         konstruiert, daß der nicht gefundene Identifier ausgegeben wird
  337.       - hcc kann jetzt ANSI-Funktionsköpfe lesen, d.h.
  338.             extern char *malloc(int size);
  339.         ist erlaubt, und
  340.             void main(int argc, char **argv, char *envp)
  341.             {
  342.             ...
  343.             }
  344.         auch (!!!).
  345.         Natürlich ist die K&R Schreibweise auch weiterhin erlaubt und wird
  346.         nicht (wie bei anderen Compilern) mit einer Warnung oder gar
  347.         Fehlermeldung bedacht.
  348.         Ebenfalls implementiert wurde der spezielle Bezeichner '...' als
  349.         (letzter) Funktionsparameter. Bedeutung: "hier können wahlweise
  350.         noch mehr Parameter kommen, müssen aber nicht, und eine Typüber-
  351.         prüfung soll ab hier auch nicht mehr stattfinden". Benutzt wird
  352.         soetwas etwa bei "fprintf(FILE *fp, char *fmt, ...)", also dort,
  353.         wo variabel viele Parameter kommen können.
  354.       - Schlüsselworte 'signed', 'cdecl', 'volatile', 'const' und 'pascal'
  355.         implementiert (wegen ANSI-Kompatibilität)
  356.             signed:     Speicherklasse; da alle Typen defaultmäßig signed
  357.                         sind, ist dieses Schlüsselwort nur für Casting
  358.                         und für den zukünftigen Typechecker interessant,
  359.                         ansonsten ist er mit 'int' gleichbedeutend.
  360.             cdecl:      Speicherklasse für Funktionen; Soll bedeuten, daß
  361.                         die Parameter auf dem Stack übergeben werden, und
  362.                         nicht in Registern (oder sonstwie); der hcc kann
  363.                         Parameter nur auf dem Stack übergeben, deshalb hat
  364.                         dieses Schlüsselwort aktuell keinen anderen Zweck,
  365.                         als die Übersetzbarkeit von ANSI-Sourcen zu gewähr-
  366.                         leisten.
  367.             pascal:     Speicherklasse für Funktionen; Soll bedeuten, daß
  368.                         die Parameter "falsch herum" auf dem Stack liegen
  369.                         und das diese Funktion den Stack selber aufräumt;
  370.                         Beides geschieht aktuell nicht, das noch kein
  371.                         Prototyping implementiert wurde. Aktuell hat dieses
  372.                         Schlüsselwort nur den Zweck, die Übersetzbakeit von
  373.                         ANSI-Sources zu gewährleisten.
  374.             volatile:   Speicherklasse für lokale Variablen;
  375.                         Soll bedeuten, daß diese Variable nicht in ein
  376.                         Register gelegt werden darf;
  377.                         der hcc legt nur Variablen in Register, die auch
  378.                         mit "register" gekennzeichnet sind, dieses
  379.                         Schlüsselwort hat also aktuell keinen anderen
  380.                         Zweck, als die Übersetzbarkeit von ANSI-Sourcen
  381.                         zu gewährleisten.
  382.             const:      Speicherklasse für Variablen; bedeutet, das die
  383.                         so gekennzeichneten Variablen nur gelesen, jedoch
  384.                         niemals überschrieben werden;
  385.                         wird ignoriert, bis ich die unübersichtliche NODE
  386.                         Struktur vollständig verstanden habe und sie auch
  387.                         ganz überblicken kann, dieses Schlüsselwort hat
  388.                         also aktuell keinen anderen Zweck, als die Über-
  389.                         setzbarkeit von ANSI-Sourcen zu gewährleisten.
  390.  
  391.         ACHTUNG: weil sich hierdurch die Menge der Schlüsselwörter geändert
  392.                  hat, ist es notwendig, daß alle precompilierten Header-
  393.                  Files mit der neuen Version des IPC übersetzt werden!
  394.  
  395.  
  396. Geschwindigkeits-Vergleich:
  397. ---------------------------
  398. Compiler    Computer             Dhrystones (V1.1/REGS)  Prg.-Länge
  399. ====================================================================
  400. DR-C        Mega-ST, TOS 1.04    862                     12905 Bytes  (*)
  401. SOZOBON-C   Amiga    AMIGADOS    1428                    5200  Bytes  (##)
  402. TC (2.0)    Mega-ST, TOS 1.04    1562                    10648 Bytes  (**)
  403. PC          Mega-ST, TOS 1.04    1562                    12332 Bytes  (x)
  404. SOZOBON-C   Mega-ST, TOS 1.04    1612                    4121  Bytes  (#)
  405. PC          Mega-ST, TOS 1.04    1724                    12234 Bytes  (**)
  406. (#)  : es wurden XCC V2.00x6 & TOP V2.00x6 & XDLibs verwendet
  407. (##) : gleicher Compiler & Optimizer, bloß auf dem Amiga (Länge ungefähr)
  408. (*)  : lag als ausführbare Datei dem Quelltext bei, ist also nicht nachprüfbar
  409.        (wir haben den Compiler nicht)
  410. (**) : von einem Bekannten (Carsten) gemacht (-> Ergebnis sicher)
  411. (x)  : mit 'cdecl' gemacht, also "wirklicher" Code-Erzeugungs-Vergleich...
  412.  
  413. Der Dhrystone-Quelltext kann bei uns bezogen werden (lief auch schon
  414. auf 'ner Cray...).
  415.  
  416. Diese Werte sind nur dazu gedacht, um daß weitverbreitete Vorurteil abzubauen,
  417. daß PD-Compiler langsam und schlecht sind, und außerdem viel zu langen Code
  418. erzeugen (man beachte die Programm-Längen...)
  419.  
  420. Noch ein Beispiel dazu:
  421. Der Frank hat kürzlich (mal wieder) ein Apfelmännchen-Programm geschrieben,
  422. natürlich mit SOZOBON-C. Die getestete Version brauchte 2 min. 14 sec für
  423. die komplette Grafik und war 23 KB lang. Bei einem Bekannten (Carsten)
  424. ließen wir das gleiche Programm unter TC compilieren. Das Ergebnis war, daß
  425. die Version 7 KB länger wurde, und trotz Mathe-Coprozessor 3 min 34 sec für
  426. die gleiche Berechnung benötigte, also über eine Minute länger rechnete ...
  427.  
  428. Da die Leute von SOZOBON endlich mit der Version 2.0 des Compilers heraus-
  429. gekommen sind, mußten wir unsere Erweiterungen/Fehlerbereinigungen natürlich
  430. sofort in diese Version einbauen.
  431. Anscheinend ist der Support für den Amiga inzwischen besser, als der für den
  432. Atari, denn obwohl SOZOBON-C für den ST geschrieben ist, haben wir diese
  433. Version vom Amiga bekommen und auf den ST zurück-angepasst, weil anscheinend
  434. keiner was von einer ATARI-Version 2.00 weiß ...
  435.  
  436. (falls Herr Würkner (alias TETISOFT) jetzt diese Zeilen liest:
  437. ^!$%§%#??
  438. ... und beim nächsten Mal benutzen wir dann '#ifdef FOR_AMIGA' an ALLEN
  439. Stellen, die nur für den Amiga geändert wurden!...)
  440.  
  441. Die von uns modifizierte Version des Compilers trägt den Namen XCC
  442. (eXtended C-Compiler) und die Versions-Nummer 2.00x6 (nur 'x6' hinzugefügt)
  443.  
  444.  
  445. DIVERSES:
  446. ---------
  447. - Es wurde einiges optimiert, ent-rekursioniert und entwanzt
  448.  
  449. - Wenn das Datei-Ende innerhalb eines Kommentars lag, so endete dies in einer
  450.   Endlosschleife des Compilers - behoben
  451.  
  452. - Wenn das Datei-Ende innerhalb eines #if/#ifdef/#ifndef lag, so führte
  453.   dies ebenfalls zu einer Endlosschleife, falls die Bedingung falsch war
  454.   bzw. der #else - Zweig erreicht war. Dies wird jetzt mit einer Fehler-
  455.   meldung quittiert.
  456.  
  457. - die Meldung 'lost X nodes' kommt jetzt seltener (gar nicht mehr ?)
  458.  
  459. - Die Hex-Notation in String-Konstanten funktioniert jetzt auch richtig...
  460.  
  461. - so etwas wie 'printf("Umlaut-Test: äöüÖÄÜß\n")' funktioniert jetzt endlich
  462.   Umlaute im Quelltext werden jedoch auch weiterhin als White-Space
  463.   interpretiert.
  464.  
  465. - der Compiler stürzt nicht mehr ab, wenn jemand lokale Arrays bei der
  466.   Deklaration gleich initialisieren wollte.
  467.  
  468. - wenn der Compiler auf ein Statement der Form 'if ()' (also ohne was in den
  469.   Klammern) traf, dann stuerzte er ab -- behoben
  470.  
  471. - wenn die geschweifte Klammerung bei 'do {....} while();' fehlerhaft ist,
  472.   dann stuerzte der Compiler manchmal ab -- behoben
  473.  
  474. - bisher pasierte es manchmal, daß HCC/XCC falscherweise die Fehlermeldung
  475.   'struct redefined ...' ausgab. Dies lag daran, daß bei unbenannten
  476.   Strukturen/Union's intern eigene Namen vergeben werden, und diese
  477.   auffrund eines Denkfehlers nicht immer eindeutig waren, der Compiler
  478.   also den selben Namen an zwei Strukturen vergeben hat. Dieser Fehler
  479.   wurde behoben.
  480.  
  481. - Zusammenarbeit mit TOP verbessert:
  482.   1. XCC generiert Zeilen der Form ';loop Lx', mithilfe derer der TOP dann
  483.      (endlich) Loop-rotations machen kann.
  484.   2. XCC generiert Zeilen der Form ';ret [a|d]0', welche dem TOP dazu dienen,
  485.      mehr Optimierungen zu machen.
  486.   3. XCC generiert Zeilen der Form ';sstart' & ';send', welche dem TOP
  487.      anzeigen, daß hier Code für 'switches' steht, welcher umsortiert werden
  488.      soll
  489.   4. XCC generiert ';longs', wenn die '-L' Option angegeben wurde, dies ist
  490.      wichtig fuer die Register Parameter
  491.   5. XCC generiert ';notop' fuer alle Funktionen, die zwischen einem
  492.          '#pragma -TOP' und '#pragma +TOP'
  493.      stehen; das bedeutet, das TOP diese Funktionen nicht optimieren soll
  494.      (praktisch zum debuggen)
  495.   6. XCC generiert ';opt "<optionen-string>"', wenn eine Zeile
  496.          '#pragma OPT "<optionen-string>"
  497.      gefunden wird. Dies dient (aktuell nur) dazu, die Optionen fuer TOP
  498.      funktionenweise veraendern zu koennen
  499.   7. XCC generiert ';xhcc', um dem TOP anzuzeigen, das mit dem erweiterten
  500.      Compiler gearbeitet wird. TOP verwendet dies fuer die Behandlung der
  501.      ';ret' Direktive, um auch mit alten Versionendes Compilers lauffaehig
  502.      zu sein
  503.  
  504.  
  505. PREPROZESSOR:
  506. -------------
  507. - Das Macro __DATE__ wurde neu implementiert.
  508.  
  509. - Das Macro __TIME__ wurde neu implementiert.
  510.  
  511. - Dem Macro TOS wurde das Macro __TOS__ ergänzt, weil es anscheinend keine
  512.   einheitliche Schreibweise gibt, und ich dieses auch schon irgendwo gesehen
  513.   habe
  514.  
  515. - Es wurde ein Macro Namens __BASE_FILE__ implementiert, welches dem Benutzer
  516.   auch innerhalb von Include-Files die Möglichkeit gibt, auf den Namen der
  517.   Haupt-Datei zuzugreifen
  518.  
  519. - Das CPP-Kommando '#assert' wurde implementiert.
  520.   Syntax : #assert <ausdruck>
  521.   Wirkung: Falls <ausdruck> FALSE ist, erfolgt eine Fehlermeldung seitens des
  522.            Compilers und die Compilierung wird abgebrochen
  523.  
  524. - Das CPP-Kommando '#pragma' wurde implementiert.
  525.   Syntax : #pragma [+|-<NAME> ...] [irgendwas]
  526.       oder #pragma OPT "<string>"
  527.   Wirkung: dient zum Umschalten einiger Optionen;
  528.       #pragma +<name> schaltet die Option ein, durch '-<name>' wird sie
  529.       ausgeschaltet. Folgende Namen sind implementiert:
  530.       - PRO: Profiling                    ein/aus
  531.       - PTR: 'pointer types mismatch'     ein/aus
  532.       - CMP: 'cmp of diff ptrs'           ein/aus
  533.       - DIF: 'diff ptrs'                  ein/aus
  534.       - RDF: 'redefined: SYM'             ein/aus
  535.       - STR: String-Optimierung           ein/aus
  536.       - FST: Quick-Flag (Option '-q')     ein/aus
  537.       - TOP: Optimizer (funktionsweise)   ein/aus
  538.              (wird nur einmal pro Funktion ausgegeben)
  539.  
  540.       #pragma OPT "<string>" schreibt <string> in die Ausgabe-Datei.
  541.          Dies kann zum umschalten der Optionen des Optimizers je nach
  542.          zu optimierender Funktion verwendet werden.
  543.          Der String wird max. einmal pro Funktion ausgegeben!
  544.   Bisher gab es eine Fehlermeldung bei #pragma, was nicht Standard-Gemäß ist
  545.  
  546. - Das CPP-Kommando '#error' wurde implementiert.
  547.   Syntax : #error ["Meldung"]
  548.   Wirkung: Falls "Meldung" angegeben wird, so erfolgt die Ausgabe dieses
  549.            Strings als Fehlermeldung, ansonsten gibt es eine Standard-
  550.            Meldung und die Compilierung wird abgebrochen
  551.   Praktisch z.B., um auf Portierungs-Probleme hinzuweisen...
  552.  
  553. - Das CPP-Kommando #asm wird implementiert (noch in Arbeit...).
  554.   Syntax : #asm assembler-code
  555.   Wirkung: Funktioniert wie asm(), ist aber weniger Schreibkrams...
  556.            Funktioniert bedingt auch außerhalb von Funktionen.
  557.   Dieses ist zum gegenwärtigen Zeitpunkt nicht errreichbar, da die Implemen-
  558.   tierung noch nicht ganz abgeschlossen ist.
  559.  
  560.  
  561. OPTIONEN:
  562. ---------
  563. - Die neue Option '-Oname' bewirkt, daß die Assembler-Ausgaben in die Datei
  564.   <name> geschrieben wird, was insbesondere die Möglichkeit zur Laufwerks-
  565.   übergreifenden Compilierung bietet
  566.  
  567. - Die neue Option '-Ename' bewirkt, daß alle Meldungen des Compilers nicht
  568.   auf dem Bildschirm, sondern in die Datei <name> geschrieben werden
  569.  
  570. - Die neue Option -N bewirkt, daß Kommentare geschachtelt werden dürfen
  571.  
  572. - Die neue Option -Mzahl bewirkt, daß die Compilierung nach maximal <zahl>
  573.   Meldungen (errors, warnings) abgebrochen wird.
  574.  
  575. - Die neue Option -S bewirkt, daß mehrfach vorhandene Strings nicht mehr
  576.   zu einem zusammengefasst werden.
  577.  
  578. - Mit der neuen Option -T kann die Generierung der TRAP-Befehle abgeschaltet
  579.   werden (falls sich jemand eigene Funktionen gemdos(), bios() oder xbios()
  580.   schreiben will...). Siehe unten
  581.  
  582. - Die neue, von Detlev Würkner implementierte, und von uns korrigierte
  583.   Option -L bewirkt, daß alle als 'int' deklarierten Variablen 32Bits
  584.   groß sind (also int = long). Diese Option ist nur sehr wenig getestet,
  585.   also mit Vorsicht zu geniessen. Um sie nutzen zu können, müßten alle
  586.   Bibliotheken ebenfalls mit dieser Option neu übersetzt werden, wozu
  587.   ich natürlich keine Lust habe. Außerdem wird es Probleme mit den
  588.   direkten traps geben, da das Betriebs-System natürlich nach wie
  589.   vor auf 16Bit-Werten besteht.
  590.  
  591. - Mit der Option -X kann er Debug-Modus eingeschaltet werden. In diesem
  592.   Fall generiert der Compiler zusätzlichen Code, und im Falle eines Absturzes
  593.   meldet das Programm die Zeile und die Datei, in der der Fehler auftrat.
  594.   Dazu muß das Programm allerdings mit dem Startup-Code 'DEBUG_S.O' gelinkt
  595.   werden.
  596.   Die Syntax ist -X[N][function], wobei
  597.       N        den Debug-Level angibt, und
  598.       function den Namen einer Benutzer-Definierten Debug-Funktion
  599.   Aktuell sind die Levels 1 und 2 implementiert, bei Level 1 werden
  600.   die Zeilennummern generiert, sowie Aufrufe der angegebenen Funktion
  601.   am Anfang, am Ende und in jeder Schleife einer Funktion. In Level 2
  602.   wird pro Sourcecode-Zeile ein Aufruf der angegebenen Funktion generiert,
  603.   so daß im Prinzip ein Source-Level-Debugging moeglich ist. Eine dafür
  604.   geeignete Funktion liegt in einer ersten, unvollstaendigen Version bereits
  605.   bei: Sie heisst "_debug" und liegt in den Dateien DEBUG_A.O und DEBUG_C.O
  606.   vor, diese Dateien muessen beim Linken VOR den XDLibs angegeben werden.
  607.   Beim selberschreiben einer solchen Funktion ist auf jeden Fall zu beachten,
  608.   daß alle Register gerettet werden müssen, da dies beim Aufruf (natuerlich)
  609.   nicht geschieht.
  610.   Wenn die Angabe einer Debug-Funktion fehlt, sind Level 1 und 2 identisch.
  611.  
  612. - Die Kommandozeile hat somit folgendes Aussehen:
  613.   hcc [-DUIPNVMSLT] [-X[N][function]] [-OSFILE1] [-EERRFILE1] CFILE1 [...]
  614.   d.h. für jede Datei koennen eine eigene Fehlerdateien und (natürlich)
  615.   Ausgabedateien angegeben werden
  616.  
  617.  
  618.  
  619. SONSTIGE ERWEITERUNGEN:
  620. -----------------------
  621. - Variablen vom Typ 'void *' sind jetzt zu allen anderen Zeigern kompatibel,
  622.   d.h. bei Zuweisungen erfolgt keine Warnung mehr vom Compiler
  623.  
  624. - Bei Meldungen des Compilers, die sich auf ein Include-File beziehen, wird
  625.   jetzt der Zugriffs-Pfad mit ausgegeben
  626.  
  627. - In String-Konstanten können jetzt alle Umlaute und sonstigen Sonderzeichen
  628.   direkt angegeben werden. Bisher konnten diese Zeichen nur über die
  629.   Oktal-Notation '\XXX' ausgegeben werden.
  630.  
  631. - Die Multi-Byte-Characters wurden implementiert. Bisher wurden sie zwar ge-
  632.   duldet, d.h. nicht angemeckert, aber NICHT behandelt. Folgendes funktioniert
  633.   jetzt:
  634.       int  i = 'ab';
  635.       long j = 'abc';
  636.       long k = 'abcd';
  637.   Folgendes hingegen funktioniert (logischerweise) nicht:
  638.       short i = 'abc';
  639.   führt jedoch auch zu keiner Meldung vom Compiler ...
  640.  
  641. - Die String-Konkatenation wurde implementiert. Beispiel:
  642.    printf("Hello "   /* hier KEIN Komma */
  643.           "world");
  644.   führt zu keinem Fehler, sondern zur gewünschten Ausgabe "Hello world".
  645.   Diese Erweiterung kommt insbesondere der Lesbarkeit des Quelltextes
  646.   zugute, wenn lange Strings ausgegeben werden sollen. Außerdem spart sie
  647.   Arbeit beim portieren von ANSI-Quelltexten...
  648.  
  649. - Die Funktion asm() wurde dahingehend erweitert, daß jetzt ein einfacher
  650.   Zugriff auf alle Variablen möglich ist.
  651.   Beispiel: asm(" move.l   #1, <i>");
  652.       wird zu:    move.l   #1, REGISTER   falls i register-Variable ist
  653.       oder   :    move.l   #1, OFFSET(a6) falls i lokale Var oder Parameter ist
  654.       oder   :    move.l   #1, _i         falls i externe & globale Var ist
  655.       oder   :    move.l   #1, Lnummer    falls i statisch ist
  656.       oder   :    move.l   #1, <i>        falls i unbekannt ist
  657.  
  658. - Das Profiling wurde (endlich) implementiert, es tut sich jetzt also wirklich
  659.   etwas, wenn die Option '-P' in der Kommando-Zeile angegeben wird.
  660.   Am Anfang jeder Funktion wird der Aufruf einer Funktion Namens '_prolog'
  661.   eingefügt, welche in C folgendes Aussehen hat:
  662.       void _prolog(char *name)
  663.   <name> ist hierbei ein Zeiger auf den Namen der gerade ausgeführten Funktion
  664.   (z.B. "main")
  665.   Am Ende jeder Funktion wird der Aufruf einer Funktion Namens '_epilog'
  666.   eingefügt, welche in C folgendes Aussehen hat:
  667.       void _epilog(char *name)
  668.   wobei <name> wieder ein Zeiger auf den Namen der aktuellen Funktion ist.
  669.   Der Parameter wurde absichtlich über den Stack übergeben, damit auch alle
  670.   nicht-Assembler-Programmierer sich ihre eigenen Profiling-Funktionen
  671.   schreiben können. Damit die so erzeugte Tabelle auch ausgegeben wird, muß
  672.   beim Linken ein spezieller Startup-Code verwendet werden: 'prof_s.o'. Dieser
  673.   ruft direkt vor der Terminierung des Programmes eine Funktion Namens
  674.   '_saveprof' auf (in C: void _saveprof() ), welche die Tabelle in formatierter
  675.   Form in eine ASCII-Datei Namens 'prof.out' im aktuellen Verzeichnis schreibt.
  676.   Das ganze funktioniert somit natürlich nicht 100%ig, wenn in verschiedenen
  677.   Dateien statische Funktionen gleichen Namens verwendet werden...
  678.   Die zugehörigen Standard-Funktionen finden sich in der von uns modifizierten
  679.   Version der DLibs (sollte beiliegen, kann ansonsten bei uns bezogen werden).
  680.   Sollte das mit profiling übersetzte Programm abstürzen, dann nochmal über-
  681.   setzen, und zwar OHNE Optimizer...
  682.  
  683. - alle Aufrufe von gemdos(), bios() und xbios() werden jetzt direkt als
  684.   trap - Befehl erzeugt; aus einem 'jsr _gemdos' wird z.B. 'trap #1';
  685.   Die Vorteile:
  686.   - der trap - Befehl ist 2 Bytes lang, jsr dagegen 6
  687.   - der jsr-Befehl benötigt 20 Taktzyklen,
  688.     der rts-Befehl          16
  689.     der trap-Befehl         34
  690.                             --
  691.                             70 Taktzyklen plus dem, was da noch gemacht
  692.                                wird (Stack-Test, Rücksprung-Adresse vom
  693.                                und auf den Stack)
  694.    -> der direkte trap-Befehl ist somit mehr als doppelt so schnell in
  695.       der Ausführung und auch noch kürzer
  696.       (C-Desk ist z.B. mehr als 300 Bytes kürzer geworden)
  697.    Der Nachteil:
  698.    - kein Stack-overflow-Test mehr (tritt sowieso nie auf, es sei denn
  699.      durch einen Programmier-Fehler)
  700.    Abschaltbar durch '-T'.
  701.  
  702. - die Code-Erzeugung für 'switch' wurde wesentlich verbessert. Bisher konnte
  703.   es z.B. passieren, daß bei unglücklicher Wahl der 'case' - Werte aus einem
  704.   'switch' 4 gemacht wurden, was natürlich langsameren und längeren Code er-
  705.   zeugt, als ein 'switch'
  706.  
  707.  
  708. Sonstiges
  709. ---------
  710. - Erweiterungen/Änderungen gegenüber der Version 1.21 sind den übrigen Texten
  711.   zu entnehmen
  712. - alle von TETISOFT vogenommenen Änderungen sind ebenfalls in einem anderen
  713.   Text aufgeführt, jedoch größtenteils in der vorliegenden Version nicht oder
  714.   in modifizierter From enthalten.
  715.  
  716.  
  717.