<?xml version="1.0"?>
<!DOCTYPE flagsdescription
    SYSTEM "http://www.spec.org/dtd/cpuflags1.dtd"
>

<flagsdescription>

<!-- filename to begin with "hp-ic10-linux-flags" -->
<filename>hp-ic10-flags</filename>

<title>SPEC CPU2006 Flag Description for the Linux Intel(R) C++ Compiler 10.0
for EM64T-based applications and Intel(R) Fortran Compiler 10.0 for EM64T-based
applications</title>


   <header>
      <![CDATA[
         <div style="font-weight: bold; font-size: larger; margin-left: 2em"> <h3 style="text-indent: -2em">Compilers:</h3>
           <p>Compilers: Intel Compilers for C++ and Fortran, Version 10.0
                       for IA32/EM64T-based applications in Linux_x64<br>
            Operating system: SuSE Linux Enterprise Server 10 (x86_64)<br>
           </p>


         </div>
         
         <hr />

      ]]>
   </header>

<!-- 
  *********************************************************************************************************************
  Explanations of platform info, such as BIOS settings
  ********************************************************************************************************************* 
-->

<platform_settings>
<![CDATA[

<p><b>Platform settings</b></p>

<p>One or more of the following settings may have been set.  If so, the "Platform Notes" section of the
report will say so; and you can read below to find out more about what these settings mean.</p>

<p><b>Power Regulator for ProLiant support (Default=HP Dynamic Power Savings Mode)</b></p> 
<p>Values for this BIOS setting can be:</p>

<ul> 
       <li><b>HP Dynamic Power Savings Mode</b>: Automatically varies processor 
         speed and power usage based on processor utilization. Allows 
         reducing overall power consumption with little or no impact to
         performance. Does not require OS support. </li>

       <li><b>HP Static Low Power Mode</b>: Reduces processor speed and power usage.
         Guarantees a lower maximum power usage for the system. Performance
         impacts will be greater for environments with higher processor 
         utilization. </li>

       <li><b>HP Static High Performance Mode</b>: Processors will run in their 
         maximum power/performance state at all times regardless of the 
         OS power managment policy. </li>

       <li><b>OS Control Mode</b>: Processors will run in their maximum power/
         performance state at all times unless the OS enables' a power 
         management policy. </li>
</ul>

<p><b>Adjacent Sector Prefetch (Default = Enabled):</b></p> 
<p>
       This BIOS option allows the enabling/disabling of a processor mechanism to                 
       fetch the adjacent cache line within an 128-byte sector that contains 
       the data needed due to a cache line miss. </p>
<p>                
       In some limited cases, setting this option to Disabled may improve
       performance. In the majority of cases, the default value of Enabled                        
       provides better performance.  Users should only disable this option 
       after performing application benchmarking to verify improved
       performance in their environment.</p>

<p><b>Hardware Prefetch (Default = Enabled):</b></p> 
<p>
       This BIOS option allows allows the enabling/disabling of a processor 
       mechanism to prefetch data into the cache according to a pattern 
       recognition algorithm.</p>
<p>                
       In some limited cases, setting this option to Disabled may improve
       performance. In the majority of cases, the default value of Enabled                        
       provides better performance.  Users should only disable this option 
       after performing application benchmarking to verify improved
       performance in their environment.</p>

<p><b> submit= MYMASK=`printf '0x%x' \$((1<<\$SPECCOPYNUM))`; /usr/bin/taskset \$MYMASK $command </b></p>
<p>
       When running multiple copies of benchmarks, the SPEC config file feature 
       <b>submit</b> is sometimes used to cause individual jobs to be bound to 
       specific processors. This specific submit command is used for Linux. 
       The description of the elements of the command are:
       <ul>
       <li> <b>/usr/bin/taskset [options] [mask] [pid | command [arg] ... ]</b>: <br />
           taskset is used to set or retreive the CPU affinity of a running 
           process given its PID or to launch a new COMMAND with a given CPU 
           affinity. The CPU affinity is represented as a bitmask, with the 
           lowest order bit corresponding to the first logical CPU and highest
           order bit corresponding to the last logical CPU. When the taskset 
           returns, it is guaranteed that the given program has been scheduled
           to a legal CPU. <br /><br />

           The default behaviour of taskset is to run a new command with a 
           given affinity mask: <br /><br />

                taskset [mask] [command] [arguments] </li>
       <li> <b>$MYMASK</b>: The bitmask (in hexadecimal) corresponding to a specific
           SPECCOPYNUM. For example, $MYMASK value for the first copy of a 
           rate run will be 0x00000001, for the second copy of the rate will 
           be 0x00000002 etc. Thus, the first copy of the rate run will have a
           CPU affinity of CPU0, the second copy will have the affinity CPU1 
           etc.</li>
       <li> <b>$command</b>: Program to be started, in this case, the benchmark instance 
               to be started. </li>
        </ul>
</p>
<p><b> ulimit -s <n> (Linux) </b></p>
<p>
           Sets the stack size to <b>n</b> kbytes, or <b>unlimited</b> to allow the stack size 
           to grow without limit. </p>

]]>
</platform_settings>

