The following changes were made to the C, C++, and Fortran compilers since the previous release. Details can be found in the compiler man pages. The changes specific to the C++ compiler are detailed in Chapter 2, C++ Compiler.
Every Oracle Solaris Studio release includes performance improvements for Oracle Sun hardware servers. This release includes expanded support for the SPARC T5, SPARC M5, SPARC M6, SPARC M10, and Intel Ivy Bridge and Haswell compiler and library performance improvements which were first made available in the Oracle Solaris Studio 12.3 1/13 Platform-Specific Enhancements release.
New –xarch, –xchip , and –xtarget values for Ivy Bridge and Haswell processors on x86.
New –xarch, –xchip , and –xtarget values for SPARC T5, M5, M6, and M10+ processors.
Support for Ivy Bridge and Haswell assembler instructions.
Support for Ivy Bridge and Haswell intrinsic functions, which can be found in solstudio-install-dir/lib/compilers/include/cc/sys</immintrin.h.
Default value for –xarch=generic set to sse2 on x86 and x64 architectures. See Change in Default Floating-Point Behavior for x86 for more information.
The results of floating-point computations in programs compiled using default compiler values on x86 systems might vary slightly with Oracle Solaris Studio 12.4 compared to previous releases. You might get a different result even on the same hardware and operating system. This is because the default instruction set architecture is now SSE2 for all address space models and platforms.
In Oracle Solaris Studio 12.4 and previous releases, the default address space model is –m32 for 32-bits for Oracle Solaris. On Linux the default is –m64 for 64-bit hardware. You can compile for the 32-bit address space model or 64 bit address space model using –m32 and –m64 respectively on all platforms.
The compiler optimizes code by using the –xarch option to determine which instructions are implemented in hardware and thus suitable for code generation. In previous Oracle Solaris Studio releases, the default was –xarch=386 for –m32 and –xarch=sse2 for –m64.
For x86 with 32-bit addressing, if no code generation option is specified or implied with –xarch, –xnative, or –fast, the code generation option will be –xarch=sse2 instead of –xarch=386. Thus programs using floating-point arithmetic and compiled with default –xarch might produce different floating-point results.
The new x86 default –m32 –xarch=sse2 implements the same ABI as the previous default –m32 –xarch=386. Floating-point operands and results are passed in x87 floating-point registers. However, the following single-precision and double-precision floating-point operations are usually performed in sse2 registers.
x87 registers are still used for long double operations and hardware elementary transcendental function evaluations.
Support for –xlinkopt on x86. Inter-module, inter-procedural code ordering optimizations for large enterprise applications tuned for modern Intel processors. An up to 5% performance boost over a fully optimized binary can be seen for large applications.
New compiler option for x86: –preserve_argvalues saves copies of register-based function arguments in the stack.
Enhanced –xs option to control the trade-off of executable size versus the need to retain object files in order to debug.
Support for –xanalyze and –xannotate on Linux.
Support for –fopenmp as a synonym for –xopenmp=parallel.
Support for SPARC M10 values –xchip=sparc64x, –xtarget=sparc64x, –xarch=sparcace.
Support for SPARC M10+ values –xchip=sparcxplus,–xtarget=sparc64xplus, and –xarch=sparcaceplus.
Support for –xarch=sparc4b and –xarch=sparc4c for SPARC instruction set extensions common to SPARC M10+ processors.
Support for Ivy Bridge values –xchip=ivybridge, –xtarget=ivybridge, and –xarch=avx_i on x86 platform.
Support for Haswell values –xchip=haswell, –xtarget=haswell, and –xarch=avx2 on x86 platform.
New options for compilers:
–g1 - Produce file and line number as well as simple parameter information that is considered crucial during post-mortem debugging.
–xdebuginfo - Controls how much debugging and observability information is emitted.
–xglobalize - Controls globalization of file static variables but not functions.
–xinline_param - Enables changing the heuristics used by the compiler for deciding when to inline a function call.
–xinline_report - Generates a report written to standard output on the inlining of functions by the compiler.
–xipo_build - Reduces compile time by avoiding optimizations during the initial pass through the compiler, optimizing only at link time.
–xkeep_unref - Keeps definitions of unreferenced functions and variables.
–xpatchpadding - Reserves an area of memory before the start of each function.
–xsegment_align - Causes the driver to include a special mapfile on the link line.
–xthroughput - Indicates that the application will be run in situations where many processes are simultaneously running on the system.
–xunboundsym - Specifies whether the program contains references to dynamically bound symbols.