User Commands acc(1) NAME acc - C compiler SYNOPSIS acc [ -Aname [(tokens) ] ] [ -a ] [ -B [static|dynamic] ] [ -C ] [ -c ] [ -cg89 ] [ -cg92 ] [ -Dname [=token ] ] [ -dalign ] [ -d [y|n] ] [ -dryrun ] [ -E ] [ -fast ] [ -fd ] [ -flags ] [ -fnonstd ] [ -fns ] [ -fround=r ] [ -fsimple[=n] ] [ -fsingle ] [ -ftrap=t ] [ -G ] [ -g ] [ -H ] [ -help ] [ -hname ] [ -Idir ] [ -inline=[f1,...,fn] ] [ -KPIC ] [ -Kpic ] [ -keeptmp ] [ -Ldir ] [ -lname ] [ -libmieee ] [ -libmil ] [ -M ] [ -misalign ] [ -misalign2 ] [ -mt ] [ -native ] [ -nolib ] [ -nolibmil ] [ -noqueue ] [ -O[1|2|3|4|5] ] [ -o outputfile ] [ -P ] [ -p ] [ -pg ] [ -PIC ] [ -pic ] [ -Qdir dir ] [ -Qoption c arg ] [ -Qpath dir ] [ -Qproduce srctype ] [ -qdir dir ] [ -qoption c arg ] [ -qpath dir ] [ -qproduce srctype ] [ -R dir[:dir] ] [ -S ] [ -s ] [ -sb ] [ -sbfast ] [ -strconst ] [ -temp=dir ] [ -time ] [ -Uname ] [ -unroll =n ] [ -V ] [ -v ] [ -vc ] [ -w ] [ -X [a |c |s |t ]] [ -xa ] [ -xarch=a ] [ -xautopar ] [ -xcache=c ] [ -xCC ] [ -xcg89 ] [ -xcg92 ] [ -xchip=c ] [ -xdepend ] [ -xe ] [ -xexplicitpar ] [ -xF ] [ -xhelp=f ] [ -xildoff ] [ -xildon ] [ -xinline=[f1,...,fn] ] [ -xlibmieee ] [ -xlibmil ] [ -xlicinfo ] [ -xloopinfo ] [ -xM ] [ -xM1 ] [ -xMerge ] [ -xnolib ] [ -xnolibmil ] [ -xO[1|2|3|4|5] ] [ -xP ] [ -xparallel ] [ -xpg ] [ -xprofile=p ] [ -xreduction ] [ -xregs=r ] [ -xrestrict=f ] [ -xs ] [ -xsafe=mem ] [ -xsb ] [ -xsbfast ] [ -xsfpconst ] [ -xspace ] [ -xstrconst ] [ -xtarget=t ] [ -xtemp=dir ] [ -xtime ] [ -xtransition ] [ -xunroll=n ] [ -xvpara ] [ -Y,dir ] [ -Zll ] [ -Zlp ] [ -Ztha ] DESCRIPTION acc (SPARC only) is not intended to be used directly on Solaris 2.x. The sole purpose for making it available on Solaris 2.x is to enable /usr/ucb/cc. The package SUNWscpu must be installed to use this. The options for /usr/ucb/cc are the same as for acc and are described here. acc is the C compiler. It translates programs written in the C programming language into executable load modules, or into relocatable binary programs for subsequent loading with the ld(1) link editor. In addition to the many options, acc accepts several types of filename arguments. For instance, files with names end- ing in .c are taken to be C source programs. They are com- piled, and each resulting object program is placed in the current directory. The object file is named after its source file - the suffix .o replacing .c in the name of the object. In the same way, files whose names end with .s are taken to be assembly source programs. They are assembled, and produce .o files. Filenames ending in .il are taken to be inline expansion code template files; these are used to expand calls to selected routines in-line when code optimi- zation is enabled. See FILES, below for a complete list of compiler-related filename suffixes. Other arguments refer to assembler or loader options, object programs, or object libraries. Unless -c, -S, -E -P or -Qproduce is specified, these programs and libraries, together with the results of any specified compilations or assemblies, are linked (in the order given) to produce an output file named a.out. You can specify a name for the executable by using the -o option. If a single file is compiled and linked all at once, the intermediate files are deleted. OPTIONS When debugging or profiling objects are compiled using the -g or -pg options, respectively, the ld command for linking them should also contain the appropriate option. See ld(1) for link-time options. -a Insert code to count how many times each basic block is executed. This is the old style of basic block profil- ing for tcov. See -xprofile=tcov for information on the new style of profiling and the tcov(1) man page for more details. Invokes a runtime recording mechanism that creates a .d file for every .c file (at normal termination). The .d file accumulates execution data for the corresponding source file. The tcov(1) utility can then be run on the source file to generate statistics about the pro- gram. This option is incompatible with -g . -Aname[(tokens)] Associate name as a predicate with the specified tokens as if by a #assert preprocessing directive. Preassertions: system(unix) cpu(sparc) machine(sparc) The above are not predefined in -Xc mode. If -A is followed by a dash (-) only, it causes all predefined macros (other than those that begin with __) and predefined assertions to be forgotten. -B [static|dynamic] -B dynamic causes the link editor to look for files named libx.so and then for files named libx.a when given the -lx option. -B static causes the link editor to look only for files named libx.a. This option may be specified multiple times on the command line as a toggle. This option and its argument are passed to ld. -C Cause the preprocessor to pass along all comments other than those on preprocessing directive lines. -c Suppress linking with ld(1) and produce a .o file for each source file. A single object file can be named explicitly using the -o option. -cg89 This option is a macro for: =xarch=v7 -xchip=old -xcache=64/32/1. -cg92 This option is a macro for: =xarch=v8 -xchip=super -xcache=16/64/4:1024/64/1. -Dname[=token] Associates name with the specified token as if by a #define preprocessing directive. If no =token is specified, the token 1 is supplied. Predefinitions: sparc sun unix The above are not predefined in -Xc mode. These predefinitions are valid in all modes: __sparc, __unix, __sun, __BUILTIN_VA_ARG_INCR __SUNPRO_C=0x400 __SVR4 __`uname -s` `uname -r` -dalign Generate double-word load/store instructions whenever possible for improved performance. Assumes that all double and long long type data are double-word aligned, and should not be used when correct alignment is not assured. -d [y|n] -dy specifies dynamic linking, which is the default, in the link editor. -dn specifies static linking in the link editor. This option and its argument are passed to ld. -dryrun Show but do not execute the commands constructed by the compilation driver. -E Preprocess only the named C files and send the result to the standard output. The output will contain preprocessing directives for use by the next pass of the compilation system. -fast Select the optimum combination of compilation options for speed. This should provide close to the maximum performance for most realistic applications. Modules compiled with -fast , must also be linked with -fast . It is a convenience option, and it chooses the fastest code generation option available on the compile-time hardware, the optimization level -O2, a set of inline expansion templates, the -fns option, the -ftrap=%none option, and the -dalign option. If you combine -fast with other options, the last specification applies. The code generation option, the optimization level and using inline template files can be overridden by subsequent switches. For example, although the optimization part of -fast is -O2 , the optimization part of -fast -O1 is -O1 . Do not use this option for programs that depend on IEEE standard exception handling; you can get different numerical results, premature program termination, or unexpected SIGFPE signals. -fd Report old-style function definitions and declarations. -flags Print a summary of each compiler option. -fnonstd This option is a macro for -fns and -ftrap=common. -fns Turn on the SPARC nonstandard floating-point mode. The default is the SPARC standard floating-point mode. If you compile one routine with -fns, then compile all the program routines with the -fns option; otherwise, you can get unexpected results. -fround=r Set the IEEE 754 rounding mode that is established at runtime during the program initialization. r must be one of: nearest, tozero, negative, positive. The default is -fround=nearest. The meanings are the same as those for the ieee_flags subroutine. If you compile one routine with -fround=r, compile all the program routines with the same -fround=r option; otherwise, you can get unexpected results. -fsimple[=n] Allow the optimizer to make simplifying assumptions concerning floating-point arithmetic. If n is present, it must be 0, 1, or 2. The defaults are: o With no -fsimple[=n], the compiler uses -fsimple=0. o With only -fsimple, no =n, the compiler uses -fsim- ple=1. -fsimple=0 Permit no simplifying assumptions. Preserve strict IEEE 754 conformance. -fsimple=1 Allow conservative simplifications. The resulting code does not strictly conform to IEEE 754, but numeric results of most programs are unchanged. With -fsimple=1, the optimizer can assume the follow- ing: o The IEEE 754 default rounding/trapping modes do not change after process initialization. o Computations producing no visible result other than potential floating- point exceptions may be deleted. o Computations with Infinity or NaNs as operands need not propagate NaNs to their results. For example, x*0 may be replaced by 0. o Computations do not depend on sign of zero. With -fsimple=1, the optimizer is not allowed to optim- ize completely without regard to roundoff or excep- tions. In particular, a floating-point computation can- not be replaced by one that produces different results with rounding modes held constant at run time. -fast implies -fsimple=1. -fsimple=2 Permit aggressive floating point optimizations that may cause many programs to produce different numeric results due to changes in rounding. For example, permit the optimizer to replace all computations of x/y in a given loop with x*z, where x/y is guaranteed to be evaluated at least once in the loop, z=1/y, and the values of y and z are known to have constant values during execution of the loop. Even with -fsimple=2, the optimizer still is not per- mitted to introduce a floating point exception in a program that otherwise produces none. -fsingle ( -Xt and -Xs modes only). Causes the compiler to evaluate float expressions as single precision rather than double precision. (This option has no effect if the compiler is used in either -Xa or -Xc modes, as float expressions are already evaluated as single pre- cision.) -ftrap=t Set the IEEE 754 trapping mode in effect at startup. t is a comma-separated list that consists of one or more of the following: %all, %none, common, [no%]invalid, [no%]overflow, [no%]underflow, [no%]division, [no%]inexact. The default is -ftrap=%none. This option sets the IEEE 754 trapping modes that are established at program initialization. Processing is left-to-right. The common exceptions, by definition, are invalid, division by zero, and overflow. Example: -ftrap=%all,no%inexact means set all traps, except inexact. The meanings are the same as for the ieee_flags subrou- tine, except that: o %all turns on all the trapping modes. o %none, the default, turns off all trapping modes. o A no% prefix turns off that specific trapping mode. If you compile one routine with -ftrap=t, compile all routines of the program with the same -ftrap=t option; otherwise, you can get unexpected results. -G Direct the link editor to produce a shared object rather than a dynamically linked executable. This option is passed to ld. It cannot be used with the -dn option. -g Produce additional symbol table information for dbx(1). The -g option makes -xildon the default incremental linker option. See -xildon. Invoke ild in place of ld unless any of the following are true: The -G option is present, the -xildoff option is present, any source files are named on the command line. When used with the -O option, a limited amount of debugging is available. The combination, -xO4 -g, turns off the inlining that you usually get with -xO4. -H Print, one per line, the path name of each file included during the current compilation on the standard error output. -help Display a one-line summary of compiler options. -hname Names a shared dynamic library. The -hname option assigns a name to a shared dynamic library. This pro- vides versions of a shared dynamic library. In general, the name after -h should be exactly what you have after the -o. You may insert a space between -h and name. This option is passed to ld. -Idir Add dir to the list of directories in which to search for #include files with relative filenames (not begin- ning with slash /). The preprocessor first searches for #include files in the directory containing source- file, then in directories named with -I options (if any), and finally, in /usr/include. -inline=[f1,...,fn] For user-written routines, try to inline only those named in the list f1 to fn. It tries routines only in the file being compiled. The list is a comma-separated list of functions and subroutines. If compiling with -O3, this can increase optimization by inlining some routines. The -O3 option inlines none by itself. If compiling with -O4, this can decrease optimization by restricting inlining to only those routines in the list. With -O4, the compiler normally tries to inline all user-written subroutines and functions. When xin- line= is specified with an empty rlist, it indicates that none of the routines in the source file are to be inlined. A routine is not inlined if any of the following apply (no warning): o Optimization is less than -O3 o The routine cannot be found o Inlining the routine does not look profitable or safe to iropt o The source for the routine is not in the file being compiled -KPIC Like -Kpic, but allows the global offset table to span the range of 32-bit addresses in those rare cases where there are too many global data objects for -Kpic. -Kpic Produce position-independent code. Each reference to a global datum is generated as a dereference of a pointer in the global offset table. Each function call is gen- erated in pc-relative addressing mode through a pro- cedure linkage table. The size of the global offset table is 8K on SPARC processors. -keeptmp Retains files created during compilation, rather than automatically deleting them. -Ldir Add dir to the list of directories containing object- library routines (for linking using ld(1). -lname Link with object library name (for ld(1)). This option must follow the sourcefile arguments. -libmieee Force IEEE 754 style return values for math routines in exceptional cases. In such cases, no exeception mes- sage will be printed, and errno should not be relied on. -libmil Inlines some library routines for faster execution. -M Run only the macro preprocessor (cpp) on the named C programs, requesting that it generate makefile depen- dencies and send the result to the standard output (see make(1) for details about makefiles and dependencies). -misalign -misalign assumes that data is not properly aligned and thus very conservative loads and stores must be used for data, that is, one byte at a time. Using this option can cause significant performance degradation when running the program. -misalign2 -misalign2, like -misalign, assumes that data is not properly aligned, but that data is at least half-word aligned. Though conservative uses of loads and stores must be used for data, the performance degradation when running a program should be less than for -misalign. -mt Passes D_REENTRANT to preprocessor. Appends -l thread. If you are doing your own multithread coding, you must use this option in the compile and link steps. To obtain faster execution, this option requires a mul- tiprocessor system. On a single-processor system, the resulting executable usually runs more slowly with this option. -native Ascertain which code-generation options are available on the machine running the compiler, and direct the compiler to generate code targeted for that machine. This option is a synonym for -xtarget=native . The -fast macro includes -native in its expansion. -nolib Does not link any libraries by default; that is, no -l options are passed to ld . Normally, the acc driver passes -lm -lansi -lc to ld . When you use -nolib , you have to pass all -l options yourself. For example: acc test.c -nolib -lansi -Bstatic -lm -Bdynamic -lc links libm statically and the other libraries dynami- cally. -nolibmil Reset -fast so that it does not include inline tem- plates. Use this after the -fast option: cc fast nolibmil ... -noqueue Tells the compiler not to queue this compile request if a license is not available. -O[1|2|3|4|5] Optimize the object code. May be used with -g, but not with -xa. Specifying -O is equivalent to specifying -O2. Level is one of: 1 Do basic local optimization (peephole). 2 Do basic local and global optimization. This is induction variable elimination, local and global common subexpression elimination, algebraic simplification, copy propagation, constant propagation, loop-invariant optimi- zation, register allocation, basic block merging, tail recursion elimination, dead code elimination, tail call elimination and complex expression expansion. The -O2 level does not assign global, exter- nal, or indirect references to registers. It treats these references and definitions as if they were declared "volatile." In general, the -O2 level results in minimum code size. 3 Beside what -O2 does, this also optimizes references and definitions for external vari- ables. Loop unrolling and software pipelin- ing are also performed. The -O3 level does not trace the effects of pointer assignments. When compiling either device drivers, or pro- grams that modify external variables from within signal handlers, you may need to use the volatile type qualifier to protect the object from optimization. In general, the -O3 level results in increased code size. 4 Besides what -O3 does, this also does automatic inlining of functions contained in the same file; this usually improves execu- tion speed. The -O4 level does trace the effects of pointer assignments. In general, the -O4 level results in increased code size. 5 Generate the highest level of optimization. Use optimization algorithms that take more compilation time or that do not have as high a certainty of improving execution time. Optimization at this level is more likely to improve performance if it is done with pro- file feedback. If the optimizer runs out of memory, it tries to recover by retrying the current procedure at a lower level of optimization and resumes subsequent procedures at the original level specified in the command-line option. If you optimize at -O3 or -O4 with very large pro- cedures (thousands of lines of code in the same procedure), the optimizer may require a large amount of virtual memory. In such cases, machine performance may degrade. -o outputfile Name the output file outputfile. outputfile must have the appropriate suffix for the type of file to be pro- duced by the compilation (see FILES, below). outputfile cannot be the same as sourcefile (the compiler will not overwrite the source file). -P Preprocess only. Puts the output in a file with a .i suffix. The output will not contain any preprocessor line directives, unlike the -E option. -p Prepare the object code to collect data for profiling with prof(1). Invokes a run-time recording mechanism that produces a mon.out file (at normal termination). -pg Prepare the object code to collect data for profiling with gprof(1). Invokes a run-time recording mechanism that produces a gmon.out file (at normal termination). -PIC Same as -KPIC. -pic Same as -Kpic. -Qdir dir Look for compiler components in directory dir. -Qoption c arg Pass the option arg to the component c. The option must be appropriate to that component and may begin with a minus sign. c can be one of: acomp, fbe (Solaris 2.x only) or as (Solaris 1.x only) cg, iropt, or ld. -Qpath dir Insert directory dir into the compilation search path. The path will be searched for alternate versions of the compilation programs, such as acomp(1), and ld(1). This path will also be searched first for certain relo- catable object files that are implicitly referenced by the compiler driver, for example *crt*.o and bb_link.o. -Qproduce srctype Produce source code of the type sourcetype. sourcetype can be one of: .i Preprocessed C source. .o Object file. .s Assembler source. -qdir dir Same as -Qdir dir. -qoption c arg Same as -Qoption c arg. -qpath dir Same as -Qpath dir. -qproduce srctype Same as -Qproduce srctype. -R dir[:dir] A colon-separated list of directories used to specify library search directories to the runtime linker. If present and not null, it is recorded in the output object file and passed to the runtime linker. If both LD_RUN_PATH and the -R option are specified, the -R option takes precedence. -S Do not assemble the program but produce an assembly source file. -s Remove all symbolic debugging information from the out- put object file. Passed to ld(1). -sb Generate extra symbol table information for the Sun Source Code Browser. -sbfast Create the database for the Sun Source Code Browser, but do not actually compile. -strconst Insert string literals into the read-only data section of the text segment instead of the data segment. -temp=dir Set directory for temporary files to be dir. -time Report execution times for the various compilation passes. -Uname Cause any definition of name to be undefined, as if by a #undef preprocessing directive. If the same name is specified for both -D and -U, name is not defined, regardless of the order of the options. -unroll=n Specifies whether or not the compiler optimizes (unrolls) loops. n is a positive integer. When n is 1, it is a command and the compiler unrolls no loops. When n is greater than 1, the -unroll=n merely suggests to the compiler that unrolled loops be unrolled n times. -V Print the name and version ID of each pass as the com- piler executes. -v Verbose. Print the version number of the compiler and the name of each program it executes. -vc Directs the compiler to perform stricter semantic checks and enable other lint-like checks. -w Do not print warnings. -X[a|c|s|t] Specify the degree of conformance to the ANSI C stan- dard. The degree of conformance can be one of the fol- lowing: a (ANSI) ANSI C plus Sun C compatibility extensions, with semantic changes required by ANSI C. Where Sun C and ANSI C specify different semantics for the same construct, the compiler will issue warnings about the conflict and use the ANSI C interpreta- tion. This is the default mode. c (conformance) Maximally conformant ANSI C, without Sun C compa- tibility extensions. The compiler will issue errors and warnings for programs that use non-ANSI C constructs. s (Sun C) The compiled language includes all features compa- tible with (pre-ANSI) Sun C. The compiler tries to warn about all language constructs that have differing behavior between Sun ANSI C and the old Sun C. Invokes cpp for processing. __STDC__ is not defined in this mode. t (transition) ANSI C plus Sun C compatibility extensions, without semantic changes required by ANSI C. Where Sun C and ANSI C specify different semantics for the same construct, the compiler will issue warnings about the conflict and use the Sun C interpretation. The predefined macro __STDC__ has the value 0 for -Xt and -Xa, and 1 for -Xc. (It is not defined for -Xs.) All warning messages about differing behavior can be eliminated through appropriate coding; for example, use of casts can eliminate the integral promotion change warnings. -xa Same as -a. -xarch=a Limit the set of instructions the compiler may use. a must be one of: generic, v7, v8a, v8, v8plus, v8plusa. Although this option can be used alone, it is part of the expansion of the -xtarget option; its primary use is to override a value supplied by the -xtarget option. This option limits the instructions generated to those of the specified architecture, and allows the specified set of instructions. The option does not guarantee the specified set is used; however, under optimization, the set is usually used. If this option is used with optimization, the appropri- ate choice can provide good performance of the execut- able on the specified architecture. An inappropriate choice can result in serious degradation of perfor- mance. v7, v8, and v8a are all binary compatible. v8plus and v8plusa are binary compatible with each other and for- ward, but not backward. For any particular choice, the generated executable can run much more slowly on ear- lier architectures (to the left in the above list). See the C 4.0 User's Guide for details. The -xarch values are: generic Get good performance on most SPARCs, and major degradation on none. This is the default. v7 Limit the instruction set to V7 architecture. v8a Limit the instruction set to the V8a version of the V8 architecture. v8 Limit the instruction set to V8 architecture. v8plus Limit the instruction set to the V8plus version of the V9 architecture. v8plusa Limit the instruction set to the V8plusa version of the V9 architecture. -xautopar Turn on automatic parallelization for multiple proces- sors. Does dependence analysis (analyze loops for inter- iteration data dependence) and loop restructur- ing. If optimization is not at -xO3 or higher, optimi- zation is raised to -xO3 and a warning is emitted. -xcache=c Define the cache properties for use by the optimizer. c must be one of the following: o generic o s1/l1/a1 o s1/l1/a1:s2/l2/a2 o s1/l1/a1:s2/l2/a2:s3/l3/a3 The si/li/ai are defined as follows: si The size of the data cache at level i, in kilobytes li The line size of the data cache at level i, in bytes ai The associativity of the data cache at level i Although this option can be used alone, it is part of the expansion of the -xtarget option; its primary use is to override a value supplied by the -xtarget option. This option specifies the cache properties that the optimizer can use. It does not guarantee that any particular cache property is used. The -xcache values are: generic Define the cache properties for good performance on most SPARCs. This is the default. s1/l1/a1 Define level 1 cache properties. s1/l1/a1:s2/l2/a2 Define levels 1 and 2 cache properties. s1/l1/a1:s2/l2/a2:s3/l3/a3 Define levels 1, 2, and 3 cache properties. -xCC Accept C++-style comments. -xcg89 Same as -cg89. -xcg92 Same as -cg92. -xchip=c Specify the target processor for use by the optimizer. c must be one of: generic, old, super, super2, micro, micro2, hyper, hyper2, powerup, ultra. Although this option can be used alone, it is part of the expansion of the -xtarget option; its primary use is to override a value supplied by the -xtarget option. This option specifies timing properties by specifying the target processor. Some effects are: o The ordering of instructions, that is, scheduling o The way the compiler uses branches o The instructions to use in cases where semantically equivalent alternatives are available The -xchip values are: generic Use timing properties for good performance on most SPARCs. old Use timing properties of pre-SuperSPARC proces- sors. super Use timing properties of the SuperSPARC chip. super2 Use timing properties of the SuperSPARC II chip. micro Use timing properties of the microSPARC chip. micro2 Use timing properties of the microSPARC II chip. hyper Use timing properties of the hyperSPARC chip. hyper2 Use timing properties of the hyperSPARC II chip. powerup Use timing properties of the Weitek PowerUp chip. ultra Use timing properties of the UltraSPARC chip. -xdepend Analyze loops for inter-iteration data dependencies and do loop restructuring. Dependence analysis is included in -xautopar. The dependency analysis is done at com- pile time. The -xdepend option is ignored unless either -xO3 or -xO4 is on, explicitly, or by another option. -xe Performs only syntax and semantic checking on the source files, but does not produce any object or exe- cutable code. -xexplicitpar Parallelize the loops that are specified. You do the dependency analysis: analyze and specify loops for inter-iteration and data dependencies. The software parallelizes the specified loops. If optimization is not at -xO3 or higher, then it is raised to -xO3. Avoid -xexplicitpar if you do your own thread manage- ment. The -xexplicitpar option requires the iMPact C mul- tiprocessor enhancement package. To get faster code, use this option on a multiprocessor system. On a single-processor system, the generated code usually runs slower. If you identify a loop for parallelization, and the loop has dependencies, you can get incorrect results, possibly different ones with each run, and with no warnings. Do not apply an explicit parallel pragma to a reduction loop. The explicit parallelization is done, but the reduction aspect of the loop is not done, and the results can be incorrect. If you use -xexplicitpar and compile and link in one step, then linking automatically includes the micro- tasking library and the threads-safe C runtime library. If you use -xexplicitpar and compile and link in separate steps, then you must also link with -xexpli- citpar. -xF Enables performance analysis of the executable using the Analyzer and Debugger. (See analyzer(1) and debugger(1) man pages.) Produces code that can be reordered at the function level. Each function in the file is placed in a separate section; for example, functions foo() and bar() will be placed in the sec- tions .text%foo and .text%bar , respectively. Function ordering in the executable can be controlled by using -xF in conjunction with the -M option to ld (see ld(1)). -xhelp=f Display on-line help information. -xhelp=flags displays a summary of the compiler options; -xhelp=readme displays the readme file; -xhelp=errors displays the Error and Warning Messages file. -xildoff Turn off the incremental linker and force the use of ld. This option is the default if you do not use the -g option, or you do use the -G option, or any source files are present on the command line. Override this default by using the -xildon option. -xildon Turn on the incremental linker and force the use of ild in incremental mode. This option is the default if you use the -g option, and you do not use the -G option, and there are no source files present on the command line. Override this default by using the -xildoff option. -xinline=[f1,...,fn] Same as -inline. -xlibmieee Same as -libmieee. -xlibmil Same as -libmil. -xlicinfo Returns information about the licensing system. In particular, it returns the name of the license server and the userids of users who have licenses checked out. When you use this option, the compiler is not invoked and a license is not checked out. -xloopinfo Show which loops are parallelized and which are not. This option is normally for use with the -xautopar and -xexplicitpar options. It requires the iMPact C mul- tiprocessor enhancement package. -xM Generate makefile dependencies. -xM1 Generate makefile dependencies. -xMerge Directs acc to merge the data segment with the text segment for assembler. Data initialized in the object file produced by this compilation is read-only and (unless linked with ld-N) is shared between processes. -xnolib Same as -nolib. -xnolibmil Same as -nolibmil. -xO[1|2|3|4|5] Same as -O[1|2|3|4|5]. -xP Print prototypes for K&R C function definitions. -xparallel Parallelize both automatic and explicit loops. This option invokes -xautopar, -xdepend, and -xexplicitpar. There is a risk of producing incorrect results. Avoid -xparallel if you do your own thread management. This option requires the iMPact C multiprocessor enhancement package. To get faster code, use this option on a multiprocessor SPARC system. On a single- processor system, the generated code usually runs more slowly. The -xautopar option (and therefore the -xparallel option) includes dependency analysis; that is, if you try a -xautopar both with and without -xdepend, there is no noticeable difference. If you compile and link in one step, -xparallel links with the microtasking library and the threads-safe C runtime library. If you compile and link in separate steps, and you compile with -xparallel, then link with -xparallel. -xpg Same as -pg. -xprofile=p Collect data for a profile or use a profile to optim- ize. p must be collect, use[:name], or tcov. This option causes execution frequency data to be col- lected and saved during execution, then the data can be used in subsequent runs to improve performance. This option is only valid when a level of optimization is specified. collect Collect and save execution frequency for later use by the optimizer. use[:name] Use execution frequency data saved by the com- piler. The name is the name of the executable that is being analyzed. This name is optional. If name is not specified, a.out is assumed to be the name of the executable. tcov Correctly collects data for programs that have source code in header files or that make use of C++ templates. See also -xa. -xreduction Analyze loops for reduction in automatic paralleliza- tion. To enable parallelization of reduction loops, specify both -xreduction and -xautopar. If you specify -xreduction without -xautopar, the com- piler issues a warning. This option requires the iMPact C multiprocessor enhancement package. To get faster code, this option also requires a multiprocessor system. On a single- processor system, the generated code usually runs more slowly. There is always potential for roundoff error with reduction. If you have a reduction loop to be parallelized, then use -xreduction with -xautopar. Do not use an explicit pragma, because the explicit pragma prevents reduction for that loop, resulting in wrong answers. -xregs=r Specify the usage of registers for the generated code. r is a comma-separated list that consists of one or more of the following: [no%]appl, [no%]float. Example: -xregs=appl,no%float The -xregs= values are: appl Allow using the registers g2, g3, and g4. no%appl Do not use the appl registers. float Allow using the floating-point registers as specified in the SPARC ABI. no%float Do not use the floating-point registers. The default is: -regs=appl,float. -xrestrict=f Treat pointer-valued function parameters as restricted pointers. f is a comma-separated list that consists of one or more function parameters, %all, %none. This command-line option can be used on its own, but is best used with optimization of -xO3 or greater. The default is %none. Specifying -xrestrict is equivalent to specifying -xrestrict=%all. -xs Disable Auto-Read for dbx. Use this option in case you cannot keep the .o files around. It passes the -s option to the assembler. No Auto-Read is the older way of loading symbol tables. It places all symbol tables for dbx in the executable file. The linker links more slowly and dbx initializes more slowly. Auto-Read is the newer and default way of loading sym- bol tables. With Auto-Read, the information is distributed in the .o files, so that dbx loads the sym- bol table information only if and when it is needed. Hence, the linker links faster, and dbx initializes faster. With -xs, if you move the executables to another direc- tory, then to use dbx, you can ignore the object (.o) files. Without -xs, if you move the executables, you must move both the sources files and the object (.o) files, or set the path with the dbx pathmap or use command. -xsafe=mem Allow the compiler to assume no memory-based traps occur. This option grants permission to use the speculative load instruction on V9 machines. -xsb Same as -sb. -xsbfast Same as -sbfast. -xsfpconst Represent unsuffixed floating-point constants as single precision, instead of the default mode of double preci- sion. Not valid with -Xc. -xspace Do no optimizations that increase code size. Example: Do not unroll loops. -xstrconst Same as -strconst. -xtarget=t Specify the target system for the instruction set and optimization. t must be one of: native, generic, system-name. The -xtarget option permits a quick and easy specifica- tion of the -xarch, -xchip, and -xcache combinations that occur on real systems. The only meaning of -xtar- get is in its expansion. The -xtarget values are: native Get the best performance on the host system. generic Get the best performance for generic architec- ture, chip, and cache. This is the default. system-name Get the best performance for the specified system. Valid system names are: sun4/15, sun4/20, sun4/25, sun4/30, sun4/40, sun4/50, sun4/60, sun4/65, sun4/75, sun4/110, sun4/150, sun4/260, sun4/280, sun4/330, sun4/370, sun4/390, sun4/470, sun4/490, sun4/630, sun4/670, sun4/690, sselc, ssipc, ssipx, sslc, sslt, sslx, sslx2, ssslc, ss1, ss1plus, ss2, ss2p, ss4, ss5, ssvyger, ss10, ss10/hs11, ss10/hs12, ss10/hs14, ss10/20, ss10/hs21, ss10/hs22, ss10/30, ss10/40, ss10/41, ss10/50, ss10/51, ss10/61, ss10/71, ss10/402, ss10/412, ss10/512, ss10/514, ss10/612, ss10/712, ss20/hs11, ss20/hs12, ss20/hs14, ss20/hs21, ss20/hs22, ss20/51, ss20/61, ss20/71, ss20/502, ss20/512, ss20/514, ss20/612, ss20/712, ss600/41, ss600/51, ss600/61, ss600/120, ss600/140, ss600/412, ss600/512, ss600/514, ss600/612, ss1000, sc2000, cs6400, solb5, solb6, ultra, ultra1/140, ultra1/170, ultra1/1170, ultra1/2170, ultra1/2200. See the section on -xtarget=t in the C 4.0 User's Guide for the -xtarget expansions that show the mneumonic encodings of the actual system names and numbers. This option is a macro. Each specific value for -xtarget expands into a specific set of values for the -xarch, -xchip, and -xcache options. For example: -xtarget=sun4/15 is equivalent to: -xarch=v8a -xchip=micro -xcache=2/16/1 -xtemp=dir Set directory for temporary files to dir. -xtime Same as -time. -xtransition Issue warnings for differences between K&R C and ANSI C. -xunroll=n Same as -unroll. -xvpara Issue warnings for loops that may not be safe to parallelize. As the compiler detects each explicitly parallelized loop that has dependencies, it issues a warning message but the loop is parallelized. Use with the -xexplicitpar option and the #pragma MP directive. This option requires the iMPact C multiprocessor enhancement package. -Y,dir Change default directories for finding libraries files. -Zll Create the lock_lint database files (.ll files), one per each .c file compiled for the lock_lint(1) program, which is included in the iMPact product. Do not actu- ally compile. -Zlp Prepare object files for the loop profiler, looptool. The looptool(1) utility can then be run to generate loop statistics about the program. Use this option with -xdepend; if -xdepend is not explicitly or implicitly specified, turns on -xdepend and issues a warning. If optimization is not at -O3 or higher, optimization is raised to -O3 and a warning is issued. The -Zlp option requires the iMPact C multiprocessor enhancement package. -Ztha Prepare code for analysis by the thread analyzer, the performance analysis tool for multithreaded code. acc recognizes -r, -u, -YP,dir, and -z, and passes these options and their arguments to ld. acc also passes any unrecognized options to ld with a warning. PRAGMAS The following #pragmas are recognized by the compilation system: #prama align, #pragma fini, #prama init, #prama ident, #pragma int_to_unsigned, #prama MP serial_loop, #prama MP serial_loop_nested, #prama MP taskloop, #prama nomemorydepend, #prama no_side_effect, #pragma pack, #prama pipeloop, #pragma unknown_control_flow, #prama unroll, #prama weak. Refer to the C 4.0 User's Guide for more information on these pragmas. FILES a.out executable output file file.a library of object files file.c C source file file.d tcov(1) test coverage input file file.i C source file after prepro- cessing file.il inline expansion file file.o object file file.s assembler source file file.tcov output from tcov(1) acc compiler command line driver acomp compiler front end cg code generator crt1.o runtime startup code crti.o runtime startup code crtn.o runtime startup code fbe assembler gcrt1.o startup for profiling with gprof(1) gmon.out default profile file for -pg iropt global optimzer mcrt1.o start-up for profiling with prof(1) and intro(3) mon.out default profile file for -p .sb The directory used to store sbrowser(1) data when the -xsb or -xsbfast flag is used. .sbinit A file containing commands which can be used to specify the location of the .sb direc- tory and to control the execu- tion of sbcleanup sbcleanup deletes obsolete files in the .sb directory and creates an up-to-date .sb/Index file SEE ALSO ar(1), as(1), cflow(1), ctags(1), cxref(1), dbx(1), gprof(1), ld(1), lint(1), m4(1), make(1S), prof(1), tcov(1) C 4.0 User's Guide B. W. Kernighan and D. M. Ritchie, The C Programming Language, Prentice-Hall, 1978 DIAGNOSTICS The diagnostics produced by the C compiler are intended to be self-explanatory. Occasional obscure messages may be produced by the preprocessor, assembler, or loader. Last change: 5 September 1995 25