<!-- 
******************************************************************************************************
* Compilers
******************************************************************************************************
--> 
<!-- COMPILER -->

   <flag name="Fifort-32bit" class="compiler" regexp="/opt/intel/fc/10.0.023/bin/ifort">
      <example>/opt/intel/fc/10.0.023/bin/ifort</example>
      <![CDATA[
         <p>/opt/intel/fc/10.0.023/bin/ifort invokes the 32-bit Intel Fortran compiler.<br>
         Also used to invoke linker for 32-bit programs
         in Fortran and C/Fortran mixtures.</p>
      ]]>
   </flag>

   <flag name="Fifort" class="compiler" regexp="ifort">
      <example>ifort</example>
      <![CDATA[
         <p>Invoke the 64-bit Intel Fortran compiler.<br>
         Also used to invoke linker for 64-bit programs
         in Fortran and C/Fortran mixtures.</p>
      ]]>
   </flag>

   <flag name="Ficc-32bit" class="compiler" regexp="/opt/intel/cc/10.0.023/bin/icc">
      <example>/opt/intel/cc/10.0.023/bin/icc</example>
      <![CDATA[
         <p>/opt/intel/cc/10.0.023/bin/icc invokes the 32-bit Intel C compiler.<br>
         Also used to invoke linker for 32-bit C programs.</p>
      ]]>
   </flag>

   <flag name="Ficc-64bit" class="compiler" regexp="/opt/intel/cce/10.0.023/bin/icc">
      <example>/opt/intel/cce/10.0.023/bin/icc</example>
      <![CDATA[
         <p>/opt/intel/cce/10.0.023/bin/icc invokes the 64-bit Intel C compiler.<br>
         Also used to invoke linker for 64-bit C programs.</p>
      ]]>
   </flag>

   <flag name="Ficpc-32bit" class="compiler" regexp="/opt/intel/cc/10.0.023/bin/icpc">
      <example>/opt/intel/cc/10.0.023/bin/icpc</example>
      <![CDATA[
         <p>/opt/intel/cc/10.0.023/bin/icpc invokes the 32-bit Intel C++ compiler.<br>
         Also used to invoke linker for 32-bit C++ programs.</p>
      ]]>
   </flag>

   <flag name="Ficc" class="compiler" regexp="icc">
      <example>icc</example>
      <![CDATA[
         <p> Invoke the Intel C compiler.<br>
         Also used to invoke linker for C programs.</p>
      ]]>
   </flag>

   <flag name="Ficpc" class="compiler" regexp="icpc">
      <example>icpc</example>
      <![CDATA[
         <p> Invoke the Intel C++ compiler.<br>
         Also used to invoke linker for C++ programs.</p>
      ]]>
   </flag>

   <flag name="Ficc-32bit-includepath" class="compiler" regexp="-I/opt/intel/cc/10.0.023/include">
      <example>-I/opt/intel/cc/10.0.023/include</example>
      <![CDATA[
	    <p>-I/opt/intel/cc/10.0.023/include is the include path of 32-bit Intel C/C++ compiler</p>
      ]]>
   </flag>

   <flag name="Ficc-64bit-includepath" class="compiler" regexp="-I/opt/intel/cce/10.0.023/include">
      <example>-I/opt/intel/cce/10.0.023/include</example>
      <![CDATA[
	    <p>-I/opt/intel/cce/10.0.023/include is the include path of 64-bit Intel C/C++ compiler</p>
      ]]>
   </flag>

   <flag name="Ficc-32bit-libpath" class="compiler" regexp="-L/opt/intel/cc/10.0.023/lib">
      <example>-L/opt/intel/cc/10.0.023/lib</example>
      <![CDATA[
	    <p>-L/opt/intel/cc/10.0.023/lib is the library path of 32-bit Intel C/C++ compiler</p>
      ]]>
   </flag>

   <flag name="Ficc-64bit-libpath" class="compiler" regexp="-L/opt/intel/cce/10.0.023/lib">
      <example>-L/opt/intel/cce/10.0.023/lib</example>
      <![CDATA[
	    <p>-L/opt/intel/cce/10.0.023/lib is the library path of 64-bit Intel C/C++ compiler</p>
      ]]>
   </flag>

   <flag name="Fifort-32bit-includepath" class="compiler" regexp="-I/opt/intel/fc/10.0.023/include">
      <example>-I/opt/intel/fc/10.0.023/include</example>
      <![CDATA[
	    <p>-I/opt/intel/fc/10.0.023/include is the include path of 32-bit Intel Fortran compiler</p>
      ]]>
   </flag>

   <flag name="Fifort-32bit-libpath" class="compiler" regexp="-L/opt/intel/fc/10.0.023/lib">
      <example>-L/opt/intel/fc/10.0.023/lib</example>
      <![CDATA[
	    <p>-L/opt/intel/fc/10.0.023/lib is the library path of 32-bit Intel Fortran compiler</p>
      ]]>
   </flag>

