File Coverage

lib/PDL/Primitive-pp-matmult.c
Criterion Covered Total %
statement 96 721 13.3
branch 153 2214 6.9
condition n/a
subroutine n/a
pod n/a
total 249 2935 8.4


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from lib/PDL/Primitive.pd! Do not modify!
5             */
6              
7             #define PDL_FREE_CODE(trans, destroy, comp_free_code, ntpriv_free_code) \
8             if (destroy) { \
9             comp_free_code \
10             } \
11             if ((trans)->dims_redone) { \
12             ntpriv_free_code \
13             }
14              
15             #include "EXTERN.h"
16             #include "perl.h"
17             #include "XSUB.h"
18             #include "pdl.h"
19             #include "pdlcore.h"
20             #define PDL PDL_Primitive
21             extern Core* PDL; /* Structure hold core C functions */
22              
23             #line 1857 "lib/PDL/PP.pm"
24             pdl_error pdl_matmult_readdata(pdl_trans *__privtrans) {
25             pdl_error PDL_err = {0, NULL, 0};
26             #line 27 "lib/PDL/Primitive-pp-matmult.c"
27 133           register PDL_Indx __h_size = __privtrans->ind_sizes[0];
28 133           register PDL_Indx __t_size = __privtrans->ind_sizes[1];
29 133           register PDL_Indx __w_size = __privtrans->ind_sizes[2];
30 133 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in matmult:" "broadcast.incs NULL");
31             /* broadcastloop declarations */
32             int __brcloopval;
33             register PDL_Indx __tind0,__tind1; /* counters along dim */
34 133           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
35             /* dims here are how many steps along those dims */
36 133           register PDL_Indx __tinc0_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
37 133           register PDL_Indx __tinc0_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
38 133           register PDL_Indx __tinc0_c = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
39 133           register PDL_Indx __tinc1_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
40 133           register PDL_Indx __tinc1_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
41 133           register PDL_Indx __tinc1_c = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
42             #define PDL_BROADCASTLOOP_START_matmult_readdata PDL_BROADCASTLOOP_START( \
43             readdata, \
44             __privtrans->broadcast, \
45             __privtrans->vtable, \
46             a_datap += __offsp[0]; \
47             b_datap += __offsp[1]; \
48             c_datap += __offsp[2]; \
49             , \
50             ( ,a_datap += __tinc1_a - __tinc0_a * __tdims0 \
51             ,b_datap += __tinc1_b - __tinc0_b * __tdims0 \
52             ,c_datap += __tinc1_c - __tinc0_c * __tdims0 \
53             ), \
54             ( ,a_datap += __tinc0_a \
55             ,b_datap += __tinc0_b \
56             ,c_datap += __tinc0_c \
57             ) \
58             )
59             #define PDL_BROADCASTLOOP_END_matmult_readdata PDL_BROADCASTLOOP_END( \
60             __privtrans->broadcast, \
61             a_datap -= __tinc1_a * __tdims1 + __offsp[0]; \
62             b_datap -= __tinc1_b * __tdims1 + __offsp[1]; \
63             c_datap -= __tinc1_c * __tdims1 + __offsp[2]; \
64             )
65 133           register PDL_Indx __inc_a_t = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_a_t;register PDL_Indx __inc_a_h = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_a_h;
66 133           register PDL_Indx __inc_b_w = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_b_w;register PDL_Indx __inc_b_t = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_b_t;
67 133           register PDL_Indx __inc_c_w = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_c_w;register PDL_Indx __inc_c_h = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_c_h;
68             #ifndef PDL_DECLARE_PARAMS_matmult_1
69             #define PDL_DECLARE_PARAMS_matmult_1(PDL_TYPE_OP,PDL_PPSYM_OP) \
70             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, a, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
71             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, b, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
72             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, c, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP)
73             #endif
74 133 100         if ( __privtrans->bvalflag ) { /* ** do 'bad' Code ** */
75             #define PDL_BAD_CODE
76             #define PDL_IF_BAD(t,f) t
77 1           switch (__privtrans->__datatype) { /* Start generic switch */
78 0           case PDL_SB: {
79 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_SByte,A)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
80 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_SByte);
81              
82             // Cache the dimincs to avoid constant lookups
83 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
84 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
85              
86 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
87             // Loop over tiles
88 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
89 0           PDL_Indx h_outer = h, w_outer = w;
90             // Zero the output for this tile
91 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
92 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
93             // Cache the accumulated value for the output
94 0           PDL_SByte cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
95 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,A,c_badval_isnan)) continue;,)
    0          
