text: /*********************************************************************/
  /* Copyright 2009, 2010 The University of Texas at Austin.           */
  /* All rights reserved.                                              */
  /*                                                                   */
  /* Redistribution and use in source and binary forms, with or        */
  /* without modification, are permitted provided that the following   */
  /* conditions are met:                                               */
  /*                                                                   */
  /*   1. Redistributions of source code must retain the above         */
  /*      copyright notice, this list of conditions and the following  */
  /*      disclaimer.                                                  */
  /*                                                                   */
  /*   2. Redistributions in binary form must reproduce the above      */
  /*      copyright notice, this list of conditions and the following  */
  /*      disclaimer in the documentation and/or other materials       */
  /*      provided with the distribution.                              */
  /*                                                                   */
  /*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
  /*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
  /*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
  /*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
  /*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
  /*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
  /*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
  /*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
  /*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
  /*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
  /*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
  /*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
  /*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
  /*    POSSIBILITY OF SUCH DAMAGE.                                    */
  /*                                                                   */
  /* The views and conclusions contained in the software and           */
  /* documentation are those of the authors and should not be          */
  /* interpreted as representing official policies, either expressed   */
  /* or implied, of The University of Texas at Austin.                 */
  /*********************************************************************/
  
  #include <stdio.h>
  #include "common.h"
  #ifdef FUNCTION_PROFILE
  #include "functable.h"
  #endif
  
  #ifdef XDOUBLE
  #define ERROR_NAME "QLAUU2"
  #elif defined(DOUBLE)
  #define ERROR_NAME "DLAUU2"
  #else
  #define ERROR_NAME "SLAUU2"
  #endif
  
  static blasint (*lauu2[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = {
  #ifdef XDOUBLE
    qlauu2_U, qlauu2_L,
  #elif defined(DOUBLE)
    dlauu2_U, dlauu2_L,
  #else
    slauu2_U, slauu2_L,
  #endif
    };
  
  int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){
  
    blas_arg_t args;
  
    blasint uplo_arg = *UPLO;
    blasint uplo;
    blasint info;
    FLOAT *buffer;
  #ifdef PPC440
    extern
  #endif
    FLOAT *sa, *sb;
  
    PRINT_DEBUG_NAME;
  
    args.n    = *N;
    args.a    = (void *)a;
    args.lda  = *ldA;
  
    TOUPPER(uplo_arg);
  
    uplo = -1;
    if (uplo_arg == 'U') uplo = 0;
    if (uplo_arg == 'L') uplo = 1;
  
    info  = 0;
    if (args.lda < MAX(1,args.n)) info = 4;
    if (args.n   < 0)             info = 2;
    if (uplo     < 0)             info = 1;
    if (info) {
      BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME));
      *Info = - info;
      return 0;
    }
  
    *Info = 0;
  
    if (args.n <= 0) return 0;
  
    IDEBUG_START;
  
    FUNCTION_PROFILE_START();
  
  #ifndef PPC440
    buffer = (FLOAT *)blas_memory_alloc(1);
  
    sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A);
    sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B);
  #endif
  
    info = (lauu2[uplo])(&args, NULL, NULL, sa, sb, 0);
  
    *Info = info;
  
  #ifndef PPC440
    blas_memory_free(buffer);
  #endif
  
    FUNCTION_PROFILE_END(1, .5 * args.n * args.n,
  		       args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.))
  		       +  1./6. * args.n * (args.n * args.n - 1));
  
    IDEBUG_END;
  
    return 0;
  }
  