<!-- /COMPILER -->

<!--
******************************************************************************************************
* Portability
******************************************************************************************************
-->
<flag name="lowercase_routine_name" class="portability" regexp="(?:/\S+/)?-nofor_main\b">

   <![CDATA[
      <p>For mixed-language benchmarks, tell the compiler to ignore the main routine in Fortran</p>
   ]]>

</flag>


<!--
******************************************************************************************************
* Optimizations
******************************************************************************************************
-->
<flag name="f-O1" class="optimization" regexp="-O1\b">
      
   <![CDATA[
      <p>optimize for speed, but disable some optimizations which increase 
      code size for a small speed benefit. Includes inline expansion 
      except for intrinsic functions, global optimizations, string 
      pooling optimizations.  On Linux platforms, -O1 sets the 
      following:</p>
         <p style="margin-left: 25px">
         -unroll0, -fno-builtin -mno-ieee-fp -fomit-frame-pointer -ffunction-sections</p>
   ]]>

   <include flag="f-unroll_n" />
   <include flag="f-fno-builtin" />
   <include flag="f-mno-ieee-fp" />
   <include flag="f-fomit-frame-pointer" />
   <include flag="f-ffunction-sections" />
      
</flag>

<flag name="f-O2" class="optimization" regexp="-O2\b">

   <![CDATA[
      <p>This is the default level of optimization.  
      Optimizes for speed. The -O2 option includes O1 optimizations 
      and in addition enables inlining of intrinsics and more speed 
      optimizations. </p>

   ]]> 

 <include flag="f-O1" />

</flag>