96             // Cache data pointers before 't' run through tile
97 0           PDL_SByte *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
98 0           PDL_SByte *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
99             // Hotspot - run the 't' summation
100 0           PDL_Indx t_outer = t;
101 0           PDL_IF_BAD(char c_isbad = 0;,)
102 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
103 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,A,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,A,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
104 0           cc += *ad * *bd;
105 0           ad += atdi;
106 0           bd += btdi;
107             }} /* Close t=t_outer:t_outer+tsiz */
108             // put the output back to be further accumulated later
109 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
110 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
111             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
112             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
113 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
114             }
115 0           } break;
116 0           case PDL_B: {
117 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
118 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Byte);
119              
120             // Cache the dimincs to avoid constant lookups
121 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
122 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
123              
124 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
125             // Loop over tiles
126 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
127 0           PDL_Indx h_outer = h, w_outer = w;
128             // Zero the output for this tile
129 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
130 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
131             // Cache the accumulated value for the output
132 0           PDL_Byte cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
133 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,B,c_badval_isnan)) continue;,)
    0          
134             // Cache data pointers before 't' run through tile
135 0           PDL_Byte *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
136 0           PDL_Byte *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
137             // Hotspot - run the 't' summation
138 0           PDL_Indx t_outer = t;
139 0           PDL_IF_BAD(char c_isbad = 0;,)
140 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
141 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,B,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,B,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
142 0           cc += *ad * *bd;
143 0           ad += atdi;
144 0           bd += btdi;
145             }} /* Close t=t_outer:t_outer+tsiz */
146             // put the output back to be further accumulated later
147 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
148 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
149             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
150             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
151 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
152             }
153 0           } break;
154 0           case PDL_S: {
155 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Short,S)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
156 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Short);
157              
158             // Cache the dimincs to avoid constant lookups
159 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
160 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
161              
162 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
163             // Loop over tiles
164 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
165 0           PDL_Indx h_outer = h, w_outer = w;
166             // Zero the output for this tile
167 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
168 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
169             // Cache the accumulated value for the output
170 0           PDL_Short cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
171 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,S,c_badval_isnan)) continue;,)
    0          
172             // Cache data pointers before 't' run through tile
173 0           PDL_Short *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
174 0           PDL_Short *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
175             // Hotspot - run the 't' summation
176 0           PDL_Indx t_outer = t;
177 0           PDL_IF_BAD(char c_isbad = 0;,)
178 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
179 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,S,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,S,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
180 0           cc += *ad * *bd;
181 0           ad += atdi;
182 0           bd += btdi;
183             }} /* Close t=t_outer:t_outer+tsiz */
184             // put the output back to be further accumulated later
185 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
186 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
187             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
188             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
189 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
190             }
191 0           } break;
192 0           case PDL_US: {
193 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Ushort,U)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
194 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Ushort);
195              
196             // Cache the dimincs to avoid constant lookups
197 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
198 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
199              
200 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
201             // Loop over tiles
202 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
203 0           PDL_Indx h_outer = h, w_outer = w;
204             // Zero the output for this tile
205 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
206 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
207             // Cache the accumulated value for the output
208 0           PDL_Ushort cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
209 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,U,c_badval_isnan)) continue;,)
    0          
210             // Cache data pointers before 't' run through tile
211 0           PDL_Ushort *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
212 0           PDL_Ushort *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
213             // Hotspot - run the 't' summation
214 0           PDL_Indx t_outer = t;
215 0           PDL_IF_BAD(char c_isbad = 0;,)
216 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
217 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,U,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,U,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
218 0           cc += *ad * *bd;
219 0           ad += atdi;
220 0           bd += btdi;
221             }} /* Close t=t_outer:t_outer+tsiz */
222             // put the output back to be further accumulated later
223 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
224 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
225             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
226             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
227 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
228             }
229 0           } break;
230 0           case PDL_L: {
231 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
232 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Long);
233              
234             // Cache the dimincs to avoid constant lookups
235 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
236 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
237              
238 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
239             // Loop over tiles
240 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
241 0           PDL_Indx h_outer = h, w_outer = w;
242             // Zero the output for this tile
243 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
244 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
245             // Cache the accumulated value for the output
246 0           PDL_Long cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
247 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,L,c_badval_isnan)) continue;,)
    0          
248             // Cache data pointers before 't' run through tile
249 0           PDL_Long *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
250 0           PDL_Long *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
251             // Hotspot - run the 't' summation
252 0           PDL_Indx t_outer = t;
253 0           PDL_IF_BAD(char c_isbad = 0;,)
254 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
255 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,L,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,L,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
256 0           cc += *ad * *bd;
257 0           ad += atdi;
258 0           bd += btdi;
259             }} /* Close t=t_outer:t_outer+tsiz */
260             // put the output back to be further accumulated later
261 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
262 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
263             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
264             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
265 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
266             }
267 0           } break;
268 0           case PDL_UL: {
269 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_ULong,K)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
270 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_ULong);
271              
272             // Cache the dimincs to avoid constant lookups
273 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
274 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
275              
276 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
277             // Loop over tiles
278 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
279 0           PDL_Indx h_outer = h, w_outer = w;
280             // Zero the output for this tile
281 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
282 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
283             // Cache the accumulated value for the output
284 0           PDL_ULong cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
285 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,K,c_badval_isnan)) continue;,)
    0          
