ReproBLAS
idxd.h
Go to the documentation of this file.
1 
33 #ifndef IDXD_H_
34 #define IDXD_H_
35 #include <stddef.h>
36 #include <stdlib.h>
37 #include <float.h>
38 
46 typedef double double_indexed;
47 
55 typedef double double_complex_indexed;
56 
64 typedef float float_indexed;
65 
73 typedef float float_complex_indexed;
74 
84 #define DIWIDTH 40
85 
95 #define SIWIDTH 13
96 
105 #define idxd_DIMAXINDEX (((DBL_MAX_EXP - DBL_MIN_EXP + DBL_MANT_DIG - 1)/DIWIDTH) - 1)
106 
115 #define idxd_SIMAXINDEX (((FLT_MAX_EXP - FLT_MIN_EXP + FLT_MANT_DIG - 1)/SIWIDTH) - 1)
116 
123 #define idxd_DIMAXFOLD (idxd_DIMAXINDEX + 1)
124 
131 #define idxd_SIMAXFOLD (idxd_SIMAXINDEX + 1)
132 
142 #define idxd_DIENDURANCE (1 << (DBL_MANT_DIG - DIWIDTH - 2))
143 
153 #define idxd_SIENDURANCE (1 << (FLT_MANT_DIG - SIWIDTH - 2))
154 
163 #define idxd_DICAPACITY (idxd_DIENDURANCE*(1.0/DBL_EPSILON - 1.0))
164 
173 #define idxd_SICAPACITY (idxd_SIENDURANCE*(1.0/FLT_EPSILON - 1.0))
174 
184 #define idxd_DMCOMPRESSION (1.0/(1 << (DBL_MANT_DIG - DIWIDTH + 1)))
185 
195 #define idxd_SMCOMPRESSION (1.0/(1 << (FLT_MANT_DIG - SIWIDTH + 1)))
196 
206 #define idxd_DMEXPANSION (1.0*(1 << (DBL_MANT_DIG - DIWIDTH + 1)))
207 
217 #define idxd_SMEXPANSION (1.0*(1 << (FLT_MANT_DIG - SIWIDTH + 1)))
218 
219 size_t idxd_disize(const int fold);
220 size_t idxd_zisize(const int fold);
221 size_t idxd_sisize(const int fold);
222 size_t idxd_cisize(const int fold);
223 
224 double_indexed *idxd_dialloc(const int fold);
225 double_complex_indexed *idxd_zialloc(const int fold);
226 float_indexed *idxd_sialloc(const int fold);
227 float_complex_indexed *idxd_cialloc(const int fold);
228 
229 int idxd_dinum(const int fold);
230 int idxd_zinum(const int fold);
231 int idxd_sinum(const int fold);
232 int idxd_cinum(const int fold);
233 
234 double idxd_dibound(const int fold, const int N, const double X, const double S);
235 float idxd_sibound(const int fold, const int N, const float X, const float S);
236 
237 const double *idxd_dmbins(const int X);
238 const float *idxd_smbins(const int X);
239 
240 int idxd_dindex(const double X);
241 int idxd_dmindex(const double *priX);
242 int idxd_dmindex0(const double *priX);
243 
244 int idxd_sindex(const float X);
245 int idxd_smindex(const float *priX);
246 int idxd_smindex0(const float *priX);
247 
248 int idxd_dmdenorm(const int fold, const double *priX);
249 int idxd_zmdenorm(const int fold, const double *priX);
250 int idxd_smdenorm(const int fold, const float *priX);
251 int idxd_cmdenorm(const int fold, const float *priX);
252 
253 void idxd_diprint(const int fold, const double_indexed *X);
254 void idxd_dmprint(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX);
255 void idxd_ziprint(const int fold, const double_complex_indexed *X);
256 void idxd_zmprint(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX);
257 void idxd_siprint(const int fold, const float_indexed *X);
258 void idxd_smprint(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX);
259 void idxd_ciprint(const int fold, const float_complex_indexed *X);
260 void idxd_cmprint(const int fold, const float* priX, const int incpriX, const float* carX, const int inccarX);
261 
262 void idxd_didiset(const int fold, const double_indexed *X, double_indexed *Y);
263 void idxd_dmdmset(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY);
264 void idxd_ziziset(const int fold, const double_complex_indexed *X, double_complex_indexed *Y);
265 void idxd_zmzmset(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY);
266 void idxd_zidiset(const int fold, const double_indexed *X, double_complex_indexed *Y);
267 void idxd_zmdmset(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY);
268 void idxd_sisiset(const int fold, const float_indexed *X, float_indexed *Y);
269 void idxd_smsmset(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY);
270 void idxd_ciciset(const int fold, const float_complex_indexed *X, float_complex_indexed *Y);
271 void idxd_cmcmset(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY);
272 void idxd_cisiset(const int fold, const float_indexed *X, float_complex_indexed *Y);
273 void idxd_cmsmset(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY);
274 
275 void idxd_disetzero(const int fold, double_indexed *X);
276 void idxd_dmsetzero(const int fold, double *priX, const int incpriX, double *carX, const int inccarX);
277 void idxd_zisetzero(const int fold, double_complex_indexed *X);
278 void idxd_zmsetzero(const int fold, double *priX, const int incpriX, double *carX, const int inccarX);
279 void idxd_sisetzero(const int fold, float_indexed *X);
280 void idxd_smsetzero(const int fold, float *priX, const int incpriX, float *carX, const int inccarX);
281 void idxd_cisetzero(const int fold, float_complex_indexed *X);
282 void idxd_cmsetzero(const int fold, float *priX, const int incpriX, float *carX, const int inccarX);
283 
284 void idxd_didiadd(const int fold, const double_indexed *X, double_indexed *Y);
285 void idxd_dmdmadd(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double* priY, const int incpriY, double* carY, const int inccarY);
286 void idxd_ziziadd(const int fold, const double_complex_indexed *X, double_complex_indexed *Y);
287 void idxd_zmzmadd(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double* priY, const int incpriY, double* carY, const int inccarY);
288 void idxd_sisiadd(const int fold, const float_indexed *X, float_indexed *Y);
289 void idxd_smsmadd(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float* priY, const int incpriY, float* carY, const int inccarY) ;
290 void idxd_ciciadd(const int fold, const float_complex_indexed *X, float_complex_indexed *Y);
291 void idxd_cmcmadd(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float* priY, const int incpriY, float* carY, const int inccarY) ;
292 
293 void idxd_didiaddv(const int fold, const int N, const double_indexed *X, const int incX, double_indexed *Y, const int incY);
294 void idxd_ziziaddv(const int fold, const int N, const double_complex_indexed *X, const int incX, double_complex_indexed *Y, const int incY);
295 void idxd_sisiaddv(const int fold, const int N, const float_indexed *X, const int incX, float_indexed *Y, const int incY);
296 void idxd_ciciaddv(const int fold, const int N, const float_complex_indexed *X, const int incX, float_complex_indexed *Y, const int incY);
297 
298 void idxd_didadd(const int fold, const double X, double_indexed *Y);
299 void idxd_dmdadd(const int fold, const double X, double *priY, const int incpriY, double *carY, const int inccarY);
300 void idxd_zizadd(const int fold, const void *X, double_complex_indexed *Y);
301 void idxd_zmzadd(const int fold, const void *X, double *priY, const int incpriY, double *carY, const int inccarY);
302 void idxd_sisadd(const int fold, const float X, float_indexed *Y);
303 void idxd_smsadd(const int fold, const float X, float *priY, const int incpriY, float *carY, const int inccarY);
304 void idxd_cicadd(const int fold, const void *X, float_complex_indexed *Y);
305 void idxd_cmcadd(const int fold, const void *X, float *priY, const int incpriY, float *carY, const int inccarY);
306 
307 void idxd_didupdate(const int fold, const double X, double_indexed *Y);
308 void idxd_dmdupdate(const int fold, const double X, double* priY, const int incpriY, double* carY, const int inccarY);
309 void idxd_zizupdate(const int fold, const void *X, double_complex_indexed *Y);
310 void idxd_zmzupdate(const int fold, const void *X, double* priY, const int incpriY, double* carY, const int inccarY);
311 void idxd_zidupdate(const int fold, const double X, double_complex_indexed *Y);
312 void idxd_zmdupdate(const int fold, const double X, double* priY, const int incpriY, double* carY, const int inccarY);
313 void idxd_sisupdate(const int fold, const float X, float_indexed *Y);
314 void idxd_smsupdate(const int fold, const float X, float* priY, const int incpriY, float* carY, const int inccarY);
315 void idxd_cicupdate(const int fold, const void *X, float_complex_indexed *Y);
316 void idxd_cmcupdate(const int fold, const void *X, float* priY, const int incpriY, float* carY, const int inccarY);
317 void idxd_cisupdate(const int fold, const float X, float_complex_indexed *Y);
318 void idxd_cmsupdate(const int fold, const float X, float* priY, const int incpriY, float* carY, const int inccarY);
319 
320 void idxd_diddeposit(const int fold, const double X, double_indexed *Y);
321 void idxd_dmddeposit(const int fold, const double X, double *priY, const int incpriY);
322 void idxd_zizdeposit(const int fold, const void *X, double_complex_indexed *Y);
323 void idxd_zmzdeposit(const int fold, const void *X, double *priY, const int incpriY);
324 void idxd_sisdeposit(const int fold, const float X, float_indexed *Y);
325 void idxd_smsdeposit(const int fold, const float X, float *priY, const int incpriY);
326 void idxd_cicdeposit(const int fold, const void *X, float_complex_indexed *Y);
327 void idxd_cmcdeposit(const int fold, const void *X, float *priY, const int incpriY);
328 
329 void idxd_direnorm(const int fold, double_indexed *X);
330 void idxd_dmrenorm(const int fold, double* priX, const int incpriX, double* carX, const int inccarX);
331 void idxd_zirenorm(const int fold, double_complex_indexed *X);
332 void idxd_zmrenorm(const int fold, double* priX, const int incpriX, double* carX, const int inccarX);
333 void idxd_sirenorm(const int fold, float_indexed *X);
334 void idxd_smrenorm(const int fold, float* priX, const int incpriX, float* carX, const int inccarX);
335 void idxd_cirenorm(const int fold, float_complex_indexed *X);
336 void idxd_cmrenorm(const int fold, float* priX, const int incpriX, float* carX, const int inccarX);
337 
338 void idxd_didconv(const int fold, const double X, double_indexed *Y);
339 void idxd_dmdconv(const int fold, const double X, double* priY, const int incpriY, double* carY, const int inccarY);
340 void idxd_zizconv(const int fold, const void *X, double_complex_indexed *Y);
341 void idxd_zmzconv(const int fold, const void *X, double *priY, const int incpriY, double *carY, const int inccarY);
342 void idxd_sisconv(const int fold, const float X, float_indexed *Y);
343 void idxd_smsconv(const int fold, const float X, float* priY, const int incpriY, float* carY, const int inccarY);
344 void idxd_cicconv(const int fold, const void *X, float_complex_indexed *Y);
345 void idxd_cmcconv(const int fold, const void *X, float *priY, const int incpriY, float *carY, const int inccarY);
346 double idxd_ddiconv(const int fold, const double_indexed *X);
347 double idxd_ddmconv(const int fold, const double* priX, const int incpriX, const double* carX, const int inccarX);
348 void idxd_zziconv_sub(const int fold, const double_complex_indexed *X, void *conv);
349 void idxd_zzmconv_sub(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, void *conv);
350 float idxd_ssiconv(const int fold, const float_indexed *X);
351 float idxd_ssmconv(const int fold, const float* priX, const int incpriX, const float* carX, const int inccarX);
352 void idxd_cciconv_sub(const int fold, const float_complex_indexed *X, void *conv);
353 void idxd_ccmconv_sub(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, void *conv);
354 
355 void idxd_dinegate(const int fold, double_indexed* X);
356 void idxd_dmnegate(const int fold, double* priX, const int incpriX, double* carX, const int inccarX);
357 void idxd_zinegate(const int fold, double_complex_indexed* X);
358 void idxd_zmnegate(const int fold, double* priX, const int incpriX, double* carX, const int inccarX);
359 void idxd_sinegate(const int fold, float_indexed* X);
360 void idxd_smnegate(const int fold, float* priX, const int incpriX, float* carX, const int inccarX);
361 void idxd_cinegate(const int fold, float_complex_indexed* X);
362 void idxd_cmnegate(const int fold, float* priX, const int incpriX, float* carX, const int inccarX);
363 
364 double idxd_dscale(const double X);
365 float idxd_sscale(const float X);
366 
367 void idxd_dmdrescale(const int fold, const double X, const double scaleY, double *priY, const int incpriY, double *carY, const int inccarY);
368 void idxd_zmdrescale(const int fold, const double X, const double scaleY, double *priY, const int incpriY, double *carY, const int inccarY);
369 void idxd_smsrescale(const int fold, const float X, const float scaleY, float *priY, const int incpriY, float *carY, const int inccarY);
370 void idxd_cmsrescale(const int fold, const float X, const float scaleY, float *priY, const int incpriY, float *carY, const int inccarY);
371 
372 double idxd_dmdmaddsq(const int fold, const double scaleX, const double *priX, const int incpriX, const double *carX, const int inccarX, const double scaleY, double *priY, const int incpriY, double *carY, const int inccarY);
373 double idxd_didiaddsq(const int fold, const double scaleX, const double_indexed *X, const double scaleY, double_indexed *Y);
374 float idxd_smsmaddsq(const int fold, const float scaleX, const float *priX, const int incpriX, const float *carX, const int inccarX, const float scaleY, float *priY, const int incpriY, float *carY, const int inccarY);
375 float idxd_sisiaddsq(const int fold, const float scaleX, const float_indexed *X, const float scaleY, float_indexed *Y);
376 
377 double idxd_ufp(const double X);
378 float idxd_ufpf(const float X);
379 #endif
void idxd_cisupdate(const int fold, const float X, float_complex_indexed *Y)
Update indexed complex single precision with single precision (X -> Y)
Definition: cisupdate.c:16
int idxd_cinum(const int fold)
indexed complex single precision size
Definition: cinum.c:12
void idxd_zizdeposit(const int fold, const void *X, double_complex_indexed *Y)
Add complex double precision to suitably indexed indexed complex double precision (Y += X) ...
Definition: zizdeposit.c:18
void idxd_dmdadd(const int fold, const double X, double *priY, const int incpriY, double *carY, const int inccarY)
Add double precision to manually specified indexed double precision (Y += X)
Definition: dmdadd.c:20
void idxd_zmdupdate(const int fold, const double X, double *priY, const int incpriY, double *carY, const int inccarY)
Update manually specified indexed complex double precision with double precision (X -> Y) ...
Definition: zmdupdate.c:20
void idxd_zziconv_sub(const int fold, const double_complex_indexed *X, void *conv)
Convert indexed complex double precision to complex double precision (X -> Y)
Definition: zziconv_sub.c:14
void idxd_dmdrescale(const int fold, const double X, const double scaleY, double *priY, const int incpriY, double *carY, const int inccarY)
rescale manually specified indexed double precision sum of squares
Definition: dmdrescale.c:20
void idxd_cicdeposit(const int fold, const void *X, float_complex_indexed *Y)
Add complex single precision to suitably indexed indexed complex single precision (Y += X) ...
Definition: cicdeposit.c:18
float idxd_ufpf(const float X)
unit in the first place
Definition: ufpf.c:20
void idxd_zmnegate(const int fold, double *priX, const int incpriX, double *carX, const int inccarX)
Negate manually specified indexed complex double precision (X = -X)
Definition: zmnegate.c:19
void idxd_ziziadd(const int fold, const double_complex_indexed *X, double_complex_indexed *Y)
Add indexed complex double precision (Y += X)
Definition: ziziadd.c:16
double idxd_ddmconv(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX)
Convert manually specified indexed double precision to double precision (X -> Y)
Definition: ddmconv.c:23
double idxd_didiaddsq(const int fold, const double scaleX, const double_indexed *X, const double scaleY, double_indexed *Y)
Add indexed double precision scaled sums of squares (Y += X)
Definition: didiaddsq.c:19
void idxd_disetzero(const int fold, double_indexed *X)
Set indexed double precision to 0 (X = 0)
Definition: disetzero.c:17
void idxd_cmcupdate(const int fold, const void *X, float *priY, const int incpriY, float *carY, const int inccarY)
Update manually specified indexed complex single precision with complex single precision (X -> Y) ...
Definition: cmcupdate.c:20
void idxd_sisiset(const int fold, const float_indexed *X, float_indexed *Y)
Set indexed single precision (Y = X)
Definition: sisiset.c:18
void idxd_zisetzero(const int fold, double_complex_indexed *X)
Set indexed double precision to 0 (X = 0)
Definition: zisetzero.c:17
void idxd_zmzdeposit(const int fold, const void *X, double *priY, const int incpriY)
Add complex double precision to suitably indexed manually specified indexed complex double precision ...
Definition: zmzdeposit.c:24
double double_complex_indexed
The indexed complex double datatype.
Definition: idxd.h:55
void idxd_zmdmset(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY)
Set manually specified indexed complex double precision to manually specified indexed double precisio...
Definition: zmdmset.c:23
void idxd_didiadd(const int fold, const double_indexed *X, double_indexed *Y)
Add indexed double precision (Y += X)
Definition: didiadd.c:16
void idxd_dmdmadd(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY)
Add manually specified indexed double precision (Y += X)
Definition: dmdmadd.c:27
void idxd_dmdconv(const int fold, const double X, double *priY, const int incpriY, double *carY, const int inccarY)
Convert double precision to manually specified indexed double precision (X -> Y)
Definition: dmdconv.c:18
void idxd_cmsmset(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY)
Set manually specified indexed complex single precision to manually specified indexed single precisio...
Definition: cmsmset.c:23
float idxd_smsmaddsq(const int fold, const float scaleX, const float *priX, const int incpriX, const float *carX, const int inccarX, const float scaleY, float *priY, const int incpriY, float *carY, const int inccarY)
Add manually specified indexed single precision scaled sums of squares (Y += X)
Definition: smsmaddsq.c:27
int idxd_sindex(const float X)
Get index of single precision.
Definition: sindex.c:19
void idxd_zmzupdate(const int fold, const void *X, double *priY, const int incpriY, double *carY, const int inccarY)
Update manually specified indexed complex double precision with complex double precision (X -> Y) ...
Definition: zmzupdate.c:20
void idxd_zidiset(const int fold, const double_indexed *X, double_complex_indexed *Y)
Set indexed complex double precision to indexed double precision (Y = X)
Definition: zidiset.c:16
void idxd_zmzadd(const int fold, const void *X, double *priY, const int incpriY, double *carY, const int inccarY)
Add complex double precision to manually specified indexed complex double precision (Y += X) ...
Definition: zmzadd.c:20
void idxd_cmcmset(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY)
Set manually specified indexed complex single precision (Y = X)
Definition: cmcmset.c:23
int idxd_dindex(const double X)
Get index of double precision.
Definition: dindex.c:19
int idxd_dmindex(const double *priX)
Get index of manually specified indexed double precision.
Definition: dmindex.c:22
void idxd_zinegate(const int fold, double_complex_indexed *X)
Negate indexed complex double precision (X = -X)
Definition: zinegate.c:15
void idxd_smsmadd(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY)
Add manually specified indexed single precision (Y += X)
Definition: smsmadd.c:27
void idxd_sisupdate(const int fold, const float X, float_indexed *Y)
Update indexed single precision with single precision (X -> Y)
Definition: sisupdate.c:16
void idxd_zmzmadd(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY)
Add manually specified indexed complex double precision (Y += X)
Definition: zmzmadd.c:23
int idxd_dmdenorm(const int fold, const double *priX)
Check if indexed type has denormal bits.
Definition: dmdenorm.c:20
double_complex_indexed * idxd_zialloc(const int fold)
indexed complex double precision allocation
Definition: zialloc.c:12
void idxd_zidupdate(const int fold, const double X, double_complex_indexed *Y)
Update indexed complex double precision with double precision (X -> Y)
Definition: zidupdate.c:16
void idxd_cmcmadd(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY)
Add manually specified indexed complex single precision (Y += X)
Definition: cmcmadd.c:23
float_indexed * idxd_sialloc(const int fold)
indexed single precision allocation
Definition: sialloc.c:12
int idxd_smdenorm(const int fold, const float *priX)
Check if indexed type has denormal bits.
Definition: smdenorm.c:20
void idxd_cmcadd(const int fold, const void *X, float *priY, const int incpriY, float *carY, const int inccarY)
Add complex single precision to manually specified indexed complex single precision (Y += X) ...
Definition: cmcadd.c:20
void idxd_didconv(const int fold, const double X, double_indexed *Y)
Convert double precision to indexed double precision (X -> Y)
Definition: didconv.c:14
void idxd_zmrenorm(const int fold, double *priX, const int incpriX, double *carX, const int inccarX)
Renormalize manually specified indexed complex double precision.
Definition: zmrenorm.c:19
void idxd_sisdeposit(const int fold, const float X, float_indexed *Y)
Add single precision to suitably indexed indexed single precision (Y += X)
Definition: sisdeposit.c:18
void idxd_ciciaddv(const int fold, const int N, const float_complex_indexed *X, const int incX, float_complex_indexed *Y, const int incY)
Add indexed complex single precision vectors (Y += X)
Definition: ciciaddv.c:18
void idxd_cmcdeposit(const int fold, const void *X, float *priY, const int incpriY)
Add complex single precision to suitably indexed manually specified indexed complex single precision ...
Definition: cmcdeposit.c:24
void idxd_didiaddv(const int fold, const int N, const double_indexed *X, const int incX, double_indexed *Y, const int incY)
Add indexed double precision vectors (Y += X)
Definition: didiaddv.c:18
void idxd_smsrescale(const int fold, const float X, const float scaleY, float *priY, const int incpriY, float *carY, const int inccarY)
rescale manually specified indexed single precision sum of squares
Definition: smsrescale.c:20
void idxd_dmrenorm(const int fold, double *priX, const int incpriX, double *carX, const int inccarX)
Renormalize manually specified indexed double precision.
Definition: dmrenorm.c:23
void idxd_ziprint(const int fold, const double_complex_indexed *X)
Print indexed complex double precision.
Definition: ziprint.c:13
void idxd_smsupdate(const int fold, const float X, float *priY, const int incpriY, float *carY, const int inccarY)
Update manually specified indexed single precision with single precision (X -> Y) ...
Definition: smsupdate.c:24
void idxd_direnorm(const int fold, double_indexed *X)
Renormalize indexed double precision.
Definition: direnorm.c:15
void idxd_zmzconv(const int fold, const void *X, double *priY, const int incpriY, double *carY, const int inccarY)
Convert complex double precision to manually specified indexed complex double precision (X -> Y) ...
Definition: zmzconv.c:18
void idxd_smsmset(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, float *priY, const int incpriY, float *carY, const int inccarY)
Set manually specified indexed single precision (Y = X)
Definition: smsmset.c:23
void idxd_didiset(const int fold, const double_indexed *X, double_indexed *Y)
Set indexed double precision (Y = X)
Definition: didiset.c:18
void idxd_dmdmset(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY)
Set manually specified indexed double precision (Y = X)
Definition: dmdmset.c:23
double_indexed * idxd_dialloc(const int fold)
indexed double precision allocation
Definition: dialloc.c:12
size_t idxd_zisize(const int fold)
indexed complex double precision size
Definition: zisize.c:13
double idxd_dmdmaddsq(const int fold, const double scaleX, const double *priX, const int incpriX, const double *carX, const int inccarX, const double scaleY, double *priY, const int incpriY, double *carY, const int inccarY)
Add manually specified indexed double precision scaled sums of squares (Y += X)
Definition: dmdmaddsq.c:26
void idxd_cicconv(const int fold, const void *X, float_complex_indexed *Y)
Convert complex single precision to indexed complex single precision (X -> Y)
Definition: cicconv.c:14
float idxd_sscale(const float X)
Get a reproducible single precision scale.
Definition: sscale.c:25
void idxd_diddeposit(const int fold, const double X, double_indexed *Y)
Add double precision to suitably indexed indexed double precision (Y += X)
Definition: diddeposit.c:18
void idxd_zizadd(const int fold, const void *X, double_complex_indexed *Y)
Add complex double precision to indexed complex double precision (Y += X)
Definition: zizadd.c:16
void idxd_ccmconv_sub(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX, void *conv)
Convert manually specified indexed complex single precision to complex single precision (X -> Y) ...
Definition: ccmconv_sub.c:18
const double * idxd_dmbins(const int X)
Get indexed double precision reference bins.
Definition: dmbins.c:23
void idxd_ciciadd(const int fold, const float_complex_indexed *X, float_complex_indexed *Y)
Add indexed complex single precision (Y += X)
Definition: ciciadd.c:16
void idxd_cicupdate(const int fold, const void *X, float_complex_indexed *Y)
Update indexed complex single precision with complex single precision (X -> Y)
Definition: cicupdate.c:16
size_t idxd_cisize(const int fold)
indexed complex single precision size
Definition: cisize.c:13
void idxd_smsadd(const int fold, const float X, float *priY, const int incpriY, float *carY, const int inccarY)
Add single precision to manually specified indexed single precision (Y += X)
Definition: smsadd.c:20
void idxd_dmnegate(const int fold, double *priX, const int incpriX, double *carX, const int inccarX)
Negate manually specified indexed double precision (X = -X)
Definition: dmnegate.c:19
void idxd_ciprint(const int fold, const float_complex_indexed *X)
Print indexed complex single precision.
Definition: ciprint.c:13
void idxd_cisiset(const int fold, const float_indexed *X, float_complex_indexed *Y)
Set indexed complex single precision to indexed single precision (Y = X)
Definition: cisiset.c:16
float float_indexed
The indexed float datatype.
Definition: idxd.h:64
int idxd_smindex(const float *priX)
Get index of manually specified indexed single precision.
Definition: smindex.c:22
float idxd_sisiaddsq(const int fold, const float scaleX, const float_indexed *X, const float scaleY, float_indexed *Y)
Add indexed single precision scaled sums of squares (Y += X)
Definition: sisiaddsq.c:19
void idxd_dmddeposit(const int fold, const double X, double *priY, const int incpriY)
Add double precision to suitably indexed manually specified indexed double precision (Y += X) ...
Definition: dmddeposit.c:24
float idxd_sibound(const int fold, const int N, const float X, const float S)
Get indexed single precision summation error bound.
Definition: sibound.c:25
void idxd_didadd(const int fold, const double X, double_indexed *Y)
Add double precision to indexed double precision (Y += X)
Definition: didadd.c:16
void idxd_cmsupdate(const int fold, const float X, float *priY, const int incpriY, float *carY, const int inccarY)
Update manually specified indexed complex single precision with single precision (X -> Y) ...
Definition: cmsupdate.c:20
void idxd_sisadd(const int fold, const float X, float_indexed *Y)
Add single precision to indexed single precision (Y += X)
Definition: sisadd.c:16
void idxd_siprint(const int fold, const float_indexed *X)
Print indexed single precision.
Definition: siprint.c:13
void idxd_sisiadd(const int fold, const float_indexed *X, float_indexed *Y)
Add indexed single precision (Y += X)
Definition: sisiadd.c:16
void idxd_smprint(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX)
Print manually specified indexed single precision.
Definition: smprint.c:22
int idxd_zmdenorm(const int fold, const double *priX)
Check if indexed type has denormal bits.
Definition: zmdenorm.c:20
void idxd_smnegate(const int fold, float *priX, const int incpriX, float *carX, const int inccarX)
Negate manually specified indexed single precision (X = -X)
Definition: smnegate.c:19
int idxd_dinum(const int fold)
indexed double precision size
Definition: dinum.c:12
void idxd_smsetzero(const int fold, float *priX, const int incpriX, float *carX, const int inccarX)
Set manually specified indexed single precision to 0 (X = 0)
Definition: smsetzero.c:19
void idxd_zizconv(const int fold, const void *X, double_complex_indexed *Y)
Convert complex double precision to indexed complex double precision (X -> Y)
Definition: zizconv.c:14
int idxd_zinum(const int fold)
indexed complex double precision size
Definition: zinum.c:12
size_t idxd_disize(const int fold)
indexed double precision size
Definition: disize.c:13
float_complex_indexed * idxd_cialloc(const int fold)
indexed complex single precision allocation
Definition: cialloc.c:12
void idxd_dmprint(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX)
Print manually specified indexed double precision.
Definition: dmprint.c:22
size_t idxd_sisize(const int fold)
indexed single precision size
Definition: sisize.c:13
void idxd_zmsetzero(const int fold, double *priX, const int incpriX, double *carX, const int inccarX)
Set manually specified indexed complex double precision to 0 (X = 0)
Definition: zmsetzero.c:19
float idxd_ssiconv(const int fold, const float_indexed *X)
Convert indexed single precision to single precision (X -> Y)
Definition: ssiconv.c:14
void idxd_cinegate(const int fold, float_complex_indexed *X)
Negate indexed complex single precision (X = -X)
Definition: cinegate.c:15
void idxd_cisetzero(const int fold, float_complex_indexed *X)
Set indexed single precision to 0 (X = 0)
Definition: cisetzero.c:17
void idxd_zzmconv_sub(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, void *conv)
Convert manually specified indexed complex double precision to complex double precision (X -> Y) ...
Definition: zzmconv_sub.c:18
void idxd_zizupdate(const int fold, const void *X, double_complex_indexed *Y)
Update indexed complex double precision with complex double precision (X -> Y)
Definition: zizupdate.c:16
void idxd_ziziaddv(const int fold, const int N, const double_complex_indexed *X, const int incX, double_complex_indexed *Y, const int incY)
Add indexed complex double precision vectors (Y += X)
Definition: ziziaddv.c:18
void idxd_cmsrescale(const int fold, const float X, const float scaleY, float *priY, const int incpriY, float *carY, const int inccarY)
rescale manually specified indexed complex single precision sum of squares
Definition: cmsrescale.c:20
void idxd_ciciset(const int fold, const float_complex_indexed *X, float_complex_indexed *Y)
Set indexed complex single precision (Y = X)
Definition: ciciset.c:18
void idxd_sisetzero(const int fold, float_indexed *X)
Set indexed single precision to 0 (X = 0)
Definition: sisetzero.c:17
double idxd_dibound(const int fold, const int N, const double X, const double S)
Get indexed double precision summation error bound.
Definition: dibound.c:21
double idxd_dscale(const double X)
Get a reproducible double precision scale.
Definition: dscale.c:25
void idxd_zmdrescale(const int fold, const double X, const double scaleY, double *priY, const int incpriY, double *carY, const int inccarY)
rescale manually specified indexed complex double precision sum of squares
Definition: zmdrescale.c:20
void idxd_zmprint(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX)
Print manually specified indexed complex double precision.
Definition: zmprint.c:22
void idxd_dinegate(const int fold, double_indexed *X)
Negate indexed double precision (X = -X)
Definition: dinegate.c:15
void idxd_smsconv(const int fold, const float X, float *priY, const int incpriY, float *carY, const int inccarY)
Convert single precision to manually specified indexed single precision (X -> Y)
Definition: smsconv.c:18
void idxd_zmzmset(const int fold, const double *priX, const int incpriX, const double *carX, const int inccarX, double *priY, const int incpriY, double *carY, const int inccarY)
Set manually specified indexed complex double precision (Y = X)
Definition: zmzmset.c:23
void idxd_sisconv(const int fold, const float X, float_indexed *Y)
Convert single precision to indexed single precision (X -> Y)
Definition: sisconv.c:14
double idxd_ufp(const double X)
unit in the first place
Definition: ufp.c:20
double idxd_ddiconv(const int fold, const double_indexed *X)
Convert indexed double precision to double precision (X -> Y)
Definition: ddiconv.c:14
void idxd_dmsetzero(const int fold, double *priX, const int incpriX, double *carX, const int inccarX)
Set manually specified indexed double precision to 0 (X = 0)
Definition: dmsetzero.c:19
void idxd_cmsetzero(const int fold, float *priX, const int incpriX, float *carX, const int inccarX)
Set manually specified indexed complex single precision to 0 (X = 0)
Definition: cmsetzero.c:19
void idxd_zirenorm(const int fold, double_complex_indexed *X)
Renormalize indexed complex double precision.
Definition: zirenorm.c:15
float float_complex_indexed
The indexed complex float datatype.
Definition: idxd.h:73
void idxd_cciconv_sub(const int fold, const float_complex_indexed *X, void *conv)
Convert indexed complex single precision to complex single precision (X -> Y)
Definition: cciconv_sub.c:14
void idxd_cirenorm(const int fold, float_complex_indexed *X)
Renormalize indexed complex single precision.
Definition: cirenorm.c:15
void idxd_dmdupdate(const int fold, const double X, double *priY, const int incpriY, double *carY, const int inccarY)
Update manually specified indexed double precision with double precision (X -> Y) ...
Definition: dmdupdate.c:24
void idxd_sisiaddv(const int fold, const int N, const float_indexed *X, const int incX, float_indexed *Y, const int incY)
Add indexed single precision vectors (Y += X)
Definition: sisiaddv.c:18
int idxd_cmdenorm(const int fold, const float *priX)
Check if indexed type has denormal bits.
Definition: cmdenorm.c:20
const float * idxd_smbins(const int X)
Get indexed single precision reference bins.
Definition: smbins.c:23
void idxd_sirenorm(const int fold, float_indexed *X)
Renormalize indexed single precision.
Definition: sirenorm.c:15
void idxd_cmprint(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX)
Print manually specified indexed complex single precision.
Definition: cmprint.c:22
float idxd_ssmconv(const int fold, const float *priX, const int incpriX, const float *carX, const int inccarX)
Convert manually specified indexed single precision to single precision (X -> Y)
Definition: ssmconv.c:22
void idxd_cmcconv(const int fold, const void *X, float *priY, const int incpriY, float *carY, const int inccarY)
Convert complex single precision to manually specified indexed complex single precision (X -> Y) ...
Definition: cmcconv.c:18
void idxd_didupdate(const int fold, const double X, double_indexed *Y)
Update indexed double precision with double precision (X -> Y)
Definition: didupdate.c:16
void idxd_smsdeposit(const int fold, const float X, float *priY, const int incpriY)
Add single precision to suitably indexed manually specified indexed single precision (Y += X) ...
Definition: smsdeposit.c:24
void idxd_cmrenorm(const int fold, float *priX, const int incpriX, float *carX, const int inccarX)
Renormalize manually specified indexed complex single precision.
Definition: cmrenorm.c:19
void idxd_ziziset(const int fold, const double_complex_indexed *X, double_complex_indexed *Y)
Set indexed complex double precision (Y = X)
Definition: ziziset.c:18
void idxd_diprint(const int fold, const double_indexed *X)
Print indexed double precision.
Definition: diprint.c:13
int idxd_dmindex0(const double *priX)
Check if index of manually specified indexed double precision is 0.
Definition: dmindex0.c:19
int idxd_sinum(const int fold)
indexed single precision size
Definition: sinum.c:12
int idxd_smindex0(const float *priX)
Check if index of manually specified indexed single precision is 0.
Definition: smindex0.c:19
double double_indexed
The indexed double datatype.
Definition: idxd.h:46
void idxd_cmnegate(const int fold, float *priX, const int incpriX, float *carX, const int inccarX)
Negate manually specified indexed complex single precision (X = -X)
Definition: cmnegate.c:19
void idxd_cicadd(const int fold, const void *X, float_complex_indexed *Y)
Add complex single precision to indexed complex single precision (Y += X)
Definition: cicadd.c:16
void idxd_smrenorm(const int fold, float *priX, const int incpriX, float *carX, const int inccarX)
Renormalize manually specified indexed single precision.
Definition: smrenorm.c:23
void idxd_sinegate(const int fold, float_indexed *X)
Negate indexed single precision (X = -X)
Definition: sinegate.c:15