C1.DOC C1 cppd_src_file [-o outfile] [-mC] (NOTE: Refer to DCC.DOC for front end options) C1 is the compiler itself. As input it requires an already preprocessed file and as output it produces assembly. Many assemblers will not be able to assemble the output due to forward referenced REG labels and the PROCSTART, PROCEND directives. The output is normally fed to DAS, which handles a subset of 68000 and also does certain optimizations (see the document on DAS) The compiler generates absolute data references and relative code references by default. I feel that more efficient code will be generated if A4 is available as a register variable. The compiler will eventually LEA the address of global data variables into free registers to increase access to globals. **NOTE** Since A4 is used you cannot link DCC object files with Lattice or Aztec libraries. You CAN link DCC object files with AMIGA.LIB . The compiler will put argument and auto variables into registers according to register availability and usage. It will use A0-A1/D0-D1 for register variables whenever possible. Consequently, the most heavily used variables will be in registers even for very large subroutines. You should get into the habit of using auto declarations within sub blocks rather than declare all your autos at the top of the procedure. Apart from making the code more modular, this will enable the compiler to make better decisions when allocating register variables. The output of the compiler generates code of the same order as Aztec or Lattice C and, in many cases, makes better choices for register variables. DCC makes much better use of address registers than either Aztec or Lattice. However, it does not do any major contents tracking and redundant instructions will be generated. DAS will handle properly optimizing branches and DAS will eventually have a peephole optimizer built in it to handle other obvious redundancies. The compiler does other optimizations itself, such as using bit instructions to handle special cases of &, |, and ^, include using BTST. ----------------------- ----------------------- VOLATILE and REGISTER type specifiers are currently ignored. Taking the address of any auto variable forces it to be really auto and not register. Since no major optimization is done, volatileness is pretty much preserved. A CONST data item is placed in a code section rather than a data section. PTR-PTR, PTR-INT conversions are currently done silently without warning for the most part.