1 //   Copyright Naoki Shibata and contributors 2010 - 2020.
2 // Distributed under the Boost Software License, Version 1.0.
3 //    (See accompanying file LICENSE.txt or copy at
4 //          http://www.boost.org/LICENSE_1_0.txt)
5 
6 #define CONFIGMAX 4
7 #define CONFIG_STREAM 1
8 #define CONFIG_MT 2
9 
10 #define MAXLOG2LEN 32
11 
12 typedef struct SleefDFT {
13   uint32_t magic;
14   uint64_t mode, mode2, mode3;
15   int baseTypeID;
16   const void *in;
17   void *out;
18 
19   union {
20     struct {
21       uint32_t log2len;
22 
23       void **tbl[MAXBUTWIDTH+1];
24       void *rtCoef0, *rtCoef1;
25       uint32_t **perm;
26 
27       void **x0, **x1;
28 
29       int isa;
30       int planMode;
31 
32       int vecwidth, log2vecwidth;
33       int nThread;
34 
35       uint64_t tm[CONFIGMAX][(MAXBUTWIDTH+1)*32];
36       uint64_t bestTime;
37       int16_t bestPath[32], bestPathConfig[32], pathLen;
38     };
39 
40     struct {
41       int32_t hlen, vlen;
42       int32_t log2hlen, log2vlen;
43       uint64_t tmNoMT, tmMT;
44       struct SleefDFT *instH, *instV;
45       void *tBuf;
46     };
47   };
48 } SleefDFT;
49 
50 #define SLEEF_MODE2_MT1D       (1 << 0)
51 #define SLEEF_MODE3_MT2D       (1 << 0)
52 
53 #define PLANFILEID "SLEEFDFT0\n"
54 #define ENVVAR "SLEEFDFTPLAN"
55 
56 #define SLEEF_MODE_MEASUREBITS (3 << 20)
57 
58 void freeTables(SleefDFT *p);
59 uint32_t ilog2(uint32_t q);
60 
61 //int PlanManager_loadMeasurementResultsB(SleefDFT *p);
62 //void PlanManager_saveMeasurementResultsB(SleefDFT *p, int butStat);
63 int PlanManager_loadMeasurementResultsT(SleefDFT *p);
64 void PlanManager_saveMeasurementResultsT(SleefDFT *p);
65 int PlanManager_loadMeasurementResultsP(SleefDFT *p, int pathCat);
66 void PlanManager_saveMeasurementResultsP(SleefDFT *p, int pathCat);
67 
68 #define GETINT_VECWIDTH 100
69 #define GETINT_DFTPRIORITY 101
70