<flag name="f-O3" class="optimization" regexp="-O3\b">

   <![CDATA[
      <p>Builds on -01 and -02 optimizations by enabling high-level 
      optimization. This level does not guarantee higher performance 
      unless loop and memory access transformation take place. In 
      conjunction with -axK/-xK and -axW/-xW, this switch causes the 
      compiler to perform more aggressive data dependency analysis than 
      for -O2. This may result in longer compilation times. On Linux 
      platforms, -O3 sets the following:</p>
         <p style="margin-left: 25px">
         -fp</p>
   ]]> 

   <include flag="f-fp" />
   <include flag="f-O2" />
 
</flag>

<flag name="F-ansi-alias" class="optimization" regexp="-ansi-alias\b">

     <![CDATA[
     <p>Enable use of ANSI aliasing rules in optimizations.</p>

     <p>This option tells the compiler to assume that the program adheres to 
     ISO C Standard aliasability rules. If your program adheres to these rules, 
     then this option allows the compiler to optimize more aggressively. If it 
     doesn't adhere to these rules, then it can cause the compiler to generate 
     incorrect code.</p>
   ]]> 

</flag> 

<flag name="F-fno-alias" class="optimization" regexp="-fno-alias\b">

     <![CDATA[
     <p>Tells the compiler not to assume aliasing in the program (DEFAULT = -falias).</p>

   ]]> 

</flag> 

<flag name="f-ip" class="optimization" regexp="-ip\b">
enable single-file IP optimizations 
           (within files, same as -Ob2)
</flag>

<flag name="f-ipo" class="optimization" regexp="-ipo\b">
   <![CDATA[
      <p>Multi-file ip optimizations that includes:<br />
       - inline function expansion<br />
       - interprocedural constant propogation<br />
       - dead code elimination<br />
       - propagation of function characteristics<br />
       - passing arguments in registers<br />
       - loop-invariant code motion</p>
   ]]> 
</flag>

<flag name="f-fast" class="optimization" regexp="-fast\b">

   <![CDATA[
      <p>The -fast option enhances execution speed across the entire program 
      by including the following options that can improve run-time performance:</p>

      <p style="text-indent: -45px;margin-left: 45px">
      -O3&nbsp;&nbsp;&nbsp;(maximum speed and high-level optimizations)</p>
      <p style="text-indent: -45px;margin-left: 45px"> 
      -ipo&nbsp;(enables interprocedural optimizations across files)</p>
      <p style="text-indent: -45px;margin-left: 45px">  
      -xT&nbsp;&nbsp;(generate code specialized for Intel(R) Core(TM)2 Duo processors, 
      Intel(R) Core(TM)2 Quad processors and Intel(R) Xeon(R) processors with SSSE3)</p>
      <p style="text-indent: -45px;margin-left: 45px"> 
      -no-prec-div&nbsp;(disable -prec-div)
             where -prec-div improves precision of FP divides (some speed impact)</p>
       <p style="text-indent: -45px;margin-left: 45px"> 
      -static&nbsp;(statically link libraries during compilation)</p>
  
      <p>To override one of the options set by /fast, specify that option after the 
      -fast option on the command line. The options set by /fast may change from 
      release to release.</p>
   ]]> 

   <include flag="f-O3" />
   <include flag="f-ipo"  />
   <include flag="f-xT"  />
   <include flag="f-static"  />
   <include flag="f-no-prec-div"  />
</flag>

   <flag name="F-L_lib_directory_lsmartheap" class="optimization"
        regexp="-L\S* -lsmartheap">
       <example>-L/opt/sh8/lib -lsmartheap</example>
      <![CDATA[
         <p>-L<library directory> -lsmartheap ,<br>
         when used as an EXTRA_CLIB or EXTRA_CXXLIB variable, 
         results in linking with MicroQuill's SmartHeap 8.1 (32-bit) library 
         for Linux.  This is a library that optimizes calls to new, delete, malloc and free.</p>
      ]]>
   </flag>