286             // Cache data pointers before 't' run through tile
287 0           PDL_ULong *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
288 0           PDL_ULong *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
289             // Hotspot - run the 't' summation
290 0           PDL_Indx t_outer = t;
291 0           PDL_IF_BAD(char c_isbad = 0;,)
292 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
293 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,K,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,K,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
294 0           cc += *ad * *bd;
295 0           ad += atdi;
296 0           bd += btdi;
297             }} /* Close t=t_outer:t_outer+tsiz */
298             // put the output back to be further accumulated later
299 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
300 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
301             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
302             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
303 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
304             }
305 0           } break;
306 0           case PDL_IND: {
307 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
308 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Indx);
309              
310             // Cache the dimincs to avoid constant lookups
311 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
312 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
313              
314 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
315             // Loop over tiles
316 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
317 0           PDL_Indx h_outer = h, w_outer = w;
318             // Zero the output for this tile
319 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
320 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
321             // Cache the accumulated value for the output
322 0           PDL_Indx cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
323 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,N,c_badval_isnan)) continue;,)
    0          
324             // Cache data pointers before 't' run through tile
325 0           PDL_Indx *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
326 0           PDL_Indx *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
327             // Hotspot - run the 't' summation
328 0           PDL_Indx t_outer = t;
329 0           PDL_IF_BAD(char c_isbad = 0;,)
330 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
331 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,N,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,N,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
332 0           cc += *ad * *bd;
333 0           ad += atdi;
334 0           bd += btdi;
335             }} /* Close t=t_outer:t_outer+tsiz */
336             // put the output back to be further accumulated later
337 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
338 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
339             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
340             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
341 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
342             }
343 0           } break;
344 0           case PDL_ULL: {
345 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_ULongLong,P)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
346 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_ULongLong);
347              
348             // Cache the dimincs to avoid constant lookups
349 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
350 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
351              
352 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
353             // Loop over tiles
354 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
355 0           PDL_Indx h_outer = h, w_outer = w;
356             // Zero the output for this tile
357 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
358 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
359             // Cache the accumulated value for the output
360 0           PDL_ULongLong cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
361 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,P,c_badval_isnan)) continue;,)
    0          
362             // Cache data pointers before 't' run through tile
363 0           PDL_ULongLong *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
364 0           PDL_ULongLong *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
365             // Hotspot - run the 't' summation
366 0           PDL_Indx t_outer = t;
367 0           PDL_IF_BAD(char c_isbad = 0;,)
368 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
369 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,P,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,P,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
370 0           cc += *ad * *bd;
371 0           ad += atdi;
372 0           bd += btdi;
373             }} /* Close t=t_outer:t_outer+tsiz */
374             // put the output back to be further accumulated later
375 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
376 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
377             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
378             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
379 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
380             }
381 0           } break;
382 0           case PDL_LL: {
383 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_LongLong,Q)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
384 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_LongLong);
385              
386             // Cache the dimincs to avoid constant lookups
387 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
388 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
389              
390 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
391             // Loop over tiles
392 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
393 0           PDL_Indx h_outer = h, w_outer = w;
394             // Zero the output for this tile
395 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
396 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
397             // Cache the accumulated value for the output
398 0           PDL_LongLong cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
399 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,Q,c_badval_isnan)) continue;,)
    0          
400             // Cache data pointers before 't' run through tile
401 0           PDL_LongLong *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
402 0           PDL_LongLong *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
403             // Hotspot - run the 't' summation
404 0           PDL_Indx t_outer = t;
405 0           PDL_IF_BAD(char c_isbad = 0;,)
406 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
407 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,Q,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,Q,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
408 0           cc += *ad * *bd;
409 0           ad += atdi;
410 0           bd += btdi;
411             }} /* Close t=t_outer:t_outer+tsiz */
412             // put the output back to be further accumulated later
413 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
414 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
415             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
416             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
417 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
418             }
419 0           } break;
420 0           case PDL_F: {
421 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Float,F)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
422 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Float);
423              
424             // Cache the dimincs to avoid constant lookups
425 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
426 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
427              
428 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
429             // Loop over tiles
430 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
431 0           PDL_Indx h_outer = h, w_outer = w;
432             // Zero the output for this tile
433 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
434 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
435             // Cache the accumulated value for the output
436 0           PDL_Float cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
437 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,F,c_badval_isnan)) continue;,)
    0          
438             // Cache data pointers before 't' run through tile
439 0           PDL_Float *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
440 0           PDL_Float *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
441             // Hotspot - run the 't' summation
442 0           PDL_Indx t_outer = t;
443 0           PDL_IF_BAD(char c_isbad = 0;,)
444 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
445 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,F,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,F,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
    0          
    0          
446 0           cc += *ad * *bd;
447 0           ad += atdi;
448 0           bd += btdi;
449             }} /* Close t=t_outer:t_outer+tsiz */
450             // put the output back to be further accumulated later
451 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
452 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
453             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
454             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
455 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
456             }
457 0           } break;
458 1           case PDL_D: {
459 1 50         PDL_DECLARE_PARAMS_matmult_1(PDL_Double,D)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
460 1           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Double);
461              
462             // Cache the dimincs to avoid constant lookups
463 1 50         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
464 1 50         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
465              
466 4 50         PDL_BROADCASTLOOP_START_matmult_readdata
    50          
    50          
    50          
    50          
    100          
    100          
