home *** CD-ROM | disk | FTP | other *** search
/ IRIS Development Option 6.2 / IRIS_Development_Option_6.2_814-0478-001.iso / relnotes / c_dev / ch3.z / ch3
Text File  |  1996-03-14  |  17KB  |  528 lines

  1.  
  2.  
  3.  
  4.                                                - 1 -
  5.  
  6.  
  7.  
  8.                     6.2 ANSI C Release Notes
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.                                                - 2 -
  69.  
  70.  
  71.  
  72.                     DDDDooooccccuuuummmmeeeennnntttt NNNNuuuummmmbbbbeeeerrrr 000000007777----1111666655559999----000011110000
  73.  
  74.  
  75.                     3.  _N_e_w__F_e_a_t_u_r_e_s__o_f__T_h_i_s__R_e_l_e_a_s_e
  76.  
  77.                     This chapter contains two sections.
  78.  
  79.                     The first details significant changes between
  80.                     the 3.18/3.19 and 6.2 C compiler releases. The
  81.                     second details changes between the 6.1 and 6.2 C
  82.                     compiler releases.
  83.  
  84.  
  85.                     3.1  _C_h_a_n_g_e_s _B_e_t_w_e_e_n _t_h_e _3._1_9 _a_n_d _6._2 _C_o_m_p_i_l_e_r
  86.                          _R_e_l_e_a_s_e_s
  87.  
  88.  
  89.                     Whereas the 3.19 C Compiler release supported
  90.                     compilation only in 32-bit mode, the 6.2
  91.                     Compiler release supports compilation in three
  92.                     modes: 32-bit (-32), 64-bit  (-64) and High
  93.                     Performance 32-bit (-n32).  Each compilation
  94.                     mode can be explicitly set on the command line
  95.                     or through the use of the SGI_ABI environment
  96.                     variable.  Thus, the following command:
  97.  
  98.                          %setenv SGI_ABI -64
  99.  
  100.                     sets the default compilation mode to be -64.
  101.  
  102.  
  103.                     3.1.1  _3_2_-_b_i_t__C_o_m_p_i_l_a_t_i_o_n_s   The default
  104.                     compilation mode on all non-R8000 systems is
  105.                     -_3_2.  In 32-bit mode, there are three
  106.                     differences between the 6.2 C compiler and the
  107.                     3.19 C compiler:
  108.  
  109.                        +o Starting with this release, default 32-bit
  110.                          compilations will produce mips2 objects
  111.                          instead of the mips1 objects generated in
  112.                          previous releases.
  113.  
  114.                        +o Common object file format (COFF) is no
  115.                          longer supported.
  116.  
  117.                        +o Use of the -_c compilation flag is no longer
  118.                          compatible with -_O_3 -_3_2. Instead of -_c use
  119.                          -_j.  For more information about these
  120.                          flags, please check the _c_c(1) man pages.
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.                                                - 3 -
  135.  
  136.  
  137.  
  138.                     32-bit mode is limited to generating code for
  139.                     only the MIPS2 and MIPS1 ABI's.
  140.  
  141.  
  142.                     3.1.2  _6_4_-_b_i_t__C_o_m_p_i_l_a_t_i_o_n_s   The default
  143.                     compilation mode on R8000 systems is -_6_4.  All
  144.                     SGI platforms support the development of -_6_4
  145.                     applications, but the subsystems containing the
  146.                     appropriate libraries are not always installed
  147.                     by default.  During installation, you may have
  148.                     to select subsystems with names like
  149.                     _p_r_o_d_u_c_t._s_w_6_4 for -_6_4 libraries.
  150.  
  151.                     The 64-bit compilation mode employs the LP64
  152.                     model, in which pointers and _l_o_n_g integral types
  153.                     are 64 bits wide.  These new language semantics
  154.                     may require source modification when porting old
  155.                     code to a 64-bit system.  Both _N_U_L_L and _s_i_z_e__t,
  156.                     among other types in the standard header files,
  157.                     become 64 bits wide in 64-bit mode.
  158.  
  159.                     The new 64-bit ABI changes the subprogram
  160.                     interface protocol in such a manner that
  161.                     inconsistencies between the use and definition
  162.                     of subprograms may produce unpredictable
  163.                     results.  NNNNooootttteeee:::: Always use a prototyped function
  164.                     in the scope of a correctly prototyped
  165.                     declaration of the function, and never mix
  166.                     prototyped and non-prototyped declarations for
  167.                     the same function. The new ABI also resulted in
  168.                     changes to the <_s_t_d_a_r_g._h> and <_v_a_r_a_r_g_s._h>
  169.                     macros, which make them incompatible with their
  170.                     -_3_2 counterparts.
  171.  
  172.                     The -_6_4 compiler has a different front-end and
  173.                     back-end from the -_3_2 compiler, and the
  174.                     supported _c_c command-line options vary between
  175.                     the two modes of compilation.  In particular,
  176.                     the -_w_l_i_n_t option is not available in 64-bit
  177.                     mode; instead, it  provides a fuller set of
  178.                     diagnostics with the -_f_u_l_l_w_a_r_n option.  Also, a
  179.                     variety of new options are provided in -_6_4 mode
  180.                     to tailor optimizations for a particular
  181.                     application.  See the _c_c manual pages for
  182.                     further details.
  183.  
  184.                     The set of diagnostic message numbers (and hence
  185.                     the application of the -_w_o_f_f command-line
  186.                     option), are completely different for -_6_4 and
  187.                     -_3_2 mode.
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.                                                - 4 -
  201.  
  202.  
  203.  
  204.                     The 64-bit mode compiler allows inlining of
  205.                     arbitrary or individually specified functions,
  206.                     to a given depth of nesting, by means of the
  207.                     front-end command-line options -_W_f,-_i_n_l_i_n_e
  208.                     (inline any function), -_W_f,-_i_n_l_i_n_e__d_e_p_t_h=_n
  209.                     (inline functions up to _n levels of nested
  210.                     calls; the default is _n==0), -_W_f,-
  211.                     _i_n_l_i_n_e=_F_1:_F_2:...:_F_n (inline functions named _F_1,
  212.                     _F_2, ..., and _F_n).
  213.  
  214.                     An extended set of intrinsic functions are
  215.                     supported in 64-bit mode.  These are indicated
  216.                     for a function _o_p as:
  217.  
  218.                          #pragma intrinsic(_o_p)
  219.  
  220.                     in <_m_a_t_h._h>, <_s_t_r_i_n_g._h>, <_c_u_r_s_e_s._h>, and
  221.                     <_s_t_d_i_o._h>.  The intrinsic functions in
  222.                     <_c_u_r_s_e_s._h> and <_s_t_d_i_o._h> will only be inlined in
  223.                     terms of more specialized functions when the
  224.                     command-line option -_O_P_T:_f_a_s_t__i_o is used.
  225.                     Otherwise, the handling of intrinsics is the
  226.                     same in 64-bit mode as in 32-bit mode.
  227.  
  228.                     In 64-bit mode, the "typedef" storage class
  229.                     specifier cannot apply to a prototyped
  230.                     parameter.  In 32-bit mode this is allowed, but
  231.                     with a warning and ambiguous semantics: should
  232.                     we treat it as a typedef and a parameter or
  233.                     exclusively one or the other?  Note that a
  234.                     typedef declaration in a list of unprototyped
  235.                     parameter declarations is acceptable in -_c_c_k_r
  236.                     mode, both for 32-bit and 64-bit compilations.
  237.                     (ANSI/ISO 9899-1990: sections 6.7.1 and
  238.                     6.5.4.3).
  239.  
  240.                     Error diagnostics are issued for implicit
  241.                     conversions between integral types and pointer
  242.                     types, as well as between integral types and
  243.                     struct types, in ANSI conformance modes (-_a_n_s_i,
  244.                     -_x_a_n_s_i, -_a_n_s_i_p_o_s_i_x).  We have no intention of
  245.                     allowing such (extremely error-prone and non-
  246.                     portable) implicit conversions in any ANSI
  247.                     conformance mode, and the error diagnostics will
  248.                     indicate source code that needs to be fixed.
  249.                     Note that such implicit conversions may compile
  250.                     with warnings instead of errors in -_c_c_k_r mode.
  251.                     The following will produce an error message in
  252.                     all modes:
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.                                                - 5 -
  267.  
  268.  
  269.  
  270.                          struct X {int i;} *j, *k;
  271.                          main()
  272.                          {
  273.                             j = k?k:k?0:0;
  274.                          }
  275.  
  276.                     since k?0:0 always will be considered an int, as
  277.                     opposed to a ``null pointer'' expression, which
  278.                     is incompatible with the pointer operand k.
  279.  
  280.                     There are also other differences in the
  281.                     diagnostics provided in 32-bit versus 64-bit
  282.                     mode, and we are generally a little stricter in
  283.                     enforcing ANSI C rules in 64-bit mode.
  284.  
  285.                     64-bit mode is limited to generating code for
  286.                     only the MIPS4 and MIPS3 ABI's.
  287.  
  288.                     Refer to the _M_I_P_S_p_r_o _C_o_m_p_i_l_i_n_g, _D_e_b_u_g_g_i_n_g _a_n_d
  289.                     _P_e_r_f_o_r_m_a_n_c_e _T_u_n_i_n_g _G_u_i_d_e, the _M_I_P_S_p_r_o _6_4-_B_i_t
  290.                     _P_o_r_t_i_n_g _a_n_d _T_r_a_n_s_i_t_i_o_n _G_u_i_d_e, and the _c_c(1) man
  291.                     pages for a full description of the differences
  292.                     between 32-bit and 64-bit compilation.
  293.  
  294.  
  295.                     3.1.3  _N_3_2__C_o_m_p_i_l_a_t_i_o_n_s   Compilation in the
  296.                     High Performance 32-bit (N32) mode must be
  297.                     specified either at the command line (i.e. %cc
  298.                     -n32 foo.c) or through the use of the SGI_ABI
  299.                     environment variable (i.e. %setenv SGI_ABI
  300.                     -n32). It is not the default compilation mode on
  301.                     any platform.
  302.  
  303.                     N32 incorporates data type sizes from 32-bit
  304.                     mode with calling conventions and code
  305.                     generation from 64-bit mode. Thus, it will be
  306.                     easier to port 32-bit applications to N32 rather
  307.                     than to 64-bits, but N32 retains the performance
  308.                     benefits of MIPS IV instructions for floating
  309.                     point intensive applications.
  310.  
  311.                     The -_n_3_2 compiler has the same front-end and
  312.                     back-end as the -_6_4 compiler and the supported
  313.                     _c_c command-line options and diagnostic messages
  314.                     are identical under these two modes of
  315.                     compilation.
  316.  
  317.                     N32 compilations are limited to generating code
  318.                     for only the MIPS4 and MIPS3 ABI's.
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.                                                - 6 -
  333.  
  334.  
  335.  
  336.                     For more information about N32, please consult
  337.                     the _M_I_P_S_p_r_o _N_3_2 _A_B_I _H_a_n_d_b_o_o_k.
  338.  
  339.  
  340.                     3.1.4  _C_u_s_t_o_m__M_e_m_o_r_y__A_l_l_o_c_a_t_o_r   Bundled with
  341.                     this release is the customalloc memory
  342.                     allocation package written by Dirk Grunwald and
  343.                     Benjamin Zorn of the University of Colorado at
  344.                     Boulder. It is packaged in the
  345.                     _c__d_e_v._s_r_c._c_u_s_t_o_m_a_l_l_o_c subsystem which also
  346.                     contains the source file for its man page. The
  347.                     man page provides additonal information about
  348.                     this memory allocator and can be viewed by
  349.                     executing the following commands:
  350.  
  351.                          %cd usr/share/src/customalloc
  352.                          %man -d customalloc.man
  353.  
  354.  
  355.  
  356.                     3.2  _C_h_a_n_g_e_s _B_e_t_w_e_e_n _t_h_e _6._1 _a_n_d _6._2 _C_o_m_p_i_l_e_r
  357.                          _R_e_l_e_a_s_e_s
  358.  
  359.  
  360.                     Whereas the 6.1 C Compiler release supported
  361.                     compilation only in 32-bit mode and 64-bit mode,
  362.                     the 6.2 Compiler release supports these two
  363.                     modes and introduces the High Performance 32-bit
  364.                     (-n32).  Each compilation mode can be explicitly
  365.                     set on the command line or through the use of
  366.                     the SGI_ABI environment variable.  Thus, the
  367.                     following command:
  368.  
  369.                          %setenv SGI_ABI -n32
  370.  
  371.                     sets the default compilation mode to be -n32.
  372.  
  373.                     This section highlights the differences between
  374.                     the 6.2 and 6.1 C Compiler releases under the
  375.                     32-bit and 64-bit modes. For an introduction to
  376.                     N32 please refer to the section above.
  377.  
  378.  
  379.                     3.2.1  _3_2_-_b_i_t__C_o_m_p_i_l_a_t_i_o_n_s   In 32-bit mode,
  380.                     there are two differences between the 6.2 C
  381.                     compiler and the 6.1 C compiler:
  382.  
  383.                        +o Starting with this release, default 32-bit
  384.                          compilations will produce mips2 objects
  385.                          instead of the mips1 objects generated in
  386.                          previous releases.
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.                                                - 7 -
  399.  
  400.  
  401.  
  402.                        +o Common object file format (COFF) is no
  403.                          longer supported.
  404.                     32-bit mode is limited to generating code for
  405.                     only the MIPS2 and MIPS1 ABI's.
  406.  
  407.  
  408.                     3.2.2  _6_4_-_b_i_t__C_o_m_p_i_l_a_t_i_o_n_s   In 64-bit mode,
  409.                     there are three differences between the 6.2 C
  410.                     compiler and the 6.1 C compiler:
  411.  
  412.                        +o The 6.2 release of the ANSI C compiler is
  413.                          incompatible with 6.1 release in the way
  414.                          small (4 bytes or less) C structures and
  415.                          unions are passed as parameters when
  416.                          compiled -64 or -n32. As a result, both the
  417.                          caller and the callee functions must be
  418.                          compiled with the same version of the
  419.                          compiler, if they use small structures or
  420.                          unions as parameters.  Under our 64-bit and
  421.                          n32 calling conventions, small structures
  422.                          or unions are left justified when passed as
  423.                          parameters. The 6.1 release of the compiler
  424.                          implemented the convention incorrectly in
  425.                          code of both the callee and caller
  426.                          functions, but in a consistent way (Code
  427.                          passing small structs still "worked"). This
  428.                          bug has been fixed, but this results in the
  429.                          incompatibility described above.
  430.  
  431.                        +o The default level of enabled exceptions for
  432.                          speculative code motion (-TENV:X=n) has
  433.                          been changed to X=1 at all optimization
  434.                          levels. This change was made to provide the
  435.                          most uniform behavior across all SGI
  436.                          platforms.  For the 6.1 release, this level
  437.                          was documented to be X=1, but implemented
  438.                          as X=3. As a result, some applications
  439.                          running on R8000 systems may experience
  440.                          performance degradation if they are
  441.                          recompiled with the default flags. If this
  442.                          performance degradation is significant, you
  443.                          should recompile with -TENV:X=3 explicitly
  444.                          set in your compilation command line.  For
  445.                          more information about this flag, please
  446.                          check the _c_c(1) man pages.
  447.  
  448.                        +o New processor specific fast floating point
  449.                          math libraries (libfastm) are being
  450.                          provided for the R8000, R10000 and R5000.
  451.                          Their locations can be added to the linker
  452.                          library search path by adding -_r_8_0_0_0,
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.                                                - 8 -
  465.  
  466.  
  467.  
  468.                          -_r_1_0_0_0_0 and -_r_5_0_0_0 to your compilation
  469.                          line.  For more information about these
  470.                          flags, please check the _c_c(1) man pages.
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.