home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 5 / CD_Magazyn_EXEC_nr_5.iso / Programy / Programowanie / vbcc07e.lzx / vbcc / doc / vbcc.doc < prev    next >
Encoding:
Text File  |  2001-02-12  |  29.5 KB  |  765 lines

  1. vbcc - C compiler (c) in 1995-2000 by Volker Barthelmann
  2.  
  3.  
  4. INTRODUCTION
  5.  
  6.     vbcc is a portable and retargetable ANSI C compiler.
  7.     It is split into a target-independant and a target-dependant part, and
  8.     supports emulating datatypes of the target machine on any other machine
  9.     so that it is possible to e.g. make a crosscompiler for a 64bit machine
  10.     on a 32bit machine.
  11.  
  12.     The target-independant part generates a form of intermediate code
  13.     (quads) which has to be dealt with by the code generator. This
  14.     intermediate code is rather cpu independant (apart from register usage)
  15.     but the target-independant part of vbcc uses informations about the
  16.     target machine while generating this code.
  17.  
  18.     This document only deals with the target-independant parts of vbcc.
  19.     Be sure to read all the documents for your machine.
  20.  
  21.  
  22. LEGAL
  23.  
  24.     vbcc is (c) in 1995-2000 by Volker Barthelmann. 
  25.     This is a development snapshot which must not be distributed.
  26.     Also, commercial usage is forbidden.
  27.  
  28.  
  29. INSTALLATION
  30.  
  31.     The installation is system dependant and covered in another manual.
  32.  
  33.  
  34. USAGE
  35.  
  36.     Usually vbcc will be called by a frontend. However, if you call it
  37.     directly it has to be done like this (and most of the options
  38.     should be passed through to vbcc by the frontend):
  39.  
  40.       vbcc<target> [options] file
  41.  
  42.     The following options are supported by the machine independant part
  43.     of vbcc:
  44.  
  45.     -quiet      Do not print the copyright notice.
  46.  
  47.     -ic1        Write the intermediate code before optimizing to file.ic1.
  48.  
  49.     -ic2        Write the intermediate code after optimizing to file.ic2.
  50.  
  51.     -debug=n    Set the debug level to n.
  52.  
  53.     -o=ofile    Write the generated assembler output to <ofile> rather than
  54.                 the default file.
  55.  
  56.     -noasm      Do not generate assembler output (only for testing).
  57.  
  58.     -O=n        Turns optimizing options on/off; every bit set in n turns
  59.                 on an option.
  60.                 (See section on optimizing.)
  61.  
  62.     -speed      Turns on optimizations which improve speed even if they
  63.                 increase code-size quite a bit.
  64.  
  65.     -size       Turns on optimizations which improve code-size even if
  66.                 they have negative effect on execution-times.
  67.  
  68.     -final      This flag is useful only with higher optimization levels.
  69.                 It tells the compiler that all relevant files have been
  70.                 provided to the compiler (i.e. it is the link-stage).
  71.                 The compiler will try to eliminate all functions and
  72.                 variables which are not referenced.
  73.                 Note that functions/variables which are not referenced,
  74.                 but must nevertheless be present (e.g. interrupt-handlers,
  75.                 callback-hooks or identification-data) must have the
  76.                 __vattr("entry") attribute to be included.
  77.  
  78.     -g          Create debug output. Whether this is supported and what
  79.                 kind of debug-format will be created depends on the backend.
  80.                 Some backend may offer additional options to control the
  81.                 format of the debug output.
  82.                 Also, the information and the precision of this information
  83.                 depends on the format and options regarding optimization and
  84.                 code-generation.
  85.                 Usually DWARF2-output will be generated by default.
  86.  
  87.     -c99        Switch to the 1999 ISO standard for C.
  88.                 Currently only a few changes of C99 are handled:
  89.                 - long long int is recognized (not supported by all backends)
  90.                 - flexible array members as last element of a struct are
  91.                   allowed
  92.                 - statements and declarations may be mixed
  93.                 - the restrict-qualifier is allowed (but currently ignored)
  94.                 - the new keywords are reserved
  95.                 - //-comments are allowed
  96.                 - vararg-macros are allowed
  97.  
  98.     -maxoptpasses=n
  99.                 Set maximum number of optimizer passes to n.
  100.                 (See section on optimizing.)
  101.  
  102.     -inline-size=n
  103.                 Set the maximum 'size' of functions to be inlined.
  104.                 (See section on optimizing.)
  105.  
  106.     -inline-depth=n
  107.                 Inline functions up to n nesting-levels (including recursive
  108.                 calls). The default value is 1. Be careful with values greater
  109.                 than 2.
  110.                 (See section on optimizing.)
  111.  
  112.     -unroll-size=n
  113.                 Set the maximum 'size' of unrolled loops.
  114.                 (See section on optimizing.)
  115.  
  116.     -unroll-all
  117.                 By default, vbcc will only unroll loops where the number
  118.                 of iterations can be determined at compile-time. If this
  119.                 option is specified it will also unroll loops where the
  120.                 number of iterations can be calculated at runtime when
  121.                 the loop is entered.
  122.  
  123.     -no-inline-peephole
  124.                 Some backends provide peephole-optimizers which perform
  125.                 simple optimizations on the assembly code output by vbcc.
  126.                 By default, these optimizations will also be performed
  127.                 on inline-assembly code of the application. This switch
  128.                 turns off this behaviour.
  129.  
  130.     -fp-associative
  131.                 Floating point operations do not obey the law of
  132.                 associativity, e.g. (a+b)+c==a+(b+c) is not true for all
  133.                 floating point numbers a,b,c. Therefore certain optimizations
  134.                 depending on this property cannot be performed on floating
  135.                 point numbers.
  136.                 With this option you can tell vbcc to treat floating point
  137.                 operations as associative and perform those optimizations
  138.                 even if that may change the results in some cases (not
  139.                 ANSI conforming).
  140.  
  141.     -no-alias-opt
  142.                 If the optimizer is turned on, vbcc has to make assumptions
  143.                 on aliasing (i.e. which pointer can point to which
  144.                 objects at a given time). If this option is specified,
  145.                 vbcc will make worst-case assumptions and some
  146.                 non-conforming programs could be made to work that way.
  147.  
  148.     -no-multiple-ccs
  149.                 If the code generator supports multiple condition code
  150.                 registers, vbcc will try to use them when optimizing.
  151.                 This flag prevents vbcc from using them.
  152.  
  153.     -double-push
  154.                 On targets where function-arguments are passed in registers
  155.                 but also stack-slots are left empty for such arguments,
  156.                 pass those arguments both in registers and on the stack.
  157.                 This generates less efficient code but some broken code
  158.                 (e.g. code which calls varargs functions without correct
  159.                 prototypes in scope) may work.
  160.  
  161.     -stack-check
  162.                 Insert code for dynamic stack checking/extending if the
  163.                 backend and environment supports this feature.
  164.  
  165.     -iso
  166.     -ansi       Switch to ANSI/ISO mode.
  167.                 In ISO mode warning 209 will be printed by default.
  168.                 Inline-assembly-functions are not recognized.
  169.                 Also assignments between pointers to <type> and pointers
  170.                 to unsigned <type> will cause warnings.
  171.  
  172.     -maxerrors=n
  173.                 Abort the compilation after n errors; do not stop if n==0.
  174.  
  175.     -dontwarn=n
  176.                 Suppress warning number n; suppress all warnings if n<0.
  177.                 (See the section on errors/warnings.)
  178.  
  179.     -warn=n
  180.                 Turn on warning number n; turn on all warnings if n<0.
  181.                 (See the section on errors/warnings.)
  182.  
  183.     -strip-path
  184.                 Strip the path of filenames in error messages.
  185.                 Error messages may look more convenient to some people that
  186.                 way, but using this together with message browsers or
  187.                 similar programs could cause trouble.
  188.  
  189.     -cpp-comments
  190.                 Allow C++ style comments (not ISO89 conforming).
  191.  
  192.     -+          Alias for -cpp-comments
  193.  
  194.     -no-trigraphs
  195.                 Do not recognize trigraphs (not ISO conforming).
  196.  
  197.     -E          Only preprocess the file and write the preprocessed
  198.                 source to <file>.i.
  199.  
  200.     -dontkeep-initialized-data
  201.                 By default vbcc keeps all data of initializations in memory
  202.                 during the whole compilation (it can sometimes make use
  203.                 of this when optimizing). This can take some amount of
  204.                 memory, though. If this option is specified, vbcc does not
  205.                 keep this data in memory and uses less memory.
  206.                 This has not yet been tested very well.
  207.  
  208.  
  209.     The assembler output will be saved to file.asm (if file already contained
  210.     a suffix, this will first be removed; same applies to .ic1/.ic2)
  211.  
  212.  
  213. SOME INTERNALS
  214.  
  215.     I try to make vbcc as ANSI compliant as possible, so I am only mentioning
  216.     some things I consider interesting.
  217.  
  218.  
  219. ERRORS/WARNINGS
  220.  
  221.     vbcc knows the following kinds of messages:
  222.  
  223.     fatal errors        Something is badly wrong and further compilation is
  224.                         impossible or pointless. vbcc will abort.
  225.                         E.g. no source file or really corrupt source.
  226.  
  227.     errors              There was an error and vbcc cannot generate useful
  228.                         code. Compilation continues, but no code will be
  229.                         generated.
  230.                         E.g. unknown identifiers.
  231.  
  232.     warnings (1)        Warnings with ANSI-violations. The program is not
  233.                         ANSI-conforming, but vbcc will generate code that
  234.                         could be what you want (or not).
  235.                         E.g. missing semicolon.
  236.  
  237.     warnings (2)        The code has no ANSI-violations, but contains some
  238.                         strange things you should perhaps look at.
  239.                         E.g. unused variables.
  240.  
  241.     Errors or the first kind of warnings are always displayed and cannot
  242.     be suppressed.
  243.  
  244.     Only some warnings of the second kind are turned on by default.
  245.     Many of them are very useful for some but annoying to others, and
  246.     their usability may depend on programming style. As I do not want
  247.     to force anyone to a certain style, I recommend everyone to find
  248.     their own preferences.
  249.  
  250.     A good way to do this is starting with all warnings turned on by
  251.     -warn=-1. So you will see all possible warnings. Now everytime you
  252.     get a warning you do not find useful, turn that one off with
  253.     -dontwarn=n.
  254.     The file errors.doc contains a list of all errors/warnings, sometimes
  255.     with more detailed descriptions. This might be very useful, too.
  256.  
  257.     See the docs on your frontend on how to configure it to your
  258.     preferences.
  259.  
  260.  
  261. DATA TYPES
  262.  
  263.     vbcc can handle the following atomic data types:
  264.  
  265.     signed/unsigned char/short/int/long  (signed is always default)
  266.     float/double  (long double is always the same as double)
  267.  
  268.     However several of them can be identical in certain implementations.
  269.  
  270.  
  271. OPTIMIZATIONS
  272.  
  273.     vbcc can compile with or without global optimizations.
  274.     But note that the optimizer is not yet finished and has not been
  275.     tested much. So only use it with care.
  276.  
  277.     In the first compilation phase every function is parsed into a tree
  278.     structure one expression after the other. Then type-checking and some
  279.     minor optimizations like constant-folding or some algebraic
  280.     simplifications are done on the trees.
  281.     This phase of the translation is identical in optimizing and
  282.     non-optimizing compilation.
  283.  
  284.     Then intermediate code is generated from the trees. In non-optimizing
  285.     compilation temporaries needed to evaluate the expression are
  286.     immediately assigned to registers, if possible. In optimizing
  287.     compilation, a new variable is generated for each temporary required.
  288.     Also for certain constructs like loops, different intermediate code
  289.     is produced in optimizing compilation.
  290.     Some minor optimizations are performed while generating the intermediate
  291.     code (simple elimination of unreachable code, some optimizations on
  292.     branches etc.).
  293.  
  294.     After intermediate code for the whole function has been generated
  295.     simple register allocation may be done in non-optimizing compilation
  296.     if bit 1 has been set in the -O option.
  297.     After that, the intermediate code is passed to the code generator and
  298.     then all memory for the function, its variables etc. is freed.
  299.  
  300.     In optimizing compilation flowgraphs are constructed, data flow analysis
  301.     is performed and many passes are made over the function's intermediate
  302.     code. Code may be moved around, new variables may be added, other
  303.     variables removed etc. etc. (for more detailed information on the
  304.     performed optimizations look at the description for the -O option
  305.     below).
  306.  
  307.     Many of the optimization routines depend on each other and if one
  308.     routine finds an optimization, this often enables other routines to
  309.     find further ones. Also some routines only do a first step and let
  310.     other routines 'clean up' afterwards. Because of this, vbcc usually
  311.     makes many passes until no further optimizations are found.
  312.     To avoid possible extremely long optimization times, the number of
  313.     those passes can be limited with the -maxoptpasses=n option (the
  314.     default value is max. 10 passes).
  315.  
  316.     Now it will be decided if the compiled function is a candidate for
  317.     inlining. In this case the intermediate code, as well as the data
  318.     structures for the local variables, will be copied and stored until
  319.     compilation of the entire translation-unit has finished.
  320.  
  321.     After those phases, register allocation should be done. As temporaries
  322.     have not been assigned to registers up to this point, register
  323.     allocation is crucial in optimizing compilation (note that some flags
  324.     MUST be turned on).
  325.  
  326.     Note that optimizing compilation can take MUCH more time and needs
  327.     MUCH more memory. It is hard to predict how much time and space it
  328.     needs, but usually it roughly depends on length of a function (time
  329.     and space needed will usually increase more than linear with the
  330.     length of a function).
  331.  
  332.  
  333.     At the moment the following bits in the -O option are recognized:
  334.  
  335.  
  336.     Bit 0 (1)           Register allocation
  337.  
  338.     This is the only flag that has any effect in non-optimizing compilation.
  339.  
  340.     In non-optimizing compilation, any registers that have never been used
  341.     for temporaries in this function are used for register variables in a
  342.     simple way.
  343.     For each variable, a priority to registerize it is computed (this has
  344.     already been done during generation of intermediate code). This value
  345.     usually reflects how much can be gained by putting it in a register.
  346.     Then, for every free register, the variable with the highest priority
  347.     that can be stored in that register is assigned that register for
  348.     the entire function.
  349.     This improves the generated code quite a bit.
  350.  
  351.     In optimizing compilation several passes are made:
  352.  
  353.     - First, all temporaries are assigned to registers in basic blocks.
  354.       Temporaries are recognized by utilising data flow information on
  355.       active variables, and one variable can be a temporary at one or
  356.       several points although it is alive over several basic blocks at
  357.       another point.
  358.  
  359.     - Then vbcc computes approximate savings that can be obtained by
  360.       holding a variable in a register within a certain program region
  361.       (usually a loop) and assigns the most used variables to registers
  362.       within this region.
  363.       Information on the function's loop structure and active variables
  364.       are used.
  365.  
  366.  
  367.     Bit 1 (2)           activate optimizing compilation
  368.  
  369.     This flag turns on the optimizer. If it is set to zero, no global
  370.     optimizations will be performed, no matter what the other flags are set
  371.     to.
  372.     When turned on, slightly different intermediate code will be generated
  373.     by the first translation phases.
  374.     Also the following optimizations are performed:
  375.  
  376.     - A flow graph is constructed and unused labels are deleted.
  377.  
  378.     - Unreachable code is eliminated.
  379.  
  380.     - Jump optimizations are performed.
  381.  
  382.     - Several peephole optimizations, like constant folding and algebraic
  383.       simplifications, are performed on the intermediate code.
  384.  
  385.     - Identical statements at the beginning/end of basic blocks are
  386.       moved to the successors/predecessors under certain conditions.
  387.  
  388.  
  389.     Bit 2 (4)           common subexpression elimination
  390.  
  391.     The intermediate code is scanned for common subexpressions that can be
  392.     eliminated. Also copy propagation is performed.
  393.     This can be done only within basic blocks or over the whole function,
  394.     depending on bit 5.
  395.     If global cse is selected, data flow analysis for available expressions
  396.     and available copies is performed.
  397.  
  398.     Note that the local versions of these optimizations are only restricted
  399.     versions of the global ones. They operate on the intermediate code
  400.     rather than on trees and therefore are slower than they could be
  401.     on compilers that only perform local versions.
  402.  
  403.  
  404.     Bit 3 (8)           constant propagation
  405.  
  406.     Variables which are known to have a constant value at one time are
  407.     replaced by constants.
  408.     This can be done only within basic blocks or over the whole function,
  409.     depending on bit 5.
  410.     If global constant propagation is selected, data flow analysis for
  411.     reaching definitions is performed.
  412.  
  413.     Note that the local versions of these optimizations are only restricted
  414.     versions of the global ones. They operate on the intermediate code
  415.     rather than on trees and therefore are slower than they could be
  416.     on compilers that only perform local versions.
  417.  
  418.  
  419.     Bit 4 (16)          elimination of dead code
  420.  
  421.     Code which computes a value that is never used will be eliminated.
  422.     Lots of dead code may be generated during the process of optimizing,
  423.     so this optimizations is crucial.
  424.  
  425.  
  426.     Bit 5 (32)          global optimization
  427.  
  428.     Some optimizations are available in local and global versions. This
  429.     flag turns on the global versions.
  430.     At the moment, this effects common subexpression elimination, copy
  431.     propagation, constant propagation and loop optimizations.
  432.  
  433.     Also, if this flag is not turned on, only one optimization pass is
  434.     done, whereas several are done if it is turned on.
  435.  
  436.     Not turning on this flag results in worse code and often shorter
  437.     compile time. However, there are cases where this increases compile
  438.     time.
  439.  
  440.  
  441.     Bit 6 (64)          reserved for future use
  442.  
  443.  
  444.     Bit 7 (128)         loop optimizations
  445.  
  446.     vbcc will try to identify loops and perform the following optimizations
  447.     on the loops it finds:
  448.  
  449.     - frequency-reduction: Loop-invariant operations will be moved out of
  450.                            the loop.
  451.  
  452.     - strength-reduction:  Linear functions of induction variables will be
  453.                            replaced by additional induction variables.
  454.  
  455.     These only work in conjunction with bit 5 (32).
  456.  
  457.  
  458.     Bit 8 (256)         merge variable space
  459.  
  460.     vbcc tries to place variables at the same memory addresses if possible.
  461.  
  462.  
  463.     Bit 9 (512)         reserved for future use
  464.  
  465.  
  466.     Bit 10 (1024)       obsolete
  467.  
  468.  
  469.     Bit 11 (2048)       loop-unrolling, induction-variable-elimination
  470.  
  471.     vbcc tries to unroll certain loops. Only works together with bit 5 (32)
  472.     and bit 7 (128). By default a loop is only unrolled if the number
  473.     of iterations can be determined at compile time. If -unroll-all is
  474.     specified, loops are also unrolled if the number of iterations can be
  475.     calculated at loop entry.
  476.     With -unroll-size you can specify how many intermediate instructions
  477.     the unrolled loop should have at most.
  478.  
  479.     Additionaly, certain loops will be changed to count down to zero and
  480.     the original induction variable will be removed.
  481.  
  482.  
  483.     Bit 12 (4096)       function inlining
  484.  
  485.     If the code of functions called is visible to the compiler and meets
  486.     certain conditions (mainly adjustable by -inline-size), then calls to this
  487.     function are replaced with the function's body.
  488.  
  489.     This way, constant arguments can be propagated across the function
  490.     and certain parts of the function may be omitted. Also common
  491.     subexpressions across the functions can be eliminated.
  492.  
  493.     An inlined function call is about the same as a macro expansion (but
  494.     safer).
  495.  
  496.     Depending on the -inline-depth option also nested calls (including
  497.     recursive function calls) are inlined up to a certain depth. Also,
  498.     with cross-module-optimizations functions from other files can be
  499.     inlined.
  500.  
  501.     Also look at #pragma only-inline in the following section.
  502.  
  503.  
  504.     Bit 12 (16384)      cross-module optimization
  505.  
  506.     With this bit set vbcc will read several source files at once and look
  507.     at them all when optimizing and emitting code. The benefits are:
  508.  
  509.     - many optimizations will benefit from cross-module data-flow-analysis
  510.     - functions can be inlined across modules
  511.     - type-checking will be performed across modules
  512.     - placement of objects and functions can be improved
  513.     - more unused objects/functions can be eliminated
  514.  
  515.     However, the memory-usage will increase significantly.
  516.  
  517.  
  518.     Also look at the documentation for the target-dependant part of vbcc.
  519.     There may be additional machine specific optimization options.
  520.  
  521.  
  522. EXTENSIONS
  523.  
  524.     #pragma:
  525.  
  526.       At the moment vbcc accepts the following #pragma-directives:
  527.  
  528.       #pragma printflike <function>   This tells vbcc to handle <function>
  529.       #pragma scanflike <function>    specially.
  530.                                       <function> must be an already declared
  531.                                       function, with external linkage, that
  532.                                       takes a variable number of arguments
  533.                                       and a const char * as the last fixed
  534.                                       parameter.
  535.                                       If such a function is called with a
  536.                                       string-constant as format-string, vbcc
  537.                                       will check if the arguments seem to
  538.                                       match the format-specifiers in the
  539.                                       format-string, according to the rules
  540.                                       of printf or scanf.
  541.                                       Also, vbcc will replace the call by a
  542.                                       call to a simplified version according
  543.                                       to the following rules, if such a
  544.                                       function has been declared with external
  545.                                       linkage:
  546.  
  547.                                       If no format-specifiers are used at all,
  548.                                       __v0<function> will be called.
  549.  
  550.                                       If no qualifiers are used and only
  551.                                       d,i,x,X,o,s,c are used, __v1<function>
  552.                                       will be called.
  553.  
  554.                                       If no floating-point arguments are used,
  555.                                       __v2<function> will be called.
  556.  
  557.  
  558.       #pragma only-inline on          The following functions are prepared for
  559.                                       inlining, but no code is generated. This
  560.                                       can be used e.g. in header-files to
  561.                                       supply inline versions of certain
  562.                                       functions.
  563.                                       -inline-size is ignored in this mode -
  564.                                       every function gets prepared for
  565.                                       inlining.
  566.  
  567.                                       Do not use this with functions that have
  568.                                       local static variables!
  569.  
  570.       #pragma only-inline off         The following functions are translated
  571.                                       as usual again.
  572.  
  573.       #pragma opt <n>                 Sets the optimization options to <n>
  574.                                       (similar to -O=<n>) for the following
  575.                                       functions.
  576.                                       Never use this inside a function!
  577.  
  578.       #pragma type <expr>             Write the type of <expr> to stdout.
  579.                                       This is mainly intended for testing.
  580.  
  581.       #pragma tree <expr>             Write the parse-tree of <expr> to stdout.
  582.                                       This is mainly intended for testing.
  583.  
  584.  
  585.     Register parameters:
  586.  
  587.       If the parameters for certain functions should be passed in certain
  588.       registers, you can specify the registers with __reg("<reg>") in the
  589.       prototype, e.g.
  590.  
  591.         void f(__reg("d0") int x, __reg("a0") char *y) { ... }
  592.  
  593.       The names of the available registers depend on the code generator.
  594.       Note that a matching prototype must be in scope when calling such
  595.       a function - or wrong code will be generated.
  596.       Therefore it is not useful to use register parameters in an old-style
  597.       function-definition.
  598.  
  599.       If the code generator cannot handle the specified register for a
  600.       certain type, this will cause an error. Note that this may happen
  601.       although the register could store that type, if the code generator
  602.       does not know about it.
  603.  
  604.       Also note that this may force vbcc to create worse code.
  605.  
  606.       __reg is not recognized when ANSI/ISO mode is turned on.
  607.  
  608.  
  609.     Inline-assembly-functions:
  610.  
  611.       Only use them if you know what you are doing!
  612.  
  613.       A function-declaration may be followed by '=' and a string-constant.
  614.       If a function is called with such a declaration in scope, then no
  615.       function-call will be generated but the string-constant will be
  616.       inserted in the assembly-output.
  617.       Otherwise the compiler and optimizer will treat this like a
  618.       function-call, i.e. the inline-assembly must not modify any callee-save
  619.       registers without restoring them. (In the future there will be
  620.       possibilities to specify side-effects of function-calls to prevent the
  621.       compiler from having to use worst-case-assumptions.)
  622.  
  623.       Example:
  624.  
  625.         double sin(__reg("fp0") double) = "\tfsin.x\tfp0\n";
  626.  
  627.       Inline-assembly-functions are not recognized when ANSI/ISO mode is
  628.       turned on.
  629.  
  630.  
  631.     Target-secific variable attributes
  632.  
  633.       Some targets may offer additional options which are syntactically
  634.       similar to storage-class-specifiers. Multiple specification of an
  635.       attribute or redeclaration of a variable with a differing setting of
  636.       an attribute will cause a warning.
  637.  
  638.       However, no further checkings will be applied. E.g. if an attribute
  639.       is given to a variable it is not applicable to they will usually be
  640.       silently ignored.
  641.  
  642.       Further details may be found in the target-specific documentation.
  643.  
  644.       Target-specific variable attributes are not recognized when ANSI/ISO
  645.       mode is turned on.
  646.  
  647.  
  648.     Variable attributes
  649.  
  650.       Additionally to the extension above, there is also a more general
  651.       way to specify variable attributes, using the syntax
  652.  
  653.         __vattr("<string-literal>")
  654.  
  655.       which has to be placed like a storage-class-specifier.
  656.  
  657.       The attribute __entry (expanding to __vattr("entry")) is usable
  658.       independend of the backend. A variable or function with external
  659.       linkage and attributed this way will not be eliminated when -final
  660.       is used. It is useful, e.g. for interrupt-handlers.
  661.  
  662.       Additional attributes may be provided by certain backends.
  663.  
  664.  
  665.     Type attributes
  666.  
  667.       Types may be qualified by additional attributes using
  668.  
  669.         __attr(<string-literal>)
  670.  
  671.       which has to placed syntactically like a type-qualifier (e.g. const).
  672.       As example, some backends know the attributes "near" and "far".
  673.  
  674.       Declaration of a pointer to a near-qualified character would be
  675.  
  676.         __attr("far") char *p;
  677.  
  678.       whereas
  679.  
  680.         char * __attr("far") p;
  681.  
  682.       is a near-qualified pointer to an unqualified char.
  683.  
  684.       Backends may provide builtin #defines for easier access, e.g.
  685.       allow __far instead of __attr("far").
  686.  
  687.  
  688.     __typeof:
  689.  
  690.       __typeof is syntactically equivalent to sizeof, but its result is of
  691.       type int and is a number representing the type of its argument.
  692.       This may be necessary for implementing stdarg.h.
  693.  
  694.  
  695. KNOWN PROBLEMS
  696.  
  697.     Some known target-independant problems of vbcc at the moment:
  698.  
  699.     - Bitfields are not really supported (they are always used as int).
  700.  
  701.     - 'volatile' is sometimes ignored by the optimizer.
  702.  
  703.     - Some exotic scope-rules are not handled correctly.
  704.  
  705.     - Debugging-infos cannot be used on higher optimization-levels.
  706.  
  707.     - Only one strategy for switch-statements is available.
  708.  
  709.     - String-constants are not merged.
  710.  
  711.  
  712. CREDITS
  713.  
  714.     All those who wrote parts of the vbcc distribution, made suggestions,
  715.     answered my questions, tested vbcc, reported errors or were otherwise
  716.     involved in the development of vbcc (in descending alphabetical order,
  717.     under work, not complete):
  718.  
  719.     Frank Wille
  720.     Gary Watson
  721.     Johnny Tevessen
  722.     Ralph Schmidt
  723.     Markus Schmidinger
  724.     Thorsten Schaaps
  725.     Anton Rolls
  726.     Michaela Pruess
  727.     Thomas Pornin
  728.     Joerg Plate
  729.     Gilles Pirio
  730.     Bartlomiej Pater
  731.     Gunther Nikl
  732.     Robert Claus Mueller
  733.     Joern Maass
  734.     Aki M Laukkanen
  735.     Kai Kohlmorgen
  736.     Uwe Klinger
  737.     Andreas Kleinert
  738.     Julian Kinraid
  739.     Acereda Macia Jorge
  740.     Dirk Holtwick
  741.     Tim Hanson
  742.     Kasper Graversen
  743.     Jens Granseuer
  744.     Volker Graf
  745.     Marcus Geelnard
  746.     Matthias Fleischer
  747.     Alexander Fichtner
  748.     Olivier Fabre
  749.     Robert Ennals
  750.     Thomas Dorn
  751.     Walter Doerwald
  752.     Aaron Digulla
  753.     Lars Dannenberg
  754.     Sam Crow
  755.     Michael Bode
  756.     Michael Bauer
  757.     Juergen Barthelmann
  758.     Thomas Arnhold
  759.     Alkinoos Alexandros Argiropoulos
  760.     Thomas Aglassinger
  761.  
  762.  
  763. Volker Barthelmann                                      vb@compilers.de
  764.  
  765.