467             // Loop over tiles
468 3 100         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    100          
469 1           PDL_Indx h_outer = h, w_outer = w;
470             // Zero the output for this tile
471 10 100         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    100          
472 11 100         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    100          
    100          
473             // Cache the accumulated value for the output
474 6           PDL_Double cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
475 6 50         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,D,c_badval_isnan)) continue;,)
    50          
476             // Cache data pointers before 't' run through tile
477 6           PDL_Double *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
478 6           PDL_Double *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
479             // Hotspot - run the 't' summation
480 6           PDL_Indx t_outer = t;
481 6           PDL_IF_BAD(char c_isbad = 0;,)
482 20 100         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
483 16 50         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,D,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,D,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    100          
    50          
    0          
    50          
484 14           cc += *ad * *bd;
485 14           ad += atdi;
486 14           bd += btdi;
487             }} /* Close t=t_outer:t_outer+tsiz */
488             // put the output back to be further accumulated later
489 6 100         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
490 4           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
491             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
492             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
493 1 50         PDL_BROADCASTLOOP_END_matmult_readdata
    50          
494             }
495 1           } break;
496 0           case PDL_LD: {
497 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
498 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_LDouble);
499              
500             // Cache the dimincs to avoid constant lookups
501 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
502 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
503              
504 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
505             // Loop over tiles
506 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
507 0           PDL_Indx h_outer = h, w_outer = w;
508             // Zero the output for this tile
509 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
510 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
511             // Cache the accumulated value for the output
512 0           PDL_LDouble cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
513 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,E,c_badval_isnan)) continue;,)
    0          
514             // Cache data pointers before 't' run through tile
515 0           PDL_LDouble *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
516 0           PDL_LDouble *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
517             // Hotspot - run the 't' summation
518 0           PDL_Indx t_outer = t;
519 0           PDL_IF_BAD(char c_isbad = 0;,)
520 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
521 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,E,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,E,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
    0          
    0          
522 0           cc += *ad * *bd;
523 0           ad += atdi;
524 0           bd += btdi;
525             }} /* Close t=t_outer:t_outer+tsiz */
526             // put the output back to be further accumulated later
527 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
528 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
529             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
530             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
531 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
532             }
533 0           } break;
534 0           case PDL_CF: {
535 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_CFloat,G)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
536 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_CFloat);
537              
538             // Cache the dimincs to avoid constant lookups
539 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
540 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
541              
542 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
543             // Loop over tiles
544 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
545 0           PDL_Indx h_outer = h, w_outer = w;
546             // Zero the output for this tile
547 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
548 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
549             // Cache the accumulated value for the output
550 0           PDL_CFloat cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
551 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,G,c_badval_isnan)) continue;,)
    0          
    0          
    0          
552             // Cache data pointers before 't' run through tile
553 0           PDL_CFloat *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
554 0           PDL_CFloat *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
555             // Hotspot - run the 't' summation
556 0           PDL_Indx t_outer = t;
557 0           PDL_IF_BAD(char c_isbad = 0;,)
558 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
559 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,G,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,G,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
560 0           cc += *ad * *bd;
561 0           ad += atdi;
562 0           bd += btdi;
563             }} /* Close t=t_outer:t_outer+tsiz */
564             // put the output back to be further accumulated later
565 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
566 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
567             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
568             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
569 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
570             }
571 0           } break;
572 0           case PDL_CD: {
573 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_CDouble,C)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
574 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_CDouble);
575              
576             // Cache the dimincs to avoid constant lookups
577 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
578 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
579              
580 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
581             // Loop over tiles
582 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
583 0           PDL_Indx h_outer = h, w_outer = w;
584             // Zero the output for this tile
585 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
586 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
587             // Cache the accumulated value for the output
588 0           PDL_CDouble cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
589 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,C,c_badval_isnan)) continue;,)
    0          
    0          
    0          
590             // Cache data pointers before 't' run through tile
591 0           PDL_CDouble *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
592 0           PDL_CDouble *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
593             // Hotspot - run the 't' summation
594 0           PDL_Indx t_outer = t;
595 0           PDL_IF_BAD(char c_isbad = 0;,)
596 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
597 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,C,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,C,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
598 0           cc += *ad * *bd;
599 0           ad += atdi;
600 0           bd += btdi;
601             }} /* Close t=t_outer:t_outer+tsiz */
602             // put the output back to be further accumulated later
603 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
604 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
605             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
606             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
607 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
608             }
609 0           } break;
610 0           case PDL_CLD: {
611 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_CLDouble,H)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
612 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_CLDouble);
613              
614             // Cache the dimincs to avoid constant lookups
615 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
616 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
617              
618 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
619             // Loop over tiles
620 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
621 0           PDL_Indx h_outer = h, w_outer = w;
622             // Zero the output for this tile
623 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
624 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
625             // Cache the accumulated value for the output
626 0           PDL_CLDouble cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
627 0 0         PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,H,c_badval_isnan)) continue;,)
    0          
    0          
    0          