<flag name="f-xP" class="optimization" regexp="-x[PN]\b">

   <![CDATA[
      <p>The -xN and -xP options target your program to run on Intel Pentium 4
      and compatible Intel processors.  The resulting code might contain 
      unconditional use of features that are not supported on other processors. 
      Programs, where the function main() is compiled with this option, will 
      detect non compatible processors and generate an error message during 
      execution. This option also enables new optimizations in addition to Intel 
      processor specific optimizations.</p>

      <p>These options also enable advanced data layout and code restructuring 
      optimizations to improve memory accesses for Intel processors.</p>
   ]]> 

</flag>

<flag name="f-xT" class="optimization" regexp="-xT\b">

   <![CDATA[
      <p>Code is optimized for Intel(R) Core(TM)2 Duo processors, Intel(R) Core(TM)2 Quad processors 
      and Intel(R) Xeon(R) processors with SSSE3. The resulting code may contain unconditional use of 
      features that are not supported on other processors. This option also enables new optimizations 
      in addition to Intel processor-specific optimizations including advanced data layout and code 
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p>Do not use this option if you are executing a program on a processor that is not an Intel processor. 
      If you use this option on a non-compatible processor to compile the main program (in Fortran) or 
      the function main() in C/C++, the program will display a fatal run-time error if they are executed 
      on unsupported processors.</p>
     
   ]]> 

</flag>

<flag name="f-no-prec-div" class="optimization" regexp="-no-prec[_-]div\b">
(disable -prec-div)
                
   <![CDATA[
       <p>(disable/enable[default] -Qprec-div[-]) (Windows) [-no]-prec-div (Linux)</p>
 
       <p>-Qprec-dev (Windows) and -prec-div (Linux) improves precision of floating-point divides. 
       It has a slight impact on speed. -Qprec-dev- (Windows) and -no-prec-div (Linux) disables this 
       option and enables optimizations that give slightly less precise results than full IEEE division.</p>

       <p>When you specify -Qprec-dev- (Windows) or -no-prec-div (Linux) along with some optimizations, 
       such as -xN and -xB (Linux) or /QxN and /QxB (Windows), the compiler may change floating-point division 
       computations into multiplication by the reciprocal of the denominator. For example, A/B is computed as A * (1/B) 
       to improve the speed of the computation.</p>

       <p>However, sometimes the value produced by this transformation is not as accurate as full IEEE division. 
       When it is important to have fully precise IEEE division, do not use -Qprec-dev- (Windows) or -no-prec-div (Linux)
       which will enable the default -Qprec-dev (Windows) or -prec-div (Linux) and the result is more accurate, 
       with some loss of performance.</p>

   ]]> 

</flag>

<flag name="F-prefetch" class="optimization" regexp="-prefetch\b">

      <![CDATA[
     <p>This option enables prefetch insertion optimization. To use this option, 
     you must also specify O3.</p>

     <p>The goal of prefetching is to reduce cache misses by providing hints to 
     the processor about when data should be loaded into the cache.</p>
   ]]> 

</flag> 

<flag name="prof-gen" class="optimization" regexp="-prof[_-]gen\b">

   <![CDATA[
      <p>Instrument program for profiling for the first phase of
      two-phase profile guided otimization. This instrumentation gathers information
      about a program's execution paths and data values but does not gather
      information from hardware performance counters. The profile instrumentation
      also gathers data for optimizations which are unique to profile-feedback
      optimization.</p>
   ]]> 

</flag>

<flag name="prof-use" class="optimization" regexp="-prof[_-]use\b">

   <![CDATA[
      <p>Instructs the compiler to produce a profile-optimized 
      executable and merges available dynamic information (.dyn) 
      files into a pgopti.dpi file. If you perform multiple 
      executions of the instrumented program, -prof_use merges 
      the dynamic information files again and overwrites the 
      previous pgopti.dpi file.<br />
      Without any other options, the current directory is 
      searched for .dyn files</p>
   ]]> 
      
</flag>

