2
* Automatically Tuned Linear Algebra Software v3.10.1
3
* (C) Copyright 2008 R. Clint Whaley
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions, and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. The name of the ATLAS group or the names of its contributers may
14
* not be used to endorse or promote products derived from this
15
* software without specific written permission.
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS
21
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
* POSSIBILITY OF SUCH DAMAGE.
30
#include "atlas_misc.h"
31
#include "atlas_f77.h"
32
#include "atlas_C2Flapack.h"
35
#define F77ORMRQ Mjoin(PRE,ormrq)
36
#elif defined (UpCase)
37
#define F77ORMRQ Mjoin(PREU,ORMRQ)
38
#elif defined (Add_) || defined(Add__)
39
#define F77ORMRQ Mjoin(PRE,ormrq_)
41
#define PC2F Mjoin(ATL_C2F,PRE)
43
int Mjoin(PC2F,ormrq_wrk)
44
(const enum CBLAS_SIDE Side, const enum CBLAS_TRANSPOSE TA,
45
ATL_CINT M, ATL_CINT N, ATL_CINT K, TYPE *A, ATL_CINT lda, TYPE *TAU,
46
TYPE *C, ATL_CINT ldc, TYPE *wrk, ATL_INT lwrk)
48
#if defined(StringSunStyle)
50
#elif defined(StringStructVal) || defined(StringStructPtr) || \
51
defined(StringCrayStyle)
52
F77_CHAR F77trans, F77Side;
54
F77_INTEGER F77M=M, F77N=N, F77K=K, F77lda=lda, F77ldc=ldc,
55
F77lwrk = lwrk, F77info;
56
#if defined(StringSunStyle)
57
void F77ORMRQ(char*, char*, F77_INTEGER*, F77_INTEGER*, F77_INTEGER*,
58
TYPE*, F77_INTEGER*, TYPE*, TYPE*, F77_INTEGER*, TYPE*,
59
F77_INTEGER*, F77_INTEGER*, F77_INTEGER, F77_INTEGER);
60
#elif defined(StringStructPtr)
61
void F77ORMRQ(F77_CHAR*, F77CHAR*, F77_INTEGER*, F77_INTEGER*,
62
F77_INTEGER*, TYPE*, F77_INTEGER*, TYPE*, TYPE*, F77_INTEGER*,
63
TYPE*, F77_INTEGER*, F77_INTEGER*);
65
void F77ORMRQ(F77_CHAR, F77_CHAR, F77_INTEGER*, F77_INTEGER*,
66
F77_INTEGER*, TYPE*, F77_INTEGER*, TYPE*, TYPE*, F77_INTEGER*,
67
TYPE*, F77_INTEGER*, F77_INTEGER*);
71
if (TA == CblasNoTrans) ctrans = 'N';
72
else if (TA == CblasTrans) ctrans = 'T';
74
if (Side == CblasLeft) cside = 'L';
76
#if defined(StringCrayStyle)
77
f77side = ATL_C2F_TransChar(cside);
78
f77trans = ATL_C2F_TransChar(cuplo);
79
#elif defined(StringStructVal) || defined(StringStructPtr)
81
f77trans.cp = &ctrans;
84
#elif !defined(StringSunStyle)
85
fprintf(stderr, "\n\nF77/C interface not defined!!\n\n");
89
#if defined(StringSunStyle)
90
F77ORMRQ(&cside, &ctrans, &F77M, &F77N, &F77K, A, &F77lda, TAU,
91
C, &F77ldc, wrk, &F77lwrk, &F77info, ONE, ONE);
92
#elif defined(StringStructPtr)
93
F77ORMRQ(&f77side, &f77trans, &F77M, &F77N, &F77K, A, &F77lda, TAU,
94
C, &F77ldc, wrk, &F77lwrk, &F77info);
95
#elif defined(StringStructVal) || defined(StringCrayStyle)
96
F77ORMRQ(&f77side, &f77trans, &F77M, &F77N, &F77K, A, &F77lda, TAU,
97
C, &F77ldc, wrk, &F77lwrk, &F77info);
102
int Mjoin(PC2F,ormrq)
103
(const enum CBLAS_SIDE Side, const enum CBLAS_TRANSPOSE TA,
104
ATL_CINT M, ATL_CINT N, ATL_CINT K, TYPE *A, ATL_CINT lda, TYPE *TAU,
105
TYPE *C, ATL_CINT ldc)
113
* Query routine for optimal workspace, allocate it, and call routine with it
115
ATL_assert(!Mjoin(PC2F,ormrq_wrk)(Side, TA, M, N, K, A, lda, TAU, C, ldc,
118
vp = malloc(ATL_MulBySize(lwrk) + ATL_Cachelen);
120
wrk = ATL_AlignPtr(vp);
121
iret = Mjoin(PC2F,ormrq_wrk)(Side, TA, M, N, K, A, lda, TAU, C, ldc,