628             // Cache data pointers before 't' run through tile
629 0           PDL_CLDouble *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
630 0           PDL_CLDouble *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
631             // Hotspot - run the 't' summation
632 0           PDL_Indx t_outer = t;
633 0           PDL_IF_BAD(char c_isbad = 0;,)
634 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
635 0 0         PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,H,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,H,b_badval_isnan)) { c_isbad = 1; break; },)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
636 0           cc += *ad * *bd;
637 0           ad += atdi;
638 0           bd += btdi;
639             }} /* Close t=t_outer:t_outer+tsiz */
640             // put the output back to be further accumulated later
641 0 0         PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
642 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
643             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
644             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
645 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
646             }
647 0           } break;
648 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in matmult: unhandled datatype(%d), only handles (ABSULKNPQFDEGCH)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
649             }
650             #undef PDL_BAD_CODE
651             #undef PDL_IF_BAD
652             } else { /* ** else do 'good' Code ** */
653             #define PDL_IF_BAD(t,f) f
654 132           switch (__privtrans->__datatype) { /* Start generic switch */
655 0           case PDL_SB: {
656 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_SByte,A)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
657 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_SByte);
658              
659 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
660 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
661              
662 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
663 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
664 0           PDL_Indx h_outer = h, w_outer = w;
665 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
666 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
667 0           PDL_SByte cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
668             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,A,c_badval_isnan)) continue;,)
669 0           PDL_SByte *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
670 0           PDL_SByte *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
671 0           PDL_Indx t_outer = t;
672             PDL_IF_BAD(char c_isbad = 0;,)
673 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
674             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,A,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,A,b_badval_isnan)) { c_isbad = 1; break; },)
675 0           cc += *ad * *bd;
676 0           ad += atdi;
677 0           bd += btdi;
678             }} /* Close t=t_outer:t_outer+tsiz */
679             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
680 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
681             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
682             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
683 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
684             }
685 0           } break;
686 0           case PDL_B: {
687 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
688 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Byte);
689              
690 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
691 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
692              
693 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
694 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
695 0           PDL_Indx h_outer = h, w_outer = w;
696 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
697 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
698 0           PDL_Byte cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
699             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,B,c_badval_isnan)) continue;,)
700 0           PDL_Byte *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
701 0           PDL_Byte *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
702 0           PDL_Indx t_outer = t;
703             PDL_IF_BAD(char c_isbad = 0;,)
704 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
705             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,B,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,B,b_badval_isnan)) { c_isbad = 1; break; },)
706 0           cc += *ad * *bd;
707 0           ad += atdi;
708 0           bd += btdi;
709             }} /* Close t=t_outer:t_outer+tsiz */
710             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
711 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
712             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
713             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
714 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
715             }
716 0           } break;
717 0           case PDL_S: {
718 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Short,S)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
719 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Short);
720              
721 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
722 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
723              
724 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
725 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
726 0           PDL_Indx h_outer = h, w_outer = w;
727 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
728 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
729 0           PDL_Short cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
730             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,S,c_badval_isnan)) continue;,)
731 0           PDL_Short *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
732 0           PDL_Short *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
733 0           PDL_Indx t_outer = t;
734             PDL_IF_BAD(char c_isbad = 0;,)
735 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
736             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,S,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,S,b_badval_isnan)) { c_isbad = 1; break; },)
737 0           cc += *ad * *bd;
738 0           ad += atdi;
739 0           bd += btdi;
740             }} /* Close t=t_outer:t_outer+tsiz */
741             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
742 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
743             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
744             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
745 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
746             }
747 0           } break;
748 0           case PDL_US: {
749 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Ushort,U)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
750 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Ushort);
751              
752 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
753 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
754              
755 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
756 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
757 0           PDL_Indx h_outer = h, w_outer = w;
758 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
759 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
760 0           PDL_Ushort cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
761             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,U,c_badval_isnan)) continue;,)
762 0           PDL_Ushort *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
763 0           PDL_Ushort *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
764 0           PDL_Indx t_outer = t;
765             PDL_IF_BAD(char c_isbad = 0;,)
766 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
767             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,U,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,U,b_badval_isnan)) { c_isbad = 1; break; },)
768 0           cc += *ad * *bd;
769 0           ad += atdi;
770 0           bd += btdi;
771             }} /* Close t=t_outer:t_outer+tsiz */
772             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
773 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
774             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
775             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
776 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
777             }
778 0           } break;
779 0           case PDL_L: {
780 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
781 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Long);
782              
783 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
784 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
785              
786 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
787 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
788 0           PDL_Indx h_outer = h, w_outer = w;
789 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
790 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
791 0           PDL_Long cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
792             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,L,c_badval_isnan)) continue;,)
793 0           PDL_Long *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
794 0           PDL_Long *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
795 0           PDL_Indx t_outer = t;
796             PDL_IF_BAD(char c_isbad = 0;,)
797 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
798             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,L,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,L,b_badval_isnan)) { c_isbad = 1; break; },)
799 0           cc += *ad * *bd;
800 0           ad += atdi;
801 0           bd += btdi;
802             }} /* Close t=t_outer:t_outer+tsiz */
803             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
804 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
805             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
806             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
807 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
808             }
809 0           } break;
810 0           case PDL_UL: {
811 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_ULong,K)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
812 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_ULong);
813              
814 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
815 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
816              
817 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
818 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
819 0           PDL_Indx h_outer = h, w_outer = w;
820 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
821 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
822 0           PDL_ULong cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
823             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,K,c_badval_isnan)) continue;,)
824 0           PDL_ULong *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
825 0           PDL_ULong *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
826 0           PDL_Indx t_outer = t;
827             PDL_IF_BAD(char c_isbad = 0;,)
828 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
829             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,K,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,K,b_badval_isnan)) { c_isbad = 1; break; },)
830 0           cc += *ad * *bd;
831 0           ad += atdi;
832 0           bd += btdi;
833             }} /* Close t=t_outer:t_outer+tsiz */
834             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
835 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
836             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
837             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
838 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
839             }
840 0           } break;
841 0           case PDL_IND: {
842 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
843 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Indx);
844              
845 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
846 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
847              
848 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
849 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
850 0           PDL_Indx h_outer = h, w_outer = w;
851 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
852 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
853 0           PDL_Indx cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
854             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,N,c_badval_isnan)) continue;,)
855 0           PDL_Indx *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
856 0           PDL_Indx *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
857 0           PDL_Indx t_outer = t;
858             PDL_IF_BAD(char c_isbad = 0;,)
859 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
860             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,N,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,N,b_badval_isnan)) { c_isbad = 1; break; },)
861 0           cc += *ad * *bd;
862 0           ad += atdi;
863 0           bd += btdi;
864             }} /* Close t=t_outer:t_outer+tsiz */
865             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
866 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
867             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
868             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
869 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
870             }
871 0           } break;
872 0           case PDL_ULL: {
873 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_ULongLong,P)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
874 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_ULongLong);
875              
876 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
877 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
878              
879 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
880 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
881 0           PDL_Indx h_outer = h, w_outer = w;
882 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
883 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
884 0           PDL_ULongLong cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
885             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,P,c_badval_isnan)) continue;,)
886 0           PDL_ULongLong *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
887 0           PDL_ULongLong *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
888 0           PDL_Indx t_outer = t;
889             PDL_IF_BAD(char c_isbad = 0;,)
890 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
891             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,P,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,P,b_badval_isnan)) { c_isbad = 1; break; },)
892 0           cc += *ad * *bd;
893 0           ad += atdi;
894 0           bd += btdi;
895             }} /* Close t=t_outer:t_outer+tsiz */
896             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
897 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
898             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
899             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
900 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
901             }
902 0           } break;
903 0           case PDL_LL: {
904 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_LongLong,Q)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
905 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_LongLong);
906              
907 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
908 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
909              
910 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
911 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
912 0           PDL_Indx h_outer = h, w_outer = w;
913 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
914 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
915 0           PDL_LongLong cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
916             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,Q,c_badval_isnan)) continue;,)
917 0           PDL_LongLong *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
918 0           PDL_LongLong *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
919 0           PDL_Indx t_outer = t;
920             PDL_IF_BAD(char c_isbad = 0;,)
921 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
922             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,Q,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,Q,b_badval_isnan)) { c_isbad = 1; break; },)
923 0           cc += *ad * *bd;
924 0           ad += atdi;
925 0           bd += btdi;
926             }} /* Close t=t_outer:t_outer+tsiz */
927             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
928 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
929             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
930             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
931 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
932             }
933 0           } break;
934 0           case PDL_F: {
935 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_Float,F)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
936 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Float);
937              
938 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
939 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
940              
941 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
942 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
943 0           PDL_Indx h_outer = h, w_outer = w;
944 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
945 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
946 0           PDL_Float cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
947             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,F,c_badval_isnan)) continue;,)
948 0           PDL_Float *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
949 0           PDL_Float *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
950 0           PDL_Indx t_outer = t;
951             PDL_IF_BAD(char c_isbad = 0;,)
952 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
953             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,F,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,F,b_badval_isnan)) { c_isbad = 1; break; },)
954 0           cc += *ad * *bd;
955 0           ad += atdi;
956 0           bd += btdi;
957             }} /* Close t=t_outer:t_outer+tsiz */
958             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
959 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
960             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
961             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
962 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
963             }
964 0           } break;
965 126           case PDL_D: {
966 126 100         PDL_DECLARE_PARAMS_matmult_1(PDL_Double,D)
    50          
    50          
    50          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
967 126           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_Double);
968              
969 126 100         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
970 126 100         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
971              
972 972 50         PDL_BROADCASTLOOP_START_matmult_readdata
    50          
    50          
    50          
    50          
    100          
    100          
