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

<!-- The lines above are NOT optional.  If you're adept at reading DTDs,
     the one that this file conforms to is at the URL listed above.  
     
     But most humans writing a flags file will want to have it automatically 
     checked using a validating parser such as RXP (available at
     http://www.ltg.ed.ac.uk/~richard/rxp.html), or use one of the on-line
     parsers:
       http://www.stg.brown.edu/service/xmlvalid/
       http://www.cogsci.ed.ac.uk/~richard/xml-check.html
     
     The parser used by the CPU tools is _not_ a validating parser, so it
     may be possible to sneak things by it that would not pass the checkers
     above.  However, if the checkers above say that your file is clean, it's
     clean.

     Flag files submitted to SPEC _will_ be checked by a validating parser.
     Invalid or not-well-formed flag files will be rejected.
-->

<!-- **********************************************************************
     **********************************************************************
     Unless otherwise explicitly noted, all references to "section n.nn"
     refer to flag_description.html, available at

     http://www.spec.org/cpu2006/docs/flag_description.html
     **********************************************************************
     ********************************************************************** -->

<!--
     This file is
       Copyright (C) 2006 Standard Performance Evaluation Corporation
       All Rights Reserved
     
     This file may be freely modified and redistributed, provided that the
     copyright notice above and this notice remain unaltered.

     $Id: flags-simple.xml 4007 2006-03-17 11:34:42Z cloyce $
-->

<flagsdescription>

<title>AIX 5L with IBM XL Compilers SPEC CPU Flags</title>

<style>
<![CDATA[
body { background: white; }
]]>
</style>

<!-- =====================================================================
  The <header> section is also entirely optional.  If it is provided, and
  no class is specified, then it will be inserted verbatim at the top
  of the flags dump.

  If a class is specified, that text will be inserted verbatim before flags
  of that class.  
  
  As the contents should be HTML, it will save lots of time to just enclose
  the whole thing in a CDATA section.  Section 2.3.1 again.
     ===================================================================-->
<header>
<![CDATA[
<p>Compilers: XL V8 C/C++ and XL V10.1 Fortran</p>
<p>Last updated: 19-Jan-2007</p> ]]>
</header>

<!-- =====================================================================
  Information about the meaning of boot-time settings, BIOS options,
  kernel tuning, and so forth can go in the 'platform_settings' section.

  They'll be appended to the end of both the flags dump and per-result flag report.

  As the contents should be HTML, it will save lots of time to just enclose
  the whole thing in a CDATA section.  Section 2.3.1 again.
     ===================================================================-->
<platform_settings>
<![CDATA[
<p>This where I want to put SMT, DCM, SUT, ulimits, Large Page, smtctl, drmgr, bindprocessor descriptions.</p>
]]>
</platform_settings>

<flag
      name="AIX_xlc"
      class="compiler"
      regexp="(?:/\S+/)?xlc\b">

<![CDATA[
<p>
Invoke the IBM XL C compliler. 32-bit binaries are producded by default.
</p>
]]>
</flag>

<flag
      name="AIX_xlC"
      class="compiler"
      regexp="(?:/\S+/)?xlC\b">

<![CDATA[
<p>
Invoke the IBM XL C++ compliler. 32-bit binaries are producded by default.
</p>
]]>
</flag>

<flag
      name="AIX_xlf95"
      class="compiler"
      regexp="(?:/\S+/)?xlf95\b">

<![CDATA[
<p>
Invoke the IBM XL Fortran compliler. 32-bit binaries are producded by default.
</p>
]]>
</flag>

<flag
      name="fdpr"
      class="optimization"
      regexp="(?:/\S+/)?fdpr -q -O3 -p\b">

<![CDATA[
<p>
Invoke the IBM Feedback Directed Program Restructuring FDO utility.
</p>
]]>
</flag>

<flag name="Suppress_splitter"
      class="other"
      regexp="-qsuppress=([^:\s]+):(\S+)(?=\s/$)">
<example>Split -qsuppress=msg1:msg2</example>
<include text="-qsuppress=$2" />
<include text="-qsuppress=$1" />
<display enable="0" />
</flag>

<flag name="F-O5"
      class="optimization">
<example>
-O5
</example>

<![CDATA[
<p>
Perform optimizations for maximum performance. This includes maximum
interprocedural anaylisis on all of the objects presented on the "link" 
step. This level of optimization will increase the compiler's memory
usage and compile time requirements.
</p>

<p>
-O5 is equivalent to the following flags
</p>
]]>
<include flag="F-O3" />
<include flag="F-qipa" flagtext="-qipa=level=2" />
<include flag="F-qarch" flagtext="-qarch=auto" />
<include flag="F-qtune" flagtext="-qtune=auto" />
</flag>

<flag name="F-O4"
      class="optimization">
<example>
-O4
</example>

<![CDATA[
<p>
Perform optimizations for maximum performance. This includes
interprocedural anaylisis on all of the objects presented on the "link" 
step.
</p>

<p>
-O4 is equivalent to the following flags
</p>
]]>
<include flag="F-O3" />
<include flag="F-qipa" flagtext="-qipa=level=1" />
<include flag="F-qarch" flagtext="-qarch=auto" />
<include flag="F-qtune" flagtext="-qtune=auto" />
</flag>

<flag name="F-O3"
      class="optimization">
<example>-O3</example>
<![CDATA[
<p>
Perform some memory and compile time intensive optimizations in
addition to those executed with -O.  The -O3 specific optimizations
have the potential to slightly alter the semantics of a user's program. ....
</p>
]]>
<include flag="F-O" />
<include flag="F-qhot" />
</flag>

<flag name="F-O"
      class="optimization">
<example>-O</example>
<![CDATA[
<p>
Performs the optimizations that the compiler developers considered the
best combination for compilation speed and runtime.
</p>
]]>
</flag>

<flag name="F-qhot"
      class="optimization">
<example>-qhot</example>
<![CDATA[
<p>
Performs high-order transformations on loops during optimization.
</p>
]]>
</flag>

<flag name="F-qarch"
      class="optimization"
      regexp="-qarch=(\S+)\b">
<example>-qarch=pwr5x, -qarch=auto</example>
<![CDATA[
<p>
Produces object code containg instructins that will run on the
specified processors. "auto" selects the processor the complile
is being done on. "pwr5x" is the POWER5+ processor.
</p>

<p>Supported values for this flag are</p>
<ul>
  <li>auto	</li> Slect
  <li>pwr5x	</li>
  <li>pwr5	</li>
  <li>pwr4	</li>
  <li>ppc970	</li>
</ul>
]]>
</flag>

<flag name="F-qtune"
      class="optimization"
      regexp="-qtune=(\S+)\b">
<example>-qtune=pwr4, -qtune=auto</example>
<![CDATA[
<p>
Specifies the architecture system for which the executable program
is optimized.  This includes instruction scheduling and cache setting.

The supported values for <tt>suboption</tt> are:

<ul>
  <li>auto	</li> Use the processor on which the program is compiled.
  <li>pwr5x	</li> The POWER5+ processor based systems.
  <li>pwr5	</li> The POWER5 processor based systems.
  <li>pwr4	</li> The POWER4 processor based systems.
  <li>ppc970	</li> The PPC970 processor based systems.
</ul>
]]>
</flag>

<flag name="F-qipa"
      class="optimization">
<example>
-qipa=level=2
-fipa=noobject
</example>
<![CDATA[
<p>
  <tt>level=1</tt> turns on
</p>

<p>
  <tt>level=2</tt> turns on
</p>

<p>
  <tt>noobject</tt> supression of actual code generation as each source file is processed
</p>

]]>
</flag>

<flag name="F-qalias"
      class="other">
<example>
-qalias=noansi -qalias=nostd
</example>
<![CDATA[
<pre>
 qalias=ansi | noansi
   If ansi is specified, type-based aliasing is
   used during optimization, which restricts the
   lvalues that can be safely used to access a
   data object. The default is ansi for the xlc,
   xlC, and c89 commands. This option has no
   effect unless you also specify the -O option.

 qalias=std |nostd
 Indicates whether the compilation units contain
 any non-standard aliasing (see Compiler Reference
 for more information). If so, specify nostd. 
</pre>
]]>
</flag>

<flag name="F-qalias_size"
      class="other"
      regexp="-qalias_size=(\S+)\b">
<example>
-qalias_size=200000000
</example>
specifies the size of the internal alias table for the compiler to use for alias analysis
</flag>


<flag name="F-qdebug:except"
      class="other">
Causes the compiler to output a traceback if it abends.
</flag>

<flag name="F-qfixed"
      class="portability">
Indicates that the input fortran source program is in fixed form.
</flag>

<flag name="F-qextname"
      class="portability">
Adds an underscore to global entites to match the C compiler ABI
</flag>

<flag name="F-qchars:signed"
      class="portability">
Causes the compiler to treat "char" variables as signed instead of the
default of unsigned.
</flag>

<flag name="F-qalloca"
      class="optimization">
Indicates that the compiler understands how to do alloca().
</flag>

<flag name="F-D_ILS_MACROS"
      class="optimization">
Causes AIX to define "ischar()" (and friends) as macro's and no subroutines.
</flag>

<flag name="F-D__IBM_ENABLE_POOLED_ALLOCATORS__"
      class="optimization">
Causes C++ compiled routines to use pooled memory allocation.
</flag>

<flag name="F-D__IBM_FAST_VECTOR"
      class="optimization">
The __IBM_FAST_VECTOR macro defines a different iterator for the std::vector 
template class. This iterator results in faster code, but is not compatible 
with code using the default iterator for a std::vector template class. 
All uses of std::vector for a data type must use the same iterator.
 Add -D__IBM_FAST_VECTOR to the compile line, or "#define __IBM_FAST_VECTOR 1" 
to your source code to use the faster iterator for std::vector template class.
 You must compile all sources with this macro.
</flag>

<flag name="F-q64"
      class="optimization">
Generates 64 bit ABI binaries.
</flag>

<flag name="F-qfdpr"
      class="other">
The compiler generates additional symbol information for use by the AIX "fdprpro" 
code optimizer.
</flag>

<flag name="F-qalign"
      class="optimization">
<![CDATA[
<pre>
           Specifies what aggregate alignment rules the
                compiler uses for file compilation, where the
                alignment options are:

                bit_packed
                     The compiler uses the bit_packed alignment
                     rules.
                full
                     The compiler uses the RISC System/6000
                     alignment rules. This is the same as power.
                mac68k
                     The compiler uses the Macintosh alignment
                     rules.  This suboption is valid only for 32-
                     bit compilations.
                natural
                     The compiler maps structure members to their
                     natural boundaries.
                packed
                     The compiler uses the packed alignment rules.
                power
                     The compiler uses the RISC System/6000
                     alignment rules.
                twobyte
                     The compiler uses the Macintosh alignment
                     rules.  This suboption is valid only for 32-
                     bit compilations.  The mac68k option is the
                     same as twobyte.

                The default is -qalign=full.
</pre>
]]>
</flag>

<flag name="F-blpdata"
      class="optimization">
Sets the bit in the file's XCOFF header indicating that this
executable will request the use of large pages when they are
available on the system and when the user has an appropriate
privilege
</flag>

<flag name="F-qlargepage"
      class="optimization">
Indicates that a program, designed to execute in a 
large page memory environment, can take advantage 
of large 16 MB pages provided on POWER4 and higher 
based systems.
 </flag>

<flag name="F-lmass"
      class="optimization">
Link the mathematical acceleration subsystem libraries (MASS),
which contain libraries of tuned mathematical intrinsic 
functions.
</flag>

<flag name="F-lessl"
      class="optimization">
Link the Engineering and Scientifc Subroutine Library (ESSL).
</flag>

<flag name="F-qessl"
      class="optimization">
Specifies that, if either -lessl or -lesslsmp are also
specified, then Engineering and Scientific Subroutine Library
(ESSL) routines should be used in place of some Fortran 90
intrinsic procedures when there is a safe opportunity to do so.

</flag>

<flag name="F-qpdf1"
      class="optimization">
The option used in the first pass of a profile directed feedback compile
that causes pdf information to be generated.
</flag>

<flag name="F-qpdf2"
      class="optimization">
The option used in the second pass of a profile directed feedback compile
that causes pdf information to be utilized during optimization.
</flag>

<flag name="F-qlanglvl:extc99"
      class="optimization">
Allows most any c dialect.
</flag>

<flag name="F-qrtti:all"
      class="optimization">
Cause the C++ compiler to generate Run Time Type Identification code
</flag>

<flag name="F-qsmallstack:dynlenonheap"
      class="optimization">
Causes the Fortran compiler to allocate dynamic arrays on the heap instead of the stack
</flag>

<flag name="F-qsuppress"
      class="other"
      regexp="-qsuppress=(\S+)\b">
<example>
-qsuppress=1500-036
</example>
Suppresses the message with the message number specified
</flag>

<flag name="F-bmaxdata:"
      class="other"
      regexp="-bmaxdata:(\S+)\b">
<example>
-bmaxdata:0x8000000
</example>
Causes the system loader to put the heap in it's own segment of the size specified.
This is only required for 32-bit applications, as their segments are 256M.
</flag>

</flagsdescription>