<flag name="auto_ilp32" class="optimization" regexp="-auto[_-]ilp32\b">

   <![CDATA[
      <p>This option instructs the compiler to analyze the program to
       determine if there are 64-bit pointers which can be safely
       shrunk into 32-bit pointers.  In order for this option to be 
       effective the compiler must be able to optimize using the
       -ipo option, and must be able to analyze all library/external
       calls the program makes. This option imposes the following
       restrictions on the program:<br />
       The program cannot malloc any objects greater than 2**31 bytes
       in size.<br />
       If the program does not satisfy this restriction, unpredictable
       behavior may occur.</p>
   ]]> 
      
</flag>

<flag name="f-mno-ieee-fp" class="optimization" regexp="-mno-ieee-fp\b">
      
   <![CDATA[
      <p>Enables improved floating-point consistency. Floating-point  operations
      are  not  reordered  and the result of each floating-point operation is
      stored in the target variable rather than being kept in  the  floating-
      point  processor for use in a subsequent calculation.  This is the same
      as specifying -fltconsistency or -mp.</p>

      <p>The default, -mno-ieee-fp, provides better accuracy and  run-time  per-
      formance at the expense of less consistent floating-point results.</p>
   ]]> 
  
</flag>

<flag name="f-fomit-frame-pointer" class="optimization" regexp="-fomit-frame-pointer\b">
      
   <![CDATA[      
       <p>Enable using EBP as general purpose register.</p>   
   ]]> 

</flag>

<flag name="f-ffunction-sections" class="optimization" regexp="-ffunction-sections\b">

   <![CDATA[
      <p>Separate functions for the linker (COMDAT).  Same as -fdata-sections.</p>
   ]]> 
 
</flag>

<flag name="f-unroll_n" class="optimization" regexp="-unroll\d+\b">
      Tells the compiler the maximum number of times to unroll loops. 
</flag>

<flag name="f-fno-builtin" class="optimization" regexp="-fno-builtin\b">
      Disables inline expansion of all intrinsic functions. 
</flag>

<flag name="f-fp" class="optimization" regexp="-fp\b">

   <![CDATA[
      <p>Disable using EBP as general purpose register.</p>
   ]]> 
 
</flag>

<flag name="f-static" class="optimization" regexp="-static\b">

   <![CDATA[
      <p>This option prevents linking with shared libraries. It 
         causes the executable to link all libraries statically.</p>
   ]]> 
     
</flag>

<flag name="f-opt-streaming-stores" class="optimization" regexp="-opt-streaming-stores always\b">

   <![CDATA[
      <p>Enables generation of streaming stores for optimization.</p>
      
      <p>always - Enables generation of streaming stores for optimization. 
      The compiler optimizes under the assumption that the application is memory bound.</p>
      <p>auto - compiler decides when streaming stores are used (DEFAULT)</p>
      <p>never - disables generation of streaming stores</p>
   ]]> 
     
</flag>

<flag name="f-Ob0" class="optimization" regexp="-Ob0\b">

   <![CDATA[
      <p>Specifies the level of inline function expansion.</p>
      <p>Ob0 - Disables inlining of user-defined functions.  Note that statement functions are always inlined.</p>
      <p>Ob1 - Enables inlining when an inline keyword or an inline attribute is specified. 
               Also enables inlining according to the C++ language.</p>
      <p>Ob2 - Enables inlining of any function at the compiler's discretion. </p>
      
   ]]> 
     
</flag>

<flag name="f-Wl_-z_muldefs" class="optimization" regexp="-Wl,-z,muldefs\b">

   <![CDATA[
      <p> syntax: -Wl,-z,muldefs</p>

      <p>Enable SmartHeap and/or other library usage by forcing the linker to ignore 
      multiple definitions if present</p>
      
   ]]> 
     
</flag>

<flag name="f-no-scalar-rep" class="optimization" regexp="-no-scalar-rep\b">

   <![CDATA[
      <p>Scalar replacement is not performed during loop transformation.</p>

   ]]> 
     
</flag>

<flag name="f-scalar-rep" class="optimization" regexp="-scalar-rep\b">

   <![CDATA[
      <p>Enables scalar replacement performed during loop transformation.</p>

   ]]> 
     
</flag>

</flagsdescription>