973 7014 100         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    100          
974 3213           PDL_Indx h_outer = h, w_outer = w;
975 73658 100         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    100          
976 77261 100         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    100          
    100          
977 47801           PDL_Double cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
978             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,D,c_badval_isnan)) continue;,)
979 47801           PDL_Double *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
980 47801           PDL_Double *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
981 47801           PDL_Indx t_outer = t;
982             PDL_IF_BAD(char c_isbad = 0;,)
983 150458 100         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
984             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,D,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,D,b_badval_isnan)) { c_isbad = 1; break; },)
985 102657           cc += *ad * *bd;
986 102657           ad += atdi;
987 102657           bd += btdi;
988             }} /* Close t=t_outer:t_outer+tsiz */
989             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
990 47801           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
991             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
992             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
993 126 50         PDL_BROADCASTLOOP_END_matmult_readdata
    50          
994             }
995 126           } break;
996 0           case PDL_LD: {
997 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
998 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_LDouble);
999              
1000 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
1001 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
1002              
1003 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1004 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
1005 0           PDL_Indx h_outer = h, w_outer = w;
1006 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
1007 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
1008 0           PDL_LDouble cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
1009             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,E,c_badval_isnan)) continue;,)
1010 0           PDL_LDouble *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
1011 0           PDL_LDouble *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
1012 0           PDL_Indx t_outer = t;
1013             PDL_IF_BAD(char c_isbad = 0;,)
1014 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
1015             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,E,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,E,b_badval_isnan)) { c_isbad = 1; break; },)
1016 0           cc += *ad * *bd;
1017 0           ad += atdi;
1018 0           bd += btdi;
1019             }} /* Close t=t_outer:t_outer+tsiz */
1020             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
1021 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
1022             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
1023             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
1024 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
1025             }
1026 0           } break;
1027 0           case PDL_CF: {
1028 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_CFloat,G)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1029 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_CFloat);
1030              
1031 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
1032 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
1033              
1034 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1035 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
1036 0           PDL_Indx h_outer = h, w_outer = w;
1037 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
1038 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
1039 0           PDL_CFloat cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
1040             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,G,c_badval_isnan)) continue;,)
1041 0           PDL_CFloat *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
1042 0           PDL_CFloat *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
1043 0           PDL_Indx t_outer = t;
1044             PDL_IF_BAD(char c_isbad = 0;,)
1045 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
1046             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,G,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,G,b_badval_isnan)) { c_isbad = 1; break; },)
1047 0           cc += *ad * *bd;
1048 0           ad += atdi;
1049 0           bd += btdi;
1050             }} /* Close t=t_outer:t_outer+tsiz */
1051             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
1052 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
1053             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
1054             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
1055 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
1056             }
1057 0           } break;
1058 6           case PDL_CD: {
1059 6 100         PDL_DECLARE_PARAMS_matmult_1(PDL_CDouble,C)
    50          
    50          
    50          
    50          
    50          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1060 6           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_CDouble);
