GNU Linux-libre 4.14.332-gnu1
[releases.git] / drivers / staging / media / atomisp / pci / atomisp2 / css2400 / hive_isp_css_include / mpmath.h
1 /*
2  * Support for Intel Camera Imaging ISP subsystem.
3  * Copyright (c) 2015, Intel Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  */
14
15 #ifndef __MPMATH_H_INCLUDED__
16 #define __MPMATH_H_INCLUDED__
17
18 #include "storage_class.h"
19
20 #ifdef INLINE_MPMATH
21 #define STORAGE_CLASS_MPMATH_FUNC_H STORAGE_CLASS_INLINE
22 #define STORAGE_CLASS_MPMATH_DATA_H STORAGE_CLASS_INLINE_DATA
23 #else /* INLINE_MPMATH */
24 #define STORAGE_CLASS_MPMATH_FUNC_H STORAGE_CLASS_EXTERN
25 #define STORAGE_CLASS_MPMATH_DATA_H STORAGE_CLASS_EXTERN_DATA
26 #endif  /* INLINE_MPMATH */
27
28 #include <type_support.h>
29
30 /*
31  * Implementation limits
32  */
33 #define MIN_BITDEPTH            1
34 #define MAX_BITDEPTH            64
35
36 #define ROUND_NEAREST_EVEN  0
37 #define ROUND_NEAREST       1
38
39 /*
40  * The MP types
41  *
42  * "vector lane data" is scalar. With "scalar data" for limited range shift and address values
43  */
44 typedef unsigned long long      mpudata_t;   /* Type of reference MP scalar / vector lane data; unsigned */
45 typedef long long               mpsdata_t;   /* Type of reference MP scalar / vector lane data; signed */
46 typedef unsigned short          spudata_t;   /* Type of reference SP scalar / vector lane data; unsigned */
47 typedef short                   spsdata_t;   /* Type of reference SP scalar / vector lane data; signed */
48 typedef unsigned short          bitdepth_t;
49
50 typedef enum {
51     mp_zero_ID,
52     mp_one_ID,
53     mp_mone_ID,
54     mp_smin_ID,
55     mp_smax_ID,
56     mp_umin_ID,
57     mp_umax_ID,
58     N_mp_const_ID
59 } mp_const_ID_t;
60
61 #ifdef ISP2401
62 /* _isValidMpudata is for internal use by mpmath and bbb's.
63  * isValidMpudata is for external use by functions on top.
64  */
65 #ifndef ENABLE_VALID_MP_DATA_CHECK
66 #define _isValidMpsdata(data,bitdepth) (1)
67 #define _isValidMpudata(data,bitdepth) (1)
68 #else
69 #define _isValidMpsdata(data,bitdepth) isValidMpsdata(data,bitdepth)
70 #define _isValidMpudata(data,bitdepth) isValidMpsdata(data,bitdepth)
71
72 #endif
73 #endif
74 STORAGE_CLASS_MPMATH_FUNC_H bool isValidMpsdata(
75     const mpsdata_t             data,
76     const bitdepth_t            bitdepth);
77
78 STORAGE_CLASS_MPMATH_FUNC_H bool isValidMpudata(
79     const mpudata_t             data,
80     const bitdepth_t            bitdepth);
81
82 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_castd (
83     const mpsdata_t             in0,
84     const bitdepth_t            bitdepth);
85
86 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_casth (
87     const mpsdata_t             in0,
88     const bitdepth_t            bitdepth);
89
90 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_scasth (
91     const mpsdata_t             in0,
92     const bitdepth_t            bitdepth);
93
94 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_qcastd (
95     const mpsdata_t             in0,
96     const bitdepth_t            bitdepth);
97
98 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_qcasth (
99     const mpsdata_t             in0,
100     const bitdepth_t            bitdepth);
101
102 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_qrcasth (
103     const mpsdata_t             in0,
104     const bitdepth_t            bitdepth);
105
106 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_abs (
107     const mpsdata_t             in0,
108     const bitdepth_t            bitdepth);
109
110 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_limit (
111     const mpsdata_t             bnd_low,
112     const mpsdata_t             in0,
113     const mpsdata_t             bnd_high,
114     const bitdepth_t            bitdepth);
115
116 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_max (
117     const mpsdata_t             in0,
118     const mpsdata_t             in1,
119     const bitdepth_t            bitdepth);
120
121 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_min (
122     const mpsdata_t             in0,
123     const mpsdata_t             in1,
124     const bitdepth_t            bitdepth);
125
126 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_mux (
127     const spudata_t             sel,
128     const mpsdata_t             in0,
129     const mpsdata_t             in1,
130     const bitdepth_t            bitdepth);
131
132 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_rmux (
133     const spudata_t             sel,
134     const mpsdata_t             in0,
135     const mpsdata_t             in1,
136     const bitdepth_t            bitdepth);
137
138 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_add (
139     const mpsdata_t             in0,
140     const mpsdata_t             in1,
141     const bitdepth_t            bitdepth);
142
143 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_sadd (
144     const mpsdata_t             in0,
145     const mpsdata_t             in1,
146     const bitdepth_t            bitdepth);
147
148 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_sub (
149     const mpsdata_t             in0,
150     const mpsdata_t             in1,
151     const bitdepth_t            bitdepth);
152
153 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_ssub (
154     const mpsdata_t             in0,
155     const mpsdata_t             in1,
156     const bitdepth_t            bitdepth);
157
158 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_addasr1 (
159     const mpsdata_t             in0,
160     const mpsdata_t             in1,
161     const bitdepth_t            bitdepth);
162
163 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_subasr1 (
164     const mpsdata_t             in0,
165     const mpsdata_t             in1,
166     const bitdepth_t            bitdepth);
167
168 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_lsr (
169     const mpsdata_t             in0,
170     const spsdata_t             shft,
171     const bitdepth_t            bitdepth);
172
173 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_asr (
174     const mpsdata_t             in0,
175     const spsdata_t             shft,
176     const bitdepth_t            bitdepth);
177
178 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_rasr (
179     const mpsdata_t             in0,
180     const spsdata_t             shft,
181     const bitdepth_t            bitdepth);
182
183 /* "mp_rasr_u()" is implemented by "mp_rasr()" */
184 STORAGE_CLASS_MPMATH_FUNC_H mpudata_t mp_rasr_u (
185     const mpudata_t             in0,
186     const spsdata_t             shft,
187     const bitdepth_t            bitdepth);
188
189 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_lsl (
190     const mpsdata_t             in0,
191     const spsdata_t             shft,
192     const bitdepth_t            bitdepth);
193
194 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_asl (
195     const mpsdata_t             in0,
196     const spsdata_t             shft,
197     const bitdepth_t            bitdepth);
198
199 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_muld (
200     const mpsdata_t             in0,
201     const mpsdata_t             in1,
202     const bitdepth_t            bitdepth);
203
204 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_mul (
205     const mpsdata_t             in0,
206     const mpsdata_t             in1,
207     const bitdepth_t            bitdepth);
208
209 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_qmul (
210     const mpsdata_t             in0,
211     const mpsdata_t             in1,
212     const bitdepth_t            bitdepth);
213
214 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_qrmul (
215     const mpsdata_t             in0,
216     const mpsdata_t             in1,
217     const bitdepth_t            bitdepth);
218
219 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_qdiv (
220     const mpsdata_t             in0,
221     const mpsdata_t             in1,
222     const bitdepth_t            bitdepth);
223
224 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_qdivh (
225     const mpsdata_t             in0,
226     const mpsdata_t             in1,
227     const bitdepth_t            bitdepth);
228
229 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_div (
230     const mpsdata_t             in0,
231     const mpsdata_t             in1,
232     const bitdepth_t            bitdepth);
233
234 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_divh (
235     const mpsdata_t             in0,
236     const mpsdata_t             in1,
237     const bitdepth_t            bitdepth);
238
239 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_and (
240     const mpsdata_t             in0,
241     const mpsdata_t             in1,
242     const bitdepth_t            bitdepth);
243
244 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_compl (
245     const mpsdata_t             in0,
246     const bitdepth_t            bitdepth);
247
248 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_or (
249     const mpsdata_t             in0,
250     const mpsdata_t             in1,
251     const bitdepth_t            bitdepth);
252
253 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_xor (
254     const mpsdata_t             in0,
255     const mpsdata_t             in1,
256     const bitdepth_t            bitdepth);
257
258 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isEQ (
259     const mpsdata_t             in0,
260     const mpsdata_t             in1,
261     const bitdepth_t            bitdepth);
262
263 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isNE (
264     const mpsdata_t             in0,
265     const mpsdata_t             in1,
266     const bitdepth_t            bitdepth);
267
268 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isGT (
269     const mpsdata_t             in0,
270     const mpsdata_t             in1,
271     const bitdepth_t            bitdepth);
272
273 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isGE (
274     const mpsdata_t             in0,
275     const mpsdata_t             in1,
276     const bitdepth_t            bitdepth);
277
278 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isLT (
279     const mpsdata_t             in0,
280     const mpsdata_t             in1,
281     const bitdepth_t            bitdepth);
282
283 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isLE (
284     const mpsdata_t             in0,
285     const mpsdata_t             in1,
286     const bitdepth_t            bitdepth);
287
288 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isEQZ (
289     const mpsdata_t             in0,
290     const bitdepth_t            bitdepth);
291
292 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isNEZ (
293     const mpsdata_t             in0,
294     const bitdepth_t            bitdepth);
295
296 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isGTZ (
297     const mpsdata_t             in0,
298     const bitdepth_t            bitdepth);
299
300 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isGEZ (
301     const mpsdata_t             in0,
302     const bitdepth_t            bitdepth);
303
304 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isLTZ (
305     const mpsdata_t             in0,
306     const bitdepth_t            bitdepth);
307
308 STORAGE_CLASS_MPMATH_FUNC_H spudata_t mp_isLEZ (
309     const mpsdata_t             in0,
310     const bitdepth_t            bitdepth);
311
312 STORAGE_CLASS_MPMATH_FUNC_H mpsdata_t mp_const (
313     const mp_const_ID_t         ID,
314     const bitdepth_t            bitdepth);
315
316 STORAGE_CLASS_MPMATH_FUNC_H mpudata_t mp_sqrt_u(
317         const mpudata_t     in0,
318         const bitdepth_t    bitdepth);
319
320 #ifndef INLINE_MPMATH
321 #define STORAGE_CLASS_MPMATH_FUNC_C 
322 #define STORAGE_CLASS_MPMATH_DATA_C const
323 #else /* INLINE_MPMATH */
324 #define STORAGE_CLASS_MPMATH_FUNC_C STORAGE_CLASS_MPMATH_FUNC_H
325 #define STORAGE_CLASS_MPMATH_DATA_C STORAGE_CLASS_MPMATH_DATA_H
326 #include "mpmath.c"
327 #define MPMATH_INLINED
328 #endif  /* INLINE_MPMATH */
329
330 #endif /* __MPMATH_H_INCLUDED__ */