7 #include <orc-test/orctest.h>
13 void test_opcode_src (OrcStaticOpcode *opcode);
14 void test_opcode_const (OrcStaticOpcode *opcode);
15 void test_opcode_param (OrcStaticOpcode *opcode);
16 void test_opcode_inplace (OrcStaticOpcode *opcode);
17 void test_opcode_src_2d (OrcStaticOpcode *opcode);
18 void test_opcode_src_const_n (OrcStaticOpcode *opcode);
19 void test_opcode_src_const_n_2d (OrcStaticOpcode *opcode);
22 main (int argc, char *argv[])
25 OrcOpcodeSet *opcode_set;
30 opcode_set = orc_opcode_set_get ("sys");
32 for(i=0;i<opcode_set->n_opcodes;i++){
33 if (verbose) printf("%s src %d,%d,%d,%d\n",
34 opcode_set->opcodes[i].name,
35 opcode_set->opcodes[i].dest_size[0],
36 opcode_set->opcodes[i].dest_size[1],
37 opcode_set->opcodes[i].src_size[0],
38 opcode_set->opcodes[i].src_size[1]);
39 test_opcode_src (opcode_set->opcodes + i);
41 for(i=0;i<opcode_set->n_opcodes;i++){
42 if (verbose) printf("%s const %d,%d,%d\n",
43 opcode_set->opcodes[i].name,
44 opcode_set->opcodes[i].dest_size[0],
45 opcode_set->opcodes[i].src_size[0],
46 opcode_set->opcodes[i].src_size[1]);
47 test_opcode_const (opcode_set->opcodes + i);
49 for(i=0;i<opcode_set->n_opcodes;i++){
50 if (verbose) printf("%s param %d,%d,%d\n",
51 opcode_set->opcodes[i].name,
52 opcode_set->opcodes[i].dest_size[0],
53 opcode_set->opcodes[i].src_size[0],
54 opcode_set->opcodes[i].src_size[1]);
55 test_opcode_param (opcode_set->opcodes + i);
57 for(i=0;i<opcode_set->n_opcodes;i++){
58 if (verbose) printf("%s inplace %d,%d,%d\n",
59 opcode_set->opcodes[i].name,
60 opcode_set->opcodes[i].dest_size[0],
61 opcode_set->opcodes[i].src_size[0],
62 opcode_set->opcodes[i].src_size[1]);
63 test_opcode_inplace (opcode_set->opcodes + i);
65 for(i=0;i<opcode_set->n_opcodes;i++){
66 if (verbose) printf("%s src 2d %d,%d,%d\n",
67 opcode_set->opcodes[i].name,
68 opcode_set->opcodes[i].dest_size[0],
69 opcode_set->opcodes[i].src_size[0],
70 opcode_set->opcodes[i].src_size[1]);
71 test_opcode_src_2d (opcode_set->opcodes + i);
73 for(i=0;i<opcode_set->n_opcodes;i++){
74 if (verbose) printf("%s src const n %d,%d,%d\n",
75 opcode_set->opcodes[i].name,
76 opcode_set->opcodes[i].dest_size[0],
77 opcode_set->opcodes[i].src_size[0],
78 opcode_set->opcodes[i].src_size[1]);
79 test_opcode_src_const_n (opcode_set->opcodes + i);
81 for(i=0;i<opcode_set->n_opcodes;i++){
82 if (verbose) printf("%s src const n 2d %d,%d,%d\n",
83 opcode_set->opcodes[i].name,
84 opcode_set->opcodes[i].dest_size[0],
85 opcode_set->opcodes[i].src_size[0],
86 opcode_set->opcodes[i].src_size[1]);
87 test_opcode_src_const_n_2d (opcode_set->opcodes + i);
95 test_opcode_src (OrcStaticOpcode *opcode)
102 if (opcode->flags & ORC_STATIC_OPCODE_SCALAR) {
106 p = orc_program_new ();
107 if (opcode->flags & ORC_STATIC_OPCODE_ACCUMULATOR) {
108 orc_program_add_accumulator (p, opcode->dest_size[0], "d1");
110 orc_program_add_destination (p, opcode->dest_size[0], "d1");
112 if (opcode->dest_size[1] != 0) {
113 orc_program_add_destination (p, opcode->dest_size[1], "d2");
115 orc_program_add_source (p, opcode->src_size[0], "s1");
116 if (opcode->src_size[1] != 0) {
117 orc_program_add_source (p, opcode->src_size[1], "s2");
120 if ((opcode->flags & ORC_STATIC_OPCODE_FLOAT_SRC) ||
121 (opcode->flags & ORC_STATIC_OPCODE_FLOAT_DEST)) {
122 flags = ORC_TEST_FLAGS_FLOAT;
125 sprintf(s, "test_s_%s", opcode->name);
126 orc_program_set_name (p, s);
128 if (opcode->dest_size[1] != 0) {
129 orc_program_append_dds_str (p, opcode->name, "d1", "d2", "s1");
131 orc_program_append_str (p, opcode->name, "d1", "s1", "s2");
134 ret = orc_test_compare_output_full (p, flags);
136 printf("test failed\n");
140 orc_program_free (p);
144 test_opcode_const (OrcStaticOpcode *opcode)
150 int args[4] = { -1, -1, -1, -1 };
153 if (opcode->src_size[1] == 0) {
156 p = orc_program_new ();
157 if (opcode->flags & ORC_STATIC_OPCODE_ACCUMULATOR) {
159 orc_program_add_accumulator (p, opcode->dest_size[0], "d1");
162 orc_program_add_destination (p, opcode->dest_size[0], "d1");
164 if (opcode->dest_size[1] != 0) {
166 orc_program_add_destination (p, opcode->dest_size[1], "d2");
169 orc_program_add_source (p, opcode->src_size[0], "s1");
171 orc_program_add_constant (p, opcode->src_size[1], 1, "c1");
172 if (opcode->src_size[2]) {
174 orc_program_add_constant (p, opcode->src_size[2], 1, "c2");
177 if ((opcode->flags & ORC_STATIC_OPCODE_FLOAT_SRC) ||
178 (opcode->flags & ORC_STATIC_OPCODE_FLOAT_DEST)) {
179 flags = ORC_TEST_FLAGS_FLOAT;
182 sprintf(s, "test_const_%s", opcode->name);
183 orc_program_set_name (p, s);
185 orc_program_append_2 (p, opcode->name, 0, args[0], args[1],
188 ret = orc_test_compare_output_full (p, flags);
190 printf("test failed\n");
194 orc_program_free (p);
198 test_opcode_param (OrcStaticOpcode *opcode)
204 int args[4] = { -1, -1, -1, -1 };
207 if (opcode->src_size[1] == 0) {
210 p = orc_program_new ();
211 if (opcode->flags & ORC_STATIC_OPCODE_ACCUMULATOR) {
213 orc_program_add_accumulator (p, opcode->dest_size[0], "d1");
216 orc_program_add_destination (p, opcode->dest_size[0], "d1");
218 if (opcode->dest_size[1] != 0) {
220 orc_program_add_destination (p, opcode->dest_size[1], "d2");
223 orc_program_add_source (p, opcode->src_size[0], "s1");
225 orc_program_add_parameter (p, opcode->src_size[1], "p1");
226 if (opcode->src_size[2]) {
228 orc_program_add_parameter (p, opcode->src_size[2], "p2");
231 if ((opcode->flags & ORC_STATIC_OPCODE_FLOAT_SRC) ||
232 (opcode->flags & ORC_STATIC_OPCODE_FLOAT_DEST)) {
233 flags = ORC_TEST_FLAGS_FLOAT;
236 sprintf(s, "test_p_%s", opcode->name);
237 orc_program_set_name (p, s);
239 orc_program_append_2 (p, opcode->name, 0, args[0], args[1],
242 ret = orc_test_compare_output_full (p, flags);
244 printf("test failed\n");
248 orc_program_free (p);
252 test_opcode_inplace (OrcStaticOpcode *opcode)
259 if (opcode->dest_size[0] != opcode->src_size[0]) return;
261 if (opcode->flags & ORC_STATIC_OPCODE_SCALAR ||
262 opcode->flags & ORC_STATIC_OPCODE_ACCUMULATOR) {
266 p = orc_program_new ();
267 orc_program_add_destination (p, opcode->dest_size[0], "d1");
268 if (opcode->dest_size[1] != 0) {
269 orc_program_add_destination (p, opcode->dest_size[1], "d2");
271 if (opcode->src_size[1] != 0) {
272 orc_program_add_source (p, opcode->src_size[0], "s2");
275 if ((opcode->flags & ORC_STATIC_OPCODE_FLOAT_SRC) ||
276 (opcode->flags & ORC_STATIC_OPCODE_FLOAT_DEST)) {
277 flags = ORC_TEST_FLAGS_FLOAT;
280 sprintf(s, "test_inplace_%s", opcode->name);
281 orc_program_set_name (p, s);
283 orc_program_append_str (p, opcode->name, "d1", "d1", "s2");
285 ret = orc_test_compare_output_full (p, flags);
287 printf("test failed\n");
291 orc_program_free (p);
295 test_opcode_src_2d (OrcStaticOpcode *opcode)
302 if (opcode->flags & ORC_STATIC_OPCODE_SCALAR) {
306 p = orc_program_new ();
307 if (opcode->flags & ORC_STATIC_OPCODE_ACCUMULATOR) {
308 orc_program_add_accumulator (p, opcode->dest_size[0], "d1");
310 orc_program_add_destination (p, opcode->dest_size[0], "d1");
312 if (opcode->dest_size[1] != 0) {
313 orc_program_add_destination (p, opcode->dest_size[1], "d2");
315 orc_program_add_source (p, opcode->src_size[0], "s1");
316 if (opcode->src_size[1] != 0) {
317 orc_program_add_source (p, opcode->src_size[1], "s2");
320 if ((opcode->flags & ORC_STATIC_OPCODE_FLOAT_SRC) ||
321 (opcode->flags & ORC_STATIC_OPCODE_FLOAT_DEST)) {
322 flags = ORC_TEST_FLAGS_FLOAT;
325 sprintf(s, "test_s_%s", opcode->name);
326 orc_program_set_name (p, s);
327 orc_program_set_2d (p);
329 if (opcode->dest_size[1] != 0) {
330 orc_program_append_dds_str (p, opcode->name, "d1", "d2", "s1");
332 orc_program_append_str (p, opcode->name, "d1", "s1", "s2");
335 ret = orc_test_compare_output_full (p, flags);
337 printf("test failed\n");
341 orc_program_free (p);
345 test_opcode_src_const_n (OrcStaticOpcode *opcode)
352 if (opcode->flags & ORC_STATIC_OPCODE_SCALAR) {
356 p = orc_program_new ();
357 if (opcode->flags & ORC_STATIC_OPCODE_ACCUMULATOR) {
358 orc_program_add_accumulator (p, opcode->dest_size[0], "d1");
360 orc_program_add_destination (p, opcode->dest_size[0], "d1");
362 if (opcode->dest_size[1] != 0) {
363 orc_program_add_destination (p, opcode->dest_size[1], "d2");
365 orc_program_add_source (p, opcode->src_size[0], "s1");
366 if (opcode->src_size[1] != 0) {
367 orc_program_add_source (p, opcode->src_size[1], "s2");
370 if ((opcode->flags & ORC_STATIC_OPCODE_FLOAT_SRC) ||
371 (opcode->flags & ORC_STATIC_OPCODE_FLOAT_DEST)) {
372 flags = ORC_TEST_FLAGS_FLOAT;
375 sprintf(s, "test_s_%s", opcode->name);
376 orc_program_set_name (p, s);
377 orc_program_set_constant_n (p, 8);
379 if (opcode->dest_size[1] != 0) {
380 orc_program_append_dds_str (p, opcode->name, "d1", "d2", "s1");
382 orc_program_append_str (p, opcode->name, "d1", "s1", "s2");
385 ret = orc_test_compare_output_full (p, flags);
387 printf("test failed\n");
391 orc_program_free (p);
395 test_opcode_src_const_n_2d (OrcStaticOpcode *opcode)
402 if (opcode->flags & ORC_STATIC_OPCODE_SCALAR) {
406 p = orc_program_new ();
407 if (opcode->flags & ORC_STATIC_OPCODE_ACCUMULATOR) {
408 orc_program_add_accumulator (p, opcode->dest_size[0], "d1");
410 orc_program_add_destination (p, opcode->dest_size[0], "d1");
412 if (opcode->dest_size[1] != 0) {
413 orc_program_add_destination (p, opcode->dest_size[1], "d2");
415 orc_program_add_source (p, opcode->src_size[0], "s1");
416 if (opcode->src_size[1] != 0) {
417 orc_program_add_source (p, opcode->src_size[1], "s2");
420 if ((opcode->flags & ORC_STATIC_OPCODE_FLOAT_SRC) ||
421 (opcode->flags & ORC_STATIC_OPCODE_FLOAT_DEST)) {
422 flags = ORC_TEST_FLAGS_FLOAT;
425 sprintf(s, "test_s_%s", opcode->name);
426 orc_program_set_name (p, s);
427 orc_program_set_2d (p);
428 orc_program_set_constant_n (p, 8);
430 if (opcode->dest_size[1] != 0) {
431 orc_program_append_dds_str (p, opcode->name, "d1", "d2", "s1");
433 orc_program_append_str (p, opcode->name, "d1", "s1", "s2");
436 ret = orc_test_compare_output_full (p, flags);
438 printf("test failed\n");
442 orc_program_free (p);