1061              
1062 6 100         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
1063 6 100         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
1064              
1065 24 50         PDL_BROADCASTLOOP_START_matmult_readdata
    50          
    50          
    50          
    50          
    100          
    100          
1066 18 100         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    100          
1067 6           PDL_Indx h_outer = h, w_outer = w;
1068 46 100         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    100          
1069 52 100         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    100          
    100          
1070 21           PDL_CDouble cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
1071             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,C,c_badval_isnan)) continue;,)
1072 21           PDL_CDouble *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
1073 21           PDL_CDouble *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
1074 21           PDL_Indx t_outer = t;
1075             PDL_IF_BAD(char c_isbad = 0;,)
1076 96 100         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
1077             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,C,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,C,b_badval_isnan)) { c_isbad = 1; break; },)
1078 75           cc += *ad * *bd;
1079 75           ad += atdi;
1080 75           bd += btdi;
1081             }} /* Close t=t_outer:t_outer+tsiz */
1082             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
1083 21           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
1084             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
1085             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
1086 6 50         PDL_BROADCASTLOOP_END_matmult_readdata
    50          
1087             }
1088 6           } break;
1089 0           case PDL_CLD: {
1090 0 0         PDL_DECLARE_PARAMS_matmult_1(PDL_CLDouble,H)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1091 0           {PDL_Indx tsiz = 8 * sizeof(double) / sizeof(PDL_CLDouble);
1092              
1093 0 0         PDL_Indx atdi = PDL_REPRINCS(__privtrans->pdls[0])[0];
1094 0 0         PDL_Indx btdi = PDL_REPRINCS(__privtrans->pdls[1])[1];
1095              
1096 0 0         PDL_BROADCASTLOOP_START_matmult_readdata
    0          
    0          
    0          
    0          
    0          
    0          
1097 0 0         {/* Open h=::tsiz */ PDL_EXPAND2(register PDL_Indx h=0, __h_stop=(__h_size)); for(; h<__h_stop; h+=tsiz) {{/* Open w=::tsiz */ PDL_EXPAND2(register PDL_Indx w=0, __w_stop=(__w_size)); for(; w<__w_stop; w+=tsiz) {
    0          
1098 0           PDL_Indx h_outer = h, w_outer = w;
1099 0 0         {/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = 0; }} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
    0          
1100 0 0         {/* Open t=::tsiz */ PDL_EXPAND2(register PDL_Indx t=0, __t_stop=(__t_size)); for(; t<__t_stop; t+=tsiz) {{/* Open h=h_outer:h_outer+tsiz */ PDL_EXPAND2(register PDL_Indx h=PDLMAX((h_outer),0), __h_stop=PDLMIN(h_outer+tsiz, (__h_size))); for(; h<__h_stop; h+=1) {{/* Open w=w_outer:w_outer+tsiz */ PDL_EXPAND2(register PDL_Indx w=PDLMAX((w_outer),0), __w_stop=PDLMIN(w_outer+tsiz, (__w_size))); for(; w<__w_stop; w+=1) {
    0          
    0          
1101 0           PDL_CLDouble cc = (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))];
1102             PDL_IF_BAD(if (PDL_ISBAD2(cc,c_badval,H,c_badval_isnan)) continue;,)
1103 0           PDL_CLDouble *ad = &((a_datap)[0+(__inc_a_t*(t))+(__inc_a_h*(h))]);
1104 0           PDL_CLDouble *bd = &((b_datap)[0+(__inc_b_w*(w))+(__inc_b_t*(t))]);
1105 0           PDL_Indx t_outer = t;
1106             PDL_IF_BAD(char c_isbad = 0;,)
1107 0 0         {/* Open t=t_outer:t_outer+tsiz */ PDL_EXPAND2(register PDL_Indx t=PDLMAX((t_outer),0), __t_stop=PDLMIN(t_outer+tsiz, (__t_size))); for(; t<__t_stop; t+=1) {
1108             PDL_IF_BAD(if (PDL_ISBAD2(*ad,a_badval,H,a_badval_isnan) || PDL_ISBAD2(*bd,b_badval,H,b_badval_isnan)) { c_isbad = 1; break; },)
1109 0           cc += *ad * *bd;
1110 0           ad += atdi;
1111 0           bd += btdi;
1112             }} /* Close t=t_outer:t_outer+tsiz */
1113             PDL_IF_BAD(if (c_isbad) { (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))]=c_badval; continue; },)
1114 0           (c_datap)[0+(__inc_c_w*(w))+(__inc_c_h*(h))] = cc;
1115             }} /* Close t=::tsiz */}} /* Close h=h_outer:h_outer+tsiz */}} /* Close w=w_outer:w_outer+tsiz */
1116             }} /* Close h=::tsiz */}} /* Close w=::tsiz */
1117 0 0         PDL_BROADCASTLOOP_END_matmult_readdata
    0          
