Annotation of coherent/b/bin/c/Changes.1992, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.