|
|
1.1 ! root 1: Steve's cc386 compiler change log ! 2: Begun 11/22/91 ! 3: ! 4: Fri Nov 22 11:51:35 1991 PST ! 5: n1/i386/tables/assign.t ! 6: Fixed bug which produced no match in /usr/src/cmd/rmdir.c ! 7: on line "if ((int)(ptr = ptr) < 0) ...". ! 8: ! 9: Fri Nov 22 12:07:23 1991 PST ! 10: n1/i386/tables/aaddsub.t ! 11: Deleted bogus SHORT op= REG LONG entry, which produced ! 12: collect errors on /usr/src/cmd/[mkfs.c|typo.c]. ! 13: ! 14: Fri Nov 22 23:34:12 1991 PST ! 15: n1/i386/table1.c ! 16: n1/i386/tables/assign.t ! 17: n1/i386/tables/leaves.t ! 18: n1/i386/tables/relop.t ! 19: Cleaned up shrink table and improved coding for word and byte ! 20: operations. ! 21: ! 22: Mon Nov 25 17:33:11 1991 PST ! 23: common/i386/geno.c ! 24: h/cc1.h ! 25: h/i386/cc0mch.h ! 26: h/i386/cc1mch.h ! 27: h/i386/cc2mch.h ! 28: h/i386/cppmch.h ! 29: h/i386/mch.h ! 30: n0/i386/bind.c ! 31: n1/i386/altemp.c ! 32: n1/i386/amd.c ! 33: n1/i386/tables/Read_me ! 34: n1/i386/tables/aaddsub.t ! 35: n1/i386/tables/adiv.t ! 36: n1/i386/tables/aft.t ! 37: n1/i386/tables/alogic.t ! 38: n1/i386/tables/amul.t ! 39: n1/i386/tables/arem.t ! 40: n1/i386/tables/mul.t ! 41: n2/i386/afield.c ! 42: n2/i386/asm.c ! 43: n2/i386/emit1.c ! 44: n2/i386/outcoff.c ! 45: n2/i386/peep.c ! 46: n2/i386/unasm.c ! 47: n3/i386/igen.c ! 48: Numerous changes, mostly of a cleanup nature, ! 49: nothing dramatically substantive. ! 50: ! 51: Tue Nov 26 17:36:56 1991 PST ! 52: common/i386/geno.c ! 53: Changed genafield() OFFS case to fetch ival_t and bump ! 54: pointer accordingly, to allow writing correct code with ! 55: 286-based cross compiler. ! 56: h/cc0.h ! 57: n0/expr.c ! 58: Changed ivalexpr() from int to ival_t. ! 59: n0/i386/bind.c ! 60: Corrected fieldalign() alignment for members of array type. ! 61: h/i386/cc2mch.h ! 62: n1/i386/gen1.c ! 63: n1/i386/outmch.c ! 64: n2/i386/emit1.c ! 65: Changed genone(), gentwo() calls to pass ival_t args correctly. ! 66: Changed framesize from int to ival_t. ! 67: n2/i386/peep.c ! 68: Added code to simplify "cmp %eax, $0" to "or %eax, %eax", ! 69: similarly for byte and word compares. ! 70: n1/i386/tables/ashift.t ! 71: n1/i386/tables/shift.t ! 72: Added comments. ! 73: n1/i386/tables/assign.t ! 74: Added PREL cases to improve byte = byte and word = word ! 75: in relation contexts; this produces better code for ! 76: while (*cp1++ = *cp2++); ! 77: n3/i386/igen.c ! 78: Minor change to output format for align ops. ! 79: ! 80: Wed Nov 27 15:16:14 1991 PST ! 81: n1/i386/tables/leaves.t ! 82: Added ADR entries to the shrink table to handle shrinks ! 83: of auto items. ! 84: n1/i386/tables/shift.t ! 85: Changed shift node types from LONG to DWORD, because ! 86: e.g. "cp = (char *)(n * 2);" produced a no match before; ! 87: the multiply optimized to a left shift node with type PTR. ! 88: ! 89: Fri Nov 29 11:23:11 1991 PST ! 90: n0/cc0key.c ! 91: n0/sharp.c ! 92: n0/i386/bind.c ! 93: Implemented "#pragma alien [n]". ! 94: ! 95: Mon Dec 2 15:48:34 1991 PST ! 96: n0/sharp.c ! 97: Fixed implementation of #pragma alien. ! 98: h/i386/mch.h ! 99: n2/i386/peep.c ! 100: n2/i386/asm.c ! 101: Moved macro definitions from peep.c to mch.h to clarify ! 102: code, simplified asm.c accordingly. ! 103: h/i386/cc2mch.h ! 104: n0/i386/bind.c ! 105: n1/i386/gen1.c ! 106: n2/i386/emit1.c ! 107: n2/i386/getcod.c ! 108: Allow EBX as register variable. Change prolog and epilog ! 109: to save/restore EBX/ESI/EDI only if required, after the ! 110: stack auto adjust rather than before. ! 111: ! 112: Tue Dec 3 10:19:01 1991 PST ! 113: h/i386/cc1mch.h ! 114: h/i386/cc2mch.h ! 115: h/i386/cc3mch.h ! 116: h/i386/mch.h ! 117: Changed coding of address mode bits to support SIB. ! 118: Moved common type definitions into mch.h. ! 119: n1/i386/gen1.c ! 120: Simplified coding of register -> index register correspondence. ! 121: n0/i386/bind.c ! 122: n1/i386/amd.c ! 123: n1/i386/gen2.c ! 124: n2/i386/afield.c ! 125: n2/i386/asm.c ! 126: n2/i386/emit1.c ! 127: n2/i386/peep.c ! 128: n3/i386/icode.c ! 129: Changes for new SIB tree flag encoding and new macros. ! 130: ! 131: Wed Dec 4 19:37:08 1991 PST ! 132: n1/i386/tables/prefac.f ! 133: Deleted unused pattern abbreviations. ! 134: ! 135: n1/i386/tables/addsub.t ! 136: n1/i386/tables/shift.t ! 137: Fixed minor (but deadly) code table bugs. ! 138: ! 139: Wed Dec 4 21:32:55 1991 PST ! 140: n2/i386/optab.c ! 141: Changed addw, and, andw, or, orw, xor, xorw type from OF_DOP ! 142: to OF_DOPS. This tells the assembler to use short form ! 143: with sign-extended immediate byte operand, saving 3 bytes each. ! 144: ! 145: Thu Dec 5 12:40:50 1991 PST ! 146: h/cc1.h ! 147: h/i386/cc1mch.h ! 148: n0/i386/bind.c ! 149: n1/i386/altemp.c ! 150: n1/i386/gen1.c ! 151: n2/i386/emit1.c ! 152: n3/i386/igen.c ! 153: Changes to allow >64K autos. Changed int -> ival_t in ! 154: various places in bind.c and gen1.c, recognized ival_t AUTOS ! 155: items in igen.c, and changed the prolog/epilog in emit1.c ! 156: to avoid ENTER if framesize >64K. ! 157: ! 158: Thu Dec 5 14:58:57 1991 PST ! 159: n1/i386/tables/leaves.t ! 160: Added widen entry for char->word, caught by a no match ! 161: when compiling cef's unop.c. ! 162: ! 163: Sun Dec 8 11:47:00 1991 PST ! 164: h/i386/cc1mch.h ! 165: n1/i386/tables/aaddsub.t ! 166: n1/i386/tables/adiv.t ! 167: n1/i386/tables/aft.t ! 168: n1/i386/tables/alogic.t ! 169: n1/i386/tables/amul.t ! 170: n1/i386/tables/ashift.t ! 171: n1/i386/tables/assign.t ! 172: n1/i386/tables/bef.t ! 173: n1/i386/tables/leaves.t ! 174: n1/i386/tables/relop.t ! 175: n1/i386/reg1.c ! 176: Changed PSHORT to PBYTE. In tables, deleted PSHORT on word ! 177: patterns (LO works on any register, including EDI and ESI), ! 178: left PBYTE on byte patterns (LO LO requires EAX EBX ECX EDX). ! 179: n1/i386/mtree2.c ! 180: Fixed modoptab[]. ! 181: ! 182: Mon Dec 16 12:26:39 1991 PST ! 183: The following changes were made at MWC 12/9-13/91: ! 184: h/cc0.h ! 185: n0/cc0key.c ! 186: n0/sharp.c ! 187: Added "#ident" keyword, as requested by hal. ! 188: n0/gdecl.c ! 189: n0/i386/bind.c ! 190: Changed parser to round up structure sizes ! 191: as required for BCS compatability. ! 192: Corrected bug in finding alignment of array structure members. ! 193: h/i386/cppmch.h ! 194: Changed MACHINE from "I386" to "_I386". ! 195: h/i386/mch.h ! 196: Corrected definition of NRREGS, deleted NBPSTRG. ! 197: h/i8086/mch.h ! 198: Deleted NBSTRG, added saligntype() macro instead. ! 199: n1/i386/gen2.c ! 200: Added sleazy hack to allow initializers like ! 201: "int i = (int)&foo;", used by Ciaran in the system. ! 202: n1/i386/tables/adiv.t ! 203: n1/i386/tables/aft.t ! 204: n1/i386/tables/amul.t ! 205: n1/i386/tables/and.t ! 206: n1/i386/tables/orxor.t ! 207: n1/i386/tables/rem.t ! 208: Recoded table entries using EDXEAX as node register. ! 209: Changed code table entries to fix minor bugs discovered ! 210: while recompiling system, mostly by changing node types ! 211: from LONG to DWORD to include nodes cast to (char *). ! 212: n3/i386/icode.c ! 213: n3/i386/igen.c ! 214: Changed assembler output symbols to correspond with Esix ! 215: assembler, as required by cef's as386. ! 216: ! 217: Mon Dec 16 14:48:24 1991 PST ! 218: n2/i386/asm.c ! 219: At cef's suggestion, changed asm() to use the imm8 form ! 220: for add/sub/cmp/and/or/xor with EAX as left operand. ! 221: Saves two bytes per opcode. ! 222: ! 223: Mon Dec 16 15:27:44 1991 PST ! 224: h/coff.h ! 225: Added "#pragma align" lines to avoid unwanted padding of ! 226: structures defining parts of COFF file. ! 227: ! 228: Wed Dec 18 17:36:41 1991 PST ! 229: Extensive changes to implement IEEE software fp, ! 230: using support routines called directly from code ! 231: tables rather than calls generated in modify phase. ! 232: ! 233: common/i386/regnam.c ! 234: h/i386/cc1mch.h ! 235: h/i386/mch.h ! 236: n1/i386/gen1.c ! 237: n1/i386/table1.c ! 238: Deleted register FPAC, software fp now uses EDXEAX instead. ! 239: ! 240: n1/i386/gen1.c ! 241: In coderinit(), added code similar to i8086 cc code. ! 242: This code zaps DECVAX or NDP code table entries if the ! 243: compiler is using IEEE software fp. ! 244: Corrected DCON code, which passed 16-bit pieces of DCON ! 245: rather than 32-bit pieces. ! 246: ! 247: n1/i386/mtree2.c: ! 248: Extensively simplified modoper() and modxfun(), because ! 249: DECVAX or IEEE software fp no longer require modify phase ! 250: to insert calls. Generating the calls directly from the ! 251: code tables allows more efficient calling sequence (using ! 252: registers to pass parameters) and allows the code selector ! 253: to generate stack temp save/restore for intermediate results ! 254: as required. ! 255: ! 256: n1/i386/outmch.c ! 257: Modified maptype() so that [TL ZMOVSX] just means ZMOV ! 258: for 32-bit operand; allows simpler table encoding. ! 259: ! 260: n1/i386/Makefile ! 261: n1/i386/tables/aadd.t ! 262: n1/i386/tables/add.t ! 263: n1/i386/tables/asub.t ! 264: n1/i386/tables/sub.t ! 265: Split aaddsub.t into aadd.t and asub.t; ! 266: split addsub.t into add.t and sub.t. ! 267: Added DECVAX/IEEE software floating point entries. ! 268: These changes were required by the (trivial) difference ! 269: between software fp calls to _dadd and _dsub, ! 270: it would be nice to merge the tables again but I don't ! 271: see how to do it right now. ! 272: ! 273: n1/i386/tables/adiv.t ! 274: n1/i386/tables/amul.t ! 275: n1/i386/tables/assign.t ! 276: n1/i386/tables/div.t ! 277: n1/i386/tables/leaves.t ! 278: n1/i386/tables/mul.t ! 279: n1/i386/tables/neg.t ! 280: n1/i386/tables/relop.t ! 281: Added DECVAX/IEEE software floating point entries. ! 282: ! 283: Thu Dec 19 14:27:26 1991 PST ! 284: n1/i386/mtree2.c ! 285: Corrected bug introduced yesterday causing bad AID/PID offsets. ! 286: n2/i386/asm.c ! 287: Corrected bug in code generation for immediate shifts ! 288: by 16 or more. ! 289: ! 290: Thu Dec 19 15:51:39 1991 PST ! 291: n2/i386/emit1.c ! 292: Changes for -VPROF option: profile block is 12 bytes, not 8; ! 293: use register %ecx, not %ebx. ! 294: ! 295: Tue Jan 7 14:14:38 1992 PST ! 296: h/i386/cppmch.h ! 297: h/i8086/cppmch.h ! 298: n0/cc0.c ! 299: At cef's request, made cpp automatically define "_IEEE" ! 300: or "_DECVAX" to indicate the selected fp format. ! 301: ! 302: n1/i386/tables/Read_me.fp ! 303: n1/i386/tables/aadd.t ! 304: n1/i386/tables/add.t ! 305: n1/i386/tables/adiv.t ! 306: n1/i386/tables/amul.t ! 307: n1/i386/tables/asub.t ! 308: n1/i386/tables/div.t ! 309: n1/i386/tables/leaves.t ! 310: n1/i386/tables/mul.t ! 311: n1/i386/tables/neg.t ! 312: n1/i386/tables/relop.t ! 313: n1/i386/tables/sub.t ! 314: Further changes for IEEE software fp. ! 315: ! 316: n1/i386/tables/leaves.t ! 317: Fixed bug reported by cef: the widen entries incorrectly ! 318: specified ADR|IMM rather than ADR as operand for "movsxb", ! 319: so asmgen() correctly complained about the generated opcode. ! 320: ! 321: Thu Jan 9 14:33:05 1992 PST ! 322: n1/i386/tables/leaves.t ! 323: Fixed another bug reported by cef: no match for shrink ! 324: of double to short. The shrink tables included double->[u]int ! 325: and float->[u]int for IEEE software fp; changed node flags ! 326: so the same entries work for double|float->[u]short|[u]char. ! 327: ! 328: Wed Jan 15 14:17:24 1992 PST ! 329: n0/ddecl.c ! 330: n0/i386/bind.c ! 331: Fixed bug related to bitfield alignment. For an int bitfield ! 332: starting at bit 15 of a 4-byte struct, the compiler previously ! 333: incorrectly generated dword AND and OR instructions starting ! 334: at bit 7 of byte 1, rather than bit 15 of byte 0; thus, the ! 335: AND and OR could run past the end of the structure. Added ! 336: routine "int faligntype(t)" in bind.c, called from ddecl.c. ! 337: h/i8086/cc0mch.h ! 338: Added "#define faligntype(t) 1" in keeping with above change. ! 339: ! 340: Thu Jan 16 00:08:47 1992 PST ! 341: coh/cc.c ! 342: Added definition of DTEFG ("_dtefg_" or "_dtefg") and ! 343: made -f use it, so cc386 -f undefines the right name. ! 344: n1/i386/tables/leaves.t ! 345: Reordered HI and LO halves of fp loads, for consistency. ! 346: n1/i386/tables/relop.t ! 347: Changed _dcmp call to not adjust ESP on return; ! 348: _dcmp now pops its argument, making it easier for the call ! 349: to leave the flags and all registers unchanged. ! 350: ! 351: Fri Jan 17 15:24:06 1992 PST ! 352: n1/i386/tables/leaves.t ! 353: Hacked double->int shrink entries to avoid nasty EDX bug. ! 354: ! 355: Thu Jan 30 12:07:01 1992 PST ! 356: Fixed bug reported by piggy, incorrect code for e.g. ! 357: "foo == -1" conditional when foo is unsigned short. ! 358: h/i386/cc1mch.h ! 359: Changed tree flags T_BYTE and T_WORD to T_SBYTE, T_UBYTE, ! 360: T_SWORD, T_UWORD with appropriate ranges; in passing, added ! 361: T_SHCNT for shift counts (0 to 31). ! 362: n1/i386/amd.c ! 363: Changed amd() to set new byte, word and shift count tree flags. ! 364: n1/i386/tables/amul.t ! 365: n1/i386/tables/mul.t ! 366: Changed multiplication by immediate byte to use T_SBYTE. ! 367: n1/i386/tables/ashift.t ! 368: n1/i386/tables/shift.t ! 369: Changed shift tables to use T_SHCNT flag rather than T_BYTE. ! 370: n1/i386/tables/relop.t ! 371: Split relational T_WORD and T_BYTE table entries to fix ! 372: the reported problem. ! 373: ! 374: Thu Jan 30 16:55:26 1992 PST ! 375: h/i386/cc1mch.h ! 376: Nonsubstantive changes to composite tree flag definitions, ! 377: for readability. ! 378: n1/i386/amd.c ! 379: Modified amd() so REG does not set T_DIR flag, to allow ! 380: code tables to distinguish T_DIR from T_REG. ! 381: n1/i386/tables/leaves.t ! 382: Modified widen and shrink tables by splitting T_DIR entries ! 383: from T_REG entries, allowing correct register specifications ! 384: on the latter. ! 385: n2/i386/asm.c ! 386: Added aerr() checking to ZMOV (register/register) ! 387: and ZMOVSX/ZMOVZX opcodes; these checks detect the cases ! 388: which were producing incorrect code before the above fixes. ! 389: ! 390: Mon Feb 3 12:59:57 1992 PST ! 391: n1/i386/tables/ashift.t ! 392: Modified entries using ECX for shift count. cef's binop.c ! 393: revealed that the old versions sometimes clobbered ECX while ! 394: it was being used for indexing. ! 395: n2/i386/asm.c ! 396: Improved ZMOV error checking code to report more bogus cases. ! 397: ! 398: Tue Feb 4 17:34:47 1992 PST ! 399: n1/pool.c ! 400: Added "p_type" member to pool struct; save and compare type ! 401: of pooled constants. This prevents e.g. ! 402: (char)0 creating pooled .byte 0, to which subsequent dword ! 403: constant 0 would incorrectly refer. ! 404: n1/i386/tables/leaves.t ! 405: Added immediate S32 and U32 entries to widen to double ! 406: table, to prevent S32 and U32 constants from being pooled. ! 407: ! 408: Wed Feb 5 00:58:43 1992 PST ! 409: n0/expr.c ! 410: In build(), corrected ASHL/ASHR/SHL/SHR parsing. The old ! 411: code generated an unsigned shift for e.g. int >> uint. ! 412: ! 413: Thu Feb 6 09:53:44 1992 PST ! 414: n1/i386/tables/leaves.t ! 415: In IEEE/DECVAX software fp load addressible double entry, ! 416: added bogus left spec EDX to prevent EDX from being used ! 417: for indexing (which would make the second fetch invalid). ! 418: ! 419: Thu Feb 6 10:35:24 1992 PST ! 420: n2/i386/optab.c ! 421: Corrected incorrect opbits for salw, sarw, shlw, shrw. ! 422: The compiler was putting out byte move bits rather than ! 423: word move bits. ! 424: ! 425: Thu Feb 6 11:58:45 1992 PST ! 426: n1/pool.c ! 427: Rewrote DCON compare and copy loops using memcmp() and memcpy(). ! 428: common/talloc.c ! 429: Rewrote talloc() to zero tree node with memset(). ! 430: ! 431: Thu Feb 6 14:13:54 1992 PST ! 432: h/cc0.h ! 433: Added macros sgn2uns() and uns2sgn() used by expr.c kludge. ! 434: n0/expr.c ! 435: In build(), added ADIV/AREM code to preserve unsigned right ! 436: operands, with lengthy explanatory comment. ! 437: n1/i386/tables/adiv.t ! 438: n1/i386/tables/arem.t ! 439: Modified to do unsigned divide if either operand is unsigned. ! 440: ! 441: Fri Feb 7 15:38:43 1992 PST ! 442: n1/i386/tables/adiv.t ! 443: n1/i386/tables/arem.t ! 444: Corrected signed [char|short] / unsigned to sign-extend the ! 445: result in value context. ! 446: Fri Feb 7 16:49:40 1992 PST ! 447: n1/out.c ! 448: Added code at label outadr to call new function mappfx() ! 449: if opv is nonzero; mappfx() generates LO LO or LO prefix ! 450: bytes for byte or word operands. This allows the code tables ! 451: to apply the TL, TR and TN macros to register operands, ! 452: so similar code table entries can be merged. ! 453: This greatly simplifies the tables. ! 454: n1/i386/outmch.h ! 455: Added function mappfx(). ! 456: Added ZTEST to opcode list understood by maptype(). ! 457: h/i8086/cc1mch.h ! 458: Defined mappfx() to cause a cbotch() error; the i8086 code ! 459: tables do not currently use TL, TR or TN as outlined above. ! 460: n1/i386/tables/prefac.f ! 461: Added definitions SINT, UINT and FLD, useful in merged ! 462: code table entries. ! 463: n1/i386/tables/div.t ! 464: n1/i386/tables/rem.t ! 465: Added comments, no significant changes. ! 466: n1/i386/tables/aadd.t ! 467: n1/i386/tables/adiv.t ! 468: n1/i386/tables/add.t ! 469: n1/i386/tables/aft.t ! 470: n1/i386/tables/alogic.t ! 471: n1/i386/tables/amul.t ! 472: n1/i386/tables/and.t ! 473: n1/i386/tables/arem.t ! 474: n1/i386/tables/ashift.t ! 475: n1/i386/tables/assign.t ! 476: n1/i386/tables/asub.t ! 477: n1/i386/tables/bef.t ! 478: n1/i386/tables/leaves.t ! 479: n1/i386/tables/sub.t ! 480: Simplified by merging code table entries with TL macro. ! 481: ! 482: Sun Feb 9 13:27:52 1992 PST ! 483: n1/i386/tables/leaves.t ! 484: n1/i386/tables/relop.t ! 485: Combined a few more code table entries using TL. ! 486: n1/i386/reg1.c ! 487: Added test for byte left or right type in bytereg(); ! 488: the modified code tables use PBYTE on entries which can ! 489: be used for dword and word as well as for byte. ! 490: ! 491: Tue Feb 11 11:44:27 1992 PST ! 492: n1/i386/tables/sub.t ! 493: Corrected node type of DWORD - DWORD from LONG to DWORD, ! 494: so that pointer - int subtraction works. ! 495: ! 496: Thu Feb 20 17:02:07 1992 PST ! 497: n0/i386/bind.c ! 498: At cef's instigation, forward struct/union/enum references ! 499: now generate a cerror() complaining that the alignment of ! 500: the object is unknown rather than a cbotch(). ! 501: n1/i386/tables/leaves.t ! 502: Added PTX to _ducvt patterns to avoid no match on ! 503: pointer to double conversions; yuck. ! 504: n1/i386/outmch.c ! 505: In outargs(), corrected stack adjust after memcpy() call ! 506: from 8 to 12 bytes; structure args were simply wrong before. ! 507: ! 508: Thu Feb 20 22:40:58 1992 PST ! 509: n0/gdecl.c ! 510: In genum(), added local envmin to keep track of min value of ! 511: enumeration. The type was previously set to unsigned char ! 512: (incorrectly) when enumeration contained a value less than 0. ! 513: ! 514: Thu Feb 20 23:41:23 1992 PST ! 515: n2/i386/asm.c ! 516: In BLOCK code, added "if (pass != 0)" to else statement. ! 517: The old code was incorrectly writing BLOCK bytes more than once. ! 518: ! 519: Fri Feb 21 08:49:11 1992 PST ! 520: h/cc1.h ! 521: n1/mtree1.c ! 522: n1/i386/mtree2.c ! 523: n1/i8086/mtree2.c ! 524: Added new routine lval_t constcvt(t, val) to convert ! 525: lval_t constant val to type t; called from machine-independent ! 526: tree modifier in mtree1.c for casts and conversion nodes. ! 527: For code like ! 528: int x = (unsigned char)-1; ! 529: the code generator was previously modifying the rhs from ! 530: (S32)(U8)((S32)-1) to (S32)((U8)-1) to ((S32)-1), ! 531: without actually truncating the bits in the constant. ! 532: constcvt(U8, (lval_t)-1) now converts the bits to 255, ! 533: giving the expected result. ! 534: ! 535: Wed Mar 4 15:11:14 1992 PST ! 536: n0/get.c ! 537: In get(), changed case DIV to not perform special comment ! 538: processing if cstate!=0, i.e. in false conditionals. ! 539: michael reported a bug with incorrect processing of the ! 540: quoted string "/*.*" in a false conditional. ! 541: ! 542: Fri Apr 3 23:11:18 1992 PST ! 543: Fairly extensive changes to allow building i386 ! 544: compiler as monolithic compiler rather than as driver ! 545: with exec'ed phases. To build a monolithic compiler, ! 546: OVERLAID and MONOLITHIC in "host.h" must both be 1. ! 547: For in-core tempfiles, TEMPBUF in "mch.h" must also be 1. ! 548: Makefile ! 549: coh/Makefile ! 550: common/Makefile ! 551: n0/Makefile ! 552: n1/Makefile ! 553: n2/Makefile ! 554: n3/Makefile ! 555: Add target "mcc" for monolithic COHERENT compiler. ! 556: Added targets cc[0123].a used in building monolithic compiler. ! 557: Change "ar" references to "$(AR)" to allow building ! 558: native cc386 compiler on cross system. ! 559: coh/cc.c ! 560: Revised to produce monolithic COHERENT compiler ! 561: with in-core tempfiles. Added -Lpathname option, ! 562: passed to linker. Added -T[value] option to specify ! 563: size of in-memory tempfiles (default: 64K). ! 564: common/talloc.c ! 565: Add routine freetree() to free tree nodes if monolithic. ! 566: h/host.h ! 567: Define OVERLAID and MONOLITHIC as 1 if _I386, ! 568: to make i386 compiler monolithic instead of phases. ! 569: h/i386/mch.h ! 570: Change TEMPBUF to 1 for monolithic compiler. ! 571: n0/cc0.c ! 572: Modified fairly extensively for monolithic compiler. ! 573: Added cppfinal(). ! 574: n0/cc0key.c ! 575: Changed keyword initialization extensively ! 576: to work correctly for monolithic compiler. ! 577: n0/cc0sym.c ! 578: Added code to free INFO and DIM pointer chains of symbols ! 579: in downlex(). ! 580: n0/cpp.c ! 581: Added code to free hide sets if monolithic. ! 582: n0/gdecl.c ! 583: In cast(), added xdropinfo() call so that INFO items ! 584: get dropped appropriately after cc0. ! 585: Added code to allow (with warning) trailing ',' in enum list. ! 586: n0/i386/bind.c ! 587: Added MONOLITHIC initialization in vinit(). ! 588: n1/cc1.c ! 589: Changed freenode() calls to freetree(). ! 590: n1/node.c ! 591: Delete freenode(). Other minor cosmetic changes. ! 592: ! 593: n2/i386/outcoff.c ! 594: Added MONOLITHIC initialization. ! 595: ! 596: h/cc0.h ! 597: Changed size of define buffer for _I386 only, from 1K to 2K, ! 598: as requested by Esa Ahola via norm. ! 599: ! 600: Tue Apr 28 11:01:52 1992 PDT ! 601: n0/cc0key.c ! 602: n0/expand.c ! 603: Conditionalized out __STDC__. The ANSI C Standard says ! 604: a nonconforming compiler should define __STDC__ as 0, ! 605: which the source did (correctly), but too many sources ! 606: use #ifdef __STDC__ (incorrectly) rather than #if __STDC__, ! 607: so the source now does what the misguided users expect. ! 608: ! 609: Tue Apr 28 11:43:32 1992 PDT ! 610: n0/expr.c ! 611: In build(), added code to allow users to write ! 612: (sp->fn)(); ! 613: (horseshit code, sez norm) when they really mean ! 614: (*(sp->fn))(); ! 615: This now gives an "implicit '*' added to function call" ! 616: warning when this happens. ! 617: ! 618: Tue Apr 28 11:47:46 1992 PDT ! 619: h/ops.h ! 620: Changed NCSYMB from 128 to 256, to allow longer symbols, ! 621: as requested by norm. ! 622: ! 623: Tue Apr 28 14:32:19 1992 PDT ! 624: n1/i386/mtree2.c ! 625: In modcall(), added call to fixtoptype(). ! 626: This fixes a bug which caused e.g. ! 627: return (*(sp->pcf))(); ! 628: to fail with an aerr; here pcf is a pointer to a function ! 629: returning char (not int). I think it's wrong in the parser, ! 630: but the fix in cc1 was the simplest I could find. ! 631: ! 632: Tue Apr 28 15:01:07 1992 PDT ! 633: common/bput.c ! 634: Added #if TEMPBUF code to realloc temporary buffers when ! 635: cc runs out of space. ! 636: h/stream.h ! 637: Added definition of tempsize, required by bput.c change. ! 638: ! 639: Tue Apr 28 16:06:56 1992 PDT ! 640: coh/cc.c ! 641: n2/i386/outcoh.c ! 642: n2/i386/outcoff.c ! 643: n3/cc3.c ! 644: n3/i8086/igen.c ! 645: n3/i386/igen.c ! 646: Modified compiler to put strings in text segment by default. ! 647: Set -VPSTR by default, and put strings in data segment if ! 648: -VPSTR is toggled (reset). Modify the disassembler accordingly. ! 649: ! 650: Wed Apr 29 13:04:12 1992 PDT ! 651: coh/cc.c ! 652: Changed driver to exec ld rather than forking if _I386. ! 653: Pass new -Z option to ld to remove object if appropriate. ! 654: Added _addargs() call to process CCHEAD and CCTAIL. ! 655: ! 656: Wed Apr 29 15:52:30 1992 PDT ! 657: n0/i386/bind.c ! 658: Corrected fieldalign(). This fixes a bug discovered by michael: ! 659: a #pragma align, the old code sometimes bumped bitfields to the ! 660: next char/word/dword boundary inappropriately. ! 661: coh/cc.c ! 662: Fixed driver to do -A correctly if monolithic and to ! 663: reinitialize global nerr (diag.c error count) appropriately. ! 664: ! 665: Thu Apr 30 16:41:26 1992 PDT ! 666: coh/cc.c ! 667: Added -f option in runas() for _I386. ! 668: n3/i386/icode.c ! 669: n3/i386/igen.c ! 670: Added routine istring() to disassemble strings as readable text. ! 671: Changed assembler -S output to write .link and .string for ! 672: SLINK and SSTRN, because otherwise they end interspersed with ! 673: code in the text segment. ! 674: ! 675: Thu Apr 30 17:13:56 1992 PDT ! 676: n2/i386/unasm.c ! 677: Fixed bogus branch over branch code, a vestige of i8086, ! 678: no longer required. ! 679: ! 680: Thu Apr 30 17:56:56 1992 PDT ! 681: n0/sharp.c ! 682: Added code (flying jump into middle of switch, gak) to ! 683: allow "# 123" as alternative to "#line 123" per ATT. ! 684: ! 685: Fri May 1 13:59:28 1992 PDT ! 686: n1/i386/tables/leaves.t ! 687: Corrected floating -> integer shrink entries to fix ! 688: regression suite bug discovered by cef. ! 689: ! 690: Thu May 7 00:41:04 1992 PDT ! 691: n0/cc0.c ! 692: Rewrote cppfinal() slightly to correct bug: e.g. ! 693: #define void int ! 694: resulted in "Bad pointer in free" when cppfinal() ! 695: tried to free the keyword table entry by mistake. ! 696: ! 697: Thu May 7 12:32:35 1992 PDT ! 698: coh/cc.c ! 699: Added code to err_close() to copy warning messages ! 700: to stdout; cef noted that they were disapearing ! 701: under -A if parsing was otherwise successful. ! 702: ! 703: Thu May 7 14:31:59 1992 PDT ! 704: n3/cc3.c ! 705: n3/i386/igen.c ! 706: n3/i8086/igen.c ! 707: Added cc3close() to cc3.c and dummy cc3close() in i8086/igen.c. ! 708: Modified i386/igen.c to write each output segment to a ! 709: separate temp file, then combine the files at the end. ! 710: This allows the assembler to assemble the .s output and ! 711: produce (we hope) the same bits as the compiler .o output. ! 712: ! 713: Tue May 12 11:52:14 1992 PDT ! 714: h/cc0.h ! 715: Bumped _I386 value of NDBUF (again) from 2048 to 4096, ! 716: Esa Ahola reported that Gnu code included horrible ! 717: macros which expanded to more than 2K characters. ! 718: ! 719: Tue May 12 13:25:41 1992 PDT ! 720: n1/output.c ! 721: In output() isrelop code, added test for op==QUEST at end. ! 722: The code output routine contained a longstanding bug: ! 723: in a relational context, a comma operator with a ?: on ! 724: the rhs produced a "no patp" botch (because it called ! 725: outtree() on the QUEST tree, rather than trying output() again). ! 726: ! 727: Tue May 12 15:58:13 1992 PDT ! 728: h/i8086/cc3mch.h ! 729: n3/i8086/igen.c ! 730: Defined cc3init() and cc3close() as empty macros in cc3mch.h ! 731: rather than as empty routines in igen.c, for efficiency. ! 732: These routines are unused for i8086 compiler. ! 733: ! 734: Wed May 13 13:12:55 1992 PDT ! 735: n1/i386/tables/shift.t ! 736: Changed entry using "shift by %cl" form from ANYR to explicitly ! 737: use EAX as temp. norm and epstein found a nasty code generation ! 738: bug caused by using ECX as temp and CL (simultaneously) as ! 739: shift count, causing incorrect code to be omitted. ! 740: ! 741: Thu May 21 09:51:31 1992 PDT ! 742: n1/i386/tables/shift.t ! 743: Changed left arg types of both entries from LONG to DWORD. ! 744: LaMonte discovered that the code ! 745: ((unsigned long)( &foo )) << 1; ! 746: gave a no match error. ! 747: ! 748: Tue May 26 12:24:41 1992 PDT ! 749: coh/cc.c ! 750: At cef's request, modified runld() and runas() #if _I386 ! 751: to supply arguments -q to ld and -w to as if cc -Q used. ! 752: ! 753: Tue May 26 15:08:32 1992 PDT ! 754: cpp/cpp.c ! 755: Removed test for argc > 1, which allows cpp to be used ! 756: purely as filter. ! 757: n0/cc0.c ! 758: If !MONOLITHIC, added test of argument filename for "-", ! 759: to allow invocation from cpp with args "cc0 var - -", ! 760: so cpp can act purely as a filter. ! 761: host.h ! 762: Changed MONOLITHIC conditionalization, the right values ! 763: now depend on how you want to build it. ! 764: ! 765: Tue May 26 17:40:13 1992 PDT ! 766: n1/mtree0.c ! 767: In modtree(), added code to change "&(a,b)" to "a,&b". ! 768: Esa reported a fatal collect error due to code like ! 769: return i = 0, s; ! 770: where s is a structure type. ! 771: ! 772: Wed May 27 08:59:03 1992 PDT ! 773: n2/i386/asm.c ! 774: n2/i386/emit1.c ! 775: n2/i386/outcoff.c ! 776: At norm's request, modified output writer to emit NOP ! 777: (0x90, i.e. xchg %eax, %eax) rather than 0 to perform ! 778: alignment in code segment. This is helpful to disassemblers. ! 779: outnzb() now takes extra flag arg to indicate segment. ! 780: ! 781: Mon Jun 1 15:49:51 1992 PDT ! 782: n0/gdecl.c ! 783: In gstruct() and genum(), added code to save and restore ! 784: global TOK *idp around calls to lex(). This fixes a very ! 785: venerable bug which cef's test suite calls trevor.c: ! 786: #define begin { ! 787: #define end } ! 788: struct s begin ! 789: int s_i; ! 790: end ! 791: mistakenly defined the struct tag "begin" rather than "s". ! 792: ! 793: Mon Jun 1 16:48:26 1992 PDT ! 794: h/i386/mch.h ! 795: Corrected definition of UIMASK from 0xFFFFFFFL to 0x00000000L. ! 796: The definition resulted in bogus promotion warnings. ! 797: ! 798: Tue Jun 2 14:49:01 1992 PDT ! 799: n3/i386/igen.c ! 800: Added missing "ofp = sfp[SCODE];" in cc3close(). ! 801: The disassembler changes which write each segment to a ! 802: different temp file needs this, otherwise (as norm noted) ! 803: files which do not end with code send the final segment ! 804: to the disassembler bit bucket. ! 805: ! 806: Wed Jun 3 08:34:20 1992 PDT ! 807: coh/cc.c ! 808: At cef's request, changed runld() to invoke ld -Q rather ! 809: than ld -q when cc is invoked with -Q. ! 810: ! 811: Wed Jun 3 15:46:51 1992 PDT ! 812: n1/mtree1.c ! 813: For Promula's benefit, modified NLNODE and NONODE #if _I386 ! 814: from 20 to 128. This allows more complex associative ! 815: expressions. ! 816: ! 817: Fri Jun 5 09:21:47 1992 PDT ! 818: n1/i386/gen2.c ! 819: In the double to float conversion routine flvaldval(), ! 820: added code to perform mantissa rounding. Promula reported ! 821: that the values produced by float and double initializations ! 822: were different, because the old code truncated the mantissa. ! 823: ! 824: Fri Jun 12 13:16:16 1992 PDT ! 825: n3/i386/igen.c ! 826: At cef's request, added "\t.alignoff\n" to cc -S output ! 827: (after module name). The compiler puts out explicit ! 828: .align requests as needed, so the assembler should not ! 829: be performing alignment on its own. ! 830: ! 831: Wed Jun 24 11:07:56 1992 PDT ! 832: n0/cc0.c ! 833: In cc0() arg handling code, case 'D', add ! 834: *--p = '+'; ! 835: to restore cpp arg "-DFOO=foo" to its previous state. ! 836: cc0() was replacing the '=' with NUL, which caused ! 837: incorrect results for mcc with multiple file args. ! 838: ! 839: Wed Jun 24 11:35:40 1992 PDT ! 840: coh/cc.c ! 841: In chkofile(), change to allow special case ! 842: cc -c -o a.out foo.c ! 843: for the benefit of AT&T Cfront script. Previously, ! 844: the compiler complained about the funny output name. ! 845: [This change withdrawn 6/25/92, see next entry.] ! 846: ! 847: Thu Jun 25 12:18:44 1992 PDT ! 848: coh/cc.c ! 849: Withdrew yesterday's a.out-specific hack. ! 850: Instead, added new option "-a", which tells cc ! 851: not to generate a ld output name automatically. ! 852: Thus, "cc -a foo.c" ends up creating "a.out", as desired. ! 853: ! 854: Fri Jun 26 09:08:59 1992 PDT ! 855: n0/cc0.c ! 856: 6/24/92 fix for -DFOO=foo caused cc to core dump, ! 857: now fixed correctly. ! 858: ! 859: Mon Jun 29 11:34:16 1992 PDT ! 860: Changes to allow NDP coprocessor floating point code ! 861: generation, as follows: ! 862: h/i386/mch.h ! 863: Added register FPAC, meaning the coprocessor stacktop %st. ! 864: Renumbered pseudoregisters accordingly. Added BPFAC. ! 865: common/i386/regnam.c ! 866: n1/i386/gen1.c ! 867: n1/i386/table1.c ! 868: Modified register tables to include FPAC. ! 869: Modified pertype table in table1.c to indicate that ! 870: double functions return value in FPAC #if NDP. ! 871: n1/i386/tables/leaves.t ! 872: Changed globals tstccp() and dp87() to _tstccp() and _dp87(). ! 873: n1/i386/tables/relop.t ! 874: Changed global cfcc() to _cfcc(). ! 875: n1/i386/tables/add.t ! 876: n1/i386/tables/sub.t ! 877: n1/i386/tables/aadd.t ! 878: n1/i386/tables/asub.t ! 879: Corrected NDP table entries using OP1 to use appropriate ! 880: fp opcode instead. ! 881: n1/i386/mtree2.c ! 882: Deleted bogus '{' in #if NDP code. ! 883: Added missing #if NDP modxfun() call for float->fixed casts. ! 884: n2/i386/asm.c ! 885: Corrected bogus "outsb()" call and A_PREFX code, ! 886: both artifacts of i8086 NDP code. ! 887: ! 888: Wed Jul 1 16:26:09 1992 PDT ! 889: n2/i386/asm.c ! 890: Simplified V80287 code, another i8086 remnant. Since the ! 891: processor is always 80x86, the extra FWAITs preceding ! 892: coprocessor instructions in i8086 are no longer required. ! 893: n3/i386/icode.c ! 894: Renamed NDP floating point opcodes to conform to assembler. ! 895: ! 896: Wed Jul 8 15:21:28 1992 PDT ! 897: n0/stat.c ! 898: Added code to SWITCH to allow long or unsigned long switch ! 899: expressions when sizeof(int)==sizeof(long), i.e. for i386. ! 900: A switch with long switch expression failed before, now works; ! 901: issues "Strict" warning if -VS specified, silent otherwise. ! 902: ! 903: Wed Jul 8 17:08:40 1992 PDT ! 904: n0/ddecl.c ! 905: A beta site reported that e.g. ! 906: enum e { ONE, TWO, THREE }; ! 907: struct s { ! 908: int s_i; ! 909: enum e s_e:8; ! 910: }; ! 911: died with an internal error, traced to fieldalign botch. ! 912: Changed declare() to adjust the type of a {struct|union} member ! 913: which is an enum to the base type of the enum, now at least ! 914: the above example works. ! 915: ! 916: Mon Jul 13 11:25:22 1992 PDT ! 917: common/bput.c ! 918: Changed error message ! 919: out of space in memory buffer ! 920: to ! 921: out of space in memory buffer; try "-T0" option ! 922: for the benefit of the poor user. ! 923: n0/stat.c ! 924: At norm's suggestion, changed VSCCON code in truth() to ! 925: run down a list of assignments, so that e.g. ! 926: if (i = 1)... ! 927: rather than ! 928: if (i == 1)... ! 929: generates a strict message if VSCCON is turned on. ! 930: h/cc1.h ! 931: Changed NSTORE from 20 to 100 for i386 only. ! 932: A beta user reported a "too many stores" internal error ! 933: on a horrendous line (GNU, of course). ! 934: ! 935: Tue Jul 14 13:16:21 1992 PDT ! 936: n0/gdecl.c ! 937: In gstruct(), fixed "nbpstrg" code to make sure nbpstrg is ! 938: nonzero. The old code caused a zero-divide core dump on e.g. ! 939: typedef union node { ! 940: struct s1 { ! 941: int n_type; ! 942: union node *n_next; ! 943: }; ! 944: } NODE; ! 945: when compiled without -VSINU. ! 946: ! 947: Thu Jul 16 09:05:41 1992 PDT ! 948: n0/i386/bind.c ! 949: In fieldalign(), fixed alignment code yet again. ! 950: Nested structs or unions were getting dword-aligned ! 951: rather than aligned according their widest member. Thus, ! 952: typedef struct match { ! 953: short ma_dist; ! 954: union { ! 955: unsigned short ma_length; ! 956: unsigned char ma_litc[2]; ! 957: } l; ! 958: } MATCH; ! 959: resulted in sizeof(MATCH) being 6, because the union was ! 960: dword-aligned instead of word-aligned; now sizeof(MATCH) is 4. ! 961: In aligntype(), recoded loop which runs down DIM list to ! 962: avoid dereferencing (NULL)->d_type. ! 963: ! 964: Thu Jul 16 10:00:33 1992 PDT ! 965: n3/i386/icode.c ! 966: In opcode table, changed "movzx" to "movzxw" and ! 967: "movsx" to "movsxw" to avoid operand length ambiguity. ! 968: ! 969: Thu Jul 16 14:57:40 1992 PDT ! 970: coh/cc.c ! 971: Recognize new option -VCPPC. ! 972: h/var.h ! 973: Added new variant VCPPC, renumbered other variants accordingly. ! 974: cpp/cpp.c ! 975: New options -C (invoke cc0 with -VCPPC) and -P (same as -E). ! 976: Cleaned up code slightly. ! 977: n0/get.c ! 978: Added code to not suppress comments if -VCPP and -VCPPC. ! 979: ! 980: Wed Jul 29 10:31:39 1992 PDT ! 981: n0/stat.c ! 982: In dolabel(), added line to set s_dline field for labels. ! 983: ! 984: Wed Jul 29 12:49:49 1992 PDT ! 985: h/cc0.h ! 986: At hal's request, bumped NDLEV for i386 from 128 to 256, ! 987: for the benefit of some C++-generated headers. ! 988: ! 989: Wed Aug 5 09:04:53 1992 PDT ! 990: coh/cc.c ! 991: Added -g option, same meaning as -VDB, for Unix compatability. ! 992: n2/i386/outcoff.c ! 993: Extensive changes to add debug output support. ! 994: ! 995: Wed Aug 5 20:17:13 1992 PDT ! 996: n0/sharp.c ! 997: Changed cppexpr() to read constant expressions with cstate==0, ! 998: so that comments are handled correctly. ! 999: ! 1000: Thu Aug 6 11:37:45 1992 PDT ! 1001: n0/init.c ! 1002: hal noted that the one-liner ! 1003: char c[] = "abc/*defg"; ! 1004: died with a bogus "EOF in comment" error. ! 1005: The code which reads a string initializer ! 1006: now sets the "instring" flag to tell the cc0 lexer ! 1007: to treat "/*" as ordinary characters, so now it works. ! 1008: ! 1009: Fri Aug 7 09:49:26 1992 PDT ! 1010: n2/i386/outcoff.c ! 1011: Added "incomplete debug information" fatal messages ! 1012: for modules compiled with e.g. -VDSYMB rather than -VDB. ! 1013: ! 1014: Mon Aug 10 13:13:47 1992 PDT ! 1015: coh/cc.c ! 1016: In runld(), changed unconditional arg -X to either ! 1017: -X (if !-VDB) or -g (if -VDB). ! 1018: ! 1019: Mon Aug 11 10:26:58 1992 PDT ! 1020: coh/cc.c ! 1021: Changed PTMP from 16 to 32 to allow longer pathnames. ! 1022: ! 1023: Tue Aug 11 10:48:09 1992 PDT ! 1024: n0/init.c ! 1025: Corrected above change for string initializers to handle ! 1026: char a[] = "one line and " ! 1027: "another line\n"; ! 1028: without complaining about newline in string literal. ! 1029: ! 1030: Thu Aug 13 15:17:31 1992 PDT ! 1031: n2/i386/outcoff.c ! 1032: Modified db_func() to write LNNUM entry for each function. ! 1033: ! 1034: Fri Aug 14 12:50:05 1992 PDT ! 1035: n2/i386/outcoff.c ! 1036: V4.0.2: Modified to write .comment section containing ! 1037: translator id and version number if debug. ! 1038: n1/i386/tables/aft.t ! 1039: n1/i386/tables/bef.t ! 1040: Changed node type pointer bumping code table entries from ! 1041: PTX to DWORD. cef discovered that code like ! 1042: l = (long)++lp; ! 1043: caused a no match error. ! 1044: ! 1045: Tue Aug 25 10:32:36 1992 PDT ! 1046: n1/mtree0.c ! 1047: V4.0.3: In modtree(), in the relational section, ! 1048: added code to modify ! 1049: (a ? b : c) op 0 ! 1050: to ! 1051: a ? b op 0 : c op 0 ! 1052: This fixes a "no match" botch reported by cef for the code ! 1053: if (!(a ? b : (c & 1))) ! 1054: ; ! 1055: ! 1056: Tue Aug 25 14:11:06 1992 PDT ! 1057: n0/get.c ! 1058: V4.0.4: In get(), check cstate in HIGH* case so high-bit-set ! 1059: characters get ignored inside false conditionals. ! 1060: n0/lex.c ! 1061: In lex(), case QUOTE, set 'instring' before reading char ! 1062: so single-quoted high-bit-set characters work. ! 1063: ! 1064: Wed Aug 26 09:21:29 1992 PDT ! 1065: n0/fold.c ! 1066: Cosmetic changes only, no substantive change. ! 1067: ! 1068: Thu Aug 27 09:34:46 1992 PDT ! 1069: n0/cc0.c ! 1070: V4.0.5: Added local argv2, a modified copy of argv[2], ! 1071: to prevent MONOLITHIC compiler problems with cc -A filename. ! 1072: Added missing "notskip" initialization #if MONOLITHIC. ! 1073: ! 1074: Wed Sep 2 13:26:33 1992 PDT ! 1075: n3/cc3.c ! 1076: In main(), added missing "dotseg = -1;" for non-MONOLITHIC. ! 1077: ! 1078: Mon Sep 21 10:46:58 1992 PDT ! 1079: n1/i386/mtree2.c ! 1080: V4.0.6: In modefld(), fixed bug reported by cef involving ! 1081: unsigned bitfields (an enum bitfield in the case he discovered ! 1082: while compiling gcc); basically, ! 1083: struct s1 { unsigned char c : 2; } s1; ! 1084: struct s2 { unsigned char c; } s2; ! 1085: if (s1.c != s2.c) ... ! 1086: produced a fatal "no match" error which did not happen ! 1087: if the bitfields were signed rather than unsigned. ! 1088: ! 1089: Thu Sep 24 09:26:35 1992 PDT ! 1090: n0/i386/bind.c ! 1091: V4.0.7: cef reported another problem from gcc compilation: ! 1092: enum e { foo, baz, bar }; ! 1093: struct s { enum e s_e:16; } ! 1094: died on the second line with a fatal "field too wide" error, ! 1095: because the parser didn't like putting the 8-bit wide enum ! 1096: into a 16-bit field. I see no reason for this restriction, ! 1097: so I eliminated the "field too wide" check entirely. ! 1098: ! 1099: Wed Sep 30 14:08:21 1992 PDT ! 1100: coh/cc.c ! 1101: h/var.h ! 1102: V4.0.8: Replaced the unimplemented variant option -VCHASM ! 1103: (generate C-style assember, which rec planned but ! 1104: never executed, at least in this compiler base) with -VCPLUS. ! 1105: The latter tells the compiler to ignore ! 1106: C++ style //-delimited online comments. ! 1107: n0/get.c ! 1108: In get(), case DIV, added code to recognize C++ online comments. ! 1109: ! 1110: Thu Oct 1 14:36:09 1992 PDT ! 1111: n1/i386/mtree2.c ! 1112: V4.0.9: in modlfld(), added code to make the top type ! 1113: of modified lvalue field tree computation. This fixes ! 1114: a no match bug reported by cef for assignment of ! 1115: non-immediate values to char or short bitfields. ! 1116: ! 1117: Thu Oct 1 17:10:16 1992 PDT ! 1118: coh/cc.c ! 1119: V4.0.A: added missing VWIDEN to variant list to enable ! 1120: warnings on adjusted formal parameter types. ! 1121: ! 1122: Tue Oct 20 07:40:09 1992 CDT ! 1123: n1/i386/tables/asub.t ! 1124: Modified NDP code table entry, the old version used ZFSUB ! 1125: rather than ZFSUBR and thus got the incorrect result sign. ! 1126: ! 1127: Wed Oct 21 17:07:42 1992 CDT ! 1128: h/i386/mch.h ! 1129: Conditionalized NRREG on #if NDP so that isrealreg() is ! 1130: true for the FPAC (%st) in the NDP compiler. ! 1131: n1/i386/table1.c ! 1132: Conditionalized register table entry for EDXEAX so that ! 1133: the register kind is 0 #if NDP, KD otherwise, to avoid having ! 1134: the code generator try to stick NDP doubles in %edx:%eax. ! 1135: ! 1136: Thu Oct 22 12:09:24 1992 CDT ! 1137: h/i386/opcode.h ! 1138: V4.0.B: added is_ndp_op() macro. ! 1139: n1/i386/outmch.c ! 1140: Changed #if NDP code to use is_ndp_op() to determine if ! 1141: a given opcode is an NDP operation, for the benefit of the ! 1142: TL/TR/TN macros. ! 1143: ! 1144: Mon Nov 2 21:47:00 1992 PST ! 1145: n2/cc2.c ! 1146: V4.0.C: Added "gendbgt(-1);" call to reinitialize debug item ! 1147: count #if MONOLITHIC. ! 1148: n2/dbgt2.c ! 1149: Added #if MONOLITHIC code to getdbgt() to reset drefnum = 0; ! 1150: for arg -1. This fixes a bug reported by CAD-UL: ! 1151: "cc -g *.c" would botch after the first source file. ! 1152: n2/i386/outcoff.c ! 1153: In outdloc(), before the recursive call of outdloc() while ! 1154: processing member list, added "--refnum;" to fudge the ! 1155: reference number. This fixes another debug info (-g) problem ! 1156: reported by CAD-UL: local struct or union declarations ! 1157: confused the refnum count, so e.g. ! 1158: f(){ struct s { int s_i; } s; s.s_i = 1; } ! 1159: caused a compiler botch when compiled with -g. ! 1160: ! 1161: Wed Nov 11 16:47:34 1992 PST ! 1162: n0/expr.c ! 1163: V4.0.D: Changed the way the expression builder build() ! 1164: handles voids. nigel motivated this by complaining about ! 1165: extern void void_fn(); ! 1166: (a) ? (void)0 : voidfn(); ! 1167: not compiling; a more dramatic form of the same problem is ! 1168: extern void void_fn1(), void_fn2(); ! 1169: (a) ? void_fn1() : void_fn2(); ! 1170: In the old code, void was legal on either side of "," ! 1171: or lhs of ":" (don't ask why, I don't get it either), ! 1172: any other usage produced "illegal operation on void type" error. ! 1173: Now, ":" can have void on both sides (but not on just one side), ! 1174: "?" can have void on rhs (i.e. on both sides of its ":"), ! 1175: and "," can have void on either side as before; ! 1176: all other usages are illegal. ! 1177: ! 1178: Fri Nov 13 16:37:30 1992 PST ! 1179: n2/i386/peep.c ! 1180: V4.0.E: at cef's suggestion, modified noeffect() to note ! 1181: that "add %esp, $n" or "pop %ecx" before "leave" has ! 1182: no effect. ! 1183: n2/i386/emit1.c ! 1184: Added comment noting that peep.c/noeffect() knows details ! 1185: of the epilogue code generation; no substantive changes. ! 1186: ! 1187: Mon Nov 23 10:29:05 1992 PST ! 1188: n2/i386/outcoff.c ! 1189: V4.0.F: Fixed setrefnum() to create symbol entries for ! 1190: items with no associated debug information. In particular, ! 1191: internally generated calls (e.g. "_dicvt" for fp or "memcpy" ! 1192: for structure assignment) caused fatal errors with -g. ! 1193: This fixes a bug reported by user H. C. Pulley. ! 1194: ! 1195: Wed Dec 2 11:16:19 1992 PST ! 1196: n0/stat.c ! 1197: In statement(), case RETURN, added code to check if cfsym==NULL ! 1198: before fetching through it. The old code produced segmentation ! 1199: violation core dumps in code where an inadvertent extra '}' ! 1200: caused the parser to get confused. ! 1201: n2/optim.c ! 1202: In fixbr(), added code to optimize out conditional branch ! 1203: followed by unconditional branch to same location. ! 1204: n1/mtree0.c ! 1205: V4.0.G: In modtree(), rearranged code added on 8/23/92 ! 1206: (cf. above) slightly. This fixes a bug reported by ! 1207: Bill Raudabaugh, namely a no match on code like: ! 1208: if (!((a ? b : c) != 0)) ! 1209: ; ! 1210: ! 1211: Wed Dec 2 14:08:53 1992 PST ! 1212: n1/i386/leaves.t ! 1213: V4.0.H: Added "|PTX" to flag bits for unsigned to ! 1214: non-NDP double or float conversion entries. ! 1215: Previously, the compiler produced a no match error on e.g. ! 1216: char *f() { return 1.0; } ! 1217: ! 1218: Thu Dec 3 12:12:24 1992 PST ! 1219: n2/i386/outcoff.c ! 1220: V4.0.I: Fixed db_strcmp() after user H. C. Pulley reported ! 1221: fatal error caused by incorrect comparison of long C name ! 1222: to 8-character debug name matching the first 8 characters. ! 1223: h/i386/cc1mch.h ! 1224: Deleted getstar() definition, typo for genstar() and unused. ! 1225: coh/cc.c ! 1226: h/i386/varmch.h ! 1227: Added variant VXSTAT for Comeau. ! 1228: n2/i386/outcoff.c ! 1229: Added code to write static external items if isvariant(VXSTAT), ! 1230: for Comeau. ! 1231: ! 1232: Wed Dec 16 13:04:25 1992 PST ! 1233: n2/i386/outcoff.c ! 1234: V4.0.J: In copycode(), do not set F_LSYMS and F_LNNO flags in ! 1235: COFF header only if compiled -g; cc always set them previously. ! 1236: ! 1237: Fri Dec 18 13:15:58 1992 PST ! 1238: coh/cc.c ! 1239: V4.0.K: In makelib(), add #if _I386 code to simply pass "-lfoo" ! 1240: to ld rather than trying to expand it; this allows -L to work ! 1241: as expected. ! 1242: ! 1243: Wed Dec 23 13:14:37 1992 PST ! 1244: V4.0.L: Previously, the choice of software fp vs. NDP hardware ! 1245: fp was made when the compiler was built (NDP in mch.h and ! 1246: NDPDEF during tabgen). The following extensive changes allow ! 1247: a single compiler executable to write either software fp ! 1248: (default, no -VNDP) or NDP fp (if -VNDP). ! 1249: coh/cc.c ! 1250: Add option VNDP. ! 1251: h/i386/cc2mch.h ! 1252: Remove #if NDP conditionalization on extern int hasfloat. ! 1253: h/i386/mch.h ! 1254: Remove NDP definition. Change !NDP NRREG definition from ! 1255: 25 to 26, corresponding to change in table1.c below. ! 1256: h/i386/opcode.h ! 1257: Remove #if NDP conditionalization of NDP opcodes. ! 1258: h/i386/varmch.h ! 1259: Add option VNDP. ! 1260: n1/i386/gen1.c ! 1261: In coderinit(), modify table entries in table1.c if -VNDP. ! 1262: Change "#if NDP" compile-time conditionalization to ! 1263: "if (isvariant(VNDP))" run-time conditionalization ! 1264: in code which zaps inappropriate code table entries. ! 1265: n1/i386/mtree2.c ! 1266: Change #if NDP conditionalization, as above. ! 1267: n1/i386/outmch.c ! 1268: Remove #if NDP conditionalization. ! 1269: n1/i386/table1.c ! 1270: Change #if NDP conditionalization on table entries for ! 1271: registers EDX:EAX and FPAC and type F64. The entries now ! 1272: assume software fp by default, n1/i386/gen1.c/coderinit() ! 1273: modifies them if -VNDP. ! 1274: n1/i386/tables/aadd.t ! 1275: n1/i386/tables/add.t ! 1276: n1/i386/tables/adiv.t ! 1277: n1/i386/tables/amul.t ! 1278: n1/i386/tables/assign.t ! 1279: n1/i386/tables/asub.t ! 1280: n1/i386/tables/div.t ! 1281: n1/i386/tables/leaves.t ! 1282: n1/i386/tables/mul.t ! 1283: n1/i386/tables/neg.t ! 1284: n1/i386/tables/relop.t ! 1285: n1/i386/tables/sub.t ! 1286: Remove #ifndef NDPDEF and #ifdef NDPDEF code table conditionals. ! 1287: n2/i386/asm.c ! 1288: n2/i386/emit1.c ! 1289: Remove or change #if NDP conditionalization appropriately. ! 1290: Add #if 0 conditionalization on VEMU87 code, currently unused. ! 1291: n2/i386/optab.c ! 1292: Remove #if NDP conditionalization of NDP opcodes. ! 1293: n2/i386/unasm.c ! 1294: Add #if 0 conditionalization on VEMU87 code, currently unused. ! 1295: n3/i386/icode.c ! 1296: Remove #if NDP conditionalization. ! 1297:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.