1118             }
1119 0           } break;
1120 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in matmult: unhandled datatype(%d), only handles (ABSULKNPQFDEGCH)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1121             }
1122             #undef PDL_IF_BAD
1123             }
1124 133           return PDL_err;
1125             }
1126              
1127             static pdl_datatypes pdl_matmult_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, PDL_CF, PDL_CD, PDL_CLD, -1 };
1128             static PDL_Indx pdl_matmult_vtable_realdims[] = { 2, 2, 2 };
1129             static char *pdl_matmult_vtable_parnames[] = { "a","b","c" };
1130             static short pdl_matmult_vtable_parflags[] = {
1131             0,
1132             0,
1133             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE
1134             };
1135             static pdl_datatypes pdl_matmult_vtable_partypes[] = { -1, -1, -1 };
1136             static PDL_Indx pdl_matmult_vtable_realdims_starts[] = { 0, 2, 4 };
1137             static PDL_Indx pdl_matmult_vtable_realdims_ind_ids[] = { 1, 0, 2, 1, 2, 0 };
1138             static char *pdl_matmult_vtable_indnames[] = { "h","t","w" };
1139             pdl_transvtable pdl_matmult_vtable = {
1140             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADPROCESS, 0, pdl_matmult_vtable_gentypes, 2, 3, NULL /*CORE21*/,
1141             pdl_matmult_vtable_realdims, pdl_matmult_vtable_parnames,
1142             pdl_matmult_vtable_parflags, pdl_matmult_vtable_partypes,
1143             pdl_matmult_vtable_realdims_starts, pdl_matmult_vtable_realdims_ind_ids, 6,
1144             3, pdl_matmult_vtable_indnames,
1145             NULL, pdl_matmult_readdata, NULL,
1146             NULL,
1147             0,"PDL::Primitive::matmult"
1148             };
1149              
1150              
1151 133           pdl_error pdl_run_matmult(pdl *a,pdl *b,pdl *c) {
1152 133           pdl_error PDL_err = {0, NULL, 0};
1153 133 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
1154 133           pdl_trans *__privtrans = PDL->create_trans(&pdl_matmult_vtable);
1155 133 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
1156 133           __privtrans->pdls[0] = a;
1157 133           __privtrans->pdls[1] = b;
1158 133           __privtrans->pdls[2] = c;
1159 133 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
1160 133 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
1161 133           return PDL_err;
1162             }