2 /* autogenerated from orc_bug_orc.orc */
8 #ifndef _ORC_INTEGER_TYPEDEFS_
9 #define _ORC_INTEGER_TYPEDEFS_
10 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
12 typedef int8_t orc_int8
;
13 typedef int16_t orc_int16
;
14 typedef int32_t orc_int32
;
15 typedef int64_t orc_int64
;
16 typedef uint8_t orc_uint8
;
17 typedef uint16_t orc_uint16
;
18 typedef uint32_t orc_uint32
;
19 typedef uint64_t orc_uint64
;
20 #define ORC_UINT64_C(x) UINT64_C(x)
21 #elif defined(_MSC_VER)
22 typedef signed __int8 orc_int8
;
23 typedef signed __int16 orc_int16
;
24 typedef signed __int32 orc_int32
;
25 typedef signed __int64 orc_int64
;
26 typedef unsigned __int8 orc_uint8
;
27 typedef unsigned __int16 orc_uint16
;
28 typedef unsigned __int32 orc_uint32
;
29 typedef unsigned __int64 orc_uint64
;
30 #define ORC_UINT64_C(x) (x##Ui64)
31 #define inline __inline
34 typedef signed char orc_int8
;
35 typedef short orc_int16
;
36 typedef int orc_int32
;
37 typedef unsigned char orc_uint8
;
38 typedef unsigned short orc_uint16
;
39 typedef unsigned int orc_uint32
;
40 #if INT_MAX == LONG_MAX
41 typedef long long orc_int64
;
42 typedef unsigned long long orc_uint64
;
43 #define ORC_UINT64_C(x) (x##ULL)
45 typedef long orc_int64
;
46 typedef unsigned long orc_uint64
;
47 #define ORC_UINT64_C(x) (x##UL)
50 typedef union { orc_int16 i
; orc_int8 x2
[2]; } orc_union16
;
51 typedef union { orc_int32 i
; float f
; orc_int16 x2
[2]; orc_int8 x4
[4]; } orc_union32
;
52 typedef union { orc_int64 i
; double f
; orc_int32 x2
[2]; float x2f
[2]; orc_int16 x4
[4]; } orc_union64
;
55 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
56 #define ORC_RESTRICT restrict
57 #elif defined(__GNUC__) && __GNUC__ >= 4
58 #define ORC_RESTRICT __restrict__
67 void test_orc (orc_int32
* ORC_RESTRICT d1
, orc_int32
* ORC_RESTRICT d2
, const orc_int32
* ORC_RESTRICT s1
, int p1
, int p2
, int p3
, int p4
, int p5
, int p6
, int n
);
70 /* begin Orc C target preamble */
71 #define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
72 #define ORC_ABS(a) ((a)<0 ? -(a) : (a))
73 #define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
74 #define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
75 #define ORC_SB_MAX 127
76 #define ORC_SB_MIN (-1-ORC_SB_MAX)
77 #define ORC_UB_MAX 255
79 #define ORC_SW_MAX 32767
80 #define ORC_SW_MIN (-1-ORC_SW_MAX)
81 #define ORC_UW_MAX 65535
83 #define ORC_SL_MAX 2147483647
84 #define ORC_SL_MIN (-1-ORC_SL_MAX)
85 #define ORC_UL_MAX 4294967295U
87 #define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
88 #define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
89 #define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
90 #define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
91 #define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
92 #define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
93 #define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
94 #define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
95 #define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
96 #define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
97 #define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
98 #define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
99 #define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
100 #define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
102 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
103 #define ORC_RESTRICT restrict
104 #elif defined(__GNUC__) && __GNUC__ >= 4
105 #define ORC_RESTRICT __restrict__
110 /* end Orc C target preamble */
117 test_orc (orc_int32
* ORC_RESTRICT d1
, orc_int32
* ORC_RESTRICT d2
, const orc_int32
* ORC_RESTRICT s1
, int p1
, int p2
, int p3
, int p4
, int p5
, int p6
, int n
){
119 orc_union32
* ORC_RESTRICT ptr0
;
120 orc_union32
* ORC_RESTRICT ptr1
;
121 const orc_union32
* ORC_RESTRICT ptr4
;
138 ptr0
= (orc_union32
*)d1
;
139 ptr1
= (orc_union32
*)d2
;
140 ptr4
= (orc_union32
*)s1
;
157 for (i
= 0; i
< n
; i
++) {
161 var45
.i
= var35
.i
- var36
.i
;
163 var46
.i
= (var37
.i
* var45
.i
) & 0xffffffff;
165 var47
.i
= (var38
.i
* var39
.i
) & 0xffffffff;
167 var48
.i
= var46
.i
+ var47
.i
;
169 var41
.i
= var48
.i
+ var40
.i
;
173 var49
.i
= (var45
.i
* var42
.i
) & 0xffffffff;
175 var44
.i
= var49
.i
+ var43
.i
;
184 _backup_test_orc (OrcExecutor
* ORC_RESTRICT ex
)
188 orc_union32
* ORC_RESTRICT ptr0
;
189 orc_union32
* ORC_RESTRICT ptr1
;
190 const orc_union32
* ORC_RESTRICT ptr4
;
207 ptr0
= (orc_union32
*)ex
->arrays
[0];
208 ptr1
= (orc_union32
*)ex
->arrays
[1];
209 ptr4
= (orc_union32
*)ex
->arrays
[4];
212 var36
.i
= ex
->params
[25];
214 var37
.i
= ex
->params
[28];
216 var38
.i
= ex
->params
[29];
218 var39
.i
= ex
->params
[24];
220 var40
.i
= ex
->params
[26];
222 var42
.i
= ex
->params
[29];
224 var43
.i
= ex
->params
[27];
226 for (i
= 0; i
< n
; i
++) {
230 var45
.i
= var35
.i
- var36
.i
;
232 var46
.i
= (var37
.i
* var45
.i
) & 0xffffffff;
234 var47
.i
= (var38
.i
* var39
.i
) & 0xffffffff;
236 var48
.i
= var46
.i
+ var47
.i
;
238 var41
.i
= var48
.i
+ var40
.i
;
242 var49
.i
= (var45
.i
* var42
.i
) & 0xffffffff;
244 var44
.i
= var49
.i
+ var43
.i
;
252 test_orc (orc_int32
* ORC_RESTRICT d1
, orc_int32
* ORC_RESTRICT d2
, const orc_int32
* ORC_RESTRICT s1
, int p1
, int p2
, int p3
, int p4
, int p5
, int p6
, int n
)
254 OrcExecutor _ex
, *ex
= &_ex
;
255 static int p_inited
= 0;
256 static OrcCode
*c
= 0;
257 void (*func
) (OrcExecutor
*);
260 orc_once_mutex_lock ();
264 p
= orc_program_new ();
265 orc_program_set_name (p
, "test_orc");
266 orc_program_set_backup_function (p
, _backup_test_orc
);
267 orc_program_add_destination (p
, 4, "d1");
268 orc_program_add_destination (p
, 4, "d2");
269 orc_program_add_source (p
, 4, "s1");
270 orc_program_add_parameter (p
, 4, "p1");
271 orc_program_add_parameter (p
, 4, "p2");
272 orc_program_add_parameter (p
, 4, "p3");
273 orc_program_add_parameter (p
, 4, "p4");
274 orc_program_add_parameter (p
, 4, "p5");
275 orc_program_add_parameter (p
, 4, "p6");
276 orc_program_add_temporary (p
, 4, "t1");
277 orc_program_add_temporary (p
, 4, "t2");
278 orc_program_add_temporary (p
, 4, "t3");
280 orc_program_append_2 (p
, "subl", 0, ORC_VAR_T1
, ORC_VAR_S1
, ORC_VAR_P2
, ORC_VAR_D1
);
281 orc_program_append_2 (p
, "mulll", 0, ORC_VAR_T2
, ORC_VAR_P5
, ORC_VAR_T1
, ORC_VAR_D1
);
282 orc_program_append_2 (p
, "mulll", 0, ORC_VAR_T3
, ORC_VAR_P6
, ORC_VAR_P1
, ORC_VAR_D1
);
283 orc_program_append_2 (p
, "addl", 0, ORC_VAR_T2
, ORC_VAR_T2
, ORC_VAR_T3
, ORC_VAR_D1
);
284 orc_program_append_2 (p
, "addl", 0, ORC_VAR_D1
, ORC_VAR_T2
, ORC_VAR_P3
, ORC_VAR_D1
);
285 orc_program_append_2 (p
, "mulll", 0, ORC_VAR_T2
, ORC_VAR_T1
, ORC_VAR_P6
, ORC_VAR_D1
);
286 orc_program_append_2 (p
, "addl", 0, ORC_VAR_D2
, ORC_VAR_T2
, ORC_VAR_P4
, ORC_VAR_D1
);
288 orc_program_compile (p
);
289 c
= orc_program_take_code (p
);
290 orc_program_free (p
);
293 orc_once_mutex_unlock ();
295 ex
->arrays
[ORC_VAR_A2
] = c
;
299 ex
->arrays
[ORC_VAR_D1
] = d1
;
300 ex
->arrays
[ORC_VAR_D2
] = d2
;
301 ex
->arrays
[ORC_VAR_S1
] = (void *)s1
;
302 ex
->params
[ORC_VAR_P1
] = p1
;
303 ex
->params
[ORC_VAR_P2
] = p2
;
304 ex
->params
[ORC_VAR_P3
] = p3
;
305 ex
->params
[ORC_VAR_P4
] = p4
;
306 ex
->params
[ORC_VAR_P5
] = p5
;
307 ex
->params
[ORC_VAR_P6